Chapter 4 Stats (Linear Models)
Please download the following files:
We need ‘rms’, ‘ggplot2’, and ‘car’ packages If you haven’t already installed these:
Load the packages
library(tidyverse)
library(dplyr)
library(tidyr)
library(broom)
library(readr)
<IP_ADDRESS> p.s. today we are going to use the “pipe” %>%
%>%
is the pipe
The pipe takes the data from the left of if and feeds it to the function on the next line. Below are two ways for writing the same command.
select(alldata, cog1:cog3)
alldata %>%
select(cog1:cog3)
4.1 Set up (Running Intro to R commands)
Note: we’re going to use read_csv()
from the readr
package instead of base R’s read.csv because it is a little more robust.
messy_demographic <- read_csv("~/Downloads/messy_demographic.csv") # put in the location of the downloaded data file 1
messy_cognitive <- read_csv("~/Downloads/messy_cognitive.csv") # put in the location of the downloaded data file 2
data3 <- read_csv("~/Downloads/messy_genotype.csv")
## Parsed with column specification:
## cols(
## subject_ID = col_character(),
## age = col_character(),
## sex = col_double(),
## ethnicity = col_character(),
## dx = col_character()
## )
## Parsed with column specification:
## cols(
## subID = col_character(),
## cog1 = col_character(),
## cog2 = col_character(),
## cog3 = col_character()
## )
## Parsed with column specification:
## cols(
## subID = col_character(),
## genotype = col_character()
## )
The data should be merged and ready to go from day 1. If not, here’s the code for it: Copied from here
## I'm using require, it's actually pretty much the same thing as "library"
require(dplyr)
require(stringr)
require(readr)
## we know that we need we have a same missing value issues in all three dataframes
## to avoid copying and pasting 3 times let's set them to a function
recode_missing <- function(df) {
df[df==""] <- NA
df[df=="missing"] <- NA
df[df=="9999"] <- NA
df[df==9999] <- NA
return(df)
}
## pipeping messy demographic to the function we made
## then defining the factors inside a call to mutate
## note I use readr::parse_number(), which less error prone version of as.numeric()
clean_demographic <- messy_demographic %>%
recode_missing() %>%
mutate(age = parse_number(age),
ethnicity = factor(ethnicity,
levels=c("Cauc","AA","As","In","Other")),
sex = factor(sex, levels = c(0,1),
labels = c("Male","Female")),
dx = factor(dx, levels=c(0,1),
labels=c("Control","Case")))
## recoding missing values in using out hand made recode_missing function
## then I use dplyr mutate_at to convert all 3 cog vars to a number
clean_cognitive <- messy_cognitive %>%
recode_missing() %>%
mutate_at(vars(cog1:cog3), funs(parse_number(.)))
## Warning: funs() is soft deprecated as of dplyr 0.8.0
## please use list() instead
##
## # Before:
## funs(name = f(.))
##
## # After:
## list(name = ~ f(.))
## This warning is displayed once per session.
## recode and set genotype to a factor
clean_genotype <- messy_genotype %>%
recode_missing() %>%
mutate(genotype = factor(genotype,
levels=c(0,1,2),
labels=c("AA","AG","GG")))
## use stringr to make the subject IDs match
## use dplyr's inner_join to put all three together
## use select to remove the extra column and put "subID" as the first column
alldata <- clean_demographic %>%
mutate(subID = str_replace(subject_ID, "SUB_", "subject")) %>%
inner_join(clean_cognitive, by = "subID") %>%
inner_join(clean_genotype, by = "subID") %>%
select(subID, everything(), -subject_ID)
## remove the intermediate data from your workspace
rm(messy_demographic, messy_cognitive, messy_genotype,
clean_genotype, clean_cognitive, clean_demographic)
4.2 A very fast stats refresher!!
4.2.1 what stat function do I need??
For today, we are going to focus on what are called “parametric” statistics. We can spend a semester (and many people do) describing the uses of different statistical tests. However today, to pick the “best” statistical test there are two real questions:
- What type of data is my dependant variable (“y”)?
- What type of data is my independant/predictor variable (“x”)?
| Dependant Variable (y) | |||
|---|---|---|---|
| Factor | Numeric | ||
| Independant (x) | Factor | Chi-Squared chisq.test(ftable(y~x)) |
t-testt.test(y~x) OR ANOVA anova(lm(y~x)) |
| Numeric | Logistic Regression glm(y~x,family=binomial()) |
Correlationcor.test(y~x) OR Regression lm(y ~ x) |
|
| Combination (or multiple) | Logistic Regression glm(y~x1 + x2,family=binomial()) |
Multiple Regression lm(y ~ x1 + x2) |
This table is generally works, UNLESS:
- Your data is not normally distributed (we will test for that later…).
- is this is an issue..you will need to enter the land of non-parametric statistics
- Your data is not “independant”, in other words you have a “repeated-measures design”
- you might need a paired t.test or repeated measures ANOVA
- You have more than one dependant variable.
- Then you need to enter the realm of multivariate statistics..
There are tools for all of this in R. But I will not go into them during this tutorial
Most of what we want to do, we can do with the linear model (lm
)
4.3 Looking at Cognition 2 vs Age
The linear model function in R (lm
), like many stats functions in R, uses formula notation, where you describe you dependant and independant variables, separated by a tilda ~
.
Let’s take an example where we want to predict the scores on cognitive scale 2 using our age variable.
In the next chuck we create a linear model fit object. An then call summary on that object.
fit_cog2_age <-lm(cog2 ~ age, data = alldata) # creates lm "fit" object
summary(fit_cog2_age) # prints a summary report of the fit
##
## Call:
## lm(formula = cog2 ~ age, data = alldata)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.8482 -1.9839 -0.0404 1.5766 8.7988
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 20.85385 0.72780 28.65 <2e-16 ***
## age 0.21359 0.01405 15.20 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.947 on 335 degrees of freedom
## (13 observations deleted due to missingness)
## Multiple R-squared: 0.4083, Adjusted R-squared: 0.4065
## F-statistic: 231.1 on 1 and 335 DF, p-value: < 2.2e-16
4.4 Using broom
to save/organize model fit numbers
The best part about running stats in R, in contrast to running your stats in some other “point and click” interface. I that your statistical results (i.e. you test stats, residuals, p values) can all be saved into objects that you can later format into tables, plot, print directly into your report…This is very powerful.
Statistical result objects can be tough to work with. The broom
package extract numbers from statistical fit results into dataframes that are easier to work with.
4.4.1 augment
grabs residuals and predicted values
cogbyage_aug <- alldata %>%
do(augment(lm(cog2~age,data = .)))
head(cogbyage_aug)
## # A tibble: 6 x 10
## .rownames cog2 age .fitted .se.fit .resid .hat .sigma .cooksd
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 28.8 43 30.0 0.192 -1.22 0.00426 2.95 3.66e-4
## 2 2 37.5 47 30.9 0.168 6.58 0.00325 2.93 8.15e-3
## 3 3 37.7 69 35.6 0.305 2.14 0.0107 2.95 2.88e-3
## 4 4 31.7 51 31.7 0.161 -0.0801 0.00297 2.95 1.10e-6
## 5 5 31.4 52 32.0 0.162 -0.546 0.00302 2.95 5.21e-5
## 6 6 36.1 71 36.0 0.329 0.0370 0.0125 2.95 1.01e-6
## # … with 1 more variable: .std.resid <dbl>
4.4.2 tidy
grabs to middle table (beta’s and t-stats)
cogbyage_tidy <- alldata %>%
do(tidy(lm(cog2~age,data = .)))
cogbyage_tidy
## # A tibble: 2 x 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) 20.9 0.728 28.7 4.09e-92
## 2 age 0.214 0.0140 15.2 4.59e-40
4.4.3 glance
grabs to full model stats
cogbyage_glance <- alldata %>%
do(glance(lm(cog2~age,data = .)))
cogbyage_glance
## # A tibble: 1 x 11
## r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC
## <dbl> <dbl> <dbl> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1 0.408 0.407 2.95 231. 4.59e-40 2 -841. 1689. 1700.
## # … with 2 more variables: deviance <dbl>, df.residual <int>
4.5 Example: printing our formatted t
4.5.1 now that things are nicely organized we can built tables for our publications, compare across models, and print results to our report
my_t_stat <- cogbyage_tidy %>%
dplyr::filter(term == "age") %>%
select(statistic) %>%
round(.,2) ## round to 2 decimal places
print(my_t_stat)
## # A tibble: 1 x 1
## statistic
## <dbl>
## 1 15.2
4.5.2 Printing a result to our report
The following line: We observe a significant relationship between age adn cognitive scale 2 (t = 15.2, p = 4.592759910^{-40})
was written in markdown as:
We observe a significant relationship between age adn cognitive scale 2 (t = 15.2, p = 4.5927599\times 10^{-40})
4.6 plotting distributions
4.6.1 Using ggplot to plot a histogram of cognition score 1
ggplot(alldata, aes(x=cog1)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 5 rows containing non-finite values (stat_bin).
4.6.2 Using a combination of “gather” and ggplot to plot all three scores in one plot
alldata %>%
gather(cognitive_scale, cognitive_score,
cog1:cog3) %>%
ggplot(aes(x = cognitive_score)) +
geom_histogram() +
facet_wrap(~cognitive_scale, scales = "free")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 19 rows containing non-finite values (stat_bin).
4.7 Transforming variables to “normal”
From the histogram above.. It looks like cog3
is not normally distributed. This is a problem because it violates “the assumption of normally”, and therefore parametric tests (i.e. the linear model) should not be run in this case.
One solution to this problem is to transform this variable into normally distributed variables, and then do the stats on those.
Let’s use dplyr
’s mutate
function to calculate a log (i.e. log10) and square-root transform (sqrt
).
alldata <- alldata %>%
mutate(cog3_log = log(cog3),
cog3_sqrt = sqrt(cog3))
Let’s plot histograms of these new values
alldata %>%
gather(cognitive_scale, cognitive_score,
cog3_log, cog3_sqrt) %>%
ggplot(aes(x = cognitive_score)) +
geom_histogram() +
facet_wrap(~cognitive_scale, scales = "free")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 18 rows containing non-finite values (stat_bin).
4.8 Using “power transform” from the car
library
The people behind the car
library decided to use their computer’s to find the perfect transform!
The function powerTransform
magically finds the perfect transform!
library(car)
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
##
## recode
## The following object is masked from 'package:purrr':
##
## some
# calculate the best exponent using powerTransform:
pT <- powerTransform(alldata$cog3)
# apply the power transform and save the result to a new variable
alldata$cog3_powerT <- alldata$cog3^pT$lambda ## note ^ is exponent in r
Using powerTransform
is a little tricky (it requires two steps). When things get tricky in R, it’s nice to wrap what you want to do inside a function. That way, you can call the function instead of remembering all the steps next time you want to do something!
## run the power transform, return the transformed variable
## where x is a vector of values
get_pT <- function(x) {
pT <- x^powerTransform(x)$lambda
return(pT)
}
alldata <- alldata %>%
mutate(cog3_pT = get_pT(cog3))
ggplot(alldata, aes(x=cog3_pT)) + geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 9 rows containing non-finite values (stat_bin).
4.9 Recodeding our genotype into risk-allele carriers vs non-carriers
summary(alldata$genotype)
## AA AG GG NA's
## 103 145 94 8
library(forcats)
alldata <- alldata %>%
mutate(risk_carrier = fct_recode(genotype,
carrier = "GG",
carrier = "AG",
non_carrier = "AA"))
4.10 Investigating Interactions
4.10.1 fitting our data with an age by risk-carrier interaction
The concept of statistical interaction goes by many names and has many definitions. Simply this is the concept that the effect of one variable changes depending on the value of another variable.
Interaction is indicated in R formula syntax with a “:” or *
, depending on if you want to automatically include the main effects of your interacting variables or not. As a general rule, always use *
.
fit2 <- lm(cog1 ~ age*risk_carrier, data = alldata)
summary(fit2)
##
## Call:
## lm(formula = cog1 ~ age * risk_carrier, data = alldata)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7.9601 -1.9774 -0.0874 1.6888 12.2729
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 9.18323 1.61921 5.671 3.12e-08 ***
## age 0.06365 0.02967 2.145 0.032678 *
## risk_carriercarrier 4.31736 1.85584 2.326 0.020611 *
## age:risk_carriercarrier -0.12545 0.03468 -3.617 0.000345 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.164 on 326 degrees of freedom
## (20 observations deleted due to missingness)
## Multiple R-squared: 0.1272, Adjusted R-squared: 0.1191
## F-statistic: 15.83 on 3 and 326 DF, p-value: 1.234e-09
alldata %>%
drop_na(risk_carrier) %>%
ggplot(aes(x = age, y = cog1, color = risk_carrier)) +
geom_point() +
geom_smooth(method = "lm")
## Warning: Removed 12 rows containing non-finite values (stat_smooth).
## Warning: Removed 12 rows containing missing values (geom_point).
4.10.2 Plotting all three cognitve variables at once!
alldata %>%
gather(cognitive_scale, cognitive_score,
cog1, cog2, cog3_pT) %>%
drop_na(risk_carrier) %>%
ggplot(aes(y = cognitive_score, x = age, color = risk_carrier)) +
geom_point() +
geom_smooth(method = "lm") +
facet_wrap(~cognitive_scale, scales = "free")
## Warning: Removed 40 rows containing non-finite values (stat_smooth).
## Warning: Removed 40 rows containing missing values (geom_point).
4.10.3 Running our linear model on all three cognitive variables at once!
lm_results <- alldata %>%
gather(cognitive_scale, cognitive_score,
cog1, cog2, cog3_pT) %>%
drop_na(risk_carrier) %>%
group_by(cognitive_scale) %>%
do(tidy(lm(cognitive_score ~ age*risk_carrier, data = .)))
library(knitr)
kable(lm_results %>%
select(cognitive_scale, term, statistic, p.value) %>%
arrange(p.value))
| cognitive_scale | term | statistic | p.value |
|---|---|---|---|
| cog2 | (Intercept) | 14.1811015 | 0.0000000 |
| cog2 | age | 7.1325824 | 0.0000000 |
| cog3_pT | (Intercept) | 5.9003102 | 0.0000000 |
| cog1 | (Intercept) | 5.6714248 | 0.0000000 |
| cog1 | age:risk_carriercarrier | -3.6168948 | 0.0003454 |
| cog1 | risk_carriercarrier | 2.3263728 | 0.0206113 |
| cog1 | age | 2.1451691 | 0.0326778 |
| cog2 | age:risk_carriercarrier | 0.7207797 | 0.4715616 |
| cog2 | risk_carriercarrier | -0.6541716 | 0.5134625 |
| cog3_pT | risk_carriercarrier | 0.5955776 | 0.5518758 |
| cog3_pT | age:risk_carriercarrier | -0.4754718 | 0.6347731 |
| cog3_pT | age | 0.0187474 | 0.9850542 |
4.11 use p.adjust to correct for multiple comparisons
age_effects <- lm_results %>%
dplyr::filter(term == "age")
age_effects$p.FDR <- p.adjust(age_effects$p.value, method = "fdr")
kable(age_effects)
| cognitive_scale | term | estimate | std.error | statistic | p.value | p.FDR |
|---|---|---|---|---|---|---|
| cog1 | age | 0.0636475 | 0.0296701 | 2.1451691 | 0.0326778 | 0.0490167 |
| cog2 | age | 0.1986365 | 0.0278492 | 7.1325824 | 0.0000000 | 0.0000000 |
| cog3_pT | age | 0.0001522 | 0.0081193 | 0.0187474 | 0.9850542 | 0.9850542 |
4.12 BONUS SECTION: using rms
to get more details
When you want more detailed info out of your models. The rms
library can be very useful.
<IP_ADDRESS> total_behaviour_score ~ age
Calculate a composite variable by combining multiple variables Note: new variables can be made easily (using dplyr’s mutate verb)
alldata$totalcog <- (alldata$cog1 + alldata$cog3) / alldata$cog2
Simple linear regression (two ways: base package and rms)
library(rms)
## Loading required package: Hmisc
## Loading required package: lattice
## Loading required package: survival
## Loading required package: Formula
##
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:dplyr':
##
## src, summarize
## The following objects are masked from 'package:base':
##
## format.pval, units
## Loading required package: SparseM
##
## Attaching package: 'SparseM'
## The following object is masked from 'package:base':
##
## backsolve
##
## Attaching package: 'rms'
## The following objects are masked from 'package:car':
##
## Predict, vif
lm.base <- lm(data=alldata, totalcog ~ age)
lm.rms <- ols(data=alldata, totalcog ~ age)
Let’s compare the output’s
lm.base
##
## Call:
## lm(formula = totalcog ~ age, data = alldata)
##
## Coefficients:
## (Intercept) age
## 1.78587 -0.01219
summary(lm.base)
##
## Call:
## lm(formula = totalcog ~ age, data = alldata)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.0529 -0.5054 -0.1940 0.4352 2.3720
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.785875 0.172793 10.335 < 2e-16 ***
## age -0.012192 0.003346 -3.644 0.000313 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.6966 on 322 degrees of freedom
## (26 observations deleted due to missingness)
## Multiple R-squared: 0.03961, Adjusted R-squared: 0.03663
## F-statistic: 13.28 on 1 and 322 DF, p-value: 0.0003125
anova(lm.base)
## Analysis of Variance Table
##
## Response: totalcog
## Df Sum Sq Mean Sq F value Pr(>F)
## age 1 6.445 6.4446 13.28 0.0003125 ***
## Residuals 322 156.259 0.4853
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Note: to make the most out of rms package functionality, we need to store summary stats using the datadist() function. That way, when we call summary() on an ols() object (we just made one called “lm.rms”) it will give us useful info.
dd.alldata <- datadist(alldata)
options(datadist="dd.alldata")
lm.rms
## Frequencies of Missing Values Due to Each Variable
## totalcog age
## 18 8
##
## Linear Regression Model
##
## ols(formula = totalcog ~ age, data = alldata)
##
##
## Model Likelihood Discrimination
## Ratio Test Indexes
## Obs 324 LR chi2 13.09 R2 0.040
## sigma0.6966 d.f. 1 R2 adj 0.037
## d.f. 322 Pr(> chi2) 0.0003 g 0.160
##
## Residuals
##
## Min 1Q Median 3Q Max
## -1.0529 -0.5054 -0.1940 0.4352 2.3720
##
##
## Coef S.E. t Pr(>|t|)
## Intercept 1.7859 0.1728 10.34 <0.0001
## age -0.0122 0.0033 -3.64 0.0003
##
summary(lm.rms)
## Effects Response : totalcog
##
## Factor Low High Diff. Effect S.E. Lower 0.95 Upper 0.95
## age 43 58 15 -0.18288 0.050183 -0.28161 -0.084151
anova(lm.rms)
## Analysis of Variance Response: totalcog
##
## Factor d.f. Partial SS MS F P
## age 1 6.444638 6.4446382 13.28 3e-04
## REGRESSION 1 6.444638 6.4446382 13.28 3e-04
## ERROR<PHONE_NUMBER>77 0.4852754
Visualize predicted results using rms
plot(Predict(lm.rms))
4.13 ols gets more powerful as the model get’s more complicated
This is were we start to add covariates and do multiple regression
lm3 <- ols(data=alldata, cog1 ~ age*risk_carrier + sex )
lm3
## Frequencies of Missing Values Due to Each Variable
## cog1 age risk_carrier sex
## 5 8 8 4
##
## Linear Regression Model
##
## ols(formula = cog1 ~ age * risk_carrier + sex, data = alldata)
##
##
## Model Likelihood Discrimination
## Ratio Test Indexes
## Obs 326 LR chi2 49.39 R2 0.141
## sigma3.1587 d.f. 4 R2 adj 0.130
## d.f. 321 Pr(> chi2) 0.0000 g 1.432
##
## Residuals
##
## Min 1Q Median 3Q Max
## -7.61165 -2.06275 -0.03454 1.86219 11.69825
##
##
## Coef S.E. t Pr(>|t|)
## Intercept 9.7644 1.6478 5.93 <0.0001
## age 0.0622 0.0299 2.08 0.0386
## risk_carrier=carrier 4.3775 1.8678 2.34 0.0197
## sex=Female -0.8926 0.3636 -2.45 0.0146
## age * risk_carrier=carrier -0.1251 0.0349 -3.59 0.0004
##
anova(lm3)
## Analysis of Variance Response: cog1
##
## Factor d.f. Partial SS
## age (Factor+Higher Order Factors) 2 165.95975
## All Interactions 1 128.34287
## risk_carrier (Factor+Higher Order Factors) 2 432.58671
## All Interactions 1 128.34287
## sex 1 60.13082
## age * risk_carrier (Factor+Higher Order Factors) 1 128.34287
## REGRESSION 4 523.84580
## ERROR 321 3202.66179
## MS F P
## 82.97987 8.32 0.0003
## 128.34287 12.86 0.0004
## 216.29335 21.68 <.0001
## 128.34287 12.86 0.0004
## 60.13082 6.03 0.0146
## 128.34287 12.86 0.0004
## 130.96145 13.13 <.0001
## 9.97714
summary(lm3)
## Effects Response : cog1
##
## Factor Low High Diff. Effect S.E.
## age 43 58 15 -0.94428 0.26908
## risk_carrier - non_carrier:carrier 2 1 NA 1.75290 0.41015
## sex - Male:Female 2 1 NA 0.89259 0.36358
## Lower 0.95 Upper 0.95
## -1.47370 -0.41489
## 0.94596 2.55980
## 0.17728 1.60790
##
## Adjusted to: age=49 risk_carrier=carrier
4.14 BONUS SECTION 2 - the “right” way to plot….
How to visualize a significant effect from our regression…Controlling for the other variables in the model….
To visualize a given effect more informatively, we want to caculate the residuals of the model lacking our co-varitate of interest and plot those residuals as our outcome:
For genotype we want a boxplot of model residuals:
lm3.plot <- ols(data=alldata, cog1 ~ genotype + age)
ggplot(data=alldata, aes(y=resid(lm3.plot), x=sex)) +
geom_boxplot()
## Warning: Removed 20 rows containing non-finite values (stat_boxplot).


UserName:
Password:
Male
Famale
Bick
Car
Volvo
Saab
Fiat
Audi
文本框
Personality Information
UserName:
Password:
Male
Famale
Bick
Car


|
| void | EnableMenuEvents (MenuLayer &menuLayer, bool hasHeaders, bool hasSeparators, bool longClicks, bool customBackground) |
| |
| virtual uint16_t | OnGetNumSections () |
| |
| virtual uint16_t | OnGetNumRows (uint16_t section_index)=0 |
| |
| virtual int16_t | OnGetCellHeight (const MenuIndex &cell_index) |
| |
| virtual int16_t | OnGetHeaderHeight (uint16_t section_index) |
| |
| virtual int16_t | OnGetSeparatorHeight (const MenuIndex &cell_index) |
| |
| virtual void | OnDrawRow (const GContext &ctx, const Layer &cell_layer, const MenuIndex &cell_index)=0 |
| |
| virtual void | OnDrawHeader (const GContext &ctx, const Layer &cell_layer, uint16_t section_index) |
| |
| virtual void | OnDrawSeparator (const GContext &ctx, const Layer &cell_layer, const MenuIndex &cell_index) |
| |
| virtual void | OnSelectClick (const MenuIndex &cell_index) |
| |
| virtual void | OnSelectLongClick (const MenuIndex &cell_index) |
| |
| virtual void | OnSelectionChanged (const MenuIndex &new_index, const MenuIndex &old_index) |
| |
| virtual void | OnSelectionWillChange (MenuIndex &new_index, const MenuIndex &old_index) |
| |
| virtual void | OnDrawBackground (const GContext &ctx, const Layer &bg_layer, bool highlight) |
| |
◆ EnableMenuEvents()
| void Pebble::MenuEvents::EnableMenuEvents |
( |
MenuLayer & |
menuLayer, |
|
|
bool |
hasHeaders, |
|
|
bool |
hasSeparators, |
|
|
bool |
longClicks, |
|
|
bool |
customBackground |
|
) |
| |
|
inlineprotected |
Enable the events for the menu. This can be called anytime but should be called when the events will return correct data. If the data changes, you must call ReloadData()
◆ OnDrawBackground()
| virtual void Pebble::MenuEvents::OnDrawBackground |
( |
const GContext & |
ctx, |
|
|
const Layer & |
bg_layer, |
|
|
bool |
highlight |
|
) |
| |
|
inlineprotectedvirtual |
Function signature for the callback which draws the menu's background. The background is underneath the cells of the menu, and is visible in the padding below the bottom cell, or if a cell's background color is set to GColorClear.
- Parameters
-
| ctx | The destination graphics context to draw into. |
| bg_layer | The background's layer, containing the geometry of the background. |
| highlight | Whether this should be rendered as highlighted or not. Highlight style should match the highlight style of cells, since this color can be used for animating selection. |
◆ OnDrawHeader()
| virtual void Pebble::MenuEvents::OnDrawHeader |
( |
const GContext & |
ctx, |
|
|
const Layer & |
cell_layer, |
|
|
uint16_t |
section_index |
|
) |
| |
|
inlineprotectedvirtual |
Function signature for the callback to render the section header at a given
- Parameters
-
| ctx | The destination graphics context to draw into |
| cell_layer | The header cell's layer, containing the geometry of the header cell |
| section_index | The section index of the section header that needs to be drawn |
- Note
- The
cell_layer
argument is provided to make it easy to re-use an .update_proc
implementation in this callback. Only the bounds and frame of the cell_layer
are actually valid and other properties should be ignored.
- See also
- menu_layer_set_callbacks()
-
MenuLayerCallbacks
◆ OnDrawRow()
| virtual void Pebble::MenuEvents::OnDrawRow |
( |
const GContext & |
ctx, |
|
|
const Layer & |
cell_layer, |
|
|
const MenuIndex & |
cell_index |
|
) |
| |
|
protectedpure virtual |
Function signature for the callback to render the menu cell at a given MenuIndex.
- Parameters
-
| ctx | The destination graphics context to draw into |
| cell_layer | The cell's layer, containing the geometry of the cell |
| cell_index | The MenuIndex of the cell that needs to be drawn |
- Note
- The
cell_layer
argument is provided to make it easy to re-use an .update_proc
implementation in this callback. Only the bounds and frame of the cell_layer
are actually valid and other properties should be ignored.
- See also
- menu_layer_set_callbacks()
-
MenuLayerCallbacks
◆ OnDrawSeparator()
| virtual void Pebble::MenuEvents::OnDrawSeparator |
( |
const GContext & |
ctx, |
|
|
const Layer & |
cell_layer, |
|
|
const MenuIndex & |
cell_index |
|
) |
| |
|
inlineprotectedvirtual |
Function signature for the callback to render the separator at a given MenuIndex.
- Parameters
-
| ctx | The destination graphics context to draw into |
| cell_layer | The cell's layer, containing the geometry of the cell |
| cell_index | The MenuIndex of the separator that needs to be drawn |
| callback_context | The callback context |
- Note
- The
cell_layer
argument is provided to make it easy to re-use an .update_proc
implementation in this callback. Only the bounds and frame of the cell_layer
are actually valid and other properties should be ignored.
- See also
- menu_layer_set_callbacks()
-
MenuLayerCallbacks
◆ OnGetCellHeight()
| virtual int16_t Pebble::MenuEvents::OnGetCellHeight |
( |
const MenuIndex & |
cell_index | ) |
|
|
inlineprotectedvirtual |
Function signature for the callback to get the height of the menu cell at a given index.
- Parameters
-
| menu_layer | The MenuLayer for which the data is requested |
| cell_index | The MenuIndex for which the cell height is requested |
| callback_context | The callback context |
- Returns
- The height of the cell at the given MenuIndex
- See also
- menu_layer_set_callbacks()
-
MenuLayerCallbacks
◆ OnGetHeaderHeight()
| virtual int16_t Pebble::MenuEvents::OnGetHeaderHeight |
( |
uint16_t |
section_index | ) |
|
|
inlineprotectedvirtual |
Event to get the height of the section header at a given section index.
- Parameters
-
| section_index | The index of the section for which the header height is requested |
- Returns
- The height of the section header at the given section index
- See also
- menu_layer_set_callbacks()
-
MenuLayerCallbacks
◆ OnGetNumRows()
| virtual uint16_t Pebble::MenuEvents::OnGetNumRows |
( |
uint16_t |
section_index | ) |
|
|
protectedpure virtual |
Event to get the number of rows in a given section in a menu.
- Parameters
-
| section_index | The index of the section of the menu for which the number of items it contains is requested |
- Returns
- The number of rows in the given section in the menu
- See also
- menu_layer_set_callbacks()
-
MenuLayerCallbacks
◆ OnGetNumSections()
| virtual uint16_t Pebble::MenuEvents::OnGetNumSections |
( |
| ) |
|
|
inlineprotectedvirtual |
◆ OnGetSeparatorHeight()
| virtual int16_t Pebble::MenuEvents::OnGetSeparatorHeight |
( |
const MenuIndex & |
cell_index | ) |
|
|
inlineprotectedvirtual |
Function signature for the callback to get the height of the separator at a given index.
- Parameters
-
| menu_layer | The MenuLayer for which the data is requested |
| cell_index | The MenuIndex for which the cell height is requested |
| callback_context | The callback context |
- Returns
- The height of the separator at the given MenuIndex
- See also
- menu_layer_set_callbacks()
-
MenuLayerCallbacks
◆ OnSelectClick()
| virtual void Pebble::MenuEvents::OnSelectClick |
( |
const MenuIndex & |
cell_index | ) |
|
|
inlineprotectedvirtual |
◆ OnSelectionChanged()
| virtual void Pebble::MenuEvents::OnSelectionChanged |
( |
const MenuIndex & |
new_index, |
|
|
const MenuIndex & |
old_index |
|
) |
| |
|
inlineprotectedvirtual |
◆ OnSelectionWillChange()
| virtual void Pebble::MenuEvents::OnSelectionWillChange |
( |
MenuIndex & |
new_index, |
|
|
const MenuIndex & |
old_index |
|
) |
| |
|
inlineprotectedvirtual |
Function signature for the callback which allows or changes selection behavior of the menu. In order to change the cell that should be selected, modify the passed in new_index. Preventing the selection from changing, new_index can be assigned the value of old_index.
- Parameters
-
| menu_layer | The MenuLayer for which the selection event that occured |
| new_index | Pointer to the index that the MenuLayer is going to change selection to. |
| old_index | The index that is being unselected. |
| callback_context | The callback context |
- Note
- menu_layer_set_selected_index will not trigger this callback when the selection changes, but menu_layer_set_selected_next will.
◆ OnSelectLongClick()
| virtual void Pebble::MenuEvents::OnSelectLongClick |
( |
const MenuIndex & |
cell_index | ) |
|
|
inlineprotectedvirtual |
The documentation for this class was generated from the following file:


---
layout: default
title: Meet the team
description: |
There is a growing team at GitHub that maintains and builds the assets you find on this site.
Keep an eye on the GitHub Careers page if you are interested in working with us.
---
{{page.description}}{{page.title}}


class
Name
Street
1
小张
欢迎大家来我家做客
2
小李
欢迎来到祖国心脏
3indesof
小王
希望下次能来做客
典型水库
历史洪水
水清
邮箱
密码
File input
Check me out
Submit
练习
练习
练习
练习
点击弹出
×
Modal title
2345
2345
2345
2345
2345
2345
2345
2345
2345
2345
年纪
班级
年纪
班级
年纪
345
345
345
345
345
345
345
345
345
345
345
345
345
345
345
Link
Button
Option one is this and that—be sure to include why it's great
Option one is this and that—be sure to include why it's great
Option two can be something else and selecting it will deselect option one
Toggle navigation
Brand
Brand1
Link
(current)
Link
Dropdown
Action
Another action
Something else here
Separated link
One more separated link
Submit
Link
Dropdown
Action
Another action
Something else here
Separated link


S. Korean firm sues BAT over alleged trademark infringement
Vitabon, a South Korean venture firm, said Friday it has launched a trademark infringement suit against tobacco giant British American Tobacco.
Vitabon claims that its nicotine-free aromatherapy device, named Sense, and BAT's hybrid e-cigarette product, glo sens, confuse consumers due to their similar names.
Vitabon said it has filed the lawsuit with the Seoul Central District Court, demanding 110 million won ($93,000) in compensation and that manufacturing and sales of glo sens be banned in the country.
"Despite the fact that Vitabon Sense is a product designed to help customers quit smoking and glo sens is an e-cigarette product, the methods of use are very similar and their customer bases very close," a Vitabon official said. "Vitabon Sense was also released prior to glo sens."
BAT Korea said it plans to file a countersuit against Vitabon, saying that the names of the two products are not confusing to consumers at all. (Yonhap)


benchmark.js
test page
JavaScript performance comparison
Info
This is just a test document for benchmark.js
.
Preparation code

Foo!

Preparation code output
Foo!
Ready to run tests
| Test | Ops/sec | |
|---|---|---|
| Sort ascending |
|
pending… |
| Sort descending |
|
pending… |
| Don’t sort at all |
|
pending… |
| Error |
|
pending… |
You can edit these tests or add even more tests to this page by appending /edit
to the URL.


this is a text space with a border
this is a span doing nothingThis is a paragraph, shown in the Times New Roman font.
This is a paragraph, shown in the Arial font.
This is a paragraph, shown in the Lucida Console font.
Mouse over the links and watch them change layout:
This link changes background-color
This link changes text-decoration
A dotted outline
A dashed outline
A solid outline
A double outline
A groove outline. The effect depends on the outline-color value.
A ridge outline. The effect depends on the outline-color value.
An inset outline. The effect depends on the outline-color value.
An outset outline. The effect depends on the outline-color value.


Missing Atlanta college student found dead; roommate, roommate's boyfriend to face charges
by Vandana RambaranA missing student at Clark University Atlanta was found dead Friday and authorities say her roommate and the roommate's boyfriend will be charged in her death.
Atlanta police chief Erica Shields said the body of 21-year-old Alexis Crawford was found at a DeKalb County park, about 11 miles away from her off-campus apartment.
"The case has come to one of the saddest conclusions possible and has been absolutely heartbreaking," Shields said. "To Alexis' family, our hearts go out to you. I am so truly sorry that we could not provide you with a better ending."
Shields did not release details on the cause of Crawford's death and said investigators have not yet established a motive. However, she noted that Crawford filed a police report on Oct. 27 describing "unwanted kissing and touching" by 21-year-old Barron Brantley, the boyfriend of Crawford's roommate Jordyn Jones, also 21. Shields said investigators were securing arrest warrants for murder against both Brantley and Jones.
The chief added that one of the two suspects led investigators to Crawford's body, but did not specify which one.
Alexandria Crawford, Alexis' sister, told police she last heard from her on the night of Oct. 30. Alexis had texted Alexandria to ask: "What are you doing for the weekend?" Her sister responded, "Nothing."
Crawford was last seen in public that same day at a store along Ralph David Abernathy Boulevard in southwest Atlanta. Her family reported her missing two days later, on Nov. 1.
Jones,told police she took Crawford to a liquor store around 11:30 p.m. on the night of Oct. 30. Police released surveillance photos of Crawford from inside the liquor store.
Jones claimed she last saw Crawford at 12:30 a.m. Jones said she then went to bed and did not see Crawford in the apartment later that morning when Jones left for class.
CLICK HERE FOR THE FOX NEWS APP
A police report stated that Crawford’s iPhone, identification card and debit card were all missing from the apartment but her phone charger and keys were found inside the residence.
University President George French Jr. said Crawford's death was "the worst possible news."
“Our deepest prayers and thoughts are with her family,” French wrote in a letter to the university family “Tonight we mourn together.”
Click for more from Fox5Atlanta.com.
The Associated Press contributed to this report.


{% macro render_results(url, results) %}
The website was analyzed and this is what it might be running. The numbers in red show how much every indiviual indication contributed to the overall score. Values above 1.0 in total mean that we're pretty confident.
Does not look like this website is written in a technology we can detect. {% endif %} {% endmacro %}


Toggle navigation
Demo Website
This is a demo website
You can login to this website using your mobile phone
Login using Mobile-ID


--- layout: post status: publish published: true title: Podcast 4.47 - Every Precious Thing author: display_name: Corey Fineran login: Corey email<EMAIL_ADDRESS>url: '' author_login: Corey author_email<EMAIL_ADDRESS>wordpress_id: 8038 wordpress_url: http://ivyenvy.com/?p=8038 date: '2012-12-11 22:12:37 +0000' date_gmt: '2012-12-12 04:12:37 +0000' categories: - Podcast tags: - Hanshin Tigers - Kyuji Fujikawa - Nate Schierholtz comments: [] ---
Andy, Corey and Kurt talk about the moves the Chicago Cubs have made in the last week. The Cubs bring in Japanese closer Fujikawa. On paper, he's been dominant in Japan and 2013 should show us what we can expect from him in Major League Baseball. We consider what this move means for Carlos Marmol. What will the roles of these two pitchers be?
One aspect of baseball on the north side that Fujikawa will have to adjust to is the lack of intro music when pitchers come out of the bullpen. You'll want to hear the song Fujikawa came out of the bullpen to with the Hanshin Tigers.
The Cubs add outfielder Nate Schierholtz. Schierholtz will most likely play in right field every day, with David DeJesus moving to center. Kurt looks at the Rule 5 draft and tells about the additions and subtractions for the Cubs.
We have three Cubs.com Internet Muscle Flexes for you this week. Then we pick a winner for this week's photo caption contest.


EDIT: Note that this package has evolved quite a bit from this initial post. While the basic interface is the same, support for additional features and some choices in formatting differ from what is presented here. Please see the README for the latest introduction to the package. Readers may also be interested in the more recent post discussing the introduction of several new features including semantic tools in the knitcitations
package
Markdown is becoming an increasingly popular platform for lightweight and online publishing. While traditional publishing tools like LaTeX and word processors have long had integrated bibliographic management, few tools handle citations for lightweight publishing. I am finding myself more and more drawn to markdown rather then tex/Rnw as my standard format (not least of which is the ease of displaying the files on github, particularly now that we have automatic image uploading. I’ve taken a little whack at generating in-text citations using knitr and other R tools.
Installation
I’ve put some simple functions in a knitcitations
package (see the most recent version of the knitcitations package on github here). The functions use the crossref API to grab citation information given a doi, so I don’t have to generate a bibtex file for papers I’m reading, (inspired by the kcite package for Wordpress). One can currently grab the package from Github
library(devtools)
install_github("knitcitations", "cboettig")
Let’s load the package into R and go for a spin.
require(knitcitations)
Generating citations
DOI Approach
Then we can generate a citation given a DOI with the ref
function:
r <- ref("10.1111/j.1461-0248.2005.00827.x")
print(r, "html")
Halpern BS, Regan HM, Possingham HP and Mccarthy MA (2006). “Accounting For Uncertainty in Marine Reserve Design.” Ecology Letters, 9. ISSN 1461-023X, https://dx.doi.org/10.1111/j.1461-0248.2005.00827.x.
Note that R allows bibitems to print in a variety of formats, including html.
We can generate inline citations in the short name/date format with the citet
function:
citet("10.1111/j.1461-0248.2005.00827.x")
[1] “Halpern et. al. (2006)”
Similarly we can generate parenthetical citations with the citep
function,
citep(c("10.1111/j.1461-0248.2005.00827.x", "10.1890/11-0011.1"))
[1] “(Halpern et. al. 2006; Abrams et. al. 2012)”
Which can take a list of DOIs to cite parenthetically. The citet
and citep
functions are automatically retrieving the available metadata via the Crossref API, and R is storing the information to generate the final bibliography.
Using and creating citation keys
When specifying a DOI for a citation, we can also give the citation a simple key name so we can use it later without having to remember the DOI, for instance, we can make the first citation of a particular example as
citep(c(Michaels = "10.1111/j.1755-263X.2012.00241.x"))
[1] “(Michaels & Tyre, 2012)”
and then later use
citep("Michaels")
[1] “(Michaels & Tyre, 2012)”
If we do not pass a key for the DOI we create, knitcitations will automatically generate a key of it’s own using the last name of the first author and the year. For instance, based on one of the DOI-citations we have already created, we can do
citet("Halpern2006")
[1] “Halpern et. al. (2006)”
and knitcitations recognizes the key. The function will try to avoid collisions in the key: if it is given or creates a key matching one that is already in use, it will see if the titles of the articles match. If the are the same, the same key is used to avoid a duplicate entry. This makes it safe to call
citet(c(Halpern2006 = "10.1111/j.1461-0248.2005.00827.x"))
[1] “Halpern et. al. (2006)”
even if we have earlier or later cited by the doi alone. Collision checking also avoids duplicating keys that correspond to different papers. If the titles are unique, knitcitations appends an underscore at the end of the automatically generated key. For instance, here we call a DOI that corresponds to a different citation with the same first author and year:
citet("10.1111/j.1523-1739.2005.00258.x")
Warning message: Automatic key generation found a copy of this key, using Halpern2006_ instead
[1] “Halpern et. al. (2006)”
A warning (not printed by knitr when this is used inline, but included in the log file) alerts us to the fact that this citation has been given an alternate key,
citet("Halpern2006_")
[1] “Halpern et. al. (2006)”
Of course if managing different keys sounds annoying, we can just call the DOI directly each time.
Bibtex Approach
If we have a bibtex file, we can use this for the citations as well. If you don’t have a bibtex file handy, you can make one containing the citation information for some of R’s packages:
write.bibtex(c("bibtex", "knitr", "knitcitations"), file = "example.bib")
We could also have used the ref
function write a bibtex file for our list of DOIs
refs <- lapply(c("10.1111/j.1461-0248.2005.00827.x", "10.1890/11-0011.1"),
ref)
write.bibtex(refs, file = "refs.bib")
Once we have a bibtex file available, we must read it into R.
bib <- read.bibtex("example.bib")
We can now create citations from bib
using the bibtex key,
bib[["knitr"]]
Xie Y (2012). knitr: A general-purpose package for dynamic report generation in R. R package version 0.5.4,
The inline citation tools can also now use this bib
instead of a DOI to generate a citation,
citet(bib[["knitr"]])
[1] “Xie, (2012)”
citep(bib[c("knitr", "bibtex")])
[1] “(Xie, 2012; Francois, 2011)”
Like the case of the DOI, after we have used a citation once, we can cite by the bibkey name directly, rather than having to reference the bibentry object (e.g. from the bib
list):
citet("knitr")
[1] “Xie, (2012)”
Using the inline citations
The inline citation calls are designed to be used with knitr’s inline code blocks. In markdown, these are enclosed in ` r `. The output format will use the plain-text rendering rather than the code markup. Thus we can use the line citep("10.1111/j.1461-0248.2005.00827.x")
to generate a parenthetical citation, (Halpern et. al. 2006). We can generate the in-text citations with citet
, such as Xie, (2012).
Generating the final bibliography
As we go along adding inline citations, R stores the list of citation info. Then at the end of the document, use this command to print the bibliography generated by the use of our inline citations.
bibliography("html")
Halpern BS, Regan HM, Possingham HP and Mccarthy MA (2006). “Accounting For Uncertainty in Marine Reserve Design.” Ecology Letters, 9. ISSN 1461-023X, https://dx.doi.org/10.1111/j.1461-0248.2005.00827.x.
Abrams PA, Ruokolainen L, Shuter BJ and Mccann KS (2012). “Harvesting Creates Ecological Traps: Consequences of Invisible Mortality Risks in Predator-Prey Metacommunities.” Ecology, 93. ISSN 0012-9658, https://dx.doi.org/10.1890/11-0011.1.
Michaels S and Tyre AJ (2012). “How Indeterminism Shapes Ecologists’ Contributions to Managing Socio-Ecological Systems.” Conservation Letters. https://dx.doi.org/10.1111/j.1755-263X.2012.00241.x.
Halpern BS, Pyke CR, Fox HE, Haney JC, Schlaepfer MA and Zaradic P (2006). “Gaps And Mismatches Between Global Conservation Priorities And Spending.” Conservation Biology, 20. https://dx.doi.org/10.1111/j.1523-1739.2005.00258.x.
Xie Y (2012). knitr: A general-purpose package for dynamic report generation in R. R package version 0.5.4, https://yihui.name/knitr/.
Francois R (2011). bibtex: bibtex parser. R package version 0.3-0, https://CRAN.R-project.org/package=bibtex.
Reflections
We could have justed printed bibliography in plain text format using with bibliography()
. Note that it contains only the citations created with the inline citation commands citet
and citep
, in the order cited. All of these citations are stored in a hidden options variable in R when the inline functions are called. To reset the citation list (i.e. empty the contents of “bibliography()”) we can use the cleanbib()
command, or set the option bibliography(erase=TRUE)
. Typically we could hide the bibliography chunk using a inline knitr call or the chunk option “echo=FALSE”.
I hope to add markup to format this a bit more nicely later. For instance, we want the links to appear as real links. Additionally, we may want to add markup around the citations, such as the reason for the citation into the link using the Citation Typing Ontology. Ideally I need a method to support different citation styles, even though it is silly in today’s world that the citation format is still a choice of the publisher and not a choice of the reader. This will probably require citeproc integration and a major upgrade. Please report any bugs, feature requests or citations on the Github issues tracker!
Comparing lightweight citation alternatives
Several citation alternatives are available for lightweight publishing outside of this option, each with its own advantages and limitations. John MacFarlane’s Pandoc is probably the most widely used citation manager for markdown files, working with a bibtex source file but formatting the citation lists using citeproc. It has the advantage of a more concise citation syntax, consistent with the source-readable goals of markdown and citation formating. Of course it is a markdown extension and will not be read by other markdown interpreters. This would be less of an issue of Pandoc could run markdown -> markdown without garbling syntax of some other markdown interpreter, like Github-flavored markdown.
The only other tool I know of that provides dynamic citations by DOI look-up is Phil Lord’s excellent Wordpress plugin, kcite. It now uses citeproc for formatting, automatically links the in-text citations to the bibliography, supports PubMed and ArXiv ids as well as DOIs and even web URLs (though not bibtex files). The major limitation for me is that it is limited to Wordpress with Wordpress specific shortcode. (Of course I introduce R-specific code here, but with the assumption of a knitr-based audience who probably uses github). A variety of other platform-specific plugins are available to convert bibtex files into citations for different blogging platforms, including Wordpress and Jekyll.
So why knitcitations? My goal is primarily to bring this functionality to knitr users who rely on the markdown format rather than the latex format and are interested in dynamic citations and web-based publishing. I hope it finds its niche.


{% extends "base.html" %} {% block title %}Open Science Pool - Run a Docker Container{% endblock %} {% block head %} {% endblock %} {% block body %}
Before you proceed, please take note of the following items:
The first step is to request a new authentication token for your resource. Choose the resource you want to register from the options below and run the corresponding command in the terminal:
{% include "install-commands.html" %}See the screenshot below for an example of output from running the above command:
Once the token request is made, the script will print out a URL where you can approve the token request. You can Ctrl+click on the URL in the Terminal output (Ubuntu hosts), copy/paste the URL to a browser window, or enter the code manually here. You may be required to log in again. Click "Submit" and check the terminal for successful registration. See the screenshot for an example of approving the request:
Finally, you will get a message on the terminal that the token was approved:
The token is now available inside the "tokens" directory relative to where you invoked the "docker run" command.


Electric Maserati GranTurismo Successor Rendered, Looks Like a Sharper Alfieri
by Andrei TutuNow that the Maserati GranTurismo "Zeda" has marked the retirement of the 12-year-old model, the Italian automotive producer can handle its future electrification plans. The Italian automaker has committed to greener future, one that will see each new model coming with either a hybrid or an all-electric powertrain.
The Trident brand has vowed to maintain the emotional driving experience that has made its Grand Tourers famous for so many decades and we should get to see the results of that promise next year.
Note that the automaker has traditionally been transparent in terms of its future product plans. So, based on recent presentations, we know that 2020 will bring the first electrified Maserati sportscar.
We're talking about a GT based on the Alfieri concept, which, as stated in the presentation that's part of the gallery above, will feature a hybrid powerplant. And an all-electric version is expected to come further down the line.
The plan also includes a compact crossover slotted below the Levante, with this expected to offer both all-electric and hybrid powertrains starting from 2021.
Returning to the GT backbone of the future Maser range, I've brought along a rendering that might give us a few hints of the vehicle's look.
The image, which you can notice in the social media post below, comes from Lorenzo Carpignano, a designer who works with Pininfarina, the Italian design house that penned the GranTurismo via American designer Jason Castriota.
This proposal packs the same classic sportscar proportions of the Maserati Alfieri concept, albeit coming with a more aggressive approach. Then again, the said concept dates back to 2014, so it's clear that the upcoming model needs a fresh touch. So now that Ferrari has expanded its GT lineup by adding the Roma coupe to the Portofino coupe-cabriolet, perhaps Maserati will sharpen up its styling.
The newcomer will obviously be offered in both fixed-roof and open-top form. As for its tech side, the said presentation talks about the partial electrification adding 175 kg (386 lbs), while offering e-AWD capabilities with full active torque vectoring.


Software Developer
Primary Education
Professional Education
This was my internship. Here mi job was to maintain the infrastructure and solve problems with the workstations. One of the bigger challenges was to join three separate networks within the institution.
I started as a software analyst in charge of supporting many systems and processes. After this stage I moved on to be a developer. Here I worked with many Microsoft Technologies including vbscript, asp.net, vb.net, c#.net and many other non development tools like Reporting Services and Analysis Services.
One of my roles is working with SSRS Reporting Services. I also work as a Developer, working with technologies like vb.net, c#.net and others.
In the near future I would like to branch out and professionally develop in other technologies outside the Microsoft spectrum. I really prefer the open source world, mainly Python, Ruby and now Go.
In the long term Id like to create my own startup with some projects I have laid out. Im actively working on them but they've not yet come to fruition.


S. K. Samanta & Co. (P) Ltd., better known as SKSL, is an ISO 9001-2008 engineering company that has been executing EPC contracts in energy and infrastructure sectors since its incorporation in 1982. During the last four decades, SKSL is engaged in the execution of turnkey projects right from the underlying stages of planning, design, procurement, engineering, supply, construction to commissioning and handing over to clients after conducting performance guarantee tests. We are a people-driven enterprise with a team of incredibly competent and experienced engineers from various industries who strive for the common goal of excellence. With a passion for growth, SKSL has recently diversified into the steel sector by setting up a fully automated TMT Bar Rolling Mill with an impressive capacity of 500 MT/day. We firmly believe in our commitment to provide sustainable and ingenious solutions that have a lasting impact on communities across India by leveraging our extensive engineering expertise, our ethos of innovation, and our cutting edge technology.
With a focus on time and quality, SKSL continually strives to deliver excellence by adopting state-of-the-art technologies, methodologies and materials in the field of engineering, designing, construction, operation and maintenance of EPC projects.
For immaculate and on-time execution of projects, we leverage strategic collaborations with diverse professionals to respond to our clients' needs in an innovative, economical, efficient,and dynamic manner.
SKSL is committed to continuing its rich legacy of seamless partnerships with its prolific clients and customer base by conducting our business with integrity, hard work and transparent practices.
We encourage a safe working environment in a way that fosters learning, development and appreciation for high-calibre and passionate individuals.
To emerge as a distinguished leader in all avenues of business that we venture into with our people, with our customers being an integral part of the process.
To forge trusted, long-lasting relationships and adhere to the mantra of execution excellence driven by an entrepreneurial spirit and a sense of accountability to serve our clients.
To expand our core competencies to guarantee that our projects are mutually beneficial for all without compromising on our responsibility as engineers.
To endeavour to meet the needs of today without jeopardising the ability of future generations to by integrating feasible, sustainable development practices and generally striving towards creating a better nation.
Lorem ipsum dolor sit amet, consectetur dipisicing elit., sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim. sed do eiusmod tempor incididunt.
Lorem ipsum dolor sit amet, consectetur adipisicing elit., sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim. sed do eiusmod tempor incididunt.
With the new TMT Bar Mill, we have completed over 40 projects. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed.
We started our business in executing EPC contracts in 1982. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed.
With a humble start of 5 employees, we now have over 380 employees. Lorem ipsum dolor sit amet, consectetur.
Lorem ipsum dolor sit amet, consectetur adipisicing elit., sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim. sed do eiusmod tempor incididunt.
Lorem ipsum dolor sit amet, consectetur dipisicing elit., sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim. sed do eiusmod tempor incididunt.
We are honoured to be associated with our clients.


BALTO A film review by Steve Rhodes Copyright 1995 Steve Rhodes
RATING (0 TO ****): * 1/2
BALTO is a cartoon movie for kids. Although I was bored silly by it and think it contains unacceptably poor quality animation, nevertheless, my son is a testament to the fact that young kids may go for it regardless.
BALTO is based on a true story. It starts and ends as a live action film in New York City's Central Park where a Grandmother (Miriam Margolyes) and her granddaughter are looking for a statue of the real Balto who was an animal half dog and half wolf who saved many people during an Alaskan blizzard in 1925. Quickly the movie shifts to a cartoon version of the tale.
Being a half-breed, Balto (voiced by Kevin Bacon) is not very popular in the little isolated settlement of Nome, Alaska. His only friends are his sidekick, a Russian snow goose named Boris (voiced by Bob Hoskins), as well as two polar bears named Muk and Luk (both voiced by Phil Collins). He does have a blossoming romance with a pedigreed husky called Jenna (voiced by Bridget Fonda). This romance is a take off on the one from LADY AND THE TRAMP, but like most of this highly derivative movie, it is a pale imitation of the genuine article. Jenna is being wooed by Steele (voiced by Jim Cummings) who is the current leader of the sled dogs.
The first part of the movie has Balto upset because he is not a full blooded dog. Boris reflects that, "He only knows what he is not. If he could only see what he is." Jenna's owner is a little girl named Rosy (Juliette Brewer). Rosy gets diphtheria, and as she is "the eighteenth case this week", the doctor is all out of diphtheria antitoxin. Planes and boats try to get through to Nome, but as they are over six hundred miles away in a blizzard, nothing can make it. Finally, a train goes a little part of the way, but they need a sled dog team to go six hundred miles to pick up the antitoxin for Rosy and all of the other now sick inhabitants of the town. The movie is about Balto's bravery and his clash with Steele who would rather see people die than Balto get the glory.
Many heroic scenes follow and Balto muses, "since when do you need a pedigree to help someone". Still he has his doubts, but Boris is always by his side with words of encouragement like, "Let me tell you something Balto. A dog can not make this journey alone, but maybe a wolf can."
So why was I bored with such an inspiring tale of the original Iditarod sled race? Well, I have three main criticisms of the movie. First, if you have seen most of the old Disney feature length cartoons, you will see little new here. Almost every scene is one you will swear you have seen before. As one of many examples, the sled goes over a breaking bridge, and Balto has just enough strength to pull the sled up when the bridge collapses and the sled starts sliding into the canyon. I have seen scene this many times before.
Second, thanks to poor direction (Simon Wells), the voices have no life to them. None. Compare this to any Disney film especially to LADY AND THE TRAMP which this movie most closely resembles. Every character there came alive with distinctive, interesting, compelling, and believable voices. Here they speak in dull tones. There is not a single character that was believable, the worse being Steele. Moreover, the script (Elana Lesser and Cliff Ruby) has almost no laughs. One of the few times I heard much laughter in the theater was when one character hit another with a snowball. Now, if that scene, which is duplicated in a hundred other movies, is the best the writers can come up with, you know the movie is in serious trouble.
 After the recent Disney cartoons (POCAHONTAS, LION KING, and TOY STORY), the bar has been raised. The quality of the images here pale (pun intended) in comparison. Let me give some examples. The colors are all washed out and the characters, see especially the grizzly bear, are not drawn with sufficient detail and colors. The cels look like they have been sitting in the son too long and the color has been bleached out. This was not just some problem with the print I saw because the live action part was full of rich colors. Take as another example the lights in the cartoon. Lights in BALTO are usually done as a ball of light that is bright for two feet and then the light disappears entirely. There is none of the natural tapering off of real light. Compare this to the realistic lighting effects that are common today in feature length cartoons. Finally, there are a lot of falling snow scenes. None of the animals get even a speck of snow on them during these snow falls because I guess that would make them slightly trickier to draw.
BALTO drags on for only 1:14. It is rated G and would not offend anyone. My son Jeffrey (age 6 1/2) gets frighten easily, but almost nothing scared him in BALTO except for the brief grizzly bear scene which was a good excuse for a trip to a local lap. I think BALTO is fine for kids of any age. My ever agreeable son has given a thumbs up to all of the 18 different movies we took him to this year, and this movie was no exception. I can not recommend that anyone waste their time with BALTO - better to see TOY STORY for a third or fourth time. Since Jeffrey did like the film and never got scared, since there is nothing in it to offend anyone in it, and since we are supposed to be big hearted during the Christmas season, I am most generously awarding BALTO * 1/2.
**** = One of the top few films of this or any year. A must see film. *** = Excellent show. Look for it. ** = Average movie. Kind of enjoyable. * = Poor show.  Totally unbearable.
REVIEW WRITTEN ON: December 27, 1995
Opinions expressed are mine and not meant to reflect my employer's.
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


{{ page.title }}
The Škoda leather collection is a set of wallets, a manicure set and a keychain. I concentrated on designing a product which promotes quality in the company.
It was an honor to work for Škoda Auto, a well known automobile manufacturing company, one of the oldest car making companies in the world.
Good cooperation with an open minded producer led to this set of unique products reflecting positive thinking and can do attitude. I give special thanks to Uniko for helping this design come to life.
It is produced by Uniko. Products are available at Škoda Auto Stores.


{% extends "base.html" %} {% block title %} About {% endblock %} {% macro render_content() %}
Refurence is a service for consolidating and displaying visual and text references to aid the art-making process
This site in particular is intended as tool for use in the "Furry" fandom
Make a fursona Refurence and send all relevant info to an artist with a single URL
deadbeat - code hyena, school boy bitch
Ruxley - the caribou guru
Seela - emotional support technician and a wolf


Trusting people is my default, and as such I do not have anyone in my life currently who I do not trust, aside from those who have given me reason to do so. However, I will do my best to remember these techniques for next time I meet someone new, and try talk about personal things to establish their trust in me.
I felt good afterwards. After only one session I can't say I feel considerably different about any of the people involved, but I agree that being kind or even just thinking kind thoughts about others makes you feel good, so it is certainly a worthwhile exercise for the future.


|
geopm
|
#include <PolicyStoreImp.hpp>
Public Member Functions | |
| PolicyStoreImp (const std::string &database_path) | |
| PolicyStoreImp ()=delete | |
| PolicyStoreImp (const PolicyStoreImp &other)=delete | |
| PolicyStoreImp & | operator= (const PolicyStoreImp &other)=delete |
| virtual | ~PolicyStoreImp () |
| std::vector< double > | get_best (const std::string &agent_name, const std::string &profile_name) const override |
| Get the best known policy for a given agent/profile pair. More... | |
| void | set_best (const std::string &agent_name, const std::string &profile_name, const std::vector< double > &policy) override |
| Set the record for the best policy for a profile with an agent. More... | |
| void | set_default (const std::string &agent_name, const std::vector< double > &policy) override |
| Set the default policy to use with an agent. More... | |
| Public Member Functions inherited from geopm::PolicyStore | |
| PolicyStore ()=default | |
| virtual | ~PolicyStore ()=default |
Additional Inherited Members | |
| Static Public Member Functions inherited from geopm::PolicyStore | |
| static std::unique_ptr< PolicyStore > | make_unique (const std::string &data_path) |
| Returns a unique_ptr to a concrete object constructed using the underlying implementation. More... | |
| static std::shared_ptr< PolicyStore > | make_shared (const std::string &data_path) |
| Returns a shared_ptr to a concrete object constructed using the underlying implementation. More... | |
Manages a data store of best known policies for profiles used with agents. The data store includes records of best known policies and default policies to apply when a best run has not yet been recorded.
| geopm::PolicyStoreImp::PolicyStoreImp | ( | const std::string & | database_path | ) |
|
delete |
|
delete |
|
virtual |
|
overridevirtual |
Get the best known policy for a given agent/profile pair.
Returns the best known policy from the data store. If no best policy is known, the default policy for the agent is returned. An exception is thrown if no default exists, or if any data store errors occur.
| [in] | agent_name | Name of the agent to look up |
| [in] | profile_name | Name of the profile to look up |
Implements geopm::PolicyStore.
|
delete |
|
overridevirtual |
Set the record for the best policy for a profile with an agent.
Creates or overwrites the best-known policy for a profile when used with the given agent.
| [in] | agent_name | Name of the agent for which this policy applies. |
| [in] | profile_name | Name of the profile whose policy is being set. |
| [in] | policy | Policy string to use with the given agent. |
Implements geopm::PolicyStore.
|
overridevirtual |
Set the default policy to use with an agent.
| [in] | agent_name | Name of the agent for which this policy applies. |
| [in] | policy | Policy string to use with the given agent. |
Implements geopm::PolicyStore.


Line Style:
Lines (great or small circles) can be plotted as
solid,
dashed,
dotted,
or dashed dotted lines


Week 12: Washington high-school football quarterfinal scores and semifinals matchups
by The Associated PressClass 4A
Quarterfinals
Bothell 30, Graham-Kapowsin 27
Camas 56, Puyallup 27
Mount Si 24, Lake Stevens 22
Woodinville 55, Kennedy Catholic 42
Semifinals
No. 11 Mount Si (10-2) vs. No. 2 Camas (12-0)
No. 5 Bothell (10-2) vs. No. 8 Woodinville (11-1)
Class 3A
Quarterfinals
Eastside Catholic 50, Bellevue 21
Lincoln 56, Marysville-Pilchuck 21
Kennewick 21, Bethel 20
O’Dea 10, Mt. Spokane 3
Semifinals
No. 2 Eastside Catholic (10-1) vs. No. 3 Lincoln (10-2)
No. 1 O’Dea (11-0) vs. No. 5 Kennewick (11-1)
Class 2A
Quarterfinals
Steilacoom 48, Prosser 15
Hockinson 29, Lakewood 28
Lynden 29, Washougal 26
Tumwater 48, Archbishop Murphy 0
Semifinals
No. 3 Lynden (9-2) vs. No. 2 Steilacoom (10-2)
No. 4 Hockinson (11-1) vs. No. 1 Tumwater (10-1)
Class 1A
Quarterfinals
Connell 14, Mount Baker 9
Deer Park 20, Montesano 17
Lynden Christian 31, Lasalle 7
Royal 62, Omak 6
Semifinals
No. 6 Deer Park (10-0) vs. No. 7 Lynden Christian (10-1)
No. 13 Connell (9-3) vs. No. 1 Royal (12-0)
Class 2B
Quarterfinals
Adna 35, Chewelah 13
Kalama 43, Lake Roosevelt 0
Napavine 55, Toledo 0
Onalaska 50, Tri-Cities Prep 0
Semifinals
No. 3 Kalama (9-2) vs. No. 2 Napavine (10-1)
No. 5 Adna (8-3) vs. No. 1 Onalaska (11-0)
Class 1B
Quarterfinals
Almira/Coulee-Hartline 80, Lummi 30
Entiat 48, Lyle-Wishram 12
Naselle 50, Quilcene 46
Odessa 82, Selkirk 24
Semifinals
N0. 3 Almira/Coulee-Hartline (11-1) vs. No. 2 Naselle (11-0)
No. 4 Entiat (10-2) vs. No. 1 Odessa (11-0)
All semifinals, Nov. 30.
The Associated Press


This is some text which will be replaced at runtime.
Bacon ipsum dolor sit amet pancetta ham hock t-bone corned beef bresaola filet mignon fatback. Beef ribs beef pork loin short ribs jowl.  Drumstick ham hock pastrami short loin ham. Corned beef ground round andouille drumstick chicken bresaola tail.  Sausage shankle beef ribs ball tip turducken salami shoulder venison boudin tail bacon short loin doner.
 Chuck leberkas jerky chicken turducken filet mignon meatball ball tip brisket tri-tip short ribs. Short loin meatloaf cow biltong ground round, flank hamburger beef.
Boudin biltong bacon flank. Pork pork chop pancetta, beef chuck rump bresaola boudin beef ribs sausage short loin turkey meatloaf fatback. Sausage t-bone pig, andouille bacon meatball swine ball tip frankfurter pancetta beef ribs meatloaf biltong pastrami. Filet mignon short loin cow spare ribs. Tongue capicola andouille pork pastrami leberkas.  Short loin kielbasa shankle bresaola chicken sirloin.