Happy Talk
BelfastJS, 10/12/14
Peter Gasston
@stopsatgreen
broken-links.com
We are born to talk. Typing is a barrier to communication. Moviemakers know this.
Amazon : ‘Alexa’
Apple : Siri
Google : Voice Search
Microsoft : Cortana
Google clear winner according to https://www.stonetemple.com/great-knowledge-box-showdown/
55% of teens
41% of adults
use voice search every day*
*maybe
From Google research, but sources not provided. Could be ‘of teens who use, 55% use every day’. http://googleblog.blogspot.co.uk/2014/10/omg-mobile-voice-survey-reveals-teens.html
10% of Baidu
search queries are by voice
That’s ~500m per day
Character input is hard, plus high rural illiteracy. http://blogs.wsj.com/digits/2014/11/21/baidus-andrew-ng-on-deep-learning-and-innovation-in-silicon-valley/
http://iaminchina.wordpress.com/2010/04/13/crowded-street-in-xian/
Synthesis
Long history of replicating voice with sound (Brazen Heads back to ~12th C.) but first systems emerged in 1960s. Bell Labs 1961 sang Daisy Bell, coincidentally Arthur C. Clarke was visiting. Today Stephen Hawking uses system with old voice as it’s ‘his’.
SSU Attributes
var txt = 'Hello world',
say = new SpeechSynthesisUtterance(txt);
say.lang = 'en-GB';
say.pitch = 0.75;
say.rate = 1.5;
say.volume = 0.5;
window.speechSynthesis.speak(say);
Play
SpeechSynthesis Methods
var txt = 'Hello world',
say = new SpeechSynthesisUtterance(txt);
window.speechSynthesis.speak(say);
window.speechSynthesis.pause(say);
window.speechSynthesis.resume(say);
window.speechSynthesis.cancel(say);
Play (Safari)
SpeechSynthesis Attributes
var txt = 'Hello world',
say = new SpeechSynthesisUtterance(txt),
speak = window.speechSynthesis.speak(say);
if (speak.pending) {}
if (speak.speaking) {}
if (speak.paused) {}
SSU Events
var txt = 'Hello world',
say = new SpeechSynthesisUtterance(txt);
say.onstart = function () {};
say.onpause = function () {};
say.onresume = function () {};
say.oncancel = function () {};
say.onerror = function () {};
say.onend = function () {};
window.speechSynthesis.speak(say);
Play (Safari)
Synthesis As A Service
http://developer.att.com/apis/speech
https://ws.neospeech.com/
https://www.cereproc.com/en/products/cloud
http://www.ivona.com/en/for-business/speech-cloud/
Neospeech
https://tts.neospeech.com/rest_1_1.php?method=ConvertSimple<EMAIL_ADDRESS><response conversionNumber="28" resultCode="0" resultString="success" status="Queued" statusCode="1"/>
https://tts.neospeech.com/rest_1_1.php?method=GetConversionStatus<EMAIL_ADDRESS><response statusCode="1" downloadUrl="https://tts.neospeech.com/audio/a.php/23841309/d44caf624653/result_26.wav" resultCode="0" resultString="success" status="Queued"/>
SSML
<speak version="1.0" etc>
<p>
<s>Hello Belfast.</s>
<s>This is <prosody rate="-20%">SSML</prosody>.</s> </s>
</p>
</speak>
Recognition
Developed by Bell in 1952. Could recognise numbers spoken by one person. [Get screengrab / find picture]. 1970s Carnegie Mellon HARPY could recognise 1,000 words. 1980s Hidden Markov method [Teddy Ruxpin]. Chops waves into phonemes and attempts to form words.
Challenges
Accents
Multiple users
Multiple languages
Web Speech API
var recog = new SpeechRecognition();
x-browser
var speechRecognition = (
window.SpeechRecognition ||
window.webkitSpeechRecognition
);
var recog = new speechRecognition();
SpeechRecognition Methods
var recog = new SpeechRecognition();
recog.start();
recog.stop();
recog.abort();
SpeechRecognition Events
var recog = new SpeechRecognition();
recog.onresult = function () {};
recog.onnomatch = function () {};
recog.onerror = function () {};
SpeechRecognitionError interface for reporting errors.
MVS
var recog = new SpeechRecognition();
recog.onresult = function (result) {
output.textContent = results[0][0].transcript;
};
btn.onclick = recog.start();
SpeechRecognitionEvent, results list
SpeechRecognition Events
start
audiostart
soundstart
speechstart
speechend
soundend
audioend
end
Interim Results
var recog = new SpeechRecognition();
recog.interimResults = true;
recog.onresult = function (result) {
var thisResult = result.results[0],
transcript = thisResult[0].transcript;
if (thisResult.isFinal) {
finalOutput.textContent = transcript;
} else {
interimOutput.textContent = transcript;
}
};
btn.onclick = recog.start();
Continuous
var recog = new SpeechRecognition();
recog.continuous = true;
recog.onresult = function (result) {
output.textContent = result.results[0][0].transcript;
};
btn.onclick = function () {
if (listening) {
recog.stop();
} else {
recog.start();
}
}
SpeechRTC +
Web Speech API
Node online, Web Workers offline. https://wiki.mozilla.org/SpeechRTC_-_Speech_enabling_the_open_web
(Picard demo)
Basically just matching a string / regex
JuliusJS
var recog = new Julius();
recog.onrecognition = function (result) {
console.log(result);
}
Wit.ai : Node API
Web Speech API + text
Direct speech : GuM, Web Audio API
http://blog.groupbuddies.com/posts/39-tutorial-html-audio-capture-streaming-to-node-js-no-browser-extensions
Wit.ai : Microphone.js
WebRTC. Opinionated. Gives you a handful of methods & events, no fine control. http://localhost/~petergasston/prototypes/mucking-about/wit/


info
settings
F
{{item}}
keyboard_backspace
Xiv Auto Typer
Version
{{version}}
Visit Website
keyboard_backspace
After typing do the following:
Include enter
Include tab
Do nothing


Thursday, 7 2019 18:00
345
Today's Orders
21
Pending Orders
₦ 205, 780.00
Today's Revenue
| Order Id | Meal Item(s) | Customer | Amount | Date | Status |
|---|---|---|---|---|---|
| 11234 | Rice Meal | Miss. shola | ₦2100 | 7/02/19 5:30pm | |
| 31234 | Kids'r It Pack | lawrence | ₦2100 | 7/02/10 8:50pm | |
| 11534 | Revenge Body Meal | daniel | ₦2100 | 7/02/17 8:50pm | |
| 41284 | Meat Loaf | Mrs. ola | ₦2100 | 07/02/19 8:50pm | |
| 14934 | Hungary Man Pack | tola ashole | ₦3000 | 07/02/19 8:59am |


--- / 100 - Connettiti - Info
IP: <IP_ADDRESS> Porta: 2302 Stats
--- / 256 - Connettiti - Info
Porta: 9987 Stats


Getting started
For installation tips, please consult documentation home.
Note on ES6 syntax : In all examples here, we're using ES6 modules import and, sometimes, the new spread operator. We're also using async/await syntax for asynchronous calls. All are supported natively by modern browsers.
FMF itself have been transpiled with Babel to support only alive browsers that share more than 5% of the market. It means that FMF is really not designed to test apps which are willing to support really old browsers as it will certainly be unsupported by them when testing. Nevertheless, you can still try to tweak the build to increase browsers coverage but with no guarantee.
At its most basic intend, FMF can be simply used as a convenient way to trap a remote fetch
call and send a given response. For this to work, the server must have been started and provided with the response. At the end, the server must be stopped in order to resume on native fetch
API.
Here's a simple example :
import Server from 'fetch-mock-fixtures';
const server = new Server();
server.start();
server.respond.with.body('Hello world !');
let response = await fetch(/** can have any arguments */);
let data = await response.text();
console.log(data); // will output Hello world !
// What about the next call ?
response = await fetch(/** can have any arguments */);
data = await response.text();
console.log(data); // will output Hello world again !
server.stop();
Nothing too fancy here : we're starting the server, setting it to respond with 'Hello world !', running fetch twice and stop the server.
Behind the scene, we have :
- overridden
window.fetch
to intercept calls - Set up a single fixture to the server that matches all incoming requests
- restored
window.fetch
to its native state
Please read other parts of the documentation for a more advanced usage.


Calade
A Hugo theme and R package by Danielle Navarro
The goal of calade and caladown is to allow R users to create lightweight websites powered by Hugo and is designed to be compatible with both hugodown and blogdown, and allows users to generate graphics that match the visual style of the site via the thematic package. There are two components to caladown, a Hugo theme and an R package. The simplest way to get started is simply to download the R package from GitHub using the following command:
remotes::install_github("djnavarro/caladown")
Once the caladown package is installed, the tutorial in the posts section of this site will walk you through the rest of the process. For folks who already know what they are doing, here’s the quick guide to setting up a Hugodown site on GitHub Pages:
hugodown::hugo_install("0.66.0")
caladown::create_hugodown_calade("my-caladown-site")
hugodown::hugo_build(dest = "docs")
usethis::use_git()
usethis::use_github() # then enable GH Pages with /docs folder
Note that there is a known issue with knitting the R markdown files for some versions of pandoc: at present the earliest known version that works is pandoc 2.1


In this Blog Post I go over Tips and Tricks with Golang
Make sure to have Golang Installed and you have the GOPATH
variable set.
Set your GOPATH
variable in Mac OS X by setting it in ~/.bashrc, ~/.zshrc
etc
Add the following entry to your .zshrc
: export GOPATH=$HOME/go
Run source ~/.zshrc
to get the environment variable set in your current shell process.
Once golang is installed run the following command to see what is set:
go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/Users/jean-marcelbelmont/Library/Caches/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/jean-marcelbelmont/go"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.10/libexec"
GOTMPDIR=""
GOTOOLDIR="/usr/local/Cellar/go/1.10/libexec/pkg/tool/darwin_amd64"
GCCGO="gccgo"
CC="clang"
CXX="clang++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/g6/jldtb40j5vvfxtjmg0f5nt4h0000gp/T/go-build176900775=/tmp/go-build -gno-record-gcc-switches -fno-common"
Notice I have set my GOPATH
but there is some other defaults that are set.
Using Go Docs
You can easily go into docs for any GO package by doing the following:
One trick that I do is that I copy the import statement in my editor like this:
Once you have that copied you just do the following:
Type godoc.org/
into a browser window and paste the package into the URL:
Now this takes straight you straight to the documentation for this package.
Now for a protip type ?
in the documentation page and get a help context menu like this:
Assuming that you know what functions/methods you can easily jump to them by pressing f
in your keyboard:
Press f
:
In this example just type WithStack
and you can jump straight to the WithStack
function.
You can also go into your terminal and see the documentation by doing the following:
go doc fmt.Printf
==> This command gives you the docs for fmt.Printf
.

Create your own custom assert test function
Here is a sample test file from my api-workshop
...
// TestCreateInsertsProperly validates users can be created in the database.
func TestCreateInsertHero(t *testing.T) {
// Insert User
heroInfo := heroInfo()
// Translate CreateProduct to Product in order to assert result.
cuBytes, _ := json.Marshal(heroInfo.hero)
var exH hero.Hero
json.Unmarshal(cuBytes, &exH)
h, err := hero.Create(ctx, masterDB, &heroInfo.hero)
if err != nil {
t.Fatalf("Should be able to create a hero : %s.", err)
}
if !h.ID.Valid() {
t.Errorf("Should generate valid Hero ID, got: %s", h.ID)
}
assertEqualUsers(&exH, h, t)
// Test the user context value
ctxValues := ctx.Value(apiContext.KeyValues).(*apiContext.Values)
HeroID := bson.ObjectIdHex(ctxValues.ID).Hex()
if *h.CreatedByID != HeroID {
t.Errorf("Should create a user by userID: %s, got: %s", HeroID, *h.CreatedByID)
}
}
func assertEqualUsers(actual *hero.Hero, expected *hero.Hero, t *testing.T) {
if actual.Name != expected.Name {
t.Errorf("Should create hero Name: %s, but got: %s", expected.Name, actual.Name)
}
}
...
If you familiar with XUnit style assertions you can just write your own using a function in Golang.
Go Tooling
You can easily discover the go tooling by typing go help
in your terminal
If you like this Blog Post please follow me at jbelmont at Github


The relational Bayesian classifier (RBC) is a simple Bayesian classification algorithm adapted to the context of relational data [Neville, Jensen and Gallagher, 2003]. Like many classification systems, the RBC is trained on one set of instances and then applied to (or tested on) another. Because the RBC operates on relational data, the training and test sets are sets of subgraphs, defined by a container in Proximity. Each subgraph in the container is assumed to contain one target item (the core item) to be classified. Attributes and structural characteristics of the target item, of the other objects and links in the subgraph, and of the subgraph itself can all be used by the model in classifying the target item. Because these instances preserve the relational structure of the data, the model can exploit the connections among objects to improve classification accuracy.
In the example below, we want to predict whether or not a web page is a student page, that is, whether the value of its isStudent attribute is “1”. Each input subgraph consists of a target web page and all objects (also web pages) connected to it, including both links to and links from the target page. The following script learns an RBC on one of the samples we created in Exercise 6.4, then applies the RBC to the other sample to evaluate the its predictions.
This section describes the script found in
$PROX_HOME/doc/user/tutorial/examples/run-1d-clusters-rbc.py
.
Import the necessary class definitions.
from kdl.prox.model2.common.sources import * from kdl.prox.model2.rbc import RBC
We use the samples created in Exercise 6.4 as our training and test sets. Make sample “0” the training set and sample “1” the test set.
trainContainer = prox.getContainer("1d-clusters/samples/0") testContainer = prox.getContainer("1d-clusters/samples/1")
First we identify the core item, the database entity whose label (attribute value) we want to predict. In this case, we want to predict the label for the central object in our 1d-clusters subgraphs. This object was named “core_page” in the query that generated these subgraphs, and thus also in the resulting subgraphs.
coreItemName = 'core_page'
Next we specify the name of the attribute we want to predict (the class label). Our model predicts whether the object in question is a student web page. We use the boolean attribute isStudent to identify whether or not a page belongs to a student. The RBC model requires that the predicted attribute be discrete.
attrToPredict = 'isStudent'
We create an AttributeSource
instance to represent the
information about the class label. This attribute source specifies the
item in the subgraph that we want to label
(core_page) and the name of the attribute
that we want to predict (isStudent).
classLabel = AttributeSource(coreItemName, attrToPredict)
Next, we specify the set of sources to use in learning the model. Recall that sources can be attributes on any of the objects or links in the input subgraph including attributes on the core item, attributes of links connecting to the core item, or attributes of objects linked to the core item. In principle, we can extend this to use attributes on objects and links multiple “hops” away from the core object, provided that such items are included in the subgraphs that the model will use. In this example, because the subgraphs only extend a single hop from the core object, we are limited to attributes of objects of the core object and of objects and links directly connected to that core object. Sources can also include structural characteristics of the subgraph or attributes on the subgraph itself, although neither of these types of sources are used in this example. See Exercise 7.2 for an example of using the degree of an object (a structural characteristic) as a source.
Each source is specified as an instance of AttributeSource
.
Each AttributeSource
provides the name of an item (object or link)
from the input subgraphs and the attribute whose values will be
evaluated for their predictive value to the model.
We provide the set of sources as a Python list.
inputSources = [ \ AttributeSource('core_page', 'url_server_info'), \ AttributeSource('core_page', 'url_hierarchy1b'), \ AttributeSource('linked_from_page', 'url_server_info'), \ AttributeSource('linked_from_page', 'url_hierarchy1b'), \ AttributeSource('linked_from_page', 'page_num_outlinks'), \ AttributeSource('linked_from_page', 'page_num_inlinks'), \ AttributeSource('linked_to_page', 'url_server_info'), \ AttributeSource('linked_to_page', 'url_hierarchy1b'), \ AttributeSource('linked_to_page', 'page_num_outlinks'), \ AttributeSource('linked_to_page', 'page_num_inlinks'), \ AttributeSource('linked_to', 'link_tag'), \ AttributeSource('linked_from', 'link_tag')]
Begin the modeling portion of the script by
instantiating the model.
Instantiation is a simple RBC
constructor call.
print "Beginning modeling section" print "Instantiating model..." rbc = RBC()
Train (learn) the model on the training set.
print "Learning model..." rbc.learn(trainContainer, classLabel, inputSources)
Write the trained model to an XML file. The file is written to the current
working directory, which is
$PROX_HOME
if you are following the tutorial.
xmlFileName = 'ProxWebKB_RBC.xml' rbc.save(xmlFileName) print "RBC written to ", xmlFileName
You can read in the XML file at a later time to apply the model to other data sets having the same structure and features without having to retrain the model.
Apply the model to the test set.
print "Applying model..." predictions = rbc.apply(testContainer)
Applying the learned model returns a Predictions
instance that stores the predicted class labels. To save these predictions,
we store the predicted values as attributes on the subgraphs. The
savePredictions()
method silently overwrites any existing values for
this subgraph attribute.
print "Writing predictions..." rbcAttrName = "rbc_isstudent_prediction" predictions.savePredictions(testContainer.getSubgraphAttrs(), rbcAttrName)
Finally, we evaluate the model’s results. The Predictions
class
provides several methods for calculating the error of the predictions,
but to use them, we have to first tell the predictions instance where
to find the true values for the class labels. The true values
are stored in the isStudent
attribute on the core items in the test container’s subgraphs.
predictions.setTrueLabels(testContainer, classLabel)
Proximity provides several built-in evaluation functions. Accuracy measures the percentage of test instances correctly classified by the model. Because accuracy requires knowing the correct prior distribution of instances in the population and does not consider that false positive and false negative errors may entail widely different costs, other evaluation measures, such as area under the ROC curve, are often more useful. Area under the ROC (receiver operating characteristic) curve [Provost, Fawcett and Kohavi, 1998] provides a method of evaluating the accuracy of a ranking of all the test instances according to their estimated probability, letting you compare one model’s performance against another’s, independent of error cost and without knowing the prior class distribution. Accuracy and area under the ROC curve approach 1.0 as the results improve; a value of 0.5 for area under the ROC curve indicates random performance. Conditional log likelihood is less intuitive and useful only for relative comparison of comparable entities, with higher values signifying better performance.
print "Computing accuracy (ACC)..." acc = (1 - predictions.getZeroOneLoss())
Computing area under the ROC curve requires a binary classification problem. We identify the positive instances and group all other class values into the negative instances. In this example, student pages (pages with isStudent = 1) are positive instances.
print "Computing area under ROC curve (AUC)..." auc = predictions.getAUC("1") print "Computing conditional likelihood (CLL)..." cll = predictions.getConditionalLogLikelihood()
Finally, print a summary of the evaluation results.
print "RBC results:" print " ACC: ", str(acc) print " AUC: ", str(auc) print " CLL: ", str(cll)
Exercise 7.1. Learning and applying the relational Bayesian classifier model:
This script requires entities created in Exercise 5.7, Exercise 6.4 and Exercise 6.5. You must have completed these exercises before running the script in the current exercise.
Before beginning, make sure that you are serving the ProxWebKB database using Mserver. Start the Proximity Database Browser if it is not already running.
From the Script menu, choose Run Script. Proximity displays the Open dialog.
Navigate to the $PROX_HOME/doc/user/tutorial/examples
directory and
choose run-1d-clusters-rbc.py
.
Click Open.
Proximity opens a window to show you any output from the script along with a trace of the script execution. Your output should look similar to the following (leading information showing elapsed time and execution thread has been omitted from the trace for brevity):
Status: starting running script: /proximity/doc/user/tutorial/examples/run-1d-clusters-rbc.py Beginning modeling section Instantiating model... Inducing model... INFO kdl.prox.model2.rbc.RBC - starting to induce model... INFO kdl.prox.model2.rbc.RBC - updating model with [core_page.url_server_info]... INFO kdl.prox.model2.rbc.RBC - updating model with [core_page.url_hierarchy1b]... INFO kdl.prox.model2.rbc.RBC - updating model with [linked_from_page.url_server_info]... INFO kdl.prox.model2.rbc.RBC - updating model with [linked_from_page.url_hierarchy1b]... INFO kdl.prox.model2.rbc.RBC - updating model with [linked_from_page.page_num_outlinks]... INFO kdl.prox.model2.rbc.RBC - updating model with [linked_from_page.page_num_inlinks]... INFO kdl.prox.model2.rbc.RBC - updating model with [linked_to_page.url_server_info]... INFO kdl.prox.model2.rbc.RBC - updating model with [linked_to_page.url_hierarchy1b]... INFO kdl.prox.model2.rbc.RBC - updating model with [linked_to_page.page_num_outlinks]... INFO kdl.prox.model2.rbc.RBC - updating model with [linked_to_page.page_num_inlinks]... INFO kdl.prox.model2.rbc.RBC - updating model with [linked_to.link_tag]... INFO kdl.prox.model2.rbc.RBC - updating model with [linked_from.link_tag]... INFO kdl.prox.model2.rbc.RBC - induce model done... RBC written to ProxWebKB_RBC.xml Applying model... INFO kdl.prox.model2.rbc.RBC - starting to apply model... INFO kdl.prox.model2.rbc.RBC - apply model done... Writing predictions... Computing accuracy (ACC)... Computing area under ROC curve (AUC)... Computing conditional likelihood (CLL)... RPT results: ACC: 0.946298984034833 AUC: 0.9747484409075087 CLL: -495.61207422760805 Status: finished running script
Due to the probabilistic nature of the RBC algorithm, your results may differ slightly from that shown above. You can close this window after the script finishes.
Examine the values predicted by the RBC. The script stored the predicted values in the rbc_isstudent_prediction subgraph attribute. Recall that our testing instances are in the /1d-clusters/samples/1 container. To see these values, drill down through the container hierarchy in the Proximity Database Browser to display the list of subgraphs for this container. Click a subgraph ID, then click attrs to display the attributes for that subgraph. The example below shows the value for subgraph 0, which indicates that the model predicts that the core page for this subgraph (object 1) is not a Student page. You can compare this to the actual value of the isStudent attribute by examining the attribute values for object 1.
Recall that the RBC only makes predictions for core objects in the test container. Therefore, after learning the model, only the subgraphs in the 1d-clusters/samples/1 container have a value for the rbc_isstudent_prediction attribute.


- Storm: Arena. Storm Arena is an instancing
system where players can set up their own instanced PvP games that others
can join.
- Arena Battlegrounds. Arena battlegrounds are just like real battlegrounds except level range and zone can be customized to be whatever we want. Check out the 5 Arena battlegrounds set up for each level range, including a level 50 battleground for concentrated RvR fun.
- Use /event to see active Arenas and XP/RP/BP bonuses, use /info to see a brief overview of Storm.
- You can read the Storm FAQ by visiting any Storm Herald npc.
- 2x XP in PvE zones, 3x XP in RvR zones plus various in game events that boost XP, RP, or BP in designated areas.
- Version 1.95+ supported. Be sure to check out the tutorial zones!
- Hunt the Altlantean artefacts and make them more powerful! Beware of the terrible Atlantis monsters
- An IRC channel, #dolplay in quakenet, from which in-game players may talk via the /irc command.
- Market NPCs allow you to stock up and auction your goods to other players, even when not in game. These can be found in the capital cities.
- Scroll System: NPCs can drop scrolls when slain, which can be used to summon teleporters, merchants and trainers for ease of use.
- Special handling of regeneration to reduce downtimes: when a mob is killed in a PvE zone, you receive 25% endurance and 10% mana.
- Mercenaries can be hired from the Guild of Mercenaries - these helpful followers will either heal, fight or cast at attackers from range. Cannot be used in RvR. Speak to the Mercenary Guild in your capital city!
- Fight alongside your enemies in PvE zones. Outside of New Frontiers and Darkness Falls, all realms are friendly, allowing you to always have company when you level.
- Many 'hidden extras' that enrich your gaming experience; special encounters, hidden mini-games, secret items and rewards.
- Starting Level: 1
- Option to Instant-50, though this will flag your character as unable to receive and use some items and you will not be able to leave New Frontiers. Speak to the NPCs at your realm's portal keep!
- XP rate: 2X (100% bonus) XP in all PvE zones / 3X (200% bonus) XP in RvR zones
- RP rates: 1.5X (50% bonus) RP in all zones plus a 25% bonus for the realm that holds the most towers
- Craft rate: 3X (200% bonus) crafting speed plus an additional 20% bonus in capital cities.
- IRC: #dolplay on QuakeNet
- Website: http://play.dolserver.net
- Bugs may be reported ingame via the /report command.
- Reported bugs can be tracked via the bugtracker at http://play.dolserver.net/?page=tracker
- You will be updated on the progress of your report by ingame mail.
Most recent open bug report:
Kriegsfee: Ticket - 14835 (Awaiting information) created 12 hours ago
Mentalist cannot charm red/orange mobs.
Most recent closed bug report:
Alonar: Ticket - 14834 (Duplicate) updated 1 day ago
itembug : Luminous Sun-Bleached Sleeves have his af=0
(Pending) Patch #285 - posted 11 hours ago
Fixes from Roozzz:
Bugfix: Steady Cast is now uninterruptable.
Bugfix: Fixed Cast is now uninterruptable.
Bugfix: Fortified Cast is now uninterruptable.
Bugfix: Anchored Cast is now uninterruptable.
Bugfix: Unshakable Cast is now uninterruptable.
Changes from Tolakram:
- Bugfix: Increased aera around relic pads to account for Z changes when a keep is upgraded. Hopefully this will fix an issue with players unable to drop relics in some claimed keeps.
(Live) Patch #284 - posted 1 day ago
Hotfix = things that are live and don't require restart
Changes from Tolakram
- Hotfix: Bloodbound Book icon is now a book. The item fixer will correct your version if desired.
- Bugfix: Players will no longer be banned when adjusting stat points from the character screen
(Live) Patch #283 - posted 2 days ago
Changes from Tolakram:
- Bugfix: Player pet spell damage is now capped based on the players level. This cap is not applied for level 50 players.
- Changed: All Renegade Guards in Arenas have a chance to drop Renegade equipment. This equipment is equivalent to that awarded in the armory quests.
- Changed: The unique object generator will now use the realm of the group leader to determine drop types.
- Bugfix Note: A fix was made in a previous patch that removed an incorrect HP bonus for Memories of War that was giving heavy tanks an extra 10% bonus to HP.
- Bugfix: Atlantis Tablet and Bracelet of Zo'arkat are now available to Warlocks.
- Bugfix: You can now delve items inside housing vaults.
(Live) Patch #282 - posted 3 days ago
Changes from Phen:
- Fixed: Stats for Howling Soothsayer Bracer.
- Fixed: Power Heal on Defender of Scorched Dreams.
- Fixed: Changed Duplicated stat cap, corrected heal proc and added omnilifetap to Archaic Assassin's Vest.
- Fixed: Shield size on Arcanium Enchanted Runed Defender(Alb/Mid).
- Fixed: Speed on Glimmerspirit Sword adjusted to 4.0.
- Fixed: Size on Arcanium Gusting Great Kite Shield(Alb/Mid).
- Fixed: Stats Cap on Ring of the Heavens.
- Fixed: Bonuses on Arcanium Whirlwind Saracen Glaive and added lifetap proc.
- Fixed: Gossamer Cloth Gloves are now Sc-able and enchantable.
- Fixed: Stat buff effectivness and heal proc added to Arcanium Sleeves of the Rebirth.
- Fixed: Stat Cap on Stonewatch Bracer.
- Fixed: Arrow Recovery to Spell Duration Bonuse on Duskwood Zephyr Lute.
Changes from Thalia:
- Fixed: Stats on Hibernian Cloak of Magic.
(Live) Patch #281 - posted 5 days ago
Changes from Yemla:
- Fixed: Rampage chances to resist spells are now corrects
- Fixed: Memories of War value increased to match live
- Fixed: Warlock snare is now unbreakable
- Fixed: Warlock casting time is now correct for various warlock own spells
Changes from Phen:
- Corrected Model on Inconnu Crypt Mail Hauberk
Changes from Tolakram:
- Bugfix: Pet based bladeturn (Animists) will no longer try and fail to overwrite concentration based AF buffs. In addition fixed an issue where a few direct damage and mez spells also mistakenly shared the same effect group with the AF buff, which may have prevented them having any effect on the target.
- Changed: You must now be standing still in order to use the /leave command in Arenas.
- Added: A new RvR arena called Wilton Towers is now available. This is the Wilton zone, with towers. Maybe someone can come up with a better name? Please note this zone has very few mobs at the present time.
- Added: !lookup charname is now supported in game, do /irc !lookup charname
- Bugfix: Maulers can now activate Shades of Mist.


The answer is very simple. Because JavaScript enabale you to have an interaction with the user. Not only you can send data to user, but also receieve from him/her. This makes this scripting language very powerful and useful.
JavaScript is also a very simple language to write and very easy for different browsers to read.
Although it can be used for backend, but its mainly used in front end development and is a powerful interactive language for your website.


|
One of the
Frequency Selective Fading measurements was used to simulate the performance
of an adaptive modulation system. The above plot shows the resulting SNR as a
function frequency and distance moved for a fixed transmission power of –8
dBm. The average SNR is about 17 dB, however there are many nulls in the
spectrum where the SNR is below 5 dB. This SNR was chosen because the
spectral efficiency of the resulting adaptive modulation was 2 bits/Hz/sec
allowing it to be directly compared with the performance of QPSK.
|


crnt4sbml.LowDeficiencyApproach¶
-
class
crnt4sbml.
LowDeficiencyApproach
(cgraph)[source]¶ Class for testing the Deficiency Zero and One Theorems.
Methods
__init__
(cgraph)Initialization of LowDeficiency Approach class. does_satisfy_deficiency_zero_theorem
()Function to see if the network satisfies the Deficiency Zero Theorem. does_satisfy_deficiency_one_theorem
()Function to see if the network satisfies the Deficiency One Theorem. does_satisfy_any_low_deficiency_theorem
()Function to see if the network satisfies the Deficiency Zero or One Theorem. report_deficiency_zero_theorem
()Prints out the applicability of the Deficiency Zero Theorem for the provided network. report_deficiency_one_theorem
()Prints out the applicability of the Deficiency One Theorem for the provided network. -
does_satisfy_any_low_deficiency_theorem
()[source]¶ Function to see if the network satisfies the Deficiency Zero or One Theorem. Returns True if the network satisfies the Deficiency Zero or One Theorem, False otherwise.
Fig1Ci.xml
for the provided example.Example
>>> import crnt4sbml >>> network = crnt4sbml.CRNT("path/to/Fig1Ci.xml") >>> approach = network.get_low_deficiency_approach() >>> print(approach.does_satisfy_any_low_deficiency_theorem()) False
-
does_satisfy_deficiency_one_theorem
()[source]¶ Function to see if the network satisfies the Deficiency One Theorem. Returns True if the network satisfies the Deficiency One Theorem, False otherwise.
Fig1Ci.xml
for the provided example.Example
>>> import crnt4sbml >>> network = crnt4sbml.CRNT("path/to/Fig1Ci.xml") >>> approach = network.get_low_deficiency_approach() >>> print(approach.does_satisfy_deficiency_one_theorem()) False
-
does_satisfy_deficiency_zero_theorem
()[source]¶ Function to see if the network satisfies the Deficiency Zero Theorem. Returns True if the network satisfies the Deficiency Zero Theorem, False otherwise.
Fig1Ci.xml
for the provided example.Example
>>> import crnt4sbml >>> network = crnt4sbml.CRNT("path/to/Fig1Ci.xml") >>> approach = network.get_low_deficiency_approach() >>> print(approach.does_satisfy_deficiency_zero_theorem()) False
-
report_deficiency_one_theorem
()[source]¶ Prints out the applicability of the Deficiency One Theorem for the provided network. Possible output:
“By the Deficiency One Theorem, the differential equations admit precisely one equilibrium in each positive stoichiometric compatibility class. Thus, multiple equilibria cannot exist for the network.”
or
“The network satisfies relaxed Deficiency One Theorem. That is it is not weakly reversable, but each linkage class contains no more than one terminal linkage class. There can exist within a positive stoichiometric compatibility class at most one equilibrium. Thus, multiple equilibria cannot exist for the network.”
or
“The network does not satisfy the Deficiency One Theorem, multistability cannot be excluded.”
Fig1Ci.xml
for the provided example.Example
>>> import crnt4sbml >>> network = crnt4sbml.CRNT("path/to/Fig1Ci.xml") >>> approach = network.get_low_deficiency_approach() >>> print(approach.report_deficiency_zero_theorem()) The network does not satisfy the Deficiency One Theorem, multistability cannot be excluded.
-
report_deficiency_zero_theorem
()[source]¶ Prints out the applicability of the Deficiency Zero Theorem for the provided network. Possible output:
“By the Deficiency Zero Theorem, the differential equations cannot admit a positive equilibrium or a cyclic composition trajectory containing a positive composition. Thus, multiple equilibria cannot exist for the network.”
or
“By the Deficiency Zero Theorem, there exists within each positive stoichiometric compatibility class precisely one equilibrium. Thus, multiple equilibria cannot exist for the network.”
or
“The network does not satisfy the Deficiency Zero Theorem, multistability cannot be excluded.”
Fig1Ci.xml
for the provided example.Example
>>> import crnt4sbml >>> network = crnt4sbml.CRNT("path/to/Fig1Ci.xml") >>> approach = network.get_low_deficiency_approach() >>> print(approach.report_deficiency_zero_theorem()) The network does not satisfy the Deficiency Zero Theorem, multistability cannot be excluded.
-


Bio
- About: as a college student who has many interests, trying to find time to devote time to them all is difficult.
- Education: Michigan State University student with a Media and Information major, a minor in Philosophy and a specialization in Digital Humanities.
- Interests: Reading, writing, watching films, traveling and relaxing.
Comparibles
Personas
- College Students
- Bloggers
- YouTubers


- FALSE - Static variable in class com.knowgate.io.filefilter.FalseFileFilter
-
Singleton instance of false filter.
- FalseFileFilter - Class in com.knowgate.io.filefilter
-
A file filter that always returns false.
- falseFileFilter() - Static method in class com.knowgate.io.filefilter.FileFilterUtils
-
Returns a filter that always returns false.
- FILE - Static variable in class com.knowgate.io.filefilter.FileFileFilter
-
Singleton instance of file filter
- FileFileFilter - Class in com.knowgate.io.filefilter
-
This filter accepts File
s that are files (not directories).
- fileFileFilter() - Static method in class com.knowgate.io.filefilter.FileFilterUtils
-
Returns a filter that checks if the file is a file (and not a directory).
- FileFilterUtils - Class in com.knowgate.io.filefilter
-
Useful utilities for working with file filters.
- FileFilterUtils() - Constructor for class com.knowgate.io.filefilter.FileFilterUtils
-
FileFilterUtils is not normally instantiated.
- FilenameUtils - Class in com.knowgate.io
-
General filename and filepath manipulation utilities.
- FilenameUtils() - Constructor for class com.knowgate.io.FilenameUtils
-
Instances should NOT be constructed in standard programming.
- FileUtils - Class in com.knowgate.io
-
General file manipulation utilities.
- FileUtils() - Constructor for class com.knowgate.io.FileUtils
-
Instances should NOT be constructed in standard programming.
- filterParameters(Parameter[], Object[]) - Static method in class com.knowgate.typeutils.ObjectFactory
-
Filter parameter values that has the necessary types.
- Final() - Method in class com.knowgate.encryption.MD5
-
Returns array of bytes (16 bytes) representing hash as of the
current state of this object.
- find(int, String) - Method in class com.knowgate.stringutils.CSVParser
-
Find first occurence of a value at a given column
Search is case sensitive
- findi(int, String) - Method in class com.knowgate.stringutils.CSVParser
-
Find first occurence of a value at a given column
Search is case insensitive
- forceDelete(File) - Static method in class com.knowgate.io.FileUtils
-
Deletes a file.
- forceDeleteOnExit(File) - Static method in class com.knowgate.io.FileUtils
-
Schedules a file to be deleted when JVM exits.
- forceMkdir(File) - Static method in class com.knowgate.io.FileUtils
-
Makes a directory, including any necessary but nonexistent parent
directories.
- format(String, String) - Method in class com.knowgate.currency.Money
-
Format a BigDecimal as a String following the rules for an specific language and country
- forName(String) - Static method in class com.knowgate.io.IOCase
-
Factory method to create an IOCase from a name.
- FRIDAY - Static variable in class com.knowgate.dateutils.GregorianCalendarLocalisation
-


Categories
Account visibility
Account visiblity
Account visiblity
Decide who can see your profile
Everyone
Only friends
change visibility


{% extends "base.html" %} {% block title %}Annotate{% endblock %} {% block body %} {% include "header.html" %}
Your premium has been canceled


Home
About
Passion
Clicks
__Art Is Everything__
Dilhani Manuweera
603-8224, Kita-Ku, kyoto Contact: 080-1234-4321
Dilhani Manuweera Photography -All Rights Reserved-


1. You are at a party.  You should:
2. You are walking home alone after partying and having a few drinks.  You should:
3. You are at a party with your best friend. Your best friend says she's about to leave with some other girls and asks you to come along, but you want to keep partying. You should:
4.  You should close your window that's wide open, but it's really hot and you want some air to come in. You should:
5. You are running late for a party and don't have time to charge your cellphone. You should:
6. You are walking home alone and you approach an intersection. One path is a dark shortcut that you have taken, but never at night and another path is a much longer way, but it has streetlights along the whole path. You should:
7. You are at a bar alone and a man walks up to you. He keeps offering you a drink and a part of you wants to take it because it is free, but another part of you has a bad feeling about this man. You should:


This year for Pi Day, I have a demo of π's appearance in bouncing balls, also known as Galperin's method due to a paper published in 2003 (Playing Pool with π (the Number π from a Billiard Point of View", Regular and Chaotic Dynamics, V. 8, No 4, 2003). Here is a youtube video demonstrating the phenomenon:
Basically, conservation of momentum and conservation of energy produce a system of equations that reduce down to stating that the the cosine of the number of collisions will change from positive to negative at an integer equal to [10^N*π], so the number of collisions will produce digits of π!


Matlab script example - Population model
This is an example of a Matlab script to simulate the evolution of a population. Each state corresponds to the number of individuals in a certain age group.
Revisions: N/A
% Clear workspace and close all figures; clear; close all; % Set population dynamic parameters A = [0 0.10 0.60 0.40 0.10 0.02 0.00 0.00 0.00 diag([0.9 0.95 0.99 0.95 0.9 0.6 0.4 0.05]), zeros(8, 1)] % Initial population x0 = 100 * ones(9, 1); %9 linhas, 1 coluna, de 1's % Compute time vector time = (0:1:20); % vector entre 0 e 20 em intervalos de 1 % Reserve space for the solution vector (it is better to allocate this % in advance than to augment the size of the solution vector online, inside % a cycle). x = zeros(length(time), 9); %9 colunas e o numero de linahs é do tamnho de numero de unidades de tempo x(1, :) = x0; %x(linha 1, todas as colunas) % Solution of the discrete-time linear time invariant system for counter = 1:length(x)-1 x(counter + 1, :) = (A*x(counter, :)')'; % Os (:) quer dizer que são as colunas todas daquela linha end % Plot results figure(1); plot(time, x); xlabel('time'); ylabel('x'); grid on; figure(2); bar3(x); %cria um grafico tridimensional xlabel('group age'); ylabel('time'); alfa=[0.5:0.05:2]; delta=[-2:0.05:-0.5];
A = Columns 1 through 7 0 0.1000 0.6000 0.4000 0.1000 0.0200 0 0.9000 0 0 0 0 0 0 0 0.9500 0 0 0 0 0 0 0 0.9900 0 0 0 0 0 0 0 0.9500 0 0 0 0 0 0 0 0.9000 0 0 0 0 0 0 0 0.6000 0 0 0 0 0 0 0 0.4000 0 0 0 0 0 0 0 Columns 8 through 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0500 0
Quiz: Try with different coefficients on the first row of A. What happens if you decrease them too much? Does it make sense?


{# Main layout template for the application. Defines the overall HTML framework, and includes JobMonitor stylesheets and javascripts. Extending templates have access to the following blocks: * `stylesheets` - Extra stylesheets tags in the header, after all JobMonitor stylesheets * `navbartop` - Top navigation bar * `maincontent` - Main content body below the navigation bar * `javascripts` Extra javascripts just before the closing
tag, after all JobMonitor javascripts They also have access to the helpers defined in _helpers.html, as this templates includes that file. #} {% from "_helpers.html" import stylesheet_tag, javascript_tag, list_link_tag %}


runtime.schedt.pidle (field)
8 uses
runtime (current package)
proc.go#L1494: for p := sched.pidle.ptr(); p != nil; p = p.link.ptr() {
proc.go#L3749: if sched.pidle != 0 {
proc.go#L5059: for pp := &sched.pidle; *pp != 0; pp = &(*pp).ptr().link {
proc.go#L5681: _p_.link = sched.pidle
proc.go#L5682: sched.pidle.set(_p_)
proc.go#L5695: _p_ := sched.pidle.ptr()
proc.go#L5700: sched.pidle = _p_.link
runtime2.go#L740: pidle puintptr // idle p's
The pages are generated with Golds v0.2.7-preview. (GOOS=darwin GOARCH=amd64)


Expressions E
:
^ x y .. z . E
E₁ E₂
Commands:
E
– evaluate expression E
x := E
– define x
:constant x
– declare constant x
:context
– print current context
:lazy
– lazy evaluation
:eager
– eager evaluation
:deep
– evaluate inside λ-abstractions
:shallow
– only evaluate top level
In a file commands must be separated with ;
.


void STP_SetStpVersion ( STP_BRIDGE* bridge, enum STP_VERSION version );
Sets the STP version of the bridge, referred to as ForceProtocolVersion in the STP standard.
See §13.7.2 in 801.1Q-2018 for more information.
Execution of this function is a potentially lengthy process. It may call various callbacks multiple times.
This function may not be called from within an STP callback.


| 1 | package fr.sii.ogham.helper.sms; | |
| 2 | ||
| 3 | import static fr.sii.ogham.helper.sms.SmsUtils.getSmsContent; | |
| 4 | ||
| 5 | import java.util.List; | |
| 6 | ||
| 7 | import org.jsmpp.bean.SubmitSm; | |
| 8 | import org.junit.Assert; | |
| 9 | ||
| 10 | /** | |
| 11 | * Utility class for checking if the received SMS content is as expected. | |
| 12 | * | |
| 13 | * @author Aurélien Baudet | |
| 14 | * | |
| 15 | */ | |
| 16 | public class AssertSms { | |
| 17 | ||
| 18 | /** | |
| 19 | * Assert that the fields of the received SMS using SMPP protocol are equal | |
| 20 | * to the expected values. It will check that: | |
| 21 | *
 | |
| 22 | *
The received sender address corresponds to the expected phone number | |
| 23 | * of the sender
 | |
| 24 | *
The received receiver address corresponds to the expected phone | |
| 25 | * number of the receiver
 | |
| 26 | *
The received message corresponds to the expected message
 | |
| 27 | *
 | |
| 28 | * | |
| 29 | * @param expected | |
| 30 | * all the fields with their expected values | |
| 31 | * @param actual | |
| 32 | * the received SMS | |
| 33 | */ | |
| 34 | public static void assertEquals(ExpectedSms expected, SubmitSm actual) { | |
| 35 |
2
1. assertEquals : All method instructions removed → SURVIVED 2. assertEquals : All method instructions removed → NO_COVERAGE |
Assert.assertEquals("Sender number should be " + expected.getSenderNumber().getNumber(), expected.getSenderNumber().getNumber(), actual.getSourceAddr()); |
| 36 | Assert.assertEquals("Sender ton should be " + expected.getSenderNumber().getTon(), expected.getSenderNumber().getTon(), actual.getSourceAddrTon()); | |
| 37 | Assert.assertEquals("Sender npi should be " + expected.getSenderNumber().getNpi(), expected.getSenderNumber().getNpi(), actual.getSourceAddrNpi()); | |
| 38 | ||
| 39 | Assert.assertEquals("Receiver number should be " + expected.getReceiverNumber().getNumber(), expected.getReceiverNumber().getNumber(), actual.getDestAddress()); | |
| 40 | Assert.assertEquals("Receiver ton should be " + expected.getReceiverNumber().getTon(), expected.getReceiverNumber().getTon(), actual.getDestAddrTon()); | |
| 41 | Assert.assertEquals("Receiver npi should be " + expected.getReceiverNumber().getNpi(), expected.getReceiverNumber().getNpi(), actual.getDestAddrNpi()); | |
| 42 | ||
| 43 | Assert.assertEquals("Message not consistent with expected", expected.getMessage(), getSmsContent(actual)); | |
| 44 | } | |
| 45 | ||
| 46 | /** | |
| 47 | * Assert that the fields of the received SMS using SMPP protocol are equal | |
| 48 | * to the expected values. It will check that: | |
| 49 | *
 | |
| 50 | *
The received sender address corresponds to the expected phone number | |
| 51 | * of the sender
 | |
| 52 | *
The received receiver address corresponds to the expected phone | |
| 53 | * number of the receiver
 | |
| 54 | *
The received message corresponds to the expected message
 | |
| 55 | *
 | |
| 56 | *
 | |
| 57 | * It also checks that there is exactly one received message. | |
| 58 | *
 | |
| 59 | *
 | |
| 60 | * This is a shortcut useful in unit testing. | |
| 61 | *
 | |
| 62 | * | |
| 63 | * @param expected | |
| 64 | * all the fields with their expected values | |
| 65 | * @param receivedMessages | |
| 66 | * the list of received SMS | |
| 67 | */ | |
| 68 | public static void assertEquals(ExpectedSms expected, List<SubmitSm> receivedMessages) { | |
| 69 |
2
1. assertEquals : All method instructions removed → SURVIVED 2. assertEquals : All method instructions removed → NO_COVERAGE |
Assert.assertEquals("should have received exactly one message", 1, receivedMessages.size()); |
| 70 | assertEquals(expected, receivedMessages.get(0)); | |
| 71 | } | |
| 72 | ||
| 73 | /** | |
| 74 | * Assert that the fields of each received SMS using SMPP protocol are equal | |
| 75 | * to values of each expected message. For each message, it will check that: | |
| 76 | *
 | |
| 77 | *
The received sender address corresponds to the expected phone number | |
| 78 | * of the sender
 | |
| 79 | *
The received receiver address corresponds to the expected phone | |
| 80 | * number of the receiver
 | |
| 81 | *
The received message corresponds to the expected message
 | |
| 82 | *
 | |
| 83 | *
 | |
| 84 | * It also checks that there are exactly the same number of received message | |
| 85 | * as the expected number. | |
| 86 | *
 | |
| 87 | * | |
| 88 | * @param expected | |
| 89 | * all the fields with their expected values | |
| 90 | * @param receivedMessages | |
| 91 | * the received SMS | |
| 92 | */ | |
| 93 | public static void assertEquals(List<ExpectedSms> expected, List<SubmitSm> receivedMessages) { | |
| 94 |
2
1. assertEquals : All method instructions removed → SURVIVED 2. assertEquals : All method instructions removed → NO_COVERAGE |
Assert.assertEquals("should have received exactly " + expected.size() + " messages", expected.size(), receivedMessages.size()); |
| 95 | for (int i = 0; i < expected.size(); i++) { | |
| 96 | assertEquals(expected.get(i), receivedMessages.get(i)); | |
| 97 | } | |
| 98 | } | |
| 99 | ||
| 100 | /** | |
| 101 | *
 | |
| 102 | * When message is too long, the SMS is split into several parts. This | |
| 103 | * method helps to check this case. | |
| 104 | *
 | |
| 105 | * Assert that the fields of each received SMS using SMPP protocol are equal | |
| 106 | * to values of each expected message part. For each message part, it will | |
| 107 | * check that: | |
| 108 | *
 | |
| 109 | *
The received sender address corresponds to the expected phone number | |
| 110 | * of the sender
 | |
| 111 | *
The received receiver address corresponds to the expected phone | |
| 112 | * number of the receiver
 | |
| 113 | *
The received message corresponds to the expected message
 | |
| 114 | *
 | |
| 115 | *
 | |
| 116 | * It also checks that there are exactly the same number of received message | |
| 117 | * as the expected number of parts. | |
| 118 | *
 | |
| 119 | * | |
| 120 | * @param expected | |
| 121 | * all the fields with their expected values | |
| 122 | * @param receivedMessages | |
| 123 | * the received SMS | |
| 124 | */ | |
| 125 | public static void assertEquals(SplitSms expected, List<SubmitSm> receivedMessages) { | |
| 126 |
2
1. assertEquals : All method instructions removed → NO_COVERAGE 2. assertEquals : All method instructions removed → SURVIVED |
assertEquals(expected.getParts(), receivedMessages); |
| 127 | } | |
| 128 | ||
| 129 | private AssertSms() { | |
| 130 | super(); | |
| 131 | } | |
| 132 | } | |
Mutations | ||
| 35 |
1.1 2.2 |
|
| 69 |
1.1 2.2 |
|
| 94 |
1.1 2.2 |
|
| 126 |
1.1 2.2 |


<<<<<<< HEAD
A list of top 5 Civ V Characters
Alexander The Great
Catherine
Wu Zetian
Oda Nobunaga
Gandhi
=======
A list of top 5 Civ V Characters
Alexander
Catherine
Wu Zetian
Oda Nobunaga
Gandhi
>>>>>>> 6d1fbb34bf5b91b91b58dad70bd54ee6b134b94a


{{ __("Send your paper wallet balance directly to a wallet that doesn’t support paper wallet imports. This tool sweeps the private key and sends the balance to a single Bitcoin address of your choice.") }}
{{ __("Please note:") }}
{{ __("NEVER use this tool to send Bitcoin to an address you do not control.") }}
{{ __("The full balance will be removed from the paper wallet. It is not possible to send partial amounts.") }}
{{ __("DO NOT use this tool if you do not trust the source. Make sure you see a green ‘lock’ in your browser and that you’re reading this on https://transfer.bitaccess.co.") }}
{{ __("This site will ask for your paper wallet private key to send the funds.") }}
{{ __("We do not transmit, store, or save your private key.") }}
{{ __("This service is provided with ABSOLUTELY NO WARRANTY and Bitaccess IS NOT RESPONSIBLE FOR ANY LOST FUNDS. Once Bitcoin is sent, there is absolutely no way to reverse the transaction. Use this tool at your own risk.") }}
{{ __("SEND YOUR BITCOINS") }}
{{ __("Enter Your Private Key") }}
{{ __("Please enter your Bitcoin Private Key.") }}
{{ __("What's this?") }}
{{ __("Or hit SCAN QR CODE to scan your key.") }}
{{ __("SCAN QR CODE") }}
{{ __("You have scanned/entered something that is not a PRIVATE key. If you are scanning a paper wallet, make sure you scan the QR code of the PRIVATE key.") }}


Make the most out of your time - Keep track of your weekly goals
Your Goal
Add
{{#each tasks}} {{> displayTask}} {{/each}}


sci-hub
to open science
⇣ save
Ding, X., Yang, W., Raymond Choo, K.-K., Wang, X., & Jin, H. (2019).
Privacy preserving similarity joins using MapReduce. Information Sciences, 493, 20–33.
doi:10.1016/j.ins.2019.03.035
url to share this paper:
sci-hub.tw/10.1016/j.ins.2019.03.035
downloaded on
2019-04-21
Sci-Hub is a project
to make knowledge free.
support →
updates on
twitter
created by
Alexandra Elbakyan


Instructors teach middle school students how to code in Python, a popular text-based programming language. Teens lead classes through advanced coding techniques and the nuances of Python.
Instructors teach elementary school students how to code in Scratch, an education tool that greatly simplifies coding. Teens lead classes through the basics of programming using block-based programming.
Instructors teach senior citizens the basics of using the Internet, including: email, web-browsing, and using a computer. Teens assist senior citizens with all their technology-related problems.
Founded in 2014, the New York Youth Technology Team is committed to promoting and establishing a sense of team spirit through community service. Our student-run team is full of high schoolers around the city passionate about technology that seek to inspire future generations of students and give back to the community through volunteerism.
NYYTT is divided up into three departments: marketing, technology, and computer science. Each department is focused on providing for the community.
Our computer science department hosts weekly computer science lessons for low-income middle school students in Queens for them to learn a variety of programming languages including Scratch and Python.
Our technology department volunteers at various senior centers to help teach the elderly the foundations of technology usage to provide them essential skills to live in the modern era.
Our marketing department is responsible for recruiting, branding, spreading the mission of NYYTT, and designing the website you are currently viewing.
NYYTT primarily works during the summer. Our team of marketers, programmers, and teachers meet at the Windsor School 1x a week. Python classes are on Saturdays (for 2 hours). Marketers contact one another through their social media and often enter group calls to discuss forthcoming changes to the team. The technology team meets 2x during the week.
If you are a parent wishing for your child to be immersed in the world of Python/Scratch, then make sure to sign them up! Contact us or wait for us to contact you. If you are a current high school student, look out for our applications if you want to be a part of the team! If you are a senior, you too can be a part of the experience by being taught at senior centers by our team.
President
My name is Leilei and I’m a current Senior at Stuyvesant High School! I started volunteering with NYYTT during my sophomore year as a member in the computer science department to spread my love for programming to underprivileged kids and hopefully inspire them to pursue coding in the future. Since then, I have been a Director of Computer Science and spearheaded the creation of a new marketing team. I am honored to serve as the President of NYYTT for the ‘19–‘20 year and am always looking for ways to spread the mission of our team to more people around the city as well as strengthen our team. In my free time, I like to organize my room, bullet journal, read, talk to friends, and hang out with my hamsters.
Vice President
My name is Chengtao Zhang and I am currently a senior at Stuyvesant High School. I joined NYYTT’s technical department during the summer of my sophomore year. I enjoy teaching and helping elders with technological issues and questions, and seeing the elders understanding and liking the concepts that I taught truly motivates me and makes me take pleasure in volunteering.Throughout my volunteering experiences, I get to interact with elders from different backgrounds and understand more about their ways of thinking and learning. As a result, I have come to further appreciate the elders in both my family and my community. As the Vice President of NYYTT this year, I will strive to improve the quality and quantity of our volunteering so more elders and kids within the community can benefit from our service.
Web Development Director
I am currently a rising junior attending Stuyvesant High School. My lifelong ambition is to make a mark in the world and for the better. Whether it is the mind of one student or one community, I strive to make use of what has been gifted to me and instill values and knowledge upon others. I am a part of NYYTT because I can guide someone who is in the midst of developing their C.S. skills, but more importantly encourage the future minds of the world in experiencing one of the biggest fields out there in the market. Nothing gives me greater joy than seeing the enthusiasm in students’ eyes when they solve a problem. It tells me that I am one step closer, closer to fulfilling my ambition.
Social Media Director
My name is Sharon, and I am one of the two current marketing directors for NYYTT. Since the beginning of high school, I developed an interest in taking photos, making videos and creating websites. I have been a member of both photo departments for Indicator and Spectator, and now I hope to use the skills I have gained to create great content and spread awareness for our team this year. Besides photography and coding, my other interests include dancing, listening to music, reading, and working on my bullet journal.
Technology Director
Hi my name is chuhan and I’m a senior from Bayside High School. I joined NYYTT last year summer as a member in the technology department and I am really grateful on becoming a director of the technology department this year. My goal for joining this program is to spread my knowledge to the elderly who are having difficulties with technologies and make sure that at the end of the program they will learn things that would help them in the future and live an easier life. It’s a pleasure to work on this team and also a great learning experience for me. I love to play basketball and play video games in my free time.
Technology Director
My name is William and I’m a current Senior at Stuyvesant High School. I started volunteering with NYYTT before my freshman year as a member in the technical department. After volunteering for years in NYYTT, I love seeing the volunteering connecting to the old generation - grow perspective in the world- socially. NYYTT made me realize that it was important to teach the elders how to use current technology in order to converse with their children and grandchildren. I want to be the bridge which connects the old and new generations.
Technology Director
My name is Andrew and this will be my second summer back with the New York Youth Tech Team’s tech department. I am excited to return to this team because I want to bridge the gap between technology and the elderlies and increase their technological literacy. Their quality of life can not only be greatly improved by it, the ability to properly navigate the web and use devices is also a matter of safety and security. I am currently a junior in high school pursuing mathematics and computer science. In the future, I want to become a cyber security analyst, but until then, I am stuck fighting my school’s course scheduling website for the classes I want for the upcoming semester. During my spare time, I enjoy kicking back and listening to music, especially soft and pop rock but I have recently begun dabbling in K-pop.
Computer Science Director
Hello! I'm Weini, a senior at Stuyvesant. I'm also one of NYYTT's CS Directors. I joined the CS department because I wanted to improve my teaching skills and help introduce Computer Science to the children. I really enjoy teaching because I want to help students achieve the best education that they can get. I hope that I will be able to aid NYYTT’s expansion so that more children will get the opportunity to learn about coding! Apart from teaching, I also enjoy sleeping, watching dramas, and listening to music.
Computer Science Director
My name is Yifan, and I’m currently a senior at Stuyvesant High School. I joined the computer science department of NYYTT during my sophomore year because my passion for computer science motivates me to encourage the younger generations to pursue STEM and to bring opportunities to the disadvantaged. For the ‘19 -‘20 year, I am honored serve as the Director of the Computer Science department. Given this responsibility, I work to voice the objective of our team through expanding the number and location of our classes to reach a greater range of people. During my free time, I like to listen to music, bullet journal, and travel.


Serialized Form
serialVersionUID: 1L
textAntiAliasing
java.lang.Object textAntiAliasing
- The anti-aliasing setting of the line number text. See
RenderingHints
.
borderColor
java.awt.Color borderColor
- The color of the border that joint the gutter and the script text area.
highlightedColor
java.awt.Color highlightedColor
- The background of the row when it is highlighted.
paddingLeft
int paddingLeft
- The minimum padding from 'the leftmost of the line number text' to
'the left margin'.
paddingRight
int paddingRight
- The minimum padding from 'the rightmost of the line number text' to
'the right margin' (not to the gutter border).
borderWidth
int borderWidth
- The width of the border that joint the gutter and the script text area.
scrollPane
javax.swing.JScrollPane scrollPane
- The JScrollPane that it be added into.
textComponent
javax.swing.text.JTextComponent textComponent
- The text component to listen the change events on.
document
javax.swing.text.Document document
- The document of the text component.
documentListener
javax.swing.event.DocumentListener documentListener
- The document listener for
JTextComponentRowHeader.document
.
panelWidth
int panelWidth
- The cached panel width.
largestRowNumber
int largestRowNumber
- The cached largest row number (for determine panel width
JTextComponentRowHeader.panelWidth
).
textComponentHeight
int textComponentHeight
- The cached text component height, for determine panel height.
lineNumberOffset
int lineNumberOffset
- The line number offset. E.g. set offset to 9 will make the first line
number to appear at line 1 + 9 = 10
highlightedLineList
java.util.List<E> highlightedLineList
- The list of line numbers that indicate which lines are needed to be
highlighted.
listenToDocumentUpdate
boolean listenToDocumentUpdate
- Indicator indicate whether it is listening to the document change events
or not.
serialVersionUID: 1L
highlighter
SyntaxHighlighterPane highlighter
- The script text area.
highlighterRowHeader
JTextComponentRowHeader highlighterRowHeader
- The gutter panel (line number).
theme
Theme theme
- The theme.
parser
Parser parser
- The parser.
content
java.lang.String content
- The content of the syntax highlighter, null if there is no content so far.
serialVersionUID: 1L
lineNumberOffset
int lineNumberOffset
- The line number offset. E.g. set offset to 9 will make the first line
number to appear at line 1 + 9 = 10
highlightedBackground
java.awt.Color highlightedBackground
- The background color of the highlighted line. Default is black.
highlightWhenMouseOver
boolean highlightWhenMouseOver
- Indicator that indicate to turn on the mouse-over highlight effect or not.
See
SyntaxHighlighterPane.setHighlightOnMouseOver(boolean)
.
highlightedLineList
java.util.List<E> highlightedLineList
- The list of line numbers that indicate which lines are needed to be
highlighted.
highlightPainter
javax.swing.text.Highlighter.HighlightPainter highlightPainter
- The highlighter painter used to do the highlight line effect.
theme
Theme theme
- The theme.
styleList
java.util.Map<K,V> styleList
- The style list.
mouseOnLine
int mouseOnLine
- Record the mouse cursor is currently pointing at which line of the
document. -1 means not any line.
It is used internally.


Problem: First (LR)
Consider the following grammar
S -> E
E -> e | pF;
F -> E | EF
Now create the corresponding deterministic finite automaton of the valid items LR(1) and then build a response firstANS for the following five questions:
- How many states does the automaton have?
- In how many states does LR(0) conflicts occur?
- Is the grammar LR(0)?
- Is the grammar LR(1)?
- Is the grammar LALR(1)?


Here at ABC dog rescue centre we aim to reunite all of our animals with caring new owners who will give them their forever home. Follow the journey of all our rehomed pets on our facebook page.
ABC Dog Rescue Centre was established in 2019 with the ambition of saving dogs that are not fortunate enough to have the home they deserve. The staff here at ABC Dog Centre have dedicated their time and resources to rehoming these dogs. The are cared for and looked after here at ABC until they find their forever home!


You can use left and right arrow keys to navigate between chapters.
Converted with haproxy-dconv v${version} on ${date}
${headers['version']}
${headers['author']} ${headers['date']}


Join the community by adding a name to your farm of the future!
Our Mission
Herban is not just a company, we are a green-based lifestyle brand. By taking advantage of a digital marketplace, autonomous gardening, and drone delivery system, Herban will sell and deliver locally sourced produce directly to and from our customers' doorsteps. Our mission is to drive the change required for a sustainable future. By limiting the amount of traditional farmland needed to feed a growing population and by integrating green spaces into every facet of city life, our Green Breeze system will foster environmental rejuvination and healthier city ecosystems.


You managed to reach the port in use by an Automatic Formatting service.
This is not the intended way of using it, even if this page is beautiful beyond belief.
See the GitHub-Repository for more information.


See everything, faster and easier
Essential features for your page
Swipe, touch, tap, caption.
Showcase your products
Pages required for any site
Application Styled Feature Pages
Remember, this is just a template
Remember, this is just a template
Remember, this is just a template.


Anastasios Barlas
103 William HouseRingers Road
Bromley
BR1 1AG
<EMAIL_ADDRESS>07542636905
Graduate from the University of Portsmouth with 2:1 degree in computer science,
deep understanding of high level programming languages with focus
on designing interactive pages with 3D graphics,
seeking to work as a Junior Web Developer.
EDUCATION
2012 - 2016 University of Portsmouth BSc (Hons) Computer Science (2:1)
Degree focussed on various programming paradigms:
Python, Java, JavaScript, MATLAB, WebGL,Haskell,SQL,
software engineering,networks,achieving parallelisation in programmes and concentrated especially in the production of websites
with 3D graphics by using WebGL,JSON,JavaScript and 3ds Max.
Highly experienced using 3ds Max.Modelled a human, polygon by polygon, and animated him.
The goal of the animation was to create a basketballer that successfully shoots the ball in the hoop.
3ds Max was also used to model the metropolitan museum of art inside and outside.
The final model would be used to create an interactive website of this 3D museum which can be found in this url http://www.interactive3dmet.com/.
Working in teams in order to manage course projects on developing a network for a specific company,
and coordinating another team as a lead programmer in order to create a large piece of software.
The first team consisted of two individuals whereas the second team consisted of 5 fellow students
which I mentored in order to create a software that takes some input from the user in order to create three different graph technologies (GANNT, PERT, WBT).
2009 - 2012 High School of Astros D.TH. SAKALI, Astros Kynourias, Greece
Greek Apolytirion: 16.3/20RELEVANT EXPERIENCE
August 2016 - Present Sparta Global,Richmond Trainee IT Consultant Thorough training in various aspects of an SDET role including; Week 1: Business SkillsWeek 2: Testing and SQL
Week 3: Version control, Git, Github & HTML
Week 4: Mobile and Web Testing
Week 5: Agile Methods
Week 6: Ruby
Week 7: Automation with Ruby
Week 8: Consolidation Week
Week 9: Cucumber and BDD
Week 10: Final Project
Week 11: Final Project
2010-2013 Fixed high school, primary school and customer computers systems on a voluntary basis.
OTHER EXPERIENCE
June 2014 - April 2015 Akash Restaurant,Portsmouth Head Bartender
Coordinated a team of 3 bartenders in order to provide efficient bar service in a busy work environment.
Managed substantial amounts of money in order to purchase and supply the restaurant with the necessary stock.
Used leadership skills to deliver training for new bartenders on service techniques, safety legislation as well as techniques of handling and presenting the drinks.
September 2015 - April 2016 & KFC,Portsmouth Team Member
Awarded with two recognition cards, one from the RGM manager and the other from another team member.
Primarily worked at the lobby to provide clean trays to the middle of house in a busy work environment.
Cleaned the tables and disposed the rubbish to the appropriate bins according to company's regulations.
Helped everybody and especially the elderly by opening the door for them, serving them with their food, or providing solutions and general assistance to their individual problems.
Responsibilities at the back of house involved cleaning the chicken according to specific guidelines, defrosting stock and cleaning various electrical appliances.
OTHER QUALIFICATIONS
Language abilities & Certificates:
Speak fluent Greek (Native language).French language certificate: delf b1 diplome d'etudes en langue francaise (Fluent in French).
English language certificate: state certificate of foreign language proficiency (Fluent in English).
Achieved best Induction Project 2012 (Year 1) at the School of Computing, University of Portsmouth
Recognition:
Recognition was received by another lecturer that recommended my final year project that involved the development
of an interactive website which allows interaction with the 3D metropolitan museum of art.
This way, the project was displayed in the final year's student conference, where only the best computer science projects participated in it.
HOBBIES AND INTERESTS
Computer Repair for friends.Sports - play football on a weekly basis with friends.
Interest in 3D graphics and animation.
Interest in Networks.


Spring allows to externalize string literals in its context configuration files into external properties files, in order to separate application specific settings from framework specific configuration.
This element activates the replacement of ${...} placeholders, resolved against the specified properties file (as a Spring resource location).
<context:property-placeholder location = "classpath:dao.properties, classpath:services.properties, classpath:user.properties, /WEB-INF/config/config.properties" ignore-unresolvable="true"/>
A property resource configurer that resolves placeholders in bean property values of context definitions.
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:dao.properties</value> <value>classpath:services.properties</value> <value>classpath:user.properties</value> <value>/WEB-INF/config/config.properties</value> </list> </property> <property name="ignoreUnresolvablePlaceholders" value="true"/> </bean>


前端于我而言，是理性与感性的完美结合，逻辑的精密和搭配设计的笃定， 是一名优秀工程师的必备品质。
教育背景 2018届安阳师范学院人文管理学院 计算机科学与技术 学士
求职意向 前端开发
思维灵活发散，强大的自我驱动能力 在独立项目开发过程中体现出优秀的新技术学习、问题分析解决能力。
寻找技术驱动，成长空间用激情与成果证明快速成为团队中流砥柱，is not impossible.
This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.
Last updated 3 mins ago
This card has supporting text below as a natural lead-in to additional content.
Last updated 3 mins ago
This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.
Last updated 3 mins ago
<EMAIL_ADDRESS>TEL:<PHONE_NUMBER>9
: cocoa_jia


TF2C Auto Joiner
Anime Updater
Select Region:
Region
Europe
North America
South America
Russia
Asia
Africa
Australia
All
Select Game Type:
Game Type
Highlander
6v6
4v4
Ultiduo
BBal
Test 1v1 (Not Working ATM)
All
Select Map Type:
Map Type
Check Point
Payload
King of the Hill
Capture the Flag
All
Select Class(es):
Class(es)
Scout
Sniper
Spy
Solly
Roamer Solly
Pocket Solly
Pyro
Medic
Heavy
Demo
Engineer
Mumble:
Off
On
Run Auto Joiner
START


IR JIT Compiler
XLS provides a JIT compiler for evaluating functions written in the [XLS] compiler intermediate representation (IR) at native machine speed.
Usage
Given a DSLX file and build target, one can build and run it through the JIT by:
- Declaring a
cc_xls_ir_jit_wrapper
target matching the DSLX build target. - Creating a JIT object and calling its
Run()
method. Using the 2-way floating-point adder as an example:# include "xls/modules/fpadd_2x24_jit_wrapper.h" absl::StatusOr<Value> foo(Value a, Value b) { ... // Only create this once and re-use it; it's created here just as // an illustration. XLS_ASSIGN_OR_RETURN(Fpadd2x32 adder, Fpadd2x32::Create()); return adder.Run(a, b); }
The advantages of JIT compilation (or any compilation, for that matter) only come into play when repeatedly using the compiled object, so programs should be structured to create a JIT wrapper once and to reuse it many times, e.g., to test a module across many - or even exhaustively, across all possible - inputs.
Specialized matching
In many cases, the types used by DSLX designs map to native types, such as the
C/C++ float
. In that case, a simplified wrapper call is available:
#include "xls/modules/fpadd_2x24_jit_wrapper.h"
absl::StatusOr<float> foo(float a, float b) {
...
// Only create this once and re-use it; it's created here just as
// an illustration.
XLS_ASSIGN_OR_RETURN(Fpadd2x32 adder, Fpadd2x32::Create());
return adder.Run(a, b);
}
When available, these simplified wrappers should be used for higher performance
(~30% in our measured cases). Currently, floats and integral types >= 64 bits in
this way. For non-native integral types, the generated wrapper will accept the
next larger native type e.g., uint64_t
for bits[47]
. Proper operation with
next-larger types depends on the input value being present in the
least-significant bits of the containing type.
These are higher performance because they avoid unnecessary marshaling of these
types into Views (e.g., a float
outside the JIT -> View -> float
inside the
JIT).
Direct usage
The JIT is also available as a library with a straightforward interface:
absl::StatusOr<Value> RunOnJit(
Function* function, absl::Span<const Value> args) {
XLS_ASSIGN_OR_RETURN(auto jit, FunctionJit::Create(function));
return jit->Run(args);
}
The IR JIT is the default backend for the eval_ir_main tool, which loads IR from disk and runs with args present on either the command line or in a specified file.
Design
Internally, the JIT converts XLS IR to LLVM IR and uses LLVM's ORC infrastructure to convert that into native machine code. The details of compiling an LLVM IR program with ORC are mostly generic and are available online - here are discussed details specific to our usage in XLS.
XLS IR is converted to LLVM IR by recursively visiting every node in a function using the DfsVisitor functions. Most nodes have relatively straightforward implementations, e.g., in Concat, we create an empty value with the combined width of the operands, and each is shifted and blitted into that value to produce the result. Some operations, though, merit more discussion.
Arg passing
When LLVM JIT-compiles a program, the resulting value is simply a function pointer to the requested entry point (that can be called like any function pointer). Calling such a function pointer with concrete-typed arguments, though, is difficult: one must either make heavy [ab]use of C++ templates or "hide" the argument types behind an opaque pointer. The latter approach is taken here.
When a compiled function is invoked (via FunctionJit::Run()
), the typed input
args are "packed" into an opaque byte buffer which is passed into the new
function. Inside there, any references to an argument (via
DfsVisitor::HandleParam()
) calculate the offset of that param in the opaque
buffer and load from there appropriately (this should happen at most once per
arg; LLVM and/or XLS should optimize away redundant loads).
A special case is for function invocations (inside the JITted function): for
these, the arguments already exist inside "LLVM-space", so there's no need for
unpacking args, so LlvmFunction::getArg()
can be used as usual.
Results must be handled in a similar way - they could be of any type and will need to be packed inside XLS types before returning, so there's a corresponding argument unpacking phase at function exit.
For both packing and unpacking, LLVM's DataLayout must be used to determining where input and output values will be placed, as LLVM will use those conventions when, e.g., loading values from a struct.
ArrayIndex
IRBuilder provides three means of extracting values from an aggregate type:
CreateGEP
: these use the getelementptr instruction, which requires a pointer-typed value (not the same thing as an array!). This requires holding a value in a specially-created allocation (viaCreateAlloca()
or in an input buffer).CreateExtractElement
: returns the value at a given index in a vector-typed value.CreateExtractValue
: returns the value at a given constant index in an aggregate value.
Unfortunately, #2 doesn't apply, as arrays aren't LLVM vectors, and #3 doesn't
apply, as an array index isn't necessarily a constant value. Uniformly managing
arrays as allocas doesn't scale well (consider the case of arrays of arrays of
tuples...), so for ArrayIndex
nodes, we lazily create allocas for only the
array of interest and load the requested index from there.
main()
generator
The IR JIT finds more than its share of LLVM bugs, in large part due to XLS' use of fuzzing, which often generates bit widths not often found in software, e.g. a 231-bit wide integer, which won't be emitted by Clang (as it's not a native C type). To ensure that any mismatches between the JIT and the IR interpreter are correctly triaged, it's important to compare results between the JIT and LLVM-provided tools, e.g., lli or llc, the LLVM IR interpreter and compiler, respectively.
Both lli and llc execute self-contained LLVM IR programs, i.e., those with an
int main(int argc, char** argv)
entry point - the JIT does not produce these
(as they're not part of a hardware description). To avoid the need to manually
edit the JIT-produced IR (which experience has shown to be very error prone), we
can generate a main
driver function for our samples.
Usage
To generate and execute a main
for LLVM IR produced by the JIT, run the
following:
$ bazel build //xls/tools:llvm_main_generator \
//xls/tools:run_llvm_main
$ ./bazel-bin/xls/tools/llvm_main_generator \
-entry_function <Mangled IR function name> \
-input <Path to file containing JIT-generated LLVM IR> \
-output <Path to write output>
$ ./bazel-bin/xls/tools/run_llvm_main \
<Output path from above> \
<Input values as string-formatted XLS Values>
For a concrete example:
$ bazel-bin/xls/tools/llvm_main_generator \
-entry_function "sample::__sample__main" \
-input ~/fuzz/mismatch/sample.opt.ll \
-output ./foo.ll
$ bazel-bin/xls/tools/run_llvm_main \
./foo.ll \
bits[56]:0x800_0000_0000 \
bits[66]:0x4000_0000 \
bits[7]:0x1 \
bits[2]:0x3 \
bits[12]:0x0 \
bits[74]:0x3c5_482a_0984_e061_1a90
bits[74]:0x3ff_ffc5_482a_0984_e061
The final line is the result of running the sample.
If the value mismatch occurs both in the IR JIT evaluation as well as lli evaluation, then there's likely a bug in LLVM. A main-annotated IR sample is suitable for attaching to an LLVM bug report (on http://bugs.llvm.org) as a reproducer, along with the input to generate the mismatch.
Design
The main generator, at a high level, uses the LLVM tools (namely IRBuilder) to
create a main()
function to:
- Examine its command-line parameters to determine their overall size and to them into the input buffer (as in Arg Passing above).
- Invoke the entry function (which remains unchanged from the source emitted by the JIT).
- Unpack the output buffer after the entry function completes and print its contents.
For arg packing/unpacking, the functions provided by JitRuntime are used, but in
a stateless context wrapped in an extern "C"
space, to simplify invocation
from within LLVM IR.
Output type determination
Inferring the computation's output type merits special discussion. While it's
trivial for the main generator to detect the output type, it's very difficult to
do so inside the executing main()
- in the former, the type is real data,
wherein the latter, it's metadata.
To make this possible (without doing down an RTTI rabbit hole, or even simply requiring the user to specify it on the command line), we do the following:
- Determine the
llvm::Type
of the output. - Convert that into an
xls::Type
, and capture that type as a String. - Hardcode that string as a constant in the emitted
main()
function. - At runtime, pass that type string into
UnpackAndPrintBuffer()
(one of theextern "C"
function wrappers). - Inside
UnpackAndPrintBuffer()
, parse that string (viaxls::Parser::ParseType()
), and use the resultingxls::Type
to determine the contents of the computation's output buffer.