| DOSE: |
|
|
Opium |
(tar / resin) |
Growing the Opium Poppy
Look for my image tutorial in the opium gallery
Called Ė Easy Opium
This is a very simple to follow tutorial on how to grow and cultivate the the opium poppy.
1
Obtain seeds first, they are often offered on shaman websites but I order dried pods from a flower arranging site and use the seads form those. Once you got the seeds, moisten soil and sprinkle seeds evenly. Since seeds are small, try filling up an old salt or pepper container and sprinkling them accordingly. Cover seeds with about half an inch of soil, pat down soil so the ground is even but not too firm, and water the dirt so it can solidify a bit. The opium poppy thrives best in a sandy or loamy black soil with a pH of 6. Any good fertilizer works and usually the same things used for marijuana are ok to use for poppies.
2
In about three days, you will begin to see very small grass like sprouts beginning to appear. In this stage be careful not to over water under water or bend the sprouts with water at too high of a pressure. Do not attempt to thin until deeper root systems have developed.
3
When plants grow too close together, size and alkaloid qualities are hindered so thinning is necessary. For every 3.2 meters, about 15 plants should be present, about every 4 ft = 15 plants. To thin, separate the largest plants from the rest by picking the weaklings around the base of the healthiest plants. Do not dig up and transplant poppies, they do not like it and will most likely die. The plants should be thinned out so that there is about six inches between them
4
As the plant grows, new leaves excel upward in a spiral like motion from the center of the plant, as repeated growth occurs, each new group of leaves that rise will form a stalky stem that points straight upward.
5
Keep the plant well watered until flowering. After the flowers appear, do not water unless absolutely necessary. This is one of the secrets of high opium yield. Harvest time is 5-10 days after flower petals fall
6
Incisions may be made at 24 hour intervals. When the latex becomes thick enough that it does not run, the time is right to collect, another characteristic of harvest time is if the leaves turn a bit yellow. When you cut make sure there is no morning dew or frost, collect either on sunset or sunrise, let sit for 10-12 hrs and oxidize to form a somewhat solid form. Make shallow incision around the circumference of pod hurting just the skin; DO NOT puncture the inner pod because the poppy is hollow, too deep of an incision will force the opium to flow into the center of the pod where it cannot be collected and be lost.
7
Immediately after cutting a milky substance will protrude and coagulate with the air to turn brown; usually it is let to sit ten to twelve hrs.  If you are desperate, I have heard of people collecting this immature milky substance on some tobacco or weed and letting it dry that way. Use a butter knife to scrape the dried resin off pod, it should be a brownish/reddish goo.
8
After collection place in a dry surface to air out, when it reaches the consistency of hashish it is ready to store or smoke. Opium darkens with age and eventually it becomes almost black. If you wish to speed up the drying process, the raw product may be thickened by heating, to drive off excess moisture.
9
The pod may be incised again every few days, as long as it continues to yield juice. Alkaloid potency and yield will diminish as repeated millings occur. The contents of ten to fifteen pods seem to be about the right amount for one high if eaten. It takes considerably more if smoked.
10
Once your pods are milked, hang the biggest ones upside down to dry and collecting the seeds from them for the next season. Now you can take the dried pods and crush them up to make POPPY TEA, which by the way is one of the most evil tasting brews I have encountered. Discard cut pods immediately as they can be used as evidence against you.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


{% extends "base.html" %} {% block scripts %} {% endblock %} {% block header2 %}
Are you sure you want dalete this category ? All incomes with this category will be assign to Another category.
Enter name of new category


Visual Paper Summary: ALBERT (A Lite BERT)
Consider a sentence given below. As humans, when we encounter the word “apple“, we could:
- Associate the word “apple” to our mental representation of the fruit “apple”
- Associate “apple” to the fruit rather than the company based on the context
- Understand the big picture that “he ate an apple”
- Understand it at character-level, word-level and sentence-level
The basic premise of latest developments in NLP is to give machines the ability to learn such representations.
In 2018, Google released BERT that attempted to learn representations based on a few novel ideas:
Recap: BERT
1. Masked Language Modeling
Language modeling basically involves predicting the word given its context as a way to learn representation. Tradionally, this involved predicting the next word in sentence given previous words.
BERT instead used a masked language model objective, in which we randomly mask words in document and try to predict them based on surrounding context.
Credits: Marvel Studios on Giphy
2. Next Sentence Prediction
The idea with “Next Sentence Prediction” is to detect whether two sentences are coherent when placed one after another or not.
For this, consecutive sentences from the training data are used as a positive example. For negative example, some sentence is taken and a random sentence from another document is placed next to it. BERT model is trained on this task to identify if two sentences can occur next to each other.
3. Transformer Architecture
To solve the above two tasks, BERT uses stacked layers of transformer blocks as encoders. Word vectors are passed through the layers to capture the meaning and yeild a vector of size 768 for the base model.
Jay Alammar has an excellent post that illustrates the internals of transformers in more depth.
Problems with BERT
BERT, when released, yielded state of art results on many NLP tasks on leaderboards. But, the model was very large in size which resulted in some issues. The “ALBERT” paper highlights these issues in two categories:
-
Memory Limitation and Communication Overhead:
Consider a simple neural network with one input node, two hidden nodes and a output node. Even such a simple neural network will have 7 parameters to learn due to weights and bias per node.
BERT-large, being a complex model, has 340 million parameters because of to its 24 hidden layers and lots of nodes in feed-forward network and attention heads. If you wanted to build upon the work on BERT and brings improvements to it, you would require large compute requirements to train from scratch and iterate on it.
These compute requirements mainly involve GPUs and TPUs, but such devices have a memory limitation. So, there is a limit to the size of models.One popular approach to this problem in distributed training. Let’s take example of data parallelism on BERT-large, where training data is divided into two machines. The model is trained on two machines on chunks of data. As shown in the figure, you can notice how the large number of parameters to transfer during synchronization of gradients can slow down the training process. The same bottleneck applies for the model parallelism as well where we store different parts of the model(parameters) on different machines.
Figure: Communication overhead in distributed training
-
Model Degradation
Recent trend in the NLP research community is using larger and larger models to get state-of-the-art performance on leaderboards. ALBERT shows that that this can have diminishing returns.In the paper, the authors performed an interesting experiment.
If larger models lead to better performance, why not double the hidden layer units of the largest available BERT model(BERT-large) from 1024 units to 2048 units?
They call it “BERT-xlarge”. Surprisingly, the larger model actually performs worse than the BERT-large model on both Language Modeling task as well as when tested on a reading comprehension test (RACE).
From the plots given in the original paper, we can see how the performance degrades. BERT-xlarge is performing worse than BERT-large even though it is larger in size and has more parameters.
Credits: ALBERT paper
From BERT to ALBERT
ALBERT attacks these problems by building upon on BERT with a few novel ideas:
-
Cross-layer parameter sharing
BERT large model had 24 layers while it’s base version had 12-layers. As we add more layers, we increase the number of parameters exponentially.
To solve this problem, ALBERT uses the concept of cross-layer parameter sharing. To illustrate, let’s see the example of 12-layer BERT-base model. Instead of learning unique parameters for each of the 12 layers, we only learn parameters for the first block, and reuse the block in the remaining 11 layers.
We can share parameter for either feed-forward layer only, the attention parameters only or share the parameters of the whole block itself. The paper shares the parameters for whole block.
Compared to the 110 million paramters of BERT-base, the ALBERT model only has 31 million parameters while using the same number of layers and 768 hidden units. The effect on accuracy is minimal for embedding size of 128. Major drop in accuracy is due to feed-forward network parameter sharing. Effect of sharing attention parameters is minimal.
Figure: Effect of cross-layer parameter strategy on performance
-
Sentence-Order Prediction (SOP)
BERT introduced a binary classification loss called “Next Sentence Prediction“. This was specifically created to improve performance on downstream tasks that use sentence pairs like “Natural Language Inference”. The basic process is:
- Take two segments that appear consecutively from training corpus
- Create a random pair of segment from different document as negative examples
Papers like ROBERTA and XLNET have shed light on the ineffectiveness of NSP and found it’s impact on the downstream tasks unreliable. On eliminating the NSP task, the performance across several tasks improved.
So, ALBERT proposes an alternative task called “Sentence Order Prediction”. The key idea is:
- Take two consecutive segments from same document as positive class
- Swap the order of the same segment and use that as negative example
The forces the model to learn finer-grained distinction about discourse-level coherence properties.
ALBERT conjectures that NSP was ineffective because it’s not a difficult task when compared to masked language modeling. In a single task, it mixes both topic prediction and coherence prediction. The topic prediction part is easy to learn because it overlaps with the masked language model loss. Thus, NSP will give higher scores even when it hasn’t learned coherence prediction.
SOP improves performance on downstream multi-sentence encoding tasks (SQUAD 1.1, 2.0, MNLI, SST-2, RACE).
Here we can see how model trained on NSP is only giving scores slightly better than random baseline on SOP task, but model trained on SOP can solve the NSP task quite effectively. This provides evidence that SOP leads to better learning representation.
-
Factorized embedding parameterization
In BERT, the embeddings used (word piece embeddings) size was linked to the hidden layer sizes of the transformer blocks. Word piece embeddings learnt from the one hot encoding representations of a vocabulary of size 30,000 was used. These are projected directly to the hidden space of the hidden layer.Let’s say we have a vocabulary of size 30K, word-piece embedding of dimension E=768 and hidden layer of size H=768. If we increase hidden units in the block, then we need to add a new dimension to each embedding as well. This problem is prevalent in XLNET and ROBERTA as well.
ALBERT solves this problem by factorizing the large vocabulary embedding matrix into two smaller matrices. This separates the size of the hidden layers from the size of the vocabulary embeddings. This allows us to grow the hidden size without significantly increasing the parameter size of the vocabulary embeddings.
We project the One Hot Encoding vector into the lower dimension embedding space of E=100 and then this embedding space into the hidden space H=768.
Results
- 18x fewer parameters than BERT-large
- Trained 1.7x faster
- Got SOTA results on GLUE, RACE and SQUAD during its release
- RACE: 89.4% [45.3% improvement]
- GLUE Benchmark: 89.4
- SQUAD 2.0 F1-score: 92.2
Conclusion
ALBERT marks an important step towards building language models that not only get SOTA on the leaderboards but are also feasible for real-world applications.
Citation Info (BibTex)
If you found this blog post useful, please consider citing it as:
@misc{chaudhary2020albert,
title = {Visual Paper Summary: ALBERT (A Lite BERT)},
author = {Amit Chaudhary},
year = 2020,
note = {\url{https://amitness.com/2020/02/albert-visual-summary}}
}


Gregorian
Day:
Month:
January
February
March
April
May
June
July
August
September
October
November
December
Year:
After sunset
Day of the week
Hebrew
Day:
Month:
Nisan
Iyyar
Sivan
Tammuz
Av
Elul
Tishri
Cheshvan
Kislev
Tevet
Shevat
Adar I
Adar II
Year:
Day of the week
1
Tishri
7
Nisan
2
Cheshvan
8
Iyyar
3
Kislev
9
Sivan
4
Tevet
10
Tammuz
5
Shevat
11
Av
6
Adar I
12
Elul


Aggregate OD data between polygon geometries
od_aggregate(flow, zones, aggzones, cols = FALSE, aggcols = FALSE, FUN = sum, prop_by_area = ifelse(identical(FUN, mean) == FALSE, TRUE, FALSE), digits = getOption("digits"))
| flow | A data frame representing the flow between two points
or zones. The first two columns of this data frame should correspond
to the first column of the data in the zones. Thus in |
|---|---|
| zones | A SpatialPolygonsDataFrame or SpatialPointsDataFrame representing the original centroids or boundaries of the travel flow data. Note that in the case of a SpatialPointsDataFrame, the entirety of the flow will be allocated to the polygon in which the point is located rather than being distributed by area. |
| aggzones | A SpatialPolygonsDataFrame containing the new boundaries to aggregate to. |
| cols | A character vector containing the names of columns on which to apply FUN. By default, all numeric columns are aggregated. |
| aggcols | A character vector containing the names of columns in aggzones to retain in the aggregated data.frame. By default, only the first column is retained. These columns are renamed with a prefix of "o_" and "d_". |
| FUN | Function to use on aggregation. Default is sum. |
| prop_by_area | Boolean value indicating if the values should be proportionally adjusted based on area. Default is TRUE unless FUN = mean. |
| digits | The number of digits to use when proportionally adjusting values based on area. Default is the value of getOption("digits"). |
data.frame containing the aggregated od flows.
Origin-destination ('OD') flow data is often provided in the form of 1 line per flow with zone codes of origin and destination centroids. This function aggregates OD flows between polygon geometries allocating the original flows to larger zones based on area.
data(flow) data(zones) zones@data$region <- 1 zones@data[c(2, 5), c('region')] <- 2 aggzones <- SpatialPolygonsDataFrame(rgeos::gUnaryUnion( zones, id = zones@data$region), data.frame(region=c(1, 2)) ) zones@data$region <- NULL od_aggregate(flow, zones, aggzones)#> o_region d_region All Work.mainly.at.or.from.home #> 1 1 1 1580.9990 0 #> 2 1 2 300.0000 0 #> 3 2 1 580.9998 0 #> 4 2 2 354.0000 0 #> Underground..metro..light.rail..tram Train Bus..minibus.or.coach Taxi #> 1 0.9999992 7.999994 179.99990 54.999963 #> 2 0.0000000 1.000001 44.99999 7.000000 #> 3 0.0000000 1.000000 72.99997 16.999994 #> 4 0.0000000 1.999999 42.00000 2.000001 #> Motorcycle..scooter.or.moped Driving.a.car.or.van Passenger.in.a.car.or.van #> 1 7.9999945 537.9996 71.99996 #> 2 0.0000001 115.0000 14.00000 #> 3 0.0000020 230.0000 28.99999 #> 4 0.0000000 121.0000 13.00000 #> Bicycle On.foot Other.method.of.travel.to.work #> 1 24.999982 682.9996 10.9999942 #> 2 9.999996 108.0000 0.0000006 #> 3 28.999992 200.9999 0.9999997 #> 4 3.000001 169.0000 1.9999995# another example with more zones and plots zones$quadrant = quadrant(zones, number_out = TRUE) aggzones <- SpatialPolygonsDataFrame( rgeos::gUnaryUnion( zones, id = zones@data$quadrant), data.frame(region = c(1:4)) ) od = od_aggregate(flow, zones, aggzones) od_sp = od2line(flow, zones) zones@data = cbind(1:nrow(zones), zones@data) od_sp_agg = od2line(od, zones, aggzones) # plot results plot(aggzones, lwd = 5)plot(zones, border = "red", add = TRUE)plot(od_sp, add = TRUE, col = "yellow")lwd = od_sp_agg$All / 50 plot(od_sp_agg, lwd = lwd, add = TRUE)


Bootstrap tutorial
Here's some text.
More Info
Button
Primary
Success
Warning
Link
Disabled Button
Link
1st
2nd
3rd


Micro Meetup
Create Meetup
What do you want to do tonight?
- select an activity -
party
grab dinner
grab drinks
watch a movie
What time?
6:00PM
6:30PM
7:00PM
7:30PM
8:00PM
8:30PM
9:00PM
9:30PM
10:00PM
10:30PM
11:00PM
11:30PM
Where would you like to meet?
Halls Chophouse
Restaurant
Downtown Charleston
Choose this location
Stars
Rooftop Bar
Downtown Charleston
Choose this location
Rarebit
Bar
Downtown Charleston
Choose this location
Question one title
Question one title
Question one title
Create Event


Chapter 6 Big data
6.1 How to deal with (very / too) large datasets?
- Use more RAM / processors / drive space…
- Use less data: (re)sample, …
- Use a database
- Use specific R packages (
ff
,bigmemory
) - Use other tools
6.2 How big is big?
- Fits in RAM and on drive (but slow)
- Doesn’t fit in RAM but fits on drive
- Doesn’t fit in RAM and doesn’t fit on drive
6.3 List of tools
Reading: Varian (2014) (PDF available)
Spark? h2o? More? Let’s go back to the bottlenecks
- CPU
- RAM
- I/O
6.4 Data that fits in memory
6.4.1 Faster I/O
Reading: https://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.html
data.table
provides an enhanced of a data.frame
and faster I/O with fread
and fwrite
.
To read the 0.5GB ratings file from MovieLens
library(data.table)
system.time(ratings <- fread("~/Dropbox/Data17/ml-20m/ratings.csv"))
takes
Read 20000263 rows and 4 (of 4) columns from 0.497 GB file in 00:00:05
user system elapsed
4.007 0.229 4.244
while
system.time(ratings <- read.csv("~/Dropbox/Data17/ml-20m/ratings.csv"))
takes
user system elapsed
85.199 2.711 90.997
There are ways to improve the speed of read.csv
(for example, but specifying column types). But in general fread
is much faster.
library(readr) # in tidyverse
system.time(ratings <- read_csv("~/Dropbox/Data17/ml-20m/ratings.csv"))
user system elapsed
10.290 3.037 18.450
also tends to perform better than read.csv
.
| package | function. | speed | output |
|---|---|---|---|
| base | read.csv | slow | data.frame |
| data.table | fread | very fast | data.table |
| readr | read_csv | fast | tibble |
6.4.2 Reference vs copy
Reading: http://adv-r.had.co.nz/memory.html Reading: https://jangorecki.gitlab.io/data.table/library/data.table/html/assign.html
library(pryr)
library(data.table)
d <- read.csv("~/Dropbox/Data17/ml-latest-small/ratings.csv")
D <- fread("~/Dropbox/Data17/ml-latest-small/ratings.csv")
object_size(d)
object_size(D)
mem_change(d$Idx <- 1:nrow(d))
mem_change(D[, Idx:= 1:.N])
object_size(d$Idx)
object_size(D$Idx)
d <- read.csv("~/Dropbox/Data17/ml-latest-small/ratings.csv")
D <- fread("~/Dropbox/Data17/ml-latest-small/ratings.csv")
.Internal(inspect(d))
d$Idx <- 1:nrow(d)
.Internal(inspect(d))
.Internal(inspect(D))
D[, Idx:= 1:.N]
.Internal(inspect(D))
6.4.3 data.table: another data manipulation grammar
Reading: https://cran.r-project.org/web/packages/data.table/vignettes/datatable-intro.html
6.5 Data that doesn’t fit in memory (but fits on drive)
Let’s try to work with a 12GB file and 4/8 GB of memory…
6.6 Pure R solutions
6.6.1 A regressions example
library(data.table)
airlines <- fread("/Users/cchoirat/Dropbox/Data17/AirFlights/allyears2k.csv")
rfit <- lm(ArrDelay ~ Distance, data = airlines)
summary(rfit)
6.6.2 Sampling
- Read the data (even line by line)
- Select a sample of rows
- Run your model on the random sample
6.6.3 bigmemory
https://cran.r-project.org/web/packages/bigmemory/index.html
Reading: https://cran.r-project.org/web/packages/bigmemory/vignettes/Overview.pdf
bigmemory: Manage Massive Matrices with Shared Memory and Memory-Mapped Files
Create, store, access, and manipulate massive matrices. Matrices are allocated to shared memory and may use memory-mapped files. Packages ‘biganalytics’, ‘bigtabulate’, ‘synchronicity’, and ‘bigalgebra’ provide advanced functionality.
(+) pure R solution from a user perspective
(-) mostly for numeric data matrices, mostly to speed up computations on data of +/- RAM size
library(bigmemory)
library(biganalytics)
# library(bigtabulate)
# library(biglm)
flights <- read.big.matrix(
"/Users/cchoirat/Dropbox/Data17/AirFlights/allyears2k.csv",
header = TRUE,
backingfile = "allyears2k.bin",
backingpath = "/Users/cchoirat/Dropbox/Data17/AirFlights/",
descriptorfile = "allyears2k.desc",
shared = TRUE)
air_flights <- attach.big.matrix("/Users/cchoirat/Dropbox/Data17/AirFlights/allyears2k.desc")
dim(air_flights)
colnames(air_flights)
mean(air_flights[, "ArrDelay"], na.rm = TRUE)
fit <- biglm.big.matrix(ArrDelay ~ Distance, data = air_flights)
fit
summary(fit)
6.6.4 Database connections and lazy evaluation
library(data.table)
D <- fread("~/Dropbox/Data17/ml-20m/ratings.csv")
library(sqldf)
read.csv.sql(file = "~/Dropbox/Data17/ml-20m/ratings.csv",
sql = c("ATTACH 'ratings.sqlite3' AS NEW"))
read.csv.sql(file = "~/Dropbox/Data17/ml-20m/ratings.csv",
sql = "CREATE TABLE ratings_table AS SELECT * FROM file",
dbname = "ratings.sqlite3")
library(dplyr)
library(DBI)
con <- DBI::dbConnect(RSQLite::SQLite(), dbname = "ratings.sqlite3")
ratings_db <- tbl(con, "ratings_table")
ratings_db %>%
select(ends_with("Id")) %>%
filter(movieId < 100)
# Source: lazy query [?? x 2]
# Database: sqlite 3.19.3
# [/Users/cchoirat/Documents/LocalGit/bigdata17/ratings.sqlite3]
userId movieId
<int> <int>
1 1 2
2 1 29
3 1 32
4 1 47
5 1 50
6 2 3
7 2 62
8 2 70
9 3 1
10 3 24
# ... with more rows
# ... with more rows
ratings_db %>%
select(ends_with("Id")) %>%
filter(movieId < 100) %>%
collect()
# A tibble: 790,226 x 2
userId movieId
<int> <int>
1 1 2
2 1 29
3 1 32
4 1 47
5 1 50
6 2 3
7 2 62
8 2 70
9 3 1
10 3 24
# ... with 790,216 more rows
6.7 Scaling up
6.8 Parallel computing and clusters
6.9 Cloud computing
More soon with the Odyssey guest lecture (https://www.rc.fas.harvard.edu/odyssey/).
6.10 h2o
: “Fast Scalable Machine Learning”
http://www.r-bloggers.com/scalable-machine-learning-for-big-data-using-r-and-h2o/
http://venturebeat.com/2014/11/07/h2o-funding/ https://www.h2o.ai/driverless-ai/ https://www.infoworld.com/article/3236048/machine-learning/review-h2oai-automates-machine-learning.html
6.10.1 Ecosystem
Readings:
To build H2O or run H2O tests, the 64-bit JDK is required.
To run the H2O binary using either the command line, R, or Python packages, only 64-bit JRE is required.
if ("package:h2o" %in% search()) { detach("package:h2o", unload=TRUE) }
if ("h2o" %in% rownames(installed.packages())) { remove.packages("h2o") }
install.packages("h2o")
6.11 Running h20 locally within R
library(h2o)
localH2O <- h2o.init(min_mem_size = "32g")
# h2o.init(ip = "localhost", port = 54321, startH2O = TRUE,
# forceDL = FALSE, enable_assertions = TRUE, license = NULL,
# nthreads = -2, max_mem_size = NULL, min_mem_size = NULL,
# ice_root = tempdir(), strict_version_check = TRUE,
# proxy = NA_character_, https = FALSE, insecure = FALSE,
# username = NA_character_, password = NA_character_)
Connection successful!
 There are three notions of the JVM: specification, implementation, and instance. The specification is a document that formally describes what is required of a JVM implementation.
6.13 Which languages? (from Wikipedia)
This list of JVM Languages comprises notable computer programming languages that are used to produce software that runs on the Java Virtual Machine (JVM). Some of these languages are interpreted by a Java program, and some are compiled to Java bytecode and JIT-compiled during execution as regular Java programs to improve performance.
6.14 Which languages?
https://en.wikipedia.org/wiki/List_of_JVM_languages
- Java
- Scala, an object-oriented and functional programming language
- Jython
- R (an implementation of R: https://en.wikipedia.org/wiki/Renjin)
- …
6.15 State of the h2o JVM
h2o.clusterInfo()
R is connected to the H2O cluster:
H2O cluster uptime: 19 days 13 hours
H2O cluster version: <IP_ADDRESS>
H2O cluster version age: 1 month and 24 days
H2O cluster name: H2O_started_from_R_cchoirat_bgt310
H2O cluster total nodes: 1
H2O cluster total memory: 30.67 GB
H2O cluster total cores: 8
H2O cluster allowed cores: 8
H2O cluster healthy: TRUE
H2O Connection ip: localhost
H2O Connection port: 54321
H2O Connection proxy: NA
H2O Internal Security: FALSE
H2O API Extensions: XGBoost, Algos, AutoML, Core V3, Core V4
R Version: R version 3.4.2 (2017-09-28)
Let’s check http://localhost:54321/flow/index.html.
6.15.1 Importing data into h2o from the R session
data(cars)
cars_to_h2o <- as.h2o(cars, destination_frame = "cars_from_r")
is.data.frame(cars_to_h2o) # FALSE
class(cars_to_h2o) # H2OFrame
(No persistence beyond the R session when h2O is started from R.)
6.15.2 h2o functions
summary(cars_to_h2o) # actually calls h2o:::summary.H2OFrame(cars_to_h2o)
Approximated quantiles computed! If you are interested in exact quantiles, please pass the `exact_quantiles=TRUE` parameter. speed dist
Min. : 4.0 Min. : 2.00
1st Qu.:12.0 1st Qu.: 26.00
Median :15.0 Median : 36.00
Mean :15.4 Mean : 42.98
3rd Qu.:19.0 3rd Qu.: 56.00
Max. :25.0 Max. :120.00
6.15.3 Let’s check from the h2o JVM
From the browser: ‘Data’ -> ‘List All Frames’
6.15.4 Importing data into h2o from disk
airlines_path <- "/Users/cchoirat/Dropbox/Data17/AirFlights/allyears2k.csv" # full path
airlines_to_h2o <- h2o.importFile(path = airlines_path,
destination_frame = "airlines_from_r")
summary(airlines_to_h2o)
6.15.5 Running a statistical model
h2ofit <- h2o.glm(y = "ArrDelay", x = "Distance",
training_frame = airlines_to_h2o,
intercept = TRUE, # default is TRUE
family = "gaussian")
h2ofit
summary(h2ofit)
Coefficients: glm coefficients
names coefficients standardized_coefficients
1 Intercept 7.702657 9.308665
2 Distance 0.002199 1.272253
airlines <- read.csv("~/Dropbox/Data17/AirFlights/allyears2k.csv")
rfit <- lm(ArrDelay ~ Distance, data = airlines)
summary(rfit)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7.7011553 0.2326198 33.106 <2e-16 ***
Distance 0.0022045 0.0002487 8.865 <2e-16 ***
6.15.6 h2o
models
6.15.7 Closing the h2o session
h2o.shutdown()
6.15.8 Available algorithms
- Deep learning
- Distributed randon forest
- Gradient boosting method
- Generalized linear modeling
- Generalized low rank modeling
- K-means
- Naive Bayes
- Principal component analysis
6.15.9 How to incorporate new models in h2o?
(+) built-in models behave very much like R and are scalable
(-) not easy to extend (e.g., GLM https://github.com/h2oai/h2o-3/blob/master/h2o-algos/src/main/java/hex/glm/GLM.java)
allyears.csv
.
6.16 Spark
Reading: https://spark.rstudio.com/
library(sparklyr)
spark_install(version = "2.1.0")
conf <- spark_config()
conf$`sparklyr.shell.driver-memory` <- "32G"
conf$spark.memory.fraction <- 0.5
sc <- spark_connect(master = "local")
library(dplyr)
iris_tbl <- copy_to(sc, iris)
flights_tbl <- copy_to(sc, nycflights13::flights, "flights")
batting_tbl <- copy_to(sc, Lahman::Batting, "batting")
src_tbls(sc)
[1] "batting" "flights" "iris"
You can use SQL:
library(DBI)
iris_preview <- dbGetQuery(sc, "SELECT * FROM iris LIMIT 10")
Like h2o, you can open a web interface:
spark_web(sc)
top_rows <- read.csv("~/Dropbox/Data17/AirFlights/allyears.csv", nrows = 5)
file_columns <- top_rows %>%
purrr::map(function(x)"character")
rm(top_rows)
sp_flights <- spark_read_csv(sc,
name = "flights2",
path = "~/Dropbox/Data17/AirFlights/allyears.csv",
memory = FALSE,
columns = file_columns,
infer_schema = FALSE)
# Source: table<flights2> [?? x 31]
# Database: spark_connection
Year Month DayofMonth DayOfWeek DepTime CRSDepTime ArrTime CRSArrTime UniqueCarrier
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 1987 10 14 3 741 730 912 849 PS
2 1987 10 15 4 729 730 903 849 PS
3 1987 10 17 6 741 730 918 849 PS
4 1987 10 18 7 729 730 847 849 PS
5 1987 10 19 1 749 730 922 849 PS
6 1987 10 21 3 728 730 848 849 PS
7 1987 10 22 4 728 730 852 849 PS
8 1987 10 23 5 731 730 902 849 PS
9 1987 10 24 6 744 730 908 849 PS
10 1987 10 25 7 729 730 851 849 PS
# ... with more rows, and 22 more variables: FlightNum <chr>, TailNum <chr>,
# ActualElapsedTime <chr>, CRSElapsedTime <chr>, AirTime <chr>, ArrDelay <chr>,
# DepDelay <chr>, Origin <chr>, Dest <chr>, Distance <chr>, TaxiIn <chr>,
# TaxiOut <chr>, Cancelled <chr>, CancellationCode <chr>, Diverted <chr>,
# CarrierDelay <chr>, WeatherDelay <chr>, NASDelay <chr>, SecurityDelay <chr>,
# LateAircraftDelay <chr>, IsArrDelayed <chr>, IsDepDelayed <chr>
flights_table <- sp_flights %>%
mutate(DepDelay = as.numeric(DepDelay),
ArrDelay = as.numeric(ArrDelay),
Distance = as.numeric(Distance),
SchedDeparture = as.numeric(CRSDepTime)) %>%
select(Origin, Dest, SchedDeparture, ArrDelay, DepDelay, Month, DayofMonth, Distance)
flights_table %>% head
Cache data:
sp_flights %>%
tally # takes a looooong time
123534969…
# might take a while...
subset_table <- flights_table %>%
compute("flights_subset")
subset_table %>%
tally # a bit faster.
123534969 as well!
6.16.1 Run a statistical model
# small_flights <- spark_read_csv(sc,
# name = "flights2",
# path = "~/Dropbox/Data17/AirFlights/allyears2k.csv",
# memory = FALSE,
# columns = file_columns,
# infer_schema = FALSE)
# small_flights_table <- small_flights %>%
# mutate(DepDelay = as.numeric(DepDelay),
# ArrDelay = as.numeric(ArrDelay),
# Distance = as.numeric(Distance),
# SchedDeparture = as.numeric(CRSDepTime)) %>%
# select(Origin, Dest, SchedDeparture, ArrDelay, DepDelay, Month, DayofMonth, Distance)
#
# small_flights_table %>% head
# lm(arr_delay ~ distance, data = flights_tbl)
ml_linear_regression(flights_table, response = "ArrDelay", features = "Distance")
Coefficients:
(Intercept) Distance
6.9707048955 0.0001100521
6.16.2 Deployment
6.17 Sparkling Water
Reading: https://spark.rstudio.com/h2o.html
6.18 Adding new models to h2o
and spark
6.19 More?
Reading: http://www.parallelr.com/r-gpu-programming-for-all-with-gpur/
6.20 Amazon Web Services (AWS)
AWS Management Console: https://aws.amazon.com/console/
- Amazon EC2
Amazon Elastic Compute Cloud (Amazon EC2) is a web service that provides secure, resizable compute capacity in the cloud. It is designed to make web-scale cloud computing easier for developers.
Let’s launch an Amazon Linux
instance (t2.micro
free tier eligible) and configure a key pair.
File permissions: https://www.tutorialspoint.com/unix/unix-file-permission.htm
Key pairs: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html
To connect:
chmod 400 ~/Downloads/bst262-demo.pem
ssh -i ~/Downloads/bst262-demo.pem<EMAIL_ADDRESS>__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|
We install R
sudo yum update
sudo yum list R-\*
sudo yum install R
and Rstudio server
(# https://www.rstudio.com/products/rstudio/download-server/)
wget https://download2.rstudio.org/rstudio-server-rhel-1.1.383-x86_64.rpm
sudo yum install --nogpgcheck rstudio-server-rhel-1.1.383-x86_64.rpm
We need to add user and password:
sudo useradd rserver
sudo passwd rserver
RStudio server uses port 8787. Let’s fix the security groups:
We can now connect to RStudio server:
http://ec2-18-217-97-206.us-east-2.compute.amazonaws.com:8787/
6.21 Spark on AWS: Amazon Elastic MapReduce (EMR)
https://aws.amazon.com/blogs/big-data/running-sparklyr-rstudios-r-interface-to-spark-on-amazon-emr/
6.21.1 Amazon S3
GUI or CLI
6.21.2 Amazon CLI
References
Varian, H.R. 2014. “Big Data: New Tricks for Econometrics.” Journal of Economic Perspectives 28 (2): 3–28. doi:10.1257/jep.28.2.3.


User manual optimise:ms
An excellent resource to guide your first steps
using the Optimise MS application for data collection
An excellent resource to guide your first steps
using the Optimise MS application for data collection
Optimise MS is a system for recording data including demographics, clinical events, treatments and tests in a fashion interoperable with Clinical Data Interchange Standards Consortium (CDISC) standards for Multiple Sclerosis. Optimise MS allows researchers to better monitor MS patients’ progress, record outcomes and evaluate treatments.
Users can enter demographic, medical history, clinical event, visit, test and treatment data.
Optimise MS can be used in various settings and you can choose to install it in offline mode as a desktop application, useful when a network connection is not available enabled or in online mode, installed on your IT department servers usable by a whole team simultaneously.
This guide assumes that the Optimise MS system has been successfully configured as described at Getting started. An administrator needs to be defined who can control permissions for data access and securely provide users with login details. The PC and login passwords should be kept securely.
A patient identifier is required when creating a new patient in Optimise MS. The term Patient ID, used in this guide, refers to this identifier which may correspond to the patient's NHS ID, CHI ID or otherwise qualified hospital identifier. Optimise MS stores an independently generated pseudo-anonymised ID along with the patient ID entered by the user at patient creation time - this generated identifier is referred to as Optimise ID.
The Optimise ID is included in the exported data (more about the export in the section Exporting patient data). Note that you can retrieve the original patient ID using the Search tool by searching the corresponding Optimise ID; you must be an administrator on the system to carry out this de-anonymisation operation.
To start using Optimise MS, first open your favourite modern Browser. Then, enter the hosting address in the address bar (You may need the assistance of your IT administrator).
To begin, simply launch the Optimise MS program installed on your computer. It might be found on the desktop (You may need the assistance of your IT administrator) and features the following icon:
Once done, you should see the the following screen.
Enter the user name and password (in the boxes as shown below) that were given to you and click the Login button. The default username is admin and the default password is admin.
If the log-in is unsuccessful, you will get a message as shown below. Re-enter user credentials and click Login.
If the log-in is successful, you should see the following screen.
You can search the database using the user-friendly search tool available after successful log-in.
To search by patient ID, select Patient ID from the drop-down list labelled as 'Search by:'.
Click on the box labelled 'Containing'- this is below the 'Search by' list- and enter the patient ID you want to search for.
As you type in search value box ('Containing' box), the patients with ID that contain the text you entered will be shown in the area below the search box. Basic patient information for each listed ID is also shown. If no patients are listed, then there are no patients with that ID already in the database. You can begin to enter data for a new patient, by entering the ID- please see the section Creating a new patient.
Data files generated by Optimise MS using the Export option do not include the patient ID. Should you wish to retrieve the Patient ID, you can do so using the Search tool. You will need to obtain the Optimise ID (labelled 'USUBJID' in the CDISC standard) and search by 'Optimise ID' in the drop-down list.
Search by fields other than Patient ID and Optimise ID (generated Optimise ID) is also available. The example below refers to a search by country of origin with search value 'Canada'. The search results include two patients; patients with IDs Optimise1 and Optimise2.
Choose from the list of patient IDs below the search box by clicking on the patient box. To view and/or enter data for patient with ID Optimise1, for example, click on the respective box (highlighted).
The timeline and a summary of the patient's Medical History will be available in the left panel. An overview that includes the patient profile, the primary MS diagnosis and other sections is available in the right panel (see next screenshot). You may add, edit, or delete data for these sections as described in Entering patient data.
To exit the patient's (here, Optimise1) records and return to the Patient Search page where you can search and create patients, click on which is located near the top center of the page as shown below.
There are two ways to create a new patient in Optimise MS; by clicking directly on the button 'Add a new patient' at the top of the page or by using the search tool.
To create a new patient using the first way, click on Add a new patient. Enter the patient ID in the Patient ID input box in the new patient profile form in the right panel. The form includes the patient consent status. You need to set the consent status for patient data sharing to Yes or No at this stage.
Complete the form (the option Unknown may be selected where appropriate), scroll down to the end of the form and click Submit to create the patient. To cancel the patient creation, click on at the top right corner of the screen.
A warning message will be shown if any of the fields are empty or unselected when you click Submit. All the fields in this form are required in order to add the patient to the system. If you see the following message, please ensure the new patient profile form is completed before clicking Submit. Please note that some field propose explicitly the value 'Unknown', it is an acceptable value as long as it is selected from the list.
If the patient creation is successful, you should see the following page. Please note that a few fields are conditional on the patient profile (Pregnancy, for example, is conditional on sex) and may be unavailable to some patients.
At any point you can return to the patient search page by clicking on in the left panel (see below).
You may also return to the patient search page by clicking on near the top center of the screen highlighted below.
To create a new patient using the search tool, select Patient ID as the search field list and enter the patient ID in the search value box. If there are no patients with the entered ID (here, 'opt'), you may create a new patient by clicking the button
Once you click the Create button, you should fill the new patient profile form in the right panel as described above. The patient ID is shown at the top of the new patient profile form- this is automatically filled.
Optimise MS is intended to be used after consent is given by patients to hold their data outside of a hospital or clinic IT system. The clinical user of Optimise MS must indicate that appropriate consent has been given.
You may update the patient consent status at any time. Go to the main patient profile page and use the highlighted control in the right panel to update the status of patient consent.
If the current consent status is set to Yes, the text on the consent button will read as follows:
For patient profiles currently not consenting, the consent button will look like
The current patient consent status is always visible on screen. Clicking the consent button in the right panel updates this label accordingly.
Administrator users may need to remove a patient from the database (i.e. Right to be forgotten). To delete a patient click on 'Delete this patient' in the right panel. Please note this is only available to administrator users.
Click on YES, I AM SURE! to confirm the deletion or click at top right corner of the pop-up message box to cancel.
The Profile section in the Overview panel contains the profile data entered during patient creation. To edit the Profile section, click the button next to Profile. Click on to view the Patient Identifiable Information.
Edit the Patient Demographics form as necessary and click Submit to save the changes or to return to the Overview panel.
The Primary MS Diagnosis section in the Overview panel contains the most recent diagnosis data. To edit this or add more diagnoses, click next to Primary MS Diagnosis.
A list of all prior MS diagnoses is shown in the right panel. Click on to delete the diagnosis entry. Click on to edit that entry.
The form in the right panel below becomes available if you click . Complete the form as necessary and click Confirm change to save or Cancel or to return to the Overview panel.
To add more primary MS diagnoses, click on
Enter the diagnosis date and select the diagnosis term. Click Submit to add the entry or Cancel to return to the diagnosis panel. Click to return to the Patient Overview.
To add or edit Pregnancy data, click on . The most recent Pregnancy record (by pregnancy date) is listed in the Overview Panel.
Click on
in the right panel to record a pregnancy or click on or to edit or delete existing entries, respectively.
Fill in the form. Untick to enter outcome date, outcome term and MedDRA code. Click Submit to record the pregnancy or Cancel to return to the list of Pregnancies. Click to return to the Patient Overview.
To enter Immunisation data, click on
Enter data in the highlighted form shown below. Click Submit to add the new immunisation or Cancel.
The immunisation records are added to the Overview panel as shown below. To remove an Immunisation entry, click next to that particular entry.
The filtering tool in the Medical History Summary allows you to select which medical elements are included in this section. This is especially useful for patients with considerable amount of recorded data. To include Treatments and Tests only, click on the respective buttons.
Each clinical consultation is represented as a Visit in Optimise MS. A “Baseline Visit” would usually refer to the first visit at the clinical site or consultant responsible for the database.
Click on to create a new visit for the patient.
Complete the new visit form in the right panel. Select the reason of the visit from the list of available options- this includes Routine, Drug Monitoring, Relapse Assessment and Urgent. Click Submit to create a visit.
A warning message is shown if the form is incomplete when Submit is clicked.
If the visit is successfully created, it will be added to the Medical History Summary and to the Timeline. Baseline visits are labelled as such.
The reason for the visit entered when the visit is created is used to label the visit entry in the Medical History Summary. A relapse assessment visit is shown below.
Enter Physical Measures and Vital Signs data, if available, by clicking on the highlighed button in the Medical History Summary. Fill in the right panel form. Click Save and then click on at the top right corner to return to the Patient Overview. To cancel the data entry and return to the Overview without saving, click on .
The data will be added to the Medical History Summary in the appropriate section (Physical Measures and Vital Signs, here).
Symptoms and Signs are recorded only at a high level in the Optimise MS database in an attempt to maximise the efficiency of their recording in the clinic and thus encourage their completeness. Symptoms reported by the patient and Signs observed by the neurologist are recorded separately.
Click on 'Edit symptoms data for this visit' or 'Edit signs data for this visit' buttons to enter Symptoms or Signs, respectively, elicited at the visit. For baseline visits, these will be labelled as 'First symptoms/signs indicating MS'. For non-baseline clinical visits, they will be labelled simply as Symptoms/Signs.
Enter any present symptoms by clicking on the buttons or selecting a value from the drop-down lists in the right panel form. For example, the neurologist might have observed fatigue for the patient. Scroll down to the end of the form and click Save. To exit the form and return to the Patient Overview, click at the top right corner. The form can be edited at a later time.
The recorded symptoms are added to the Medical History Summary.
Similarly, enter any signs by filling and saving the Signs form in the right panel. As an example, the patient might have shown evidence for cognitive dysfunction with impairment of memory and had reduced sensitivity to the colour red with the left eye.
Any recorded signs are added to the relevant section in the Medical History Summary after Save is clicked.
You will have the options of entering any comorbid affect by clicking on 'Edit comorbidities'. The comorbitity records management panel will appear in the right panel. Optimise MS uses ICD11 for the classification.
When looking to reference an comorbitity a drop-down list of International Classification of
Diseases codings defined by the World Health Organization (ICD11, see
https://icd.who.int) is available.
By clicking on the field, a browsing tree will appear. It will display the
`code` and `name` of the diseases.
Click on the arrows
next to each grouping term in
the list to follow the expanding tree of terms and identify the
specific disease coding of interest. Click on the term to select it. Any term at any
level
may be added as ICD11.
Click on 'Edit performance measures data for this visit' to enter Performance Measures data.
The EDSS can be entered in two ways; the neurologist’s estimated EDSS or the calculated EDSS. The neurologist’s estimated EDSS score can be entered in the highlighted box in the right panel form.
Only valid EDSS total scores (0 to 10 by 0.5 increment excluding 0.5) may be accepted in this field. Entering an invalid total EDSS, for example 100, will generate an error. Please use the dot notation for the decimal point, i.e. 4.5 is accepted while 4,5 is not.
Click Save for this estimated EDSS to be recorded. In addition, or alternatively, the functional systems can be scored separately and the total EDSS can be calculated by clicking on Open EDSS Calculator. The estimated total EDSS entered as described above is carried over to this calculator only if the score is saved (by clicking the Save button).
Select a score for each EDSS subcategory. Hover over a score button to see the respective score description highlighted on the right. The calculated total score will be shown in the score box labelled Computed total score (automatically generated). Note that an Ambulation score is required for the functional scores to be saved. The saved estimated total is carried over to the score box labelled Estimated total score (by the clinician). You may update the estimated total here as well.
Click Save to record the scores and then to exit the calculator. To exit Performance Measures and return to the Patient Overview, click on at the top right corner of the EDSS form.
The EDSS Total and EDSS Subscores will be listed under Performance Measures in the Medical History Summary. The text of the total scores (estimated and computed) is bold and pink.
Optimise MS supports the generation of a free-text visit report, called a Communication. This can be exported as a .txt file. You may also copy and paste the entered text directly in a document such as a clinic letter generated by other software.
Click on 'Edit or export the visit report' to edit or export a Communication for the visit.
Specific field data entered for the patient from a visit can be added automatically to the Communication by selecting the appropriate buttons above the text area.
Click on the buttons to add the respective recorded data to the report. You may format the text using the available formatting tools. The report can be updated at a later time to include data entered after its creation.
For Clinical Events, Tests and Treatments, the time period to cover can be specified using the drop-down list. The default behaviour is to include observations/records of the last month. Select a different option from the list and click Add to update the report accordingly. Click the Save or Export button or to return to the Patient Overview.
Treatment and clinical event information covering the entire patient medical history were added to the Communication below using the appropriate buttons and selecting the entire patient history in the time period drop-down list.
Click on next to the visit entry to update the visit properties.
To edit the visit date or the reason for the visit, click on
and to remove a visit click on
Click on to create a record for a new test for the patient.
Select the date of the test, the type of test (Lumbar Puncture is selected below) and click Submit to create the new test. Click to cancel and return to the Patient Overview.
If the test is successfully created, it will be added to the Medical History Summary in the main panel as shown below. The test is also shown on the Timeline (green symbol) above the Medical History Summary.
Click on Results to enter further data for the test.
Complete the form in the right panel and click Save to record the test results.
Entering non-numeric input where this is invalid generates the following error message. Correct and click Save.
At any point you can click to cancel the test data entry and return to the Patient Overview.
Laboratory tests refer to blood or CSF tests only, e.g. total WBC, bilirubin and specific anti-body titres. After entering test results for a given reporting date, scroll down to the end of the page and click Save. Click to return to the Patient Overview.
Entering non-numeric characters in the laboratory tests will generate the following error message as numeric input is expected.
Currently, only data concerning the presence or absence of T1 Hypointense Lesions, number of T2 Hyperintense Lesions and gadolinium (Gd) contrast enhancing lesions and brain atrophy scan result can be entered into the Optimise MS database. Some of the available fields for an MRI test type are shown below.
The data input in the MRI form is also validated. Entering non-numeric characters in Number of enlarging lesions, for example, will generate the following error message.
The Evoked Potential test section allows recording of the P100 Visual Evoked Potential amplitude and latency. Sensory Evoked Potentials (SEP) with stimulation in the limbs are recorded if Abnormal. Data validation is applied here as well- only numeric input is accepted in some fields.
Click on to enter treatment data.
Fill in the treatment form in the right panel. Click Submit to record the treatment or to cancel and return to the Patient Overview. A warning message will be shown if required fields are not filled.
Unticking the box allows you to record a treatment discontinuation by entering the treatment end date.
Any new treatment recorded is added to the Medical History Summary and the Timeline (yellow symbol) as shown below.
To record any interruptions to a treatment, click on Interruptions and then Add interruptions in the right panel.
Enter the interruption start date, uncheck 'The interruption is ongoing' to enter the interruption end date, if known, and record the Reason for the Interruption from the drop-down menu.
If the interruption is related to an adverse event, the next section for Adverse Events
should be
clicked open. A drop-down list of adverse events defined by the Medical Dictional for
Regulatory
Activities (MedDRA, see
https://www.meddra.org) is available.
Note, however,
that MedDRA codings are subject to license. If you have a license ans which to use it,
please go to the Manage MedDRA codings
section of this manual which will guide you through the upload process.
By clicking on the field, a browsing tree will appear. It will display the
`code` and `name` of the adverse events.
Click on the arrows
next to each grouping term in
the list to follow the expanding tree of terms and identify the
specific adverse event of interest. Click on the term to select it. Any term at any
level
may be added as MedDRA.
Complete the form and click on Submit to add the interruption details. Click the Cancel button or on to exit the interruptions section and return to the Patient Overview.
Clinical Events allow entry of data concerning relapses and other clinically relevant changes or adverse events including infections, opportunistic infections, death and other SAE likely related to treatment or malignancies.
Click on to record a new clinical event.
Fill in the form in the right panel and click Submit to add the event or to exit without saving and return to the Patient Overview.
The event will be added to the Medical History Summary and to the Timeline (red symbol). You may add Symptoms and/or Signs associated with the Clinical Event using the relevant buttons in the clinical event entry in Medical History Summary, a process similar to the one for Visits described above.
To further describe the clinical event click on Data.
Select the functional systems affected by clicking on the buttons, fill in the rest of the form as necessary, click Save and then to exit. Click before clicking Save to cancel the data entry.
The data fields for Infections and Opportunistic Infections are shown below- see right panel forms.
Test, medication and clinical event data can be edited at any time by clicking the highlighted buttons in the Medical History Summary and following the steps described above. Additionally, for Clinical Events, Symptoms and Signs can be edited.
To edit data about concerning tests, treatments and clinical events such as dates or type or to delete these entries, click on as shown below. Click on one of the buttons in the right panel to edit or delete the entry. The informative labels in the right panel will indicate which actions and modifications are allowed.
You may click on the coloured shapes or EDSS on the Timeline to access (view/edit) the corresponding entry in Medical History Summary. The computed total EDSS is plotted at the bottom part of the timeline. If the computed total EDSS is not available (i.e. the calculator was not used or the user chose not to save the calculated score), then the estimated EDSS is plotted.
Click on next to Timeline to maximise the timeline. The horizontal end point (right) of the timeline is the current date. The timeline covers the last month by default. Therefore, any data recorded during this period is shown. You may change this behaviour by reading the guide below the graph.
Follow the instructions below the timeline to interact with it. Zooming in and zooming out as well as navigation to a specific time period are available. The timeline shows Treatments, Visits, Tests, Clinical Events (Relapses and Adverse Events) and EDSS using different colouring.
Zooming out allows the depiction of a larger part of the patient's Medical History. For example, the patient's medical history for the year 2017 is shown below.
Further zooming-out gives a graphical overview of the complete medical history.
The treatment bands (yellow colour) are overlaid with the treatment names and types.
Treatment interruptions are clearly marked with vertical lines that cover the interruption period (from the interruption start date to the interruption end date).
Relapses can be characterised as mild, moderate or severe. The size of the circle depicts this information with larger circles representing more severe relapses. Where this information is not available, relapses are shown as .
A severe relapse that started on the 7th of August 2011 and ended on the same date is shown below. The circle size represents the severity level and the dashed line indicates the duration of the event.
An opportunistic infection (Adverse Event) that lasted one month is shown below.
A line chart is used for the the recorded EDSS with the scores being represented as black labelled points (dots) on the graph.
An EDSS of 2.5 recorded in 2010, an EDSS of 4 recorded in 2013 and an EDSS of 4 recorded in 2015 are shown below. The scores are connected.
Click at the top right corner to exit the Timeline window and return to the Patient Overview.
Optimise MS currently supports the export of patient data in JSON and CSV files. This is available in the right panel on the Patient Search page.
In order to export the database as JSON and CSV files, click on the export button (highlighted) and choose where to save the ZIP folder which you can then extract. You may want to change the name of this folder- the default is attachment.zip. Please note that any Patient Identifiable Information is excluded from the generated JSON and CSV files by default.
The patient ID is not included in any of the export output files; the Optimise ID (an pseudo-anonymised generated ID) replaces the patient ID as described in the section Patient identifiers. The column USUBJID (Unique Subject Identifier) in the exported treatment data CSV file stores Optimise ID.
You can find the respective patient ID using the search tool as described in the section Searching patients.
The option to export part of the database becomes available if you start using the search tool.
Click on
in the right panel to export the data stored for the patients listed in the search results area below the search tool.
You may export data based on a search by fields such as ID and treatment. Here, for example, only the data for patients diagnosed with RRMS can be exported by clicking the appropriate Export button in the right panel.
Each installation of Optimise MS should have an identified administrator who manages Optimise MS. The administrator can create and delete user accounts, view the action log, where all user actions are recorded, and read messages about the software (e.g. the Optimise MS software version) by accessing the Admin Menu.
The administrator can click on the button located in the left panel as shown below to access the Admin Menu. Note that this is only available to users with administrator rights.
The administrator can manage the users (create and delete user accounts) by accessing the relevant option (Manage users) in Admin menu. In order to update or delete a user account, click on the respective entry in the list of registered user accounts in the middle panel.
To update the password for a particular user, select the user from the list (hover over and click on the user entry in the middle panel), fill in the User Information form as shown below and click Submit. Click Cancel to cancel the update.
To withdraw admin rights for admin users, click on the tool shown below.
To delete a user, select from the users list and click on Delete.
A warning message will appear. Click to cancel the deletion or YES, I AM SURE! to confirm the deletion.
You may create a new user account by clicking on the Create a new user button.
Fill in the highlighted form and click Submit.
The following error message is shown if the submitted form is incomplete. Please complete all fields and re-submit.
The action log shows a detailed description of all the actions performed by users.
Information about the software is also available in the Admin Menu.
The initial installation does not come with MedDra coding, due to license reason. The software comes with an opt-in upload of the MedDRA codes, after which users can select desired code in clinical events. NB upload can only be done by admin.
In the Admin Menu, select "Manage MedDRA codings"; you will then see the following panel.
Depending on your subscription to MedDRA and your preference of the granularity of the codings that will be in the application, select the appropriate option. Mdhier.asc contains all the terms higher than "Low-level terms" and llt.asc contains all the "Low-level terms" (in MedDRA terminology).
Select the appropriate files of the indicated name in the files provided by MedDRA and click submit. The application will start to process the file. When you see the following message, the upload is finished:
When you get a new version of MedDRA, you can update the codings in the application by doing the same steps. If some patients already have MedDRA coding data associated with them, it will be indicated that it is an old coding. If you decide to edit the MedDRA for a patient, you will only be able to select from the new codings:
Optimise MS Desktop application is provided with a built-in update mechanism. To check if an update is available and to perform the installation you must log in as an administrator and visit the "Updates" section.
There you will be able to consult the update status and will be prompted to install is applicable.
To log out click on the logout button.
This is located in the panel on the left of the page as shown below.


CURL
public class CURL
This class is a wrapper around the CURL library. It permits network operations to be completed using cURL in a block or non-blocking manner.
-
The CURLINFO_RESPONSE_CODE for the last operation.
Declaration
Swift
public var responseCode: Int
-
Get or set the current URL.
Declaration
Swift
public var url: String
-
Initialize the CURL request.
Declaration
Swift
public init()
-
Initialize the CURL request with a given URL.
Declaration
Swift
public convenience init(url: String)
-
Duplicate the given request into a new CURL object.
Declaration
Swift
public init(dupeCurl: CURL)
-
Clean up and reset the CURL object.
Declaration
Swift
public func reset()
-
Perform the CURL request in a non-blocking manner. The closure will be called with the resulting code, header and body data.
Declaration
Swift
public func perform(closure: (Int, [UInt8], [UInt8]) -> ())
-
Performs the request, blocking the current thread until it completes. - returns: A tuple consisting of: Int - the result code, [UInt8] - the header bytes if any, [UInt8] - the body bytes if any
Declaration
Swift
public func performFully() -> (Int, [UInt8], [UInt8])
Return Value
A tuple consisting of: Int - the result code, [UInt8] - the header bytes if any, [UInt8] - the body bytes if any
-
Performs a bit of work on the current request. - returns: A tuple consisting of: Bool - should perform() be called again, Int - the result code, [UInt8] - the header bytes if any, [UInt8] - the body bytes if any
Declaration
Swift
public func perform() -> (Bool, Int, [UInt8]?, [UInt8]?)
Return Value
A tuple consisting of: Bool - should perform() be called again, Int - the result code, [UInt8] - the header bytes if any, [UInt8] - the body bytes if any
-
Returns the String message for the given CURL result code.
Declaration
Swift
public func strError(code: CURLcode) -> String
-
Returns the Int value for the given CURLINFO.
Declaration
Swift
public func getInfo(info: CURLINFO) -> (Int, CURLcode)
-
Returns the String value for the given CURLINFO.
Declaration
Swift
public func getInfo(info: CURLINFO) -> (String, CURLcode)
-
Sets the Int64 option value.
Declaration
Swift
public func setOption(option: CURLoption, int: Int64) -> CURLcode
-
Sets the Int option value.
Declaration
Swift
public func setOption(option: CURLoption, int: Int) -> CURLcode
-
Sets the poionter option value.
Declaration
Swift
public func setOption(option: CURLoption, v: UnsafeMutablePointer<Void>) -> CURLcode
-
Sets the callback function option value.
Declaration
Swift
public func setOption(option: CURLoption, f: curl_func) -> CURLcode
-
Sets the String option value.
Declaration
Swift
public func setOption(option: CURLoption, s: String) -> CURLcode
-
Cleanup and close the CURL request.
Declaration
Swift
public func close()


"To the District Attorneys, and officials within the Department of Justice and TriMet, involved with the case of Ana del Rocio,
The recent judgement in the case of Ana del Rocio is correct. A policy of sweeping fare enforcement violate the constitutional rights of transit riders. It is a waste of resources to pursue charges against transit riders for a failure to show proof of fare. Rather than pursue charges against Ana, we the undersigned believe this moment is an opportunity to respond with renewed focus on truly protecting and serving the public. Pursuit of this charge, and others like it, is a waste of public resources. The correct response to this judgement is to accept it. We encourage TriMet to invest in further fare relief, rather than the further militarization or enclosure of public transit infrastructure, or criminalization of transit riders. The DAs and DOJ should let this ruling stand."
Signatures of elected officials.
Please add your name in solidarity!
"Ana’s name is Ana, and her name is well known. She is a community leader and has enjoyed a successful political career. A name that only a handful of people know is Rosa Valderrama. For good reason: this name, assigned to Ana at birth, is a painful reminder of a dark time in Ana’s early life. Her legal name has not yet been changed to match the name she uses throughout her life: Ana del Rocío. But this is not a crime." “What’s Your Name?” - April 2018
"Thirteen state lawmakers on Wednesday said no appeal should be filed opposing a judge's opinion that TriMet's indiscriminate fare enforcement stops violate the state's constitution." 13 Oregon lawmakers urge state not to appeal TriMet fare ruling - September 2018
“I come from a family and community where being asked where you’re from implies, ‘What’s your legal status?’" Are TriMet’s Fare Enforcement Tactics Constitutional? - August 2018
TriMet Fare Evasion Citations Become a Little More Fair - July 2018
"... instead of apologizing and dropping the matter, TriMet issued a troubling statement that omits important information and mis-names Ana throughout." “What’s Your Name?” Ana del Rocío's TriMet Nightmare - April 2018
"My name is Ana, my mother’s name is Ana, and her mother’s name is Ana." The Story of My Name - April 2018
"It's a very Latino thing to have a legal name that's different from the name you go by," del Rocío says. "Ana, the name that my parents had agreed to, was changed unilaterally by my father when I was born. I didn't know this until high school and I couldn't get it changed as a minor because we needed to have both parents' permission. My dad was [gone.] And as an adult, it's really expensive to change your name." Latinx Elected Official Grilled and Arrested After TriMet Alleged Fare Evasion - March 2018
"Dear @TriMet: Please tell the DA you want them to drop the charge against Ana del Rocio for providing a “false name” to police officers—the officers’ misunderstanding of her last name reveals their lack of understanding of Latinx culture." pdxlawgrrl@twitter - April 2018
"Rod Underhill, Drop all charges against social justice advocate Ana del Rocío now!" Petition to drop all charges


Dynamic
This module contains dynamic functions which are used in the Carp repl and during compilation. They are not available in compiled code. Read more about dynamic functions in the Language Guide.
<
Dynamic
checks whether its first argument is less than its second.
Example Usage:
(< 1 2) ; => true
>
Dynamic
checks whether its first argument is greater than its second.
Example Usage:
(> 1 2) ; => false
all-but-last
Dynamic
gets all elements except for the last one of a list or array.
Example Usage:
(all-but-last '(1 2 3)) ; => '(1 2)
all?
Dynamic
(all? f xs)
Checks whether all of the elements in xs
conform to the predicate
function f
.
(all? (fn [x] (< 1 x)) '(2 3 4))
=> true
(all? (fn [x] (< 1 x)) '(-1 0 1))
=> false
any?
Dynamic
(any? f xs)
Checks whether any of the elements in xs
conforms to the predicate
function f
.
(any? (fn [x] (= 'a x)) '(a b c))
=> true
(any? (fn [x] (= 'a x)) '(e f g))
=> false
append
Dynamic
appends two lists or arrays.
Example Usage:
(append '(1 2) '(3 4)) ; => '(1 2 3 4)
apply
Dynamic
(apply f argument-list)
Applies the function f
to the provided argument list, passing each value
in the list as an argument to the function.
array
Dynamic
creates an array from a collection of elements.
Example Usage:
(array 1 2 3) ; => [1 2 3]
array?
Dynamic
checks whether the arguments is an array.
Example Usage:
(array? []) ; => true
c
Dynamic
prints the C code emitted for a binding.
Example Usage:
(c '(+ 2 3)) ; => int _3 = Int__PLUS_(2, 3);
collect-into
Dynamic
(collect-into xs f)
Transforms a dynamic data literal into another, preserving order
column
Dynamic
returns the column a symbol was defined on.
Example Usage:
(column mysymbol)
compose
Dynamic
(compose f g)
Returns the composition of two functions f
and g
for functions of any
arity; concretely, returns a function accepting the correct number of
arguments for g
, applies g
to those arguments, then applies f
to the
result.
If you only need to compose functions that take a single argument (unary arity)
see comp
.
Example Usage:
(defdynamic name value)
definterface
Dynamic
defines a new interface (which could be a function or symbol).
Example Usage:
(definterface mysymbol MyType)
defmacro
Dynamic
defines a new macro.
Example Usage:
(defmacro name [args :rest restargs] body)
defmodule
Dynamic
defines a new module in which expressions
are defined.
Example Usage:
(defmodule MyModule <expressions>)
defndynamic
Dynamic
defines a new dynamic function, i.e. a function available at compile time.
Example Usage:
(defndynamic name [args] body)
deftemplate
Dynamic
defines a new C template.
Example Usage:
(deftemplate symbol Type declString defString)
deftuple
Macro
(deftuple name :rest props)
defines a tuple type.
For example:
; is the definition of Pair in the stdlib
(deftuple Pair a b)
empty
Dynamic
(empty xs)
Returns the empty form of xs
.
(empty '(1 2 3 4))
=> ()
(empty '[1 2 3 4])
=> []
empty?
Dynamic
(empty? xs)
Returns true if the provided data literal is empty, false otherwise.
expand
Dynamic
expands a macro and prints the result.
Example Usage:
(expand '(when true 1)) ; => (if true 1 ())
filter
Dynamic
(filter p xs)
Returns a list containing only the elements of xs
that satisify
predicate p
.
(filter (fn [x] (= 'a x)) '(a b a b a b a b))
=> (a a a a)
flatten
Dynamic
(flatten l)
Flattens a list recursively.
(flatten '(1 2 (3 (4))))
=> '(1 2 3 4)
flip
Dynamic
(flip f)
Flips the arguments of a function f
.
((flip Symbol.prefix) 'Bar 'Foo)
=> (Foo.Bar)
host-arch
Dynamic
prints the host architecture (as returned by the Haskell function System.Info.arch
).
Example Usage:
(host-arch)
host-bit-width
Dynamic
gets the bit width of the host platform.
Example Usage:
(host-bit-width) ; => your host machine’s bit width, e.g. 32 or 64
host-os
Dynamic
prints the host operating system (as returned by the Haskell function System.Info.os
).
Example Usage:
(host-os)
implements
Dynamic
designates a function as an implementation of an interface.
Example Usage:
(implements zero Maybe.zero)
info
Dynamic
prints all information associated with a symbol.
Example Usage:
(info mysymbol)
last
Dynamic
gets the last element of a list or array.
Example Usage:
(last '(1 2 3)) ; => 3
length
Dynamic
returns the length of the argument (must be an array, string or list).
Example Usage:
(length '(1 2 3)) ; => 3
list
Dynamic
creates an array from a collection of elements.
Example Usage:
(list 1 2 3) ; => (1 2 3)
load-once
Dynamic
loads a file and prevents it from being reloaded (see reload
).
Example Usage:
(load-once "myfile.carp")
macro-error
Dynamic
logs an error and errors out of a macro.
Example Usage:
(macro-error "this is wrong")
macro-log
Dynamic
logs a message in a macro.
Example Usage:
(macro-log "this will be printed at compile time")
map
Dynamic
(map f xs)
Applies a function f
to each element in the list or array xs
and
returns a list dynamic data literal containing the result of the function
applications.
'(map symbol? '(a b c))
=> (true true true)
'(map (curry + 1) '(1 2 3))
=> (2 3 4)
members
Dynamic
returns the members of a type as an array.
Example Usage:
(members MyType)
meta
Dynamic
gets the value under "mykey"
in the meta map associated with a symbol. It returns ()
if the key isn’t found.
Example Usage:
(meta mysymbol "mykey")
meta-set!
Dynamic
sets a new key and value pair on the meta map associated with a symbol.
Example Usage:
(meta-set! mysymbol "mykey" "myval")
reduce
Dynamic
(reduce f x xs)
Reduces or 'folds' a data literal, such as a list or array, into a single
value through successive applications of f
.
register
Dynamic
registers a new function. This is used to define C functions and other symbols that will be available at link time.
Example Usage:
(register name <signature> <optional: override>)
register-type
Dynamic
registers a new type from C.
Example Usage:
(register-type Name <optional: c-name> <optional: members>)
relative-include
Dynamic
adds a relative include, i.e. a C include
with quotes. It also prepends the current directory.
Example Usage:
(relative-include "myheader.h")
reload
Dynamic
reloads all currently loaded files that weren’t marked as only loading once (see load
and load-once
).
Example Usage:
(reload)
s-expr
Dynamic
returns the s-expression associated with a binding. When the binding is a type, the deftype form is returned instead of the type's module by default. Pass an optional bool argument to explicitly request the module for a type instead of its definition form. If the bool is true, the module for the type will be returned. Returns an error when no definition is found for the binding.
Example Usage:
(s-expr foo), (s-expr foo true)
save-docs-internal
Dynamic
is the internal companion command to save-docs
. save-docs
should be called instead.
Example Usage:
(save-docs-internal 'Module)
symbol?
Dynamic
checks whether the argument is a symbol.
Example Usage:
(symbol? 'x) ; => true
system-include
Dynamic
adds a system include, i.e. a C #include
with angle brackets (<>
).
Example Usage:
(system-include "stdint.h")
take
Dynamic
(take n xs)
Returns a list containing the first n
elements of a list.
(take 3 '(1 2 3 4 5))
=> (1 2 3)
unreduce
Dynamic
(unreduce f x lim acc)
Applies f
to a starting value x
, then generates a sequence of values
by successively applying f
to the result lim-1
times.
Collects results in the structure given by acc
.
(unreduce (curry + 1) 0 10 (list))
=> (1 2 3 4 5 6 7 8 9 10)
use
Dynamic
uses a module, i.e. imports the symbols inside that module into the current module.
Example Usage:
(use MyModule)
write-file
Dynamic
writes a string to a file.
Example Usage:
(write-file "myfile" "hello there!")
zip
Dynamic
(zip f :rest forms)
Returns the form that results from applying a function f
to each of
the values supplied in forms
.
If the members of a single form are exhuasted, the result of the
applications thus far is returned, and any remaining members in the other
forms are ignored.
(zip + '(1 2 3) '(4 5 6))
=> ((+ 1 4) (+ 2 5) (+ 3 6))
It's important to note that zip operates on forms, and that the form
returned by zip may not be evaluable by itself. For instance, to actually
transform the result in the example above into something Carp can
evaluate, we need to wrap each member of the list in a do
:
(append (list 'do) (zip + '(1 2 3) '(4 5 6)))
=> (do (+ 1 4) (+ 2 5) (+ 3 6))
(eval (append (list 'do) (zip + '(1 2 3) '(4 5 6))))
=> 9 ;; do returns the value of the last form in its body


A-Level Subjects
A-Level Subjects
this is a fixed div
Combinations
Combinations
this is a fixed div
Courses / Degrees
Course / Degrees
this is a fixed div
Careers
Careers
this is a fixed div
Summary


Extracts variables that are declared inside lambda operations to a separate mapping step using the
Stream.map()
,
CompletableFuture.thenApply()
, or similar operations.


Name
Tagger scoring
This utility can be used either to score a set of
files which have already been tagged by a name tagger, or to both tag a
set of files and then immediately score them. The key file should
have in-line XML name tags. The utility is invoked by
xjet
Jet.Scorer.NEScorer test-directory
test-file-list key-directory key-file-list [order tagger-model] tag1
tag2 ...
with arguments as follows:
- test-directory
- directory containing test files
- test-file-list
- a file containing a list of test files, one per line
- key-directory
- directory containing key files
- key-file-list
- a file containing a list of key files, one per line
(test-file-list and key-file-list should be the same length
The following two arguments should be included in order to both
tag the test documents and then score them.
- order
- either "unigram" or "bigram", indicating what emission
probabilities should be used
- tagger-model
- file containing HMM model for name tagging
- tagi
- a tag to be scored (e.g., ENAMEX)
The scorer reports scores for each document and for the entire
collection.
It reports both 'type' precision and recall, and 'attribute' precision
and recall.
The former reports on matches at the XML tag type (e.g., ENAMEX); the
latter
on matches at the feature level (e.g., PERSON vs. ORGANIZATION).


|
Groovy 2.1.7 | |||||||
| PREV NEXT | FRAMES NO FRAMES |
| Interface Summary | |
|---|---|
| Factory | @author Andres Almiray |
| IFileNameFinder | |
| ObjectGraphBuilder.ChildPropertySetter | Strategy for setting a child node on its parent. |
| ObjectGraphBuilder.ClassNameResolver | Strategy for resolving a classname. |
| ObjectGraphBuilder.IdentifierResolver | Strategy for picking the correct synthetic identifier. |
| ObjectGraphBuilder.NewInstanceResolver | Strategy for creating new instances of a class. |
| ObjectGraphBuilder.ReferenceResolver | Strategy for picking the correct synthetic reference identifier. |
| ObjectGraphBuilder.RelationNameResolver | Strategy for resolving a relationship property name. |
| ResourceConnector | Base interface for customizing where resources can be found for the GroovyScriptEngine . |
| Class Summary | |
|---|---|
| AbstractFactory | @author Andres Almiray |
| AllTestSuite | AllTestSuite can be used in extension of GroovyTestSuite to execute TestCases written in Groovy from inside a Java IDE. |
| AntBuilder | Allows Ant tasks to be used with a Groovy builder-style markup. |
| BuilderSupport | An abstract base class for creating arbitrary nested trees of objects or events |
| CharsetToolkit | Utility class to guess the encoding of a given text file. |
| CliBuilder | Provides a builder to assist the processing of command line arguments. |
| ClosureComparator | A Comparator which uses a closure to compare 2 values being equal |
| ConfigBinding | Since Groovy Script don't support overriding setProperty, we have to using a trick with the Binding to provide this functionality |
| ConfigObject | A ConfigObject at a simple level is a Map that creates configuration entries (other ConfigObjects) when referencing them. |
| ConfigSlurper | |
| Eval | Allow easy integration from Groovy into Java through convenience methods. |
| Expando | Represents a dynamically expandable bean. |
| FactoryBuilderSupport | Mix of BuilderSupport and SwingBuilder's factory support. |
| FileNameByRegexFinder | Find files according to a base directory and an includes and excludes pattern. |
| FileNameFinder | Find files according to a base directory and an includes and excludes pattern. |
| GroovyAssert | |
| GroovyCollections | A Collections utility class |
| GroovyMBean | A GroovyObject facade for an underlying MBean which acts like a normal groovy object but which is actually implemented via an underlying JMX MBean. |
| GroovyScriptEngine | Specific script engine able to reload modified scripts as well as dealing properly with dependent scripts. |
| GroovyShellTestCase | Groovy test case, which recreates internal GroovyShell in each setUp () |
| GroovyTestCase | A default JUnit TestCase in Groovy. |
| GroovyTestSuite | A TestSuite which will run a Groovy unit test case inside any Java IDE either as a unit test case or as an application. |
| IndentPrinter | A helper class for printing indented text. |
| JavadocAssertionTestBuilder | JavadocAssertionTestBuilder will dynamically create a test cases from Groovy assertions placed within
the Javadoc comments of a source file. |
| JavadocAssertionTestSuite | JavadocAssertionTestSuite will dynamically create test cases from Groovy assertions placed within
Javadoc comments. |
| MapEntry | A Map.Entry implementation. |
| Node | Represents an arbitrary tree node which can be used for structured metadata or any arbitrary XML-like tree. |
| NodeBuilder | A helper class for creating nested trees of Node objects for handling arbitrary data |
| NodeList | A List implementation which is returned by queries on a Node which provides some XPath like helper methods for GPath. |
| NodePrinter | A helper class for creating nested trees of data |
| ObjectGraphBuilder | A builder for creating object graphs. |
| ObjectGraphBuilder.DefaultChildPropertySetter | Default impl that calls parent.propertyName = child If parent.propertyName is a Collection it will try to add child to the collection. |
| ObjectGraphBuilder.DefaultClassNameResolver | Default impl that capitalizes the classname. |
| ObjectGraphBuilder.DefaultIdentifierResolver | Default impl, always returns 'id' |
| ObjectGraphBuilder.DefaultNewInstanceResolver | Default impl that calls Class.newInstance() |
| ObjectGraphBuilder.DefaultReferenceResolver | Default impl, always returns 'refId' |
| ObjectGraphBuilder.DefaultRelationNameResolver | Default impl that returns parentName and childName accordingly. |
| ObjectGraphBuilder.ReflectionClassNameResolver | Build objects using reflection to resolve class names. |
| ObservableList | List decorator that will trigger PropertyChangeEvents when a value changes. |
| ObservableList.ElementAddedEvent | |
| ObservableList.ElementClearedEvent | |
| ObservableList.ElementEvent | |
| ObservableList.ElementRemovedEvent | |
| ObservableList.ElementUpdatedEvent | |
| ObservableList.MultiElementAddedEvent | |
| ObservableList.MultiElementRemovedEvent | |
| ObservableList.ObservableIterator | |
| ObservableList.ObservableListIterator | |
| ObservableMap | Map decorator that will trigger PropertyChangeEvents when a value changes. |
| ObservableMap.MultiPropertyEvent | |
| ObservableMap.PropertyAddedEvent | |
| ObservableMap.PropertyClearedEvent | |
| ObservableMap.PropertyEvent | |
| ObservableMap.PropertyRemovedEvent | |
| ObservableMap.PropertyUpdatedEvent | |
| ObservableSet | Set decorator that will trigger PropertyChangeEvents when a value changes. |
| ObservableSet.ElementAddedEvent | |
| ObservableSet.ElementClearedEvent | |
| ObservableSet.ElementEvent | |
| ObservableSet.ElementRemovedEvent | |
| ObservableSet.MultiElementAddedEvent | |
| ObservableSet.MultiElementRemovedEvent | |
| ObservableSet.ObservableIterator | |
| OptionAccessor | |
| OrderBy | A helper class for sorting objects via a closure to return the field or operation on which to sort. |
| PermutationGenerator | Systematically generate permutations. |
| Proxy | Dynamic groovy proxy for another object. |
| ProxyGenerator | Classes to generate 'Proxy' objects which implement interfaces, maps of closures and/or extend classes/delegates. |
| StringTestUtil | |
| XmlNodePrinter | Prints a groovy.util.Node (as used with XmlParser ) including all children in XML format.
|
| XmlNodePrinter.NamespaceContext | |
| XmlParser | A helper class for parsing XML into a tree of Node instances for a simple way of processing XML. |
| XmlSlurper | Parse XML into a document tree that may be traversed similar to XPath expressions. |
| Enum Summary | |
|---|---|
| ObservableList.ChangeType | |
| ObservableMap.ChangeType | |
| ObservableSet.ChangeType |
| Exception Summary | |
|---|---|
| ResourceException | @author sam |
| ScriptException | @author sam |
Copyright © 2003-2013 The Codehaus. All rights reserved.


Bogus
home
about us
sign up
log in
Playing Big_Man.mp3...
» Downloads: 256
» Last DL: Oct. 1, 2007
» Uploaded: Aug. 24, 2007
» File Size: 1.21
MB
Download Original
Embed:
Forum:
Link:
Post To:
Inappropriate content? Report this file to
DivShare Support
.


{% extends "elections/base.html" %} {% block content %}
First Elected in {{ object.year_first_elected }}
{% endif %}Residence {{ object.residence_place }}, {{ object.residence_state }}
Birthday {{ object.birth_date }}
Birth Place {{ object.birth_place }}, {{ object.birth_state }}, {{ object.birth_country }}
Gender {{ object.get_gender_display }}
Ethnicity {{ object.ethnicity }}
Hispanic {{ object.hispanic }}
Religion {{ object.religion }}
| School | Type | Major | Degree |
|---|---|---|---|
| {{ school.school_name }} {% if school.school_city %}({{ school.school_city }}, {{ school.school_state }}){% endif %} | {{ school.school_type }} | {{ school.major }} | {{ school.degree }} |
{{ phone.detail }} {{ phone.phone_number }}
{% endfor %}| Party | State | Office | District Name | Status |
|---|---|---|---|---|
| {{ office.party_name }} | {{ office.state_name }} | {{ office.office }} | {{ office.district_name }} | {{ office.status_description }} |
| PAC | Date | Amount |
|---|---|---|
| {{ contrib.pac_name|safe }} | {{ contrib.date_given }} | {{ contrib.amount }} |
None
{% endif %}


Process name is required.
state is required.
Process description is required.
Process buildingData is required.
Process buildingImage is required.


[gecode-users] SetVar domains
Mikael Zayenz Lagerkvist
zayenz at gmail.com
Mon Nov 5 04:57:05 CET 2007
On 11/5/07, Malcolm Ryan <malcolmr at cse.unsw.edu.au> wrote:
> Are there any methods for inspecting the upper and lower bounds of a
> SetVar? The only ones I can find are SetVar.glbMax(), glbMin(), lubMax
> () and lubMin(), which don't tell me everything I want to know. How
> can I get a list of exactly what is in the set?
See SetVar(Glb|Lub)Ranges:
http://www.gecode.org/gecodej/doc/group__TaskIntSetVars.html
Cheers,
Mikael
--
Mikael Zayenz Lagerkvist, http://www.ict.kth.se/~zayenz/
More information about the gecode-users
mailing list


noun
Type is a characteristic of a value affecting which operations on that value are valid. For example, an integer can be multiplied by an integer, but not by a string.
var button = document.getElementById("bg-changer");
button.addEventListener("click", redifyBackground);
function redifyBackground () {
var content = document.getElementById("content");
content.setAttribute("class", "red");
}
type
/tīp/
noun
Type is a characteristic of a value affecting which operations on that value are valid. For example, an integer can be multiplied by an integer, but not by a string.


Whats up!
Posted: Thu Sep 27, 2007 11:12 pm
Sorry i have been away for a while. computer issues are keeping me away, my computer took a big dump last weekend and i had to get a new one. when my new one comes in ill be pumpin out some more skins and textures, anything i can do to help progress along.
got me a new dell
Insperion 531
Amd 4400+
2G ram
132mb video card
160G hard drive
Audigy Sould Blaster
Windows Vista =(
a bit of an upgrade from
Dell Dimension
Pentium II 733
521MB ram
32MB video card
20G hard drive
Audigy Sound Blaster
Widows 2000 pro
Anyway
Karl do we have working characters yet? or still chairs? is there anything to do yet?
Thadius i notice my map of t3 Castle is gone from Volucris website... why? you may use it.
got me a new dell
Insperion 531
Amd 4400+
2G ram
132mb video card
160G hard drive
Audigy Sould Blaster
Windows Vista =(
a bit of an upgrade from
Dell Dimension
Pentium II 733
521MB ram
32MB video card
20G hard drive
Audigy Sound Blaster
Widows 2000 pro
Anyway
Karl do we have working characters yet? or still chairs? is there anything to do yet?
Thadius i notice my map of t3 Castle is gone from Volucris website... why? you may use it.


Configuration is Simple!
Just add the panel and all your viewers, including you can randomly select a player!


FullStackTest Api
Client/Providers CRUD
Version: 1.0.0
BasePath:/
All rights reserved
http://apache.org/licenses/LICENSE-2.0.html
Access
[ Jump to Models ]
Table of Contents
Client's list (clientsGet)
The clients endpoint returns the client's list and their providers.
Return type
Example data
Content-Type: application/json
[ {
"phone" : "aeiou",
"name" : "aeiou",
"client_providers" : [ {
"id" : "",
"delete" : true
} ],
"email" : "aeiou"
} ]
Produces
This API call produces the following media types according to the request header;
the media type will be conveyed by the
Content-Type response header.
Responses
200
An array of clients objects
Updates an existing client or creates a new one (clientsidPost)
This endpoint lets you create or update clients and their providers
Request body
client (required)
Body Parameter — Client object
Return type
Object
Example data
Content-Type: application/json
"{}"
Produces
This API call produces the following media types according to the request header;
the media type will be conveyed by the
Content-Type response header.
Responses
200
A json object with the results of the operations
Object
500
That email is already registered
Object
Updates an existing provider or creates a new one (providersidPost)
This endpoint lets you create or update providers
Request body
provider (required)
Body Parameter — Provider Object
Return type
Object
Example data
Content-Type: application/json
"{}"
Produces
This API call produces the following media types according to the request header;
the media type will be conveyed by the
Content-Type response header.
Responses
200
A json object with the results of the operations
Object
500
Internal server error
Object
Delete an existing client (clientsidDelete)
This endpoint lets you delete a specific client.
Query parameters
params (required)
Query Parameter — ID of client to be deleted
Produces
This API call produces the following media types according to the request header;
the media type will be conveyed by the
Content-Type response header.
Responses
200
The client has been deleted or it wasn't exists
Delete an existing provider (providersidDelete)
This endpoint lets you delete a specific provider.
Query parameters
params (required)
Query Parameter — Provider's ID
Produces
This API call produces the following media types according to the request header;
the media type will be conveyed by the
Content-Type response header.
Responses
200
The provider has been deleted or it wasn't exists.
Provider's list (providersGet)
The providers endpoint returns the provider's list.
Return type
Example data
Content-Type: application/json
[ {
"created" : true,
"model" : {
"name" : "aeiou",
"id" : ""
}
} ]
Produces
This API call produces the following media types according to the request header;
the media type will be conveyed by the
Content-Type response header.
Responses
200
An array of providers objects
[ Jump to Methods ]
Table of Contents
Client
ClientParamResponse
ClientProvider
ErrorResponse
Provider
ProviderParamResponse
name (optional)
phone (optional)
email (optional)
client_providers (optional)
created (optional)
Boolean True if a new record was created
model (optional)
delete (optional)
Boolean Usefull to identify if the provider needs to be removed from client provider's list.
id (optional)
Integer Provider's unique identifier representing a specific provider. It's and autonumeric field.
err (optional)
String Description of the error
id (optional)
Integer Unique identifier representing a specific provider.
name (optional)
created (optional)
Boolean True if a new record was created.
model (optional)


WITNESS LIST Redistricting Committee August 25, 2000-12:00P Redistricting On: Anderson, Betty (self), Lubbock Butler, Jim (Odessa Chamber of Commerce), Odessa Cardenas Jr., Alberto P (Lubbock Hispanic Chamber of Commerce), Lubbock Cook, D.V. (Texas Independent Ginners Association and Mustang Farmers Gin), Tahoka Cox, Roger (Amarillo Chamber of Commerce), Amarillo Earl, Lewis H. (self), Post Gibson, David (Texas Corn Producers Board), Lubbock Harris, Jerry (self), Lamesa Hebert, J. Gerald (IMPAC 2000), Washington D.C. Henry, Alan (Lubbock Chamber of Commerce), Lubbock Henson, James R. (Amarillo Chamber of Commerce), Amarillo Hernandez, Victor (City of Lubbock Councilman, District 1), Lubbock Isett, Rep. Carl H. (State Representative District 84), Lubbock Klein, Todd R. (Lubbock County Democratic Party), Lubbock Mann, L. Scott (Republican Party), Lubbock McDaniel, Dr. Gary (South Plains College), Levelland McEwen, Mayor Russ (Mayor City of Big Spring/Howard County), Big Spring Mirabal, Alfonso (U.S. Census Bureau), Dallas Morris, David (self), Amarillo Patterson, T.J. (City of Lubbock Councilman), Lubbock Pearson, Dr. Neale (self), Lubbock Privett, Tony (City of Lubbock), Lubbock Pruitt, Dwayne (Majority of Terry County and County Atty. Felony Responsibility), Brownfield Sipes, L.D. (Buddy) (Midland Chamber of Commerce), Midland Sitton, Mayor Windy (Mayor of the City of Lubbock), Lubbock Steed, Mayor Pat (Mayor City of Childress), Childress Trose, Michael B. (Democratic Party of Midland), Midland Turner, Marshall (U.S. Census Bureau), Marlboro, MD Verett, Steve (Plains Cotton Growers, Inc.), Lubbock Wilson, Rose (self), Lubbock Wilson, Ross (Texas Cattle Feeders Association), Amarillo Yeager, Bruce (Wellman Union ISD Superintendent), Wellman


opentype.js
Fork me on GitHub
opentype.js is an OpenType and TrueType font parser. It allows you to access the
letterforms
of text from the browser or node.js.
Roboto-Black
Font Size
150
Draw Points
Kerning
Once you have the shapes, you can modify them, for example by
snapping
them to a virtual grid:
Strength
80
Distance
53
X
0
Y
0
Glyphs
opentype.js provides you with
raw access
to the glyphs so you can modify them as you please.
Only the first 100 glyphs are shown.
Free Software
opentype.js is available on
GitHub
under the
MIT License
.
Copyright © 2013 Frederik De Bleser.


| This Release's Editorial |
I finally gave up on Compuserve. I'll close the account in a few months when folks have moved over to this site. If you have a link to my website, please update it.
I've started (it's about time) filling in the TEST sample application. My goal is to test every method on every class. This is mind numbing work but very worthwhile. I've already discovered (and fixed) several bugs in CBitArray because of it. Work on WFC has slowed in proportion to the pace of my day job (the one that pays the bills). I am very busy during the day so when I get home at night, my brain is fried and WFC suffers.
I don't know if it is just me, but do Microsoft products seem to degrade over time? My compiler is getting flaky. The latest problem is:
F:\WFC\SRC\SOCKETS.CPP(891) : fatal error C1001: INTERNAL COMPILER ERROR
(compiler file 'E:\8168\vc98\p2\src\P2\main.c', line 494)
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
Error executing cl.exe.
And what obfuscation of code could have caused that? Here it is...
WFCLTRACEINIT( TEXT( "CSimpleSocket::Read()" ) );
Sometimes I get these errors when my disk fills up. However, I've got
2.69GB free. Even that should be enough. Go figure.
| New |
I bought this really neat book, "Windows NT/2000 Native API Reference" by Gary Nebbett (ISBN 1-57870-199-6). Now I know how Win32 works on NT. To make my life easier, I've started creating a set of Native API classes. WARNING! I have no doubt that some of these API's will break in future versions of NT. However, they will solve a lot of problems today so use them at your own risk.
wfc_disable_privilege - Allows you to disable a specified privilege.
wfc_get_thread_name - Retrieves the name of the thread as set by wfc_set_thread_name(). Thanks go to Tony Lam for suggesting this.
I've also added wfc_undocumented_get_system_process_list()
which
is a function that uses the undocumented
NtQuerySystemInformation
API in NTDLL.DLL to get a list
of processes running on the system. This is the same API that Task Manager
uses. You will also find my feeble attempt to gather together what is
known about the Thread Information Block (TIB), also known as the
Thread Envrionment Block (TEB) into the WFC_THREAD_INFORMATION_BLOCK
data structure. If you know what this structure really looks like, let me
know and I'll include it in a future release.
| Modified |
CBitArray - Added methods to enumerate ones and zeroes. This allows you to quickly find the next 1 or 0 in the array. Also fixed a bug when copying a CByteArray. Added a method to copy CDWordArray's. I added this feature because I need to keep track of millions of booleans. A bit array was perfect. Then I slammed into the wall of trying to find out where the next true boolean was.
CFileDirectory - Added
the capability to set a wildcard so you don't have to enumerate
all files in the directory. Also added passing the
WIN32_FIND_DATA
structure to the callback function. And added
the ability to optionally send directories to the callback.
CFileTime - Added more methods to copy other data types, get the current time, and copy to MS-DOS time.
CMemoryFile - Added a FromHandle() method so you can quickly remap portions of a file without having to close and reopen the file. This eliminates the overhead of repeatedly hitting the filesystem to remap a file.
CString - Thanks to Tony Lam, the Right() method now works the same as Microsoft's CString. My CString is present only in STL builds.
Sam Blackburn<EMAIL_ADDRESS>Return to Sam's Home Page


Man who talks to himself through his mystic lyrics, who walks alone everywhere with his subliminal thoughts to enhance the ecstasy of sufism
Man on left posing for his cover for his latest song 'Mushtaaq' from his album 'Hazaarey Wala Munda'
Here's a album-list of Dr. Sartaaj's life :
2009 - Tere Qurbaan
2011 - Cheerey Wala Sartaaj
2012 - Afsaaney Sartaaj De
2013 - Rangrez-The Poet of Colors
2015 - HAMZA – A Sufiana Ecstasy
2016 - Hazaarey Wala Munda
"Akhar jod lye tu asar ni Bhareya, je tera geet sun kise da seena ni thareya , fer tu appe das kise ne wah-wah ki karna, sada keda zor te appa dava ki karna"
If you have time, you should read more about this incredible human being on his Official Website.


PODDuck Hufflepuff is a Software Engineer who works with students and anyone considering a career switch to help them learn the basics of coding.
PODDuck believes anybody can learn to code and become a professional Software Engineer, regardless of background or experience.
PODDuck is a Chartered IT Professional (CITP), a rigorous and demanding status recognised within the industry as a standard for integrity, professionalism and dedication.
As a visionary leader, PODDuck worked at the most prestigious firms around the world, and has now retired from regular work to travel the world preaching the benefits of software.
Their contributions to the industry over the past decade have been featured in Forbes, New York Times, Mashable and Newsweek.
PODDuck holds a PhD in Computer Science from Cambridge University.
In addition to the high-flying career, PODDuck enjoys long walks in the bath and regular trips to Lush.