Club Penguin was an online-based, massively multiplayer online role-playing game (abbreviated as a MMORPG) created by Disney Canada Inc. (previously New Horizons Interactive) in the summer of 2005. It involved a virtual world, where the players were penguins, and was featuring a large range of minigames and other online activities, and was based on a snowy island, after which the game was named.
"Thanks for playing. Waddle on!"


BLSVisualizer is a visualization tool used to view time series data imported from the Bureau of Labor Statistics. The tree view organizes the data in a hierarchical order, making it easy to navigate to the desired dataset. The user can
drag and drop the desired data into the chart slots, causing the corresponding plot on the right to automatically update with the newly added data. The user may add multiple time series data to each plot and can
remove them individually by clicking on them in the plotting box or all of them by clicking "Clear".
Orange icons indicate dimensional values, whereas
green icons indicate rates.
See the tutorial:
http://youtu.be/9RiOq78xIr8


--- title: "Analyzing GazePoint Data with GazeR" author: "Jason Geller" date: "2021-04-27 15:52:08" output: pdf_document: default html_document: default ---
In this vignette I am going to show you how to read in a GazePoint data file along with some behavioral data and use gazeR
to preprocess the data.
Special thanks to Matthew K Robinson (Twitter:@matthewkrobinson) for letting me use some data from an auditory oddball task he conducted on himself (we do what we have to do as researchers :D): see Tweet below.
i'm just a guy, running himself through auditory oddball tasks on his new eye-tracker, asking it to love him back. pic.twitter.com/wPb97MZuNF
— Matthew K. Robison (@matthewkrobison) April 19, 2021
To get started, we need to load in some important packages and read in the GP data files.
library(tidyverse)
#install_github("dmirman/gazer")
library(gazer)
library(data.table)
library(here)
remotes::install_github("tmalsburg/saccades/saccades", dependencies=TRUE)
library(saccades)
pd <- fread(here::here('oddball_eye_13.tsv')) # eye data
bs<-fread(here::here('oddball_13.tsv')) # behave data
head(pd)
## CNT TIME TIME_TICK FPOGX FPOGY FPOGS FPOGD FPOGID FPOGV
## 1: 77433 1251.964<PHONE_NUMBER>99 -4.40518 -13.98604 1251.883 0.08093 1917 1
## 2: 77434 1251.980<PHONE_NUMBER>25 -4.39508 -13.95200 1251.883 0.09692 1917 1
## 3: 77435 1251.996<PHONE_NUMBER>07 -4.36427 -13.84678 1251.883 0.09692 1917 0
## 4: 77436 1252.013<PHONE_NUMBER>97 -4.40694 -13.99395 1251.883 0.09692 1917 0
## 5: 77437 1252.028<PHONE_NUMBER>71 -4.42096 -14.04383 1251.883 0.09692 1917 0
## 6: 77438 1252.045<PHONE_NUMBER>90 -4.40730 -14.00445 1251.883 0.09692 1917 0
## LPOGX LPOGY LPOGV RPOGX RPOGY RPOGV BPOGX BPOGY BPOGV
## 1: 0.71795 0.50537 1 -9.38697 -28.00086 1 -4.33451 -13.74775 1
## 2: 0.71795 0.50537 1 -9.38697 -28.00086 1 -4.33451 -13.74775 1
## 3: 0.70711 0.51136 1 -9.14516 -27.18135 1 -4.21902 -13.33500 1
## 4: 0.70151 0.43055 1 -9.60071 -28.71280 1 -4.44960 -14.14113 1
## 5: 0.70270 0.42562 1 -9.60071 -28.71280 1 -4.44900 -14.14359 1
## 6: 0.69827 0.43625 1 -9.34484 -27.89350 1 -4.32329 -13.72862 1
## LPCX LPCY LPD LPS LPV RPCX RPCY RPD RPS RPV
## 1: 0.34860 0.59214 25.23420 0.83829 1 0.64310 0.60511 28.49240 1 1
## 2: 0.34860 0.59216 25.27127 0.83829 1 0.64314 0.60509 28.33148 1 1
## 3: 0.34845 0.59234 25.09805 0.83829 1 0.64293 0.60517 28.69580 1 1
## 4: 0.34846 0.59237 25.15947 0.83829 1 0.64286 0.60519 28.47081 1 1
## 5: 0.34838 0.59240 25.32249 0.84484 1 0.64285 0.60518 28.46784 1 1
## 6: 0.34830 0.59240 25.07680 0.85139 1 0.64269 0.60527 28.50588 1 1
## LEYEX LEYEY LEYEZ LPUPILD LPUPILV REYEX REYEY REYEZ RPUPILD
## 1: -0.03362 -0.01726 0.56538 0.00455 1 0.03052 -0.01989 0.57411 0.00512
## 2: -0.03438 -0.01769 0.57821 0.00451 1 0.03056 -0.01997 0.57644 0.00513
## 3: -0.03438 -0.01769 0.57821 0.00449 1 0.03056 -0.01997 0.57644 0.00510
## 4: -0.03438 -0.01769 0.57821 0.00451 1 0.03056 -0.01997 0.57644 0.00509
## 5: -0.03501 -0.01795 0.58649 0.00448 1 0.03130 -0.02049 0.59132 0.00509
## 6: -0.03501 -0.01795 0.58649 0.00450 1 0.03130 -0.02049 0.59132 0.00508
## RPUPILV CX CY CS BKID BKDUR BKPMIN LPMM LPMMV RPMM RPMMV
## 1: 1 0.33333 0.33333 0 0 0 20 4.54567 1 5.11614 1
## 2: 1 0.33333 0.33333 0 0 0 20 4.51065 1 5.12683 1
## 3: 1 0.33333 0.33333 0 0 0 20 4.48607 1 5.10490 1
## 4: 1 0.33333 0.33333 0 0 0 20 4.50748 1 5.09460 1
## 5: 1 0.33333 0.33333 0 0 0 20 4.47957 1 5.08827 1
## 6: 1 0.33333 0.33333 0 0 0 20 4.50258 1 5.07552 1
## DIAL DIALV GSR GSRV HR HRV HRP TTL0 TTL1 TTLV USER
## 1: 0.088 1 0 0 0 0 454 -1 -1 0 0
## 2: 0.088 1 0 0 0 0 484 -1 -1 0 STARTEXPERIMENT
## 3: 0.088 1 0 0 0 0 456 -1 -1 0 STARTEXPERIMENT
## 4: 0.088 1 0 0 0 0 451 -1 -1 0 START
## 5: 0.088 1 0 0 0 0 482 -1 -1 0 START
## 6: 0.088 1 0 0 0 0 454 -1 -1 0 START
head(bs)
## subject trial tone rt response
## 1: 13 1 lo 2113 None
## 2: 13 2 lo 2102 None
## 3: 13 3 lo 2107 None
## 4: 13 4 lo 2108 None
## 5: 13 5 lo 2107 None
## 6: 13 6 lo 2103 None
What we are going to do is run the GazePoint file through the merge_gazepoint
function. The function below takes a list of files called file_list and merges all the files together, appends a subject column, creates a trial column using the USER column (GazePoint only allows messages through this channel), creates a time variable (in milliseconds). In the merge_gazepoint
function the trail_msg
argument requires users to denote a message used in the USER column that references the start of the trial–in our case the START
message denotes the start of a new trial. This is a solution by Matt Robinson, but there are other ways one could extract the trial number. What I have done in the past is append a message with the trial iteration (e.g., START_1) in Python and use the separate
function to get the trial number.
# A "monocular mean" averages both eyes together. If data is available in just
# one eye, use the available value as the mean, unless we need_both is TRUE.
#' @param x1 pupil left
#' @param x2 pupil right
#' @return vector with monocular mean values
compute_monocular_mean <- function(x1, x2) {
xm <- rowMeans(cbind(x1, x2), na.rm = TRUE)
# NaN => NA
ifelse(is.nan(xm), NA, xm)
}
# function for processing GazePoint data
merge_gazepoint <- function (file_list, trial_msg = "START"){
#file list is path to .xls files
#vroom is faster
library(data.table)
file_ids=str_replace_all(basename(file_list),"([:alpha:]|[:punct:])","") # remove everything but numeric values
data <- map2(file_list, file_ids, ~fread(.x) %>%
mutate(id = .y)) %>%
bind_rows()
d = data %>%
dplyr::rowwise() %>%
dplyr::mutate(pupil=compute_monocular_mean(RPMM, LPMM)) %>% # average both eyes
dplyr::ungroup() %>%
dplyr::mutate(pupil = ifelse(RPMMV == 0|LPMMV == 0, 0, pupil), #missing data labeled as blinks
new_trial = ifelse(USER == trial_msg & lag(USER) != trial_msg, 1, 0), # Label new trials
trial = cumsum(new_trial), # Create a trial variable
time = floor(TIME*1000)) %>%
group_by(trial) %>%
dplyr::mutate(time=time - min(time)) %>%
ungroup() %>%
dplyr::select(id, time,trial,pupil,BPOGX, BPOGY, USER) %>%
dplyr::rename("message" = "USER", "subject"= "id", "x" = "BPOGX", "y" = "BPOGY") %>%
dplyr::filter(trial > 0)
return(d)
}
setwd(here()) # setwd
gp_file<-list.files(here::here(), pattern = "eye_13.tsv") # get files
setwd(here())
d=merge_gazepoint(gp_file, trial_msg = "START")
d$subject<-as.numeric(d$subject)
pdb <- full_join(bs, d)
pdb <- as_tibble(pdb)
pdb
## # A tibble: 73,724 x 10
## subject trial tone rt response time pupil x y message
## <dbl> <dbl> <chr> <int> <chr> <dbl> <dbl> <dbl> <dbl> <chr>
## 1 13 1 lo 2113 None 0 4.80 -4.45 -14.1 START
## 2 13 1 lo 2113 None 16 4.78 -4.45 -14.1 START
## 3 13 1 lo 2113 None 32 4.79 -4.32 -13.7 START
## 4 13 1 lo 2113 None 48 4.80 -4.58 -14.5 START
## 5 13 1 lo 2113 None 64 4.80 -4.58 -14.5 START
## 6 13 1 lo 2113 None 81 4.79 -4.63 -14.7 START
## 7 13 1 lo 2113 None 97 4.81 -4.42 -14.0 START
## 8 13 1 lo 2113 None 113 4.80 -4.42 -14.0 TONE
## 9 13 1 lo 2113 None 129 4.78 -4.23 -13.5 TONE
## 10 13 1 lo 2113 None 145 4.77 -4.34 -13.8 TONE
## # … with 73,714 more rows
The GazePoint data does not indicate where blinks occurred. What we are going to do is use the blink_detect
function in gazer. This relies on the saccades
package (https://github.com/tmalsburg/saccades) which uses a velocity based measure based on X,Y coordinates to find blinks. Once we find the blinks we can change the pupil size at that time point as NA and interpolate over it.
As a note, the GazePoint does not seem to sample consistently. In this case, it samples every 16 or 17 ms. This is a problem for some other blink detection measures (e.g., the noise based pupil function). One soultion would be to downsample the data at the onset so there is consistancy from sample to sample.
blinks_merge<- blink_detect(pdb)
blinks <- blinks_merge %>%
dplyr::group_by(grp = cumsum(!is.na(startend))) %>%
dplyr::mutate(Label = replace(startend, first(startend) == 'start', 'start')) %>% #extends the start message forward until end message
dplyr::ungroup() %>%
# label blinks as 1
dplyr::select(subject, trial, time, x, y, pupil, message, tone, Label, -grp)
blinks_data <- blinks %>%
dplyr::mutate(blink=ifelse(!is.na(Label), 1, 0), pupil=ifelse(blink==1 | pupil==0, NA, pupil))%>%
dplyr::ungroup()%>%
dplyr::select(subject, time, trial, pupil, x, y, trial, message, tone, blink, -Label)
Here is a look at the trials containing blinks:
blinks_data %>%
filter(blink==1) %>%
head()%>%
knitr::kable()
| subject | time | trial | pupil | x | y | message | tone | blink |
|---|---|---|---|---|---|---|---|---|
| 13 | 2167 | 10 | NA | 0.9364 | 1.95015 | POSTTONE | lo | 1 |
| 13 | 2183 | 10 | NA | 0.9364 | 1.95015 | POSTTONE | lo | 1 |
| 13 | 2199 | 10 | NA | 0.9364 | 1.95015 | POSTTONE | lo | 1 |
| 13 | 2216 | 10 | NA | 0.9364 | 1.95015 | POSTTONE | lo | 1 |
| 13 | 0 | 11 | NA | 0.9364 | 1.95015 | START | hi | 1 |
| 13 | 16 | 11 | NA | 0.9364 | 1.95015 | START | hi | 1 |
I am extending blinks 100 ms forward and backward in time.
Here let’s linearly interpolate the blinks and then smooth the data using a 5-point moving average.
# Smooth and Interpolate
smooth_interp <- smooth_interpolate_pupil(pup_extend, pupil="pupil", extendpupil="extendpupil", extendblinks=TRUE, step.first="smooth", maxgap=Inf, type="linear", hz=60, n=5)
interp_graph <- smooth_interp %>%
dplyr::filter(trial=="400")
bold <- element_text(face = "bold", color = "black", size = 14) #axis bold
#Graph interpolation
pup_g<- ggplot(interp_graph, aes(x= time, y= pupil)) + geom_point()+ geom_line(colour="black") +
geom_line(aes(x=time, y=pup_interp), colour="darkgreen") + xlab("Time (ms)") + ylab("Pupil Size (mm)") + theme_bw() + theme(axis.title.y=element_text(size = 16, face="bold"), axis.title.x = element_text(size=16, face="bold"), axis.text.x=element_text(size = 12, face="bold"), axis.text.y=element_text(size=12, face="bold"))
print(pup_g)
Here we will do a subtractive baseline correction taking 250 ms before the onset of the tone as baseline.
#use messages to baseline correct
baseline_pupil<-baseline_correction_pupil(smooth_interp, pupil_colname="pup_interp", baseline_window=c(0,250), baseline_method = "sub")
head(baseline_pupil)
## # A tibble: 6 x 13
## subject trial baseline time pupil x y message tone blink extendpupil
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <dbl> <dbl>
## 1 13 1 4.80 0 4.80 -4.45 -14.1 START lo 0 4.80
## 2 13 1 4.80 16 4.78 -4.45 -14.1 START lo 0 4.78
## 3 13 1 4.80 32 4.79 -4.32 -13.7 START lo 0 4.79
## 4 13 1 4.80 48 4.80 -4.58 -14.5 START lo 0 4.80
## 5 13 1 4.80 64 4.80 -4.58 -14.5 START lo 0 4.80
## 6 13 1 4.80 81 4.79 -4.63 -14.7 START lo 0 4.79
## # … with 2 more variables: pup_interp <dbl>, baselinecorrectedp <dbl>
Let’s see how much missing data there is and remove trials with greater than 20% missing data.
pup_missing<-count_missing_pupil(baseline_pupil, missingthresh = .5)
# remove outliers
I remove about 15 percent of trials.
Now let’s keep pupil diameter sizes between 2 mm and 9 mm
pup_outliers<-pup_missing %>%
dplyr::filter (pup_interp >= 2, pup_interp <= 9)
Get rid of artifacts we might have missed during some earlier steps.
#MAD removal
max_removal<-pup_missing %>%
dplyr::group_by(subject, trial) %>%
dplyr::mutate(speed=speed_pupil(pup_interp,time)) %>%
dplyr::mutate(MAD=calc_mad(speed)) %>%
dplyr::filter(speed < MAD)
Let’s only look fron the start of the trial until 1500 ms
baseline_pupil_onset<-max_removal %>%
dplyr::group_by(subject, trial) %>%
dplyr::filter(time <= 1500) %>%
select(subject, trial, time,baselinecorrectedp, tone, time,message,baselinecorrectedp)
Downsample the time-course to 50 ms.
#downsample
timebins1<- downsample_gaze(baseline_pupil_onset, bin.length=50, timevar = "time", aggvars = c("subject", "tone", "timebins"), type="pupil")
## Warning: The `.dots` argument of `group_by()` is deprecated as of dplyr 1.0.0.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_warnings()` to see where this warning was generated.
timebins1
## # A tibble: 62 x 4
## subject tone timebins aggbaseline
## <dbl> <chr> <dbl> <dbl>
## 1 13 hi 0 0.00130
## 2 13 hi 50 -0.000752
## 3 13 hi 100 -0.00206
## 4 13 hi 150 0.000331
## 5 13 hi 200 0.00530
## 6 13 hi 250 0.00503
## 7 13 hi 300 0.00826
## 8 13 hi 350 0.00930
## 9 13 hi 400 0.0116
## 10 13 hi 450 0.0125
## # … with 52 more rows
cursive_plot <-ggplot(timebins1)+
aes(timebins, aggbaseline, linetype=tone, color=tone) +
stat_summary(fun = "mean", geom = "line", size = 1) +
theme_bw() +
labs(x ="Time (ms)",y ="Pupil Dilation (baseline - pupil))") +
geom_hline(yintercept=0.0)
print(cursive_plot)
This looks very similar to the one in the Tweet albeit a bit smoother as a result of the extra preprocessing done.


NEED NAME
About
Upload
Gallery
Vinh Tran - Lincoln Elementary
Vinh Tran - Lincoln High School
Vinh Tran - Lincoln Middle School
...


Minecraft 1.18 introduces an overhual of new cave biomes and ores players have been wanting for years.
The update presents everthing from the LUSH CAVES (images 1 and 2) filled with dense vegetation, vines, fruit, glowberries, and leaves, to the dark and desolate Dripstone and Deepslate Caverns (images 3 and 4).
This gives Minecrafters a chance to refresh their experience about caves and encourage them to enjoy the mining aspect of the game more.
After all, it is called MINEcraft!
In the caves and cliffs update, one of the major features is the new mountains. Having increased the world height from 256 blocks to 320 blocks, there is a lot more space for the 6 new mountain biomes. These range from the , , , , and (see to the right for more information on each biome).
The meadow is a warmer biome of the mountains. It features a turquoise-green hue of grass with patches of flowers and grass. Here sheep, donkey, and rabbits can all spawn. Flowers, other than the biome specific or special flowers, can all generate here as well. Occasionally a lone tree will generate with a bee nest, a good place to find your first bee nest in a new world. This is also the only mountain biome where villages (plains) can generate, in addition to pillager towers. The meadow can be found either at the lower slopes of mountains or as a stand alone plateau.
Mountain tops many times do not have trees on top, however with the grove biome, a forest of spruce trees generate on the slopes of a mountain. Here in this cold biome, water freezes and the surface is covered with snow and also the new powder snow. The grove is the home of Rabbits, wolves and also foxes. It will also generate next to forests and taigas.
The snowy slopes biome is a transitional biome between the lower levels of the mountains and the peaks. It is covered in snow and is the home to goats and rabbits. A special structure, igloos, also have a chance to spawn in this biome. The biome generates next to plains biomes, however can also generate next to a snowy tundra.
One of the three peak biomes is the jagged peaks. It will only generate on the top of mountains if they are tall enough for it to generate. The biome generates in snowy, cold biomes and will often generate jagged peaks, hence the name, which can surpass the clouds at y=256. Only the adventurous goat lives in these biomes, however ores such as iron, coal and emerald can be found while climbing on the sides of the jagged peaks.
One of the three mountain peak biomes is the frozen peaks. They are covered in snow and with glaciers of packed ice. The thick furred goats are the only mob that spawn in this biome. This biome will usually generate next to smooth cold hill biomes however occasionally will generate in more jagged terrains.
The warmer mountain peak biome is the stony peaks. It mainly generates by warm biomes such as savannas and jungles and it will no generate by snowy slopes or groves. The stony peaks, as the name suggests, are covered in stone, with veins of calcite and exposed ores. The grass in the stony peaks have a unique vibrant light green tint. Sadly, no passive mob has the stony peaks as a home.
Other major changes that will be incorporated into the game including:
• Huge changes to the terrain limits, changing the lowest Y-axis block to -64 and lowering the highest block to 320!
• Adjusted and wider rivers, as well as more fjords cutting through mountains.
• Bundles will be introduced which allows for the creation of bags to help inventory management.
• Ore veins making longer and rarer ore formations.
• The introduction of the blind mob that detects players through footsteps, called the Warden that is sure to give you a shock!


{% extends "accounts/account_form.html" %} {% load i18n mezzanine_tags %} {% block primary-nav %} {% endblock %} {% block main %} {% if request.user.is_authenticated %}
{% trans "You're already logged in. If you'd like to log in as a different user, you'll need to log out first." %}
{% blocktrans with request.GET.next as next %}If you don't have an account you can sign up for one now.{% endblocktrans %}
{% url "mezzanine_password_reset" as password_reset_url %} {% url "profile_update" as profile_update_url %} {% blocktrans %}You can also reset your password if you've forgotten it.
{% endblocktrans %} {% endif %} {% endblock %}


Granit Xhaka will struggle to come back from his Arsenal mistake
Granit Xhaka's reaction to being taken off last week could be hard for him to come back from at Arsenal
by Mirror.co.ukI feel for Granit Xhaka because he’s put up with a lot of criticism from his own club’s supporters – but he made a huge mistake in showing such disrespect to the whole crowd at the Emirates.
I get what he says about the abuse, aimed towards his wife and his daughter. That is vile. It is disgusting, and it is not right.
I had it myself in my career, but from opposition fans. The abuse was pretty distasteful at times, and it got to me occasionally, though I think I’d probably better not dwell on a certain celebration in the Merseyside derby!
When it is coming from your own it must be a thousand times worst, but Xhaka made the mistake of aiming his reaction at every Arsenal fan in that stadium.
You can’t do that, there are many who have supported him. It makes it a tough one to come back from.
One of the proudest things I take from my football career is my relationship with the Liverpool supporters. I never took it for granted, I always, always appreciated it.
It was an incredible bond that still holds to this day.
I’d like to think that’s because they could see how much the club means to me, and how much the fans mean to me. Somehow, Xhaka has to do the same now.
His apology didn’t go far enough, and that has not helped his position. Football is a release, an escape for many supporters from the harsh reality of their lives.
We are living in tough times when ordinary people have suffered incredible hardship because of austerity, which has been cruel.
It’s right for Unai Emery to drop him, it’s right he steps away for a few weeks. Then he’s got to come back with a proper apology that conveys he has a passion for the club that matches the fans’ emotions. That’s the only way back for him.


<?php namespace CodeIgniter\Test; /** * CodeIgniter * * An open source application development framework for PHP * * This content is released under the MIT License (MIT) * * Copyright (c) 2014-2019 British Columbia Institute of Technology * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * @package CodeIgniter * @author CodeIgniter Dev Team * @copyright 2014-2019 British Columbia Institute of Technology (https://bcit.ca/) * @license https://opensource.org/licenses/MIT MIT License * @link https://codeigniter.com * @since Version 3.0.0 * @filesource */ use CodeIgniter\HTTP\IncomingRequest; use CodeIgniter\HTTP\UserAgent; use CodeIgniter\HTTP\Response; use CodeIgniter\HTTP\URI; use Config\App; /** * ControllerTester Trait * * Provides features that make testing controllers simple and fluent. * * Example: * * $this->withRequest($request) * ->withResponse($response) * ->withURI($uri) * ->withBody($body) * ->controller('App\Controllers\Home') * ->run('methodName'); */ trait ControllerTester { protected $appConfig; protected $request; protected $response; protected $controller; protected $uri = 'http://example.com'; protected $body; /** * Loads the specified controller, and generates any needed dependencies. * * @param string $name * * @return mixed */ public function controller(string $name) { if (! class_exists($name)) { throw new \InvalidArgumentException('Invalid Controller: ' . $name); } if (empty($this->appConfig)) { $this->appConfig = new App(); } if (empty($this->request)) { $this->request = new IncomingRequest($this->appConfig, $this->uri, $this->body, new UserAgent()); } if (empty($this->response)) { $this->response = new Response($this->appConfig); } $this->controller = new $name($this->request, $this->response); return $this; } /** * Runs the specified method on the controller and returns the results. * * @param string $method * @param array $params * * @return \CodeIgniter\Test\ControllerResponse|\InvalidArgumentException */ public function execute(string $method, ...$params) { if (! method_exists($this->controller, $method) || ! is_callable([$this->controller, $method])) { throw new \InvalidArgumentException('Method does not exist or is not callable in controller: ' . $method); } // The URL helper is always loaded by the system // so ensure it's available. helper('url'); $result = (new ControllerResponse()) ->setRequest($this->request) ->setResponse($this->response); try { ob_start(); $response = $this->controller->{$method}(...$params); } catch (\Throwable $e) { $result->response() ->setStatusCode($e->getCode()); } finally { $output = ob_get_clean(); // If the controller returned a redirect response // then we need to use that... if (isset($response) && $response instanceof Response) { $result->setResponse($response); } $result->response()->setBody($output); $result->setBody($output); } // If not response code has been sent, assume a success if (empty($result->response()->getStatusCode())) { $result->response()->setStatusCode(200); } return $result; } /** * @param mixed $appConfig * * @return mixed */ public function withConfig($appConfig) { $this->appConfig = $appConfig; return $this; } /** * @param mixed $request * * @return mixed */ public function withRequest($request) { $this->request = $request; return $this; } /** * @param mixed $response * * @return mixed */ public function withResponse($response) { $this->response = $response; return $this; } /** * @param string $uri * * @return mixed */ public function withUri(string $uri) { $this->uri = new URI($uri); return $this; } /** * @param mixed $body * * @return mixed */ public function withBody($body) { $this->body = $body; return $this; } }


Police car crashes with vehicle on busy road in Greenock
Emergency services rushed to Patrick Street after the police vehicle collided with another car at around 2.10pm.
by Lynn LoveA police vehicle was involved in a collision in Greenock today.
Emergency services rushed to Patrick Street after the police vehicle collided with another car at around 2.10pm.
The police car was seen with its front grill dented in and the other vehicle's bumper was up in the air.
There was no reported injuries.
Enquiries are ongoing to establish the circumtances.
A Police Scotland spokesperson said: "We were called at 2.15pm to a crash involving a police vehicle and another car on Patrick Street involving two vehicles. There was no reported injuries. The road was reopened shortly after.
"Enquiries are ongoing."


go get a copy of the Aug issue. There is a short but powerful article in there on e-commerce and the main premise is that "Community precedes Commerce". The world is waking up and it would really be cool if we were there to serve breakfast :-) ~~~~~~~ Don't forget my concept of "Locked Avatars". Unlocking some avatars for use involves exchanging e-cash. I was going to do it on CompuSeve through the 'SWREG' feature (ShareWare Reg: you punch in a code number associated with each piece of shareware you want to buy, review the charges and make sure it's the right software, then CompuServe pays the developer from your online charges. Nice :-). However, with the Internet I'd need some form of e-cash anyway. ~~~~~~~ A basic world should be free - the customer can choose from a few off the peg models charges come for -maintaining and updating - regular renovating - extras -custom made worlds price dependant on coding time IndexedFaceSets, Extrusions, textures cost more than Boxes -the choice of designer would also be a factor -animation -zoning - let market forces decide - popular zones should cost money to join. -zones could be traded then comes custom built avatars, avatar fashion ........ ~~~~~~~ Advertisers will go to places where there are 1) lots of hits - back to the counters for wrls theme of a few weeks ago I'd really like to set one up on flux so we can follow TV growth (for the record I am against ads in Flux but relaxed about any other part of TV/EM/HW/V.city) 2) opportunities to selectivly advertise. This is where the Terra Vista zones can be used in a big way. If I was selling fishing tackle and there was a zone of fly fishing worlds I would be interested. etc. ~~~~~~~~~~ But, in one case, we (meaning I; I don't expect people to do this) would build a vHome. A pre-fab jobber with the only real variation being maybe color scheme. Then, if the person wants to start sprucing their vHome up, they would pay (?) $2.00 for a stucco texture, $5.00 for a mexican tile roof, $10.00 for a pool and $20.00 for a rail or white picket fence. Oh, yeah... a chair is $3.00 a couch is $5.00 a fouton...? well... it depends on how fluffy you want it and how many polygons it needs to be... ;-) ~~~~~~~~~~~~ > On the vHomes: > + We're discussing if there would ever be a cost for a vHome. We're > all saying there should eventually be some cost, but the first ones > will be free. With maybe some sort of upgrade cost. The question is > How much would you be willing to pay for a vHome? What would the > going rate be? $10, $20, $0.05? I think I'd have to see a prototype before I could make a definitive judgement call on that one! (Certainly I don't doubt your expertise, I just have never seen a virtual home before! Don't know what it'll be like) If it's a one-time-cost (as opposed to monthly) I'm thinking you could easily charge $20... > comfortable to pay. The other option might be charging $5.00 to put > an extra floor on your vHome, $2.00 for a couch for inside, etc, Oh, I definitely think the more features chosen, the more expensive it should be... and they could upgrade when they felt like spiffing it up a little! > etc... In time people can make their own, if they learn how to VRML? It would be too cool if there was an interface that allowed the "resident" to, say, change the carpet color at will, paint the walls a new color, or re-arrange the furniture... start a fire in the fireplace... plant new flowers in the window boxes... ~~~~~~~~~~ GeorgeTown and Downtown also belong to Terra Vista but are open to advertising! Any way both George Town and Down Town can provide advertising revenue for TV and for the maintainers. Down Town is straightforward - all advertising is paid for. George Town, by it's nature, allows free advertising on the lots but the (yet to be designed) trasport system is under our control. Terra Vista zones and worlds are the property of the Zoners and revenues go to them. ~~~~~~~~~~ ~ It seems to me ths issue here is strictly one of timecost, what the buyer is ~ willing to spend, and what the seller is willing to accept. Yes, I'd agree. I believe your issues with this are the same as some of the concerns I have. How do you determine the timecost? IOW, Fred, just out of college has every idea on the teories of how to do it, but has never done it so takes 10 times longer because he's in his head worrying about doing a flow chart before starting to work. Whereas someone experienced need not have to do this. Who spends longer? Who provides "better" (subjective, I know) content? How can you equivilate (new word made up by me!) the two? Should that take away from any "effort" by the one who put in lots of effort, blood, sweat and tears, yet didn't quite "make the grade"? ~ In the vCity novel, I postulated that "the corporation" made very basic ~ pre-fabricated structures available to people which they, themselves, ~ could modify if they pleased. This is the way I see it happening. Create a base class of vHomes and then it's a pay per feature after that. There's a spin, though... I'll add in a bit... ~ industry of VRML designers who were paid cash on the barrel-head to ~ hand-custom fancier sites. Commercial clientelle... I'd believe... ~ If I remember correctly I pegged the cost of a nice site at $500 U.S. Nice? I hate when people ask me to quantify, but how would you define "nice"? What if we were to say someone's being paid $25/hour which would be about the $50K we've discussed at Eminds. A straight pay per labour would mean it should take about... 20hours to create a "nice" site? So because we try to do a 1:1 or 1:1:1 disbursement of cash revenues, then it should take between 7 hours (let's say a day) and 10 hours (day and a half), with nose to grindstone, to create a "nice" site, and this doesn't take into consideration experience level and available resources to draw from (ie: prefab forms for constructing chimneys or spiral staircases, or whatever) This is the "mesh" that will come in handy, in a big way, down the future. ~ I think the real money to be made will be with corporate accounts, ~ not for residences. Economies of scale. Lots of the small stuff or a few of the big stuff. Less of the latter, more of the former... Not right now, long term... (anyone for doing up a cobweb theory matrix? ;-) ~ As usual. But again, it all depends upon what ~ the customer wants to use a VRML model *for*. Marketing tool? ~ Tourist attraction? Technology testbed? virtual Theatre? Good questions... Determine the value to the customer to generate the cost of the project... I've always seen danger in the principal, similar to gouging, but in the same token the "buyer" pays depending on how bad the buyer "wants". ~ If terra vista wants to establish a virtual currency, may I suggest ~ the "fluxum"? And if a VRML designer is stiffed on his invoice, he ~ can then be "flummoxed". ~~~~~~~~~~~~ These "people", these "vHomOwners"... They're going to want to upgrade their vHomes. Two things to do before even starting. Learn VRML at home or take a course in it somewhere. TelliUniversity sounds like a good place to me. =) Are we ready to take on clients? Anyhow, there's a potential to make revenue there, in training. At this time, the vHomeOwner can start adding. They know how to add mass to the structure, but they may not want to build that fancy marble stairwell. So, they go to the local vHomevHardwarez and pick out just the right texture and framework. More potential for the mesh makers...  More potential revenue... The question about payment is how does it work? What is the econmoy? This is why I keep going to the Terravi. I'll change my language to say, "Fluxum" The way I see it, the vHomeOwner might be prepared to send me a cheque or I might be able to deal with Credit Cards and Debit Cards, long term. But for now, if they have a certain amount of Fluxum in their back pocket, they can transfer the appropriate amount of tokens to me and the deal is complete. (I know, not that simple, but this is just the infancy) I can then take these Fluxum and use them for some other purpose. At some point in time, this token should be convertable to IRL cash. And, there needs to be some trustworthy businesses which help track this movement of Fluxum and floatsam...  ;-) But joking aside, I'd like to see the economy incorporated being somewhat secure. Sure, I don't mind someone making money off a transaction because of the "real" service they give, but the inflationary "creating" of money is not something I'd like to see in play. Perhaps an isolated system needs to be in place. 655K tokens are put into play. If the two entities are prepared to exchange Fluxum for work, then great. If the "worker" wants cold hard cash, then that needs to be negotiated. Cash does not eqaul Fluxum, in this scenario... ~~~~~~~~~~ > Ok, so 2 hours after Coke posts a VRML file of a big white bear > sittind > down and drinking Coke, there are 200 copies of the bear walking > around > drinking Pepsi. Yeah so! I gotta pay for a stinkin' bear either way. Like I have said time and again, we are working with a different model here. Hey, I know you guys are looking at that but, you just keep looking at it with the same rules. Do a bit of lateral thinking here....give away the bear! You're selling Coke.....what the f' does that have to do with a bear! Mad Ave is trying to move onto the net and can't figure it out! > 3) Selling client software is tough; most HTML browser have gone out > of > business trying this (except for MS and IE). Try something different! > 4) Selling plots of VLand is tough too; there have been several small > efforts toward this, some of which are wrapped up in 1 and 2). We > should > study these and see what made or broke them. Jeff was a member of one > of > these, I forget the URL. AW has 250K users! > 2) iChat does OK, 2D chat > 3) Worlds away does OK; 2D chat, Avatars are fully animated; > constrained > resources / 'world'. What are they doing that's different? Keep your eye on Hospitality World over the next 6 months. Let's see what happens...it's anybody's guess! ~~~~~~~~~~~~~ Just a conjecture, security isn't necessary unless there is something that can be "defaced or stolen". Right now, we don't have any of that. The VRML industry, from an artists stand point, may be completely stalemated, except in arenas such as what Andrew brings up so far as Intranet applications. At least the "content" is kept within a local arena, but even then defacing and theft will occur. IMHO, we need to step through that and start taking risks. We can stand on our head for a thousand years and still not come up with 100% safety. I guess when it comes down to it, that's the perspective I'm coming from. I'm OK to disagree on that point. I simply believe that as a whole, we need to move forward and try things and start taking a bit of risk. I'm stepping through, I hope others join me... =) Which brings me to business models... We are in a completely different paradigm than those who start a company with a $4M seed and try to plow through creating a business and being profitable. Our business model (at least mine is): 1) start with "We don't have anything" 2) then to "we put in some time and effort and maybe a few dollars of our personal money into a pot and shake it up, waiting for something to pop out" 3) if revenue starts trickling in, we are very likely ahead of the game. I'm at 2 right now. I've put in some time and effort and a bit of my personal money, and man, am I ever shakin' that pot...! =) And now, it seems that something is popping out. Not much, but something to roll with. So I decide to wrap the community with a VRML environment. Attempt to entice some of the members to become involved by creating VRML homes for them. Then get one member up and running with a VRML conference environment which may become a place for advertising revenue or other business transactions to take place. And as members start to request... no DEMAND... upgrades which I can no longer afford the time, effort, or money to do for free, there will be a breaking point where I will have to say, "Enough!  (Which of course will be done in a very professional manner) At this point in time, revenue stream becomes real and business emerges and everyone I can help along the way, I will. I know there will be a lot of log jams, including potential for lawsuit or theft and defacing or clients not paying. Everything that exists in a traditional model can and will occur in the Virtual model. Those are the risks I am playing.Anyone who is interested in helping develop an economic structure within these communities please email:
Mail me
if you are interested in providing opportunities within the community.
Warning:


Think
It
Think a number beween 1 to infinite
Next
Next
Next
Next
Next
Reveal It!
Once Again
Created with love and javascript by
-
Ujjwal


| Package | flare.util |
| Class | public class Displays |
| Method | Defined by | ||
|---|---|---|---|
|
Displays()
Constructor, throws an error if called, as this is an abstract class.
| Displays | ||
|
addStageListener(d:DisplayObject, eventType:String, listener:Function, useCapture:Boolean = false, priority:Number = 0, useWeakReference:Boolean = false):Function
[static]
Adds a listener to the stage via a given display object.
| Displays | ||
|
panBy(obj:DisplayObject, dx:Number, dy:Number, vp:IValueProxy = null):void
[static]
Pan the "camera" by the specified amount.
| Displays | ||
|
panMatrixBy(mat:Matrix, dx:Number, dy:Number):Matrix
[static]
Performs a pan (translation) on an input matrix.
| Displays | ||
|
rotateMatrixBy(mat:Matrix, angle:Number, p:Point):Matrix
[static]
Performs a rotation around a specific point on an input matrix.
| Displays | ||
|
setChildrenProperties(d:DisplayObjectContainer, vals:Object, p:IValueProxy = null):void
[static]
Sets property values on all children items.
| Displays | ||
|
sortChildren(d:DisplayObjectContainer, cmp:Function):void
[static]
Sorts the children of the given
DisplayObjectContainer
using a comparator function. | Displays | ||
|
thumbnail(src:DisplayObject, width:Number = -1, height:Number = -1, bd:BitmapData = null):BitmapData
[static]
Creates a thumbnail image of the input object using the (optional)
given size.
| Displays | ||
|
visitChildren(con:DisplayObjectContainer, visitor:Function, filter:Boolean = null, reverse:* = false):Boolean
[static]
Iterates over the children of the input display object container,
invoking a visitor function on each.
| Displays | ||
|
zoomBy(obj:DisplayObject, scale:Number, xp:Number, yp:Number, vp:IValueProxy = null):void
[static]
Zoom the "camera" by the specified scale factor.
| Displays | ||
|
zoomMatrixBy(mat:Matrix, scale:Number, p:Point):Matrix
[static]
Performs a zoom about a specific point on an input matrix.
| Displays |
| Displays | () | constructor |
public function Displays()
Constructor, throws an error if called, as this is an abstract class.
| addStageListener | () | method |
public static function addStageListener(d:DisplayObject, eventType:String, listener:Function, useCapture:Boolean = false, priority:Number = 0, useWeakReference:Boolean = false):Function
Adds a listener to the stage via a given display object. If the display object has already been added to the stage, the listener will be added to the stage immediately. Otherwise, the listener will be added whenever the display object is added to the stage. This method allows you to add listeners for stage events without having to explicitly manage the case where the defining elements have not yet been added to the stage.
Parametersd:DisplayObject — the display object through which to access the stage
|
|
eventType:String — the event type
|
|
listener:Function — the event listener
|
|
useCapture:Boolean (default = false ) — the event useCapture flag
|
|
priority:Number (default = 0 ) — the event listener priority
|
|
useWeakReference:Boolean (default = false ) — the event useWeakReference flag
|
Function — the function that will add the listener to the stage upon
an added to stage event, or null if the listener was directly
added to the stage
|
See also
| panBy | () | method |
public static function panBy(obj:DisplayObject, dx:Number, dy:Number, vp:IValueProxy = null):void
Pan the "camera" by the specified amount.
Parametersobj:DisplayObject — the display object to treat as the camera
|
|
dx:Number — the change in x position, in the parent's coordinate space
|
|
dy:Number — the change in y position, in the parent's coordinate space
|
|
vp:IValueProxy (default = null ) — an optional value proxy (such as a
Transitioner ) for storing the new transform matrix
|
| panMatrixBy | () | method |
public static function panMatrixBy(mat:Matrix, dx:Number, dy:Number):Matrix
Performs a pan (translation) on an input matrix. The result is a transformation matrix including the translation.
Parametersmat:Matrix — an input transformation matrix
|
|
dx:Number — the change in x position
|
|
dy:Number — the change in y position
|
Matrix — the resulting, panned transformation matrix
|
| rotateMatrixBy | () | method |
public static function rotateMatrixBy(mat:Matrix, angle:Number, p:Point):Matrix
Performs a rotation around a specific point on an input matrix. The result is a transformation matrix including the rotation.
Parametersmat:Matrix — an input transformation matrix
|
|
angle:Number — the rotation angle, in degrees
|
|
p:Point — the point about which to zoom in or out
|
Matrix — the resulting, rotated transformation matrix
|
| setChildrenProperties | () | method |
public static function setChildrenProperties(d:DisplayObjectContainer, vals:Object, p:IValueProxy = null):void
Sets property values on all children items. The values
within the vals
argument can take a number of forms:
Function
, it will be evaluated
for each element and the result will be used as the property
value for that element.IEvaluable
instance, such as
flare.util.Property
or
flare.query.Expression
, it will be evaluated for
each element and the result will be used as the property value
for that element.d:DisplayObjectContainer — the container whose children's properties should be set.
|
|
vals:Object — an object containing the properties and values to set.
|
|
p:IValueProxy (default = null ) — an optional IValueProxy for collecting value updates.
|
| sortChildren | () | method |
public static function sortChildren(d:DisplayObjectContainer, cmp:Function):void
Sorts the children of the given DisplayObjectContainer
using a comparator function.
d:DisplayObjectContainer — a display object container to sort. The sort may change the
rendering order in which the contained display objects are drawn.
|
|
cmp:Function — a comparator Function .
|
| thumbnail | () | method |
public static function thumbnail(src:DisplayObject, width:Number = -1, height:Number = -1, bd:BitmapData = null):BitmapData
Creates a thumbnail image of the input object using the (optional) given size. If no width, height, or bitmap data parameters are provided then the natural size of the display object will be used. If no width or height values are provided (i.e., they are less than or equal to zero) but a bitmap data is provided, than the dimensions of the bitmap data will be used. If all parameters are provided but the width and height exceed the size of the bitmap data, then the object will be drawn to match the provided width and height, but the thumbnail will be clipped to the size of the bitmap data. If only one of the width or height values are provided, than the other will automatically be selected to preserve the original aspect ratio of the object.
Parameterssrc:DisplayObject — the DisplayObject to create a thumbnail image of
|
|
width:Number (default = -1 ) — the desired width of the object in the thumbnail. If
this value is less than or equal to zero it is ignored.
|
|
height:Number (default = -1 ) — the desired height of the object in the thumbnail If
this value is less than or equal to zero it is ignored.
|
|
bd:BitmapData (default = null ) — a BitmapData instance into which to draw the thumbnail.
If no value is provided, a new BitmapData instance of the needed
width and height will automatically be created.
|
BitmapData — the thumbnail image as a BitmapData instance
|
| visitChildren | () | method |
public static function visitChildren(con:DisplayObjectContainer, visitor:Function, filter:Boolean = null, reverse:* = false):Boolean
Iterates over the children of the input display object container, invoking a visitor function on each. If the visitor function returns a Boolean true value, the iteration will stop with an early exit.
Parameterscon:DisplayObjectContainer — the container to visit
|
|
visitor:Function — the visitor function to invoke on the children
|
|
filter:Boolean (default = null ) — an optional filter indicating which items should be
visited
|
|
reverse:* (default = false ) — optional flag indicating if the list should be
visited in reverse order
|
Boolean — true if the visitation was interrupted with an early exit
|
| zoomBy | () | method |
public static function zoomBy(obj:DisplayObject, scale:Number, xp:Number, yp:Number, vp:IValueProxy = null):void
Zoom the "camera" by the specified scale factor.
Parametersobj:DisplayObject — the display object to treat as the camera
|
|
scale:Number — a scale factor specifying the amount to zoom. A value
of 2 will zoom in such that objects are twice as large. A value of
0.5 will zoom out such that objects are half the size.
|
|
xp:Number — the x-coordinate around which to zoom, in stage
coordinates. If this value is NaN , 0 will be used.
|
|
yp:Number — the y-coordinate around which to zoom, in stage
coordinates. If this value is NaN , 0 will be used.
|
|
vp:IValueProxy (default = null ) — an optional value proxy (such as a
Transitioner ) for storing the new transform matrix
|
| zoomMatrixBy | () | method |
public static function zoomMatrixBy(mat:Matrix, scale:Number, p:Point):Matrix
Performs a zoom about a specific point on an input matrix. The result is a transformation matrix including the zoom.
Parametersmat:Matrix — an input transformation matrix
|
|
scale:Number — a scale factor specifying the amount to zoom. A value
of 2 will zoom in such that objects are twice as large. A value of
0.5 will zoom out such that objects are half the size.
|
|
p:Point — the point about which to zoom in or out
|
Matrix — the resulting, zoomed transformation matrix
|


Asking Questions
I've made an effort to ask good questions in the past. Basically, I try to thoroughly research my question and its respective topic prior to asking the question directly in person or on a blog. Throughout my life, I've always found that it's best if I can figure out the answers to my questions by struggling through the problem myself. However, when I ask a question, I try to provide the context, what actions I was taking, the task I am trying to accomplish, expected results, and actual results. Not all points are necessary in every question, but it just helps me make sure I'm not missing any important information.
I really haven't asked many questions in the Google+ community. However, the few questions I asked have been about average quality. What makes them average quality is that I researchd responses to similar questions prior to my posting. From there, I highlight how my situation was different by providing specific code examples. The outcome was a few people in the Lions community came to my aid with suggestions that remedied the problem. It was a learning momemnt for me and really anyone who had a similar question around fetching with github.


Ⓧ
Bid!
Started:
Ended:
Elapsed:
HELP
▲
▼
End
Scoring:
Load
Delete
Delete All
HELP
➔
Add Player
Start
HELP
Check out this project on Github


Hazardous Waste
by BRIEFFORT HALL RESERVATION, Idaho – The Ninth Circuit upheld the enforcement of a judgment of the Shoshone-Bannock Tribal Court of Appeals, which ruled that FMC Corporation – a chemical manufacturer – must pay an annual use permit fee for storing “radioactive, carcinogenic, and poisonous” waste within the Fort Hall Reservation.
The company operated an elemental phosphorus plant for more than 50 years that produced nearly 22 million tons of hazardous waste that is currently stored on the reservation.
Copyright © 2019 courthousenews.com


--- id: 781 title: uint64 encoded in Protobuf bytes looks wrong date: 2022-02-09T19:46:31+01:00 author: Tiago Espinha guid: http://tiagoespinha.info/?p=781 permalink: /2022/02/2022-02-09-grpc-protobuf-uint64-wrong/ categories: - tech - protobuf - grpc ---
Today as I was trying to debug an issue, I had to interpret a Protobuf message that happened to have a uint64 in it. I only had access to the packet capture and was getting a mixture of: a) Wireshark being able to successfully read and interpret the uint64 apparently correctly and b) when trying to convert the hex bytes into decimal using the calculator getting a very different number, oh and c) getting 9 bytes for a uint64 instead of the expected 8.
I spent far too much time looking at this and it wasn't an exercise in futility either. I had two packet captures and Wireshark was only interpreting one of them correctly. The goal of being able to convert these bytes by hand back to their decimal representation was as a means to then be able to do it in the one that Wireshark was failing to parse.
The key to solve the riddle lies in how varint is encoded on the wire. The Protobuf docs give more detail but the short of it is that each byte has its most significant bit set to 1 if there are more bytes following. This means that if you have the byte 0x00, it will actually show up on the wire as 0x80 (or in binary 10000 0000).
Giving a more concrete example, the decimal number 30000 is encoded in binary as 0111 0101 0011 0000. On the wire, this would show up as 1111 1101 1011 0000 (note all bytes have their most significant bit set, except the last one). Converting that binary back to decimal leaves us with 64944, not 30000.
And that's it. Watch out when interpreting Protobuf messages from the wire!


A simple web application written in AngularJs (mostly) and jQuery. I used also MaterializeCSS and AnimateCSS for the styling. The goal is to get the PageSpeed API results, formatting and make a pretty print of it, allowing the user to analyze all the specs from every platform (including Smartophone and Tablet).
I have written a back-end service in NodeJs using also the Googleapis NodeJs Client to get the results.
Both projects, ng-PageSpeed and express-pgspeedapi are available on GitHub.


LAIR OF THE WHITE WORM A film review by Peter Reiher Copyright 1988 Peter Reiher
Whatever else one may say about Ken Russell and his films, it must be admitted that no one else makes anything like them. That, in and of itself, is praise of some sort. Originality is always hard to come by. Russell delights in the outrageous, the bizarre, even in the tacky. Yet he is a major film talent, with great visual gifts. Which means that whenever Russell makes a new film, you never can tell what you're going to get. Maybe it will be THE MUSIC LOVERS, WOMEN IN LOVE, MAHLER, or CRIMES OF PASSION. On the other hand, it might be SALOME'S LAST DANCE or LISZTOMANIA. Part of the fun of seeing a new Ken Russell movie is finding out which Ken Russell made it.
THE LAIR OF THE WHITE WORM is vintage, though minor, Ken Russell. It's deliciously ludicrous and just barely under control. Working from a turn of the century horror novel by Bram Stoker, Russell updates and subverts the horror/adventure genre in his own peculiar way. The results are rarely terrifying, but usually thoroughly entertaining. The year has yet to produce a stranger film.
The story begins with a Scottish archeologist unearthing a huge snakelike skull from a small excavation of a Norman convent. Soon, the pretty sisters who run the hotel on which the excavation took place are entangled in sinister doings concerning local legends of a great white worm, pagan religion, and a mysterious Lady. Can the valiant archeologist and the local lord, a descendant of a legendary worm-slayer, save the poor girls from Certain Doom?
Russell, who also wrote the screenplay, has taken a most unusual approach to the story. Originally set, of course, around the turn of the century, Russell moves it into modern times. But he keeps the flavor of Victorian adventure novels. With the tiniest of clues, the heros spin incredible, yet utterly correct, theories that require complete rethinkings of their world views. And the most unlikely ideas work - this is a film where one can turn up a mongoose in Midland England on a moment's notice, or where one's pater is certain to have some snake-charming music in his old collection of North African gramophone records. On the other hand, Russell has injected a liberal dose of sex, much of it kinky, that Stoker surely did not include in the novel. He lets no opportunity pass to point out the phallic significance of snakes. Russell deftly turns cartwheels along a knife's edge between the delightfully silly and the naively charming, balancing a metaphoric ball of perversion on his nose.
The film is also visually interesting. Russell is bold with his camerawork, as always, and, as always, can be counted on to provide a distinctive visual style to his films. In this case, he and cameraman Dick Bush provide two - one for the "real world", and one for a set of visions inspired by snake venom. In the real world, he moves the camera smoothly and unobtrusively, lights the scenes with a fair number of sinister shadows, and frequently recourses to wide angle lens to distort the picture, sometimes slightly, sometimes wildly. In the visions, Russell overlights and flattens the shots, uses garish colors, snaps jarringly from one shot to the next, and, generally, makes everything look cheap and sleazy. One has definitely left one world and entered another when he switches styles.
Perhaps the most enjoyable aspect of the film is Russell's attention to details. He is absolutely serious about being silly, so, when the evil villainess picks up a hitchhiker for nefarious purposes, it is, of course, a Boy Scout. Where does she spend her sleeping hours? In an Indian snake basket, of course. And her favorite game is Snakes and Ladders.
Russell extends this attention to detail into the characters. The local lord has a wonderfully odd butler who obviously has no respect for his master and is prone to fall into vaguely lewd reminiscences of his adventures with the previous lord. His expression on being told to lock the chambermaids in their rooms is almost worth the price of admission on its own.
In general, Russell's actors give him precisely what he wants - straight-faced performances despite the general silliness. The heros keep their upper lips stiff despite appalling dangers, the heroines scream on cue, and the supporting players die in stereotype. The one exception, well calculated, is Amanda Donohoe who plays the sinister villainess, conveying not only the menace of the character, but an amusing self-awareness about just how dotty her religion is. Catherine Oxenberg and Sammi Davis play the girls, while Peter Capaldi and Hugh Grant (last seen as the aristocrat in "Maurice") play the archeologist and the lord, respectively.
One could not really say that THE LAIR OF THE WHITE WORM is a good film, but it certainly isn't a dull one. Russell has never done anything quite like it before, yet it bears his distinctive mark and could not possibly have been made by anyone else. One leaves the theater wondering that he actually made this film, and that somebody gave him millions of dollars to do it, and that, against all odds, THE LAIR OF THE WHITE WORM was actually quite entertaining.
Peter Reiher<EMAIL_ADDRESS>(DO NOT send to<EMAIL_ADDRESS>. . . cit-vax!elroy!jato!jade!reiher
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


OK
indicates the response contains a valid result.NOT_FOUND
indicates that the origin and/or destination of this
pairing could not be geocoded.
ZERO_RESULTS
indicates no route could be found between the
origin and destination.
MAX_ROUTE_LENGTH_EXCEEDED
indicates the requested route is too
long and cannot be processed.


Validate a form By using jQuery with some textBox
Contact Form
Name
Gender
male
female
Email
Mobaile Number
Resume
Password
Confirm Password
Ckick Here


| Name | Total Lines | Lines of Code | Total Coverage | Code Coverage |
|---|---|---|---|---|
| lib/pomegranate/rdfs_plus_rulebook.rb | 330 | 105 | 89.09%
|
73.33%
|
Code reported as executed by Ruby looks like this...and this: this line is also marked as covered.Lines considered as run by rcov, but not reported by Ruby, look like this,and this: these lines were inferred by rcov (using simple heuristics).Finally, here's a line marked as not executed.
1 # This file is part of RDF-Inference |
2 # |
3 # This is free software: you can redistribute it and/or modify |
4 # it under the terms of the MIT License. |
5 # |
6 # This software is distributed in the hope that it will be useful, |
7 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
8 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
9 # MIT License for more details. |
10 # |
11 # |
12 # * Authors: Pius Uzamere |
13 # |
14 |
15 $LOAD_PATH << File.join(File.dirname(__FILE__), '../lib/') |
16 require 'lib/pomegranate/rdfs_rulebook' |
17 |
18 class RdfsPlusRulebook < RdfsRulebook |
19 |
20 def rules |
21 rdfs_rules |
22 rdfs_plus_rules |
23 end |
24 |
25 #nodoc |
26 def rdfs_plus_rules |
27 ## |
28 # Implements Type Propagation through owl:inverseOf |
29 # |
30 # ==== Semantics |
31 # Given: |
32 # P owl:inverseOf Q |
33 # x P y |
34 # |
35 # Infer: |
36 # y Q x |
37 # |
38 # ==== Example |
39 # p = RDF::Statement.new(":Pius", ":took_a_class_taught_by", ":Winston"); |
40 # h = RDF::Statement.new(":took_a_class_taught_by", "owl:inverseOf", ":taught") |
41 # assert p; assert h; #=> infers a RDF::Statement ~= RDF::Statement.new(":Winston", "taught", ":Pius") |
42 # |
43 # @author Pius Uzamere |
44 def owl_inverse_of |
45 end |
46 |
47 rule :owl_inverse_of, |
48 [RDF::Statement,:fact,{m.predicate=>:pred, m.object => :new_subj, m.subject => :new_obj}], |
49 [RDF::Statement,:ont_statement,{m.object => :inferred_pred},m.predicate=="owl:inverseOf", m.subject == b(:pred)], |
50 [:not, RDF::Statement, m.predicate==b(:inferred_pred), m.subject==b(:new_subj), m.object==b(:new_obj)] do |v| |
51 inferred_property = v[:ont_statement].object |
52 obj = v[:fact].subject |
53 subj = v[:fact].object |
54 assert RDF::Statement.new(subj, inferred_property, obj) |
55 puts "Made type inference based on owl:inverseOf: RDF::Statement(#{subj}, #{inferred_property}, #{obj})" |
56 end |
57 |
58 ## |
59 # Implements Type Propagation through owl:SymmetricProperty |
60 # |
61 # ==== Semantics |
62 # Given: |
63 # P rdf:type owl:SymmetricProperty |
64 # |
65 # Infer: |
66 # P owl:inverseOf P |
67 # |
68 # ==== Example |
69 # p = RDF::Statement.new(":Pius", ":was_in_a_class_with", ":Adam"); |
70 # h = RDF::Statement.new(":was_in_a_class_with", "rdf:type", "owl:SymmetricProperty") |
71 # assert p; assert h; #=> infers a RDF::Statement ~= RDF::Statement.new(":Adam", ":was_in_a_class_with", ":Pius") |
72 # |
73 # @author Pius Uzamere |
74 def owl_symmetric_property |
75 end |
76 |
77 rule :owl_symmetric_property, |
78 [RDF::Statement,:ont_statement,m.predicate=="rdf:type",m.object=="owl:SymmetricProperty"] do |v| |
79 prop = v[:ont_statement].subject |
80 assert RDF::Statement.new(prop, "owl:inverseOf", prop) |
81 puts "Made type inference based on owl:SymmetricProperty: RDF::Statement(#{prop}, owl:inverseOf, #{prop})" |
82 end |
83 |
84 ## |
85 # Implements Type Propagation through owl:TransitiveProperty |
86 # |
87 # ==== Semantics |
88 # Given: |
89 # P rdf:type owl:TransitiveProperty |
90 # X P Y |
91 # X P Z |
92 # |
93 # Infer: |
94 # X P Z |
95 # |
96 # ==== Example |
97 # p = RDF::Statement.new(":Dirichlet", ":is_an_academic_ancestor_of", ":Minsky"); |
98 # h = RDF::Statement.new(":Poisson", ":is_an_academic_ancestor_of", ":Dirichlet"); |
99 # j = RDF::Statement.new(":is_an_academic_ancestor_of", "rdf:type", "owl:TransitiveProperty"); |
100 # assert p; assert h; assert j; #=> infers a RDF::Statement ~= RDF::Statement.new(":Poisson", ":is_an_academic_ancestor_of", ":Minsky") |
101 # |
102 # @author Pius Uzamere |
103 def owl_transitive_property |
104 end |
105 |
106 rule :owl_transitive_property, |
107 [RDF::Statement,:ont_statement,{m.subject => :trans_prop},m.predicate=="rdf:type",m.object=="owl:TransitiveProperty"], |
108 [RDF::Statement,:fact1,{m.predicate=>:predi, m.subject => :sub, m.object => :trans_obj}, m.predicate == b(:trans_prop), m.subject.not== m.object], |
109 [RDF::Statement,:fact2, m.predicate==b(:predi), m.subject==b(:trans_obj), m.predicate.not=="owl:inverseOf", m.object.not== b(:sub) ] do |v| |
110 subj = v[:fact1].subject |
111 obj = v[:fact2].object |
112 prop = v[:ont_statement].subject |
113 assert RDF::Statement.new(subj, prop, obj) |
114 puts "Made type inference based on owl:TransitiveProperty: RDF::Statement(#{subj}, #{prop}, #{obj})" |
115 end |
116 |
117 ## |
118 # Implements Class Equivalence through owl:equivalentClass |
119 # |
120 # ==== Semantics |
121 # Given: |
122 # A owl:equivalentClass B |
123 # r rdf:type A |
124 # |
125 # Infer: |
126 # r rdf:type B |
127 # |
128 # AND |
129 # |
130 # Given: |
131 # C owl:equivalentClass D |
132 # C rdfs:subClassOf D |
133 # z rdf:type D |
134 # |
135 # Infer: |
136 # z rdf:type C |
137 # |
138 # ==== Example |
139 # p = RDF::Statement.new("mit:class", "owl:equivalentClass", "mit:subject"); |
140 # h = RDF::Statement.new(":6.111", "rdf:type", "mit:class"); |
141 # assert p; assert h; #=> infers a RDF::Statement ~= RDF::Statement.new(":6.111", ":rdf:type", ":mit:subject") |
142 # |
143 # @author Pius Uzamere |
144 def owl_equivalent_class |
145 end |
146 |
147 rule :owl_equivalent_class, |
148 [RDF::Statement,:ont_statement,m.predicate=="owl:equivalentClass"] do |v| |
149 assert RDF::Statement.new("owl:equivalentClass", "rdf:type", "owl:SymmetricProperty") |
150 assert RDF::Statement.new("owl:equivalentClass", "rdfs:subPropertyOf", "rdfs:subClassOf") |
151 #this is cute . . . only annoying thing is that you don't get the downstream explanation of the inferences |
152 end |
153 |
154 |
155 ## |
156 # Implements Property Equivalence through owl:equivalentProperty |
157 # |
158 # ==== Semantics |
159 # Given: |
160 # A owl:equivalentProperty B |
161 # r A c |
162 # |
163 # Infer: |
164 # r B C |
165 # |
166 # AND |
167 # |
168 # Given: |
169 # C owl:equivalentClass D |
170 # C rdfs:subClassOf D |
171 # z rdf:type D |
172 # |
173 # Infer: |
174 # z rdf:type C |
175 # |
176 # ==== Example |
177 # p = RDF::Statement.new("mit:took_class", "owl:equivalentProperty", "mit:took_course"); |
178 # h = RDF::Statement.new(":Pius", "mit:took_course", ":6.111"); |
179 # assert p; assert h; #=> infers a RDF::Statement ~= RDF::Statement.new(":Pius", "mit:took_class", ":6.111") |
180 # |
181 # @author Pius Uzamere |
182 |
183 def owl_equivalent_property |
184 end |
185 |
186 rule :owl_equivalent_property, |
187 [RDF::Statement,:ont_statement,m.predicate=="owl:equivalentProperty"] do |v| |
188 assert RDF::Statement.new("owl:equivalentProperty", "rdf:type", "owl:SymmetricProperty") |
189 assert RDF::Statement.new("owl:equivalentProperty", "rdfs:subPropertyOf", "rdfs:subPropertyOf") |
190 #this is cute . . . only annoying thing is that you don't get the downstream explanation of the inferences |
191 end |
192 |
193 ## |
194 # Implements Individual Equivalence through owl:sameAs |
195 # |
196 # ==== Semantics |
197 # Given: |
198 # x owl:sameAs y |
199 # o P x |
200 # |
201 # Infer: |
202 # o P y |
203 # |
204 # AND |
205 # |
206 # Given: |
207 # x owl:sameAs y |
208 # x P o |
209 # |
210 # Infer: |
211 # z rdf:type C |
212 # |
213 # ==== Example |
214 # p = RDF::Statement.new(":Pius", "owl:sameAs", ":Uzamere"); |
215 # h = RDF::Statement.new(":Pius", "mit:took_course", ":6.171"); |
216 # assert p; assert h; #=> infers a RDF::Statement ~= RDF::Statement.new(":Uzamere", "mit:took_course", ":6.171") |
217 # |
218 # @author Pius Uzamere |
219 |
220 def owl_same_as |
221 end |
222 |
223 rule :owl_same_as_symmetricity, |
224 [RDF::Statement,:ont_statement, m.predicate=="owl:sameAs"] do |v| |
225 assert RDF::Statement.new("owl:sameAs", "rdf:type", "owl:SymmetricProperty") |
226 puts "asserting the symmetricity of owl:sameAs" |
227 end |
228 |
229 |
230 rule :owl_same_as_when_subject, |
231 |
232 [RDF::Statement,:ont_statement,{m.subject => :original, m.object => :doppelganger}, m.predicate=="owl:sameAs"], |
233 [RDF::Statement,:fact, {m.predicate => :p, m.object => :common_object}, m.subject == b(:original), m.subject.not== b(:doppelganger), m.predicate.not== "owl:sameAs"], |
234 [:not, RDF::Statement, m.predicate==b(:p), m.subject==b(:doppelganger), m.object==b(:common_object)] do |v| |
235 |
236 subj = v[:ont_statement].object |
237 pred = v[:fact].predicate |
238 obj = v[:fact].object |
239 |
240 puts "Made type inference based on owl:sameAs: RDF::Statement(#{subj}, #{pred}, #{obj})" |
241 assert RDF::Statement.new(subj, pred, obj) |
242 #this is cute . . . only annoying thing is that you don't get the downstream explanation of the inferences |
243 end |
244 |
245 rule :owl_same_as_when_object, |
246 [RDF::Statement,:ont_statement,{m.object => :original, m.subject => :doppelganger}, m.predicate=="owl:sameAs"], |
247 [RDF::Statement,:fact, {m.predicate => :p, m.object => :ob, m.subject => :common_subject}, m.object == b(:original), m.object.not== b(:doppelganger), m.predicate.not== "owl:sameAs"], |
248 [:not, RDF::Statement, m.predicate==b(:p), m.subject==b(:common_subject), m.object==b(:doppelganger)] do |v| |
249 |
250 obj = v[:ont_statement].subject |
251 pred = v[:fact].predicate |
252 subj = v[:fact].subject |
253 |
254 puts "Made type inference based on owl:sameAs: RDF::Statement(#{subj}, #{pred}, #{obj})" |
255 assert RDF::Statement.new(subj, pred, obj) |
256 #this is cute . . . only annoying thing is that you don't get the downstream explanation of the inferences |
257 end |
258 |
259 ## |
260 # owl:FunctionalProperty |
261 # |
262 # ==== Semantics |
263 # Given: |
264 # P rdf:type owl:FunctionalProperty |
265 # x P y |
266 # x P z |
267 # |
268 # Infer: |
269 # y owl:sameAs z |
270 # |
271 # ==== Example |
272 # p = RDF::Statement.new("mit:had_academic_advisor", "rdf:type", "owl:FunctionalProperty"); |
273 # h = RDF::Statement.new(":Pius", "mit:had_academic_advisor", ":Hal"); |
274 # d = RDF::Statement.new(":Pius", "mit:had_academic_advisor", ":Dude_Who_Wrote_SICP_With_Gerald_Sussman"); |
275 # assert p; assert h; assert d; #=> infers a RDF::Statement ~= RDF::Statement.new(":Hal", "owl:sameAs", ":Dude_Who_Wrote_SICP_With_Gerald_Sussman") |
276 # |
277 # @author Pius Uzamere |
278 |
279 def owl_functional_property |
280 end |
281 |
282 rule :owl_functional_property, |
283 [RDF::Statement,:ont_statement,{m.subject => :the_prop}, m.predicate == "rdf:type", m.object=="owl:FunctionalProperty"], |
284 [RDF::Statement,:fact1, {m.subject => :common_subject, m.object => :first_object}, m.predicate == b(:the_prop)], |
285 [RDF::Statement,:fact2, {m.object => :second_object}, m.subject == b(:common_subject), m.predicate == b(:the_prop)] do |v| |
286 |
287 subj = v[:fact1].object |
288 obj = v[:fact2].object |
289 |
290 puts "Made type inference based on owl:FunctionalProperty: RDF::Statement(#{subj}, owl:sameAs, #{obj})" |
291 assert RDF::Statement.new(subj, "owl:sameAs", obj) |
292 end |
293 |
294 ## |
295 # owl:InverseFunctionalProperty |
296 # |
297 # ==== Semantics |
298 # Given: |
299 # P rdf:type owl:InverseFunctionalProperty |
300 # z P x |
301 # y P x |
302 # |
303 # Infer: |
304 # y owl:sameAs z |
305 # |
306 # ==== Example |
307 # p = RDF::Statement.new("mit:lived_alone_fall_2004_in", "rdf:type", "owl:FunctionalProperty"); |
308 # h = RDF::Statement.new(":Pius", "mit:lived_alone_fall_2004_in", ":pomegranate_314_at_Next_House"); |
309 # d = RDF::Statement.new(":2004_UA_President", "mit:lived_alone_fall_2004_in", ":pomegranate_314_at_Next_House"); |
310 # assert p; assert h; assert d; #=> infers a RDF::Statement ~= RDF::Statement.new(":Pius", "owl:sameAs", ":2004_UA_President") |
311 # |
312 # @author Pius Uzamere |
313 |
314 def owl_inverse_functional_property |
315 end |
316 |
317 rule :owl_inverse_functional_property, |
318 [RDF::Statement,:ont_statement,{m.subject => :the_prop}, m.predicate == "rdf:type", m.object=="owl:InverseFunctionalProperty"], |
319 [RDF::Statement,:fact1, {m.object => :common_object, m.subject => :first_subject}, m.predicate == b(:the_prop)], |
320 [RDF::Statement,:fact2, {m.subject => :second_subject}, m.object == b(:common_object), m.predicate == b(:the_prop)] do |v| |
321 |
322 subj = v[:fact1].subject |
323 obj = v[:fact2].subject |
324 |
325 puts "Made type inference based on owl:InverseFunctionalProperty: RDF::Statement(#{subj}, owl:sameAs, #{obj})" |
326 assert RDF::Statement.new(subj, "owl:sameAs", obj) |
327 end |
328 |
329 end |
330 end |
Generated on Mon Apr 19 20:00:22 -0400 2010 with rcov <IP_ADDRESS>


SAP Hybris
Engage, simplify and innovate
Sberbank-AST
Electronic trading platform
GMT Legal
Legal Partner
Foxico
Elementh's rating 8.5/10Read report
BitRewards
Blockchain rewards and loyalty platform


Your web browser must have JavaScript enabled in order for this application to display correctly.
Timeline Demo 4: offline
Startdate:
Enddate:


Yobs throw fireworks at riot police on bonfire night in Leeds street clashes
Footage shows armoured officers protecting themselves with shields as lit projectiles are hurled at them
by Ruth OvensYobs pelted riot police with fireworks on bonfire night during street clashes in Leeds.
Shocking footage showed a row of armoured officers using shields to protect themselves as dangerous projectiles were hurled at them.
Police are investigating incidents of disorder and anti-social behaviour involving a group of youths in the Harehills Road area of the city.
Reports were received of fireworks and missiles being thrown and bins set alight at around 8.30pm last night, Leeds Live reports.
The road was closed, while officers contained the incident.
A number of people have been arrested and investigations are currently ongoing to identify all those involve.
No-one was reported to have been injured, but police vehicles were damaged.
West Yorkshire Police, Chief Superintendent Damien Miller said: “In conjunction with our partner agencies, we have prepared for all possible eventualities over the bonfire period.
“We made it clear from the outset that any instances of disorder or antisocial behaviour would not be tolerated and we were able to quickly respond.
“Those individuals that engage in such behaviour are within the minority and do not represent the wider community.
“We will continue to provide reassurance in the local area with high visibility patrols.”
Anyone with information as to those responsible is asked to contact the non-emergency number 101 quoting reference 1932 of 05/11.