class: center, middle, inverse, title-slide # Regression Modeling in People Analytics: Survival Analysis ### Keith McNulty --- class: left, middle, r-logo ## Note on source This document is a summary learning developed for the London HR Analytics Meetup on 6 July 2021. It is based on material in the textbook *[Handbook of Regression Modeling in People Analytics](https://www.routledge.com/Handbook-of-Regression-Modeling-in-People-Analytics-With-Examples-in-R/McNulty/p/book/9781032041742)*. Please consult this book for a deeper understanding/treatment. The code for this document is [here](https://github.com/keithmcnulty/peopleanalytics-regression-book/blob/master/presentations/london_meetup_2021/index.Rmd). ## Note on languages This document is coded in R based on the material in Chapter 9 of the textbook. Instructions for doing this analysis in Python can be found in Section 10.2.5 of the textbook. --- class: left, middle, r-logo ## Quick poll > "I am confident that I know about regression modeling." > > Yes > > No --- class: left, middle, r-logo ## What is regression? * Regression is a statistical method that helps relate certain input data to an outcome of interest, based on certain statistical assumptions oriented around the *Central Limit Theorem*. * It is helpful as a way to explain how certain constructs influence (or do not influence) your outcome, but it *cannot prove causation*, which is much harder to do. * It is an extremely useful technique in practice. Because it is often too difficult to prove causation, decision makers use the next best thing - proof of influence combined with expert knowledge and judgment - in making business decisions. --- class: left, middle, r-logo ## How does regression help? Given data on a set of input variables and an outcome of interest, regression analysis can estimate the following: 1. Which of the input variables have a statistically significant influence on the outcome? 2. 'How big' is the influence of each significant variable? 3. How much of the overall outcome do your input variables explain? --- class: left, middle, r-logo ## Example 1 - Linear Regression Circa 1880, Francis Galton did a study on some British children to see how their heights related to that of their parents.  We can test that using a simple linear regression model. ```r library(dplyr) # create midParentHeight column galton <- galton |> dplyr::mutate(midParentHeight = (Father + Mother)/2) # simple linear regression of child vs mid-parent height simplemodel <- lm(formula = Height ~ midParentHeight, data = galton) # how much does it explain (R-squared) summary(simplemodel)$r.squared ``` ``` ## [1] 0.1069774 ``` --- class: left, middle, r-logo ## Galton realized that children 'regress' away from their parents height towards a mean population height  --- class: left, middle, r-logo ## Example 2 - Logistic Regression In 1986, the Space Shuttle Challenger exploded shortly after take off and all on board were killed. This started a major investigation by NASA. Video evidence pointed to unstable structures called O-rings as the cause of the accident, and there was a strong hypothesis that these structures did not function well in colder temperatures, such as on the day of the tragic accident. Let's get some data on the Space Shuttle launches up to and including Challengers. ```r shuttles <- read.table( "https://archive.ics.uci.edu/ml/machine-learning-databases/space-shuttle/o-ring-erosion-only.data" ) colnames(shuttles) <- c("total_orings", "distressed_orings", "temp", "leakcheck_psi", "order") head(shuttles) ``` ``` ## total_orings distressed_orings temp leakcheck_psi order ## 1 6 0 66 50 1 ## 2 6 1 70 50 2 ## 3 6 0 69 50 3 ## 4 6 0 68 50 4 ## 5 6 0 67 50 5 ## 6 6 0 72 50 6 ``` We create a new binary field called `incident` based on where there were any distressed o-rings: ```r shuttles <- shuttles |> dplyr::mutate(incident = ifelse(distressed_orings > 0, 1, 0)) ``` --- class: left, middle, r-logo ## A simple logistic regression associates the temperature with the likelihood of o-ring failure Now we run a logistic regression model to relate `temp` and `leakcheck_psi` to the likelihood of there being an incident: ```r model <- glm("incident ~ temp + leakcheck_psi", data = shuttles, family = "binomial") summary(model) ``` ``` ## ## Call: ## glm(formula = "incident ~ temp + leakcheck_psi", family = "binomial", ## data = shuttles) ## ## Deviance Residuals: ## Min 1Q Median 3Q Max ## -1.00837 -0.54507 -0.28098 0.02512 2.21488 ## ## Coefficients: ## Estimate Std. Error z value Pr(>|z|) ## (Intercept) 21.843631 11.936459 1.830 0.0673 . ## temp -0.350098 0.172977 -2.024 0.0430 * ## leakcheck_psi 0.006007 0.009749 0.616 0.5378 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## (Dispersion parameter for binomial family taken to be 1) ## ## Null deviance: 26.402 on 22 degrees of freedom ## Residual deviance: 14.033 on 20 degrees of freedom ## AIC: 20.033 ## ## Number of Fisher Scoring iterations: 6 ``` --- class: left, middle, r-logo ## Methods covered in textbook

Hypothesis testing
Linear Regression
Binomial Logistic Regression
Multinomial Logistic Regression
Proportional Odds Regression
Multilevel Models
Structural Equation Models
Survival Analysis
Power Analysis

Pre-order now for print/Kindle. All author proceeds donated to R-ladies Global
Free online version

 --- class: left, middle, r-logo ## Analyzing time-based event outcomes Most elementary models analyze an outcome as at a specific point in time. For example, in a logistic regression we might model the likelihood of high job performance (Yes or No) as at a specific performance review cycle. In this case our outcome variable `\(y\)` is simply positive (1) or negative (0). Then if our input variables are `\(x_1, x_2, ...,x_n\)`, our model estimates the *odds* of `\(y\)` being positive as $$ \frac{P(y = 1)}{P(y = 0)} = e^{\beta_0 + \beta_1x_1 + \beta_2x_2 + ... + \beta_nx_n} $$ where `\(\beta_0, \beta_1, \beta_2, ..., \beta_n\)` are our coefficients which we can use to explain the influence of each input variable. But in People Analytics, many of our outcomes can occur *at any time* after we take measures of our input variables, and we are also interested in the time effect as well as the event itself. Common examples of this are attrition or promotion. --- class: left, middle, r-logo ## Survival analysis Survival analysis is family of regression-based techniques designed to understand outcome events that occur over time. This family of techniques came into existence to research the effect of lifestyle factors, drug treatment and other interventions on adverse clinical outcomes like death or the onset of serious disease. Medically, while it is important to understand *whether* such an outcome occurs, it is also important to understand *when* it occurs. Key components of a basic survival analysis are: 1. The construction of a survival outcome 2. The calculation of Kaplan-Meier survival rates and curves 3. Running and checking a Cox Proportional Hazard regression model --- class: left, middle, r-logo ## Case example: Employee surveys and attrition *Dropping Like Flies, Inc* is a company that is experiencing very high employee attrition. The Chief People Officer believes that the employee experience is not a major factor in this issue and that this issue is being caused by aggressive competitors 'poaching' staff. You have been asked to find evidence to support or contradict this claim by analyzing the data on past survey responses and on employee departures. **Key question:**. Is there a reason to believe that poor employee experience is a factor in recent attrition? --- class: left, middle, r-logo ## Data set 1 - Survey responses from survey conducted at the end of 2018 ```r survey_responses <- read.csv("https://peopleanalytics-regression-book.org/data/survey_responses.csv") head(survey_responses) ``` ``` ## iid gender department level sentiment intention ## 1 dad26b9ee392cb7197bc7df941b92e2b M IT High 3 8 ## 2 0fa80c4c486e1d22ef1ae51373c21e56 F Finance Low 8 4 ## 3 e122762138e5e1b1c9cd09d1f3935c13 M HR Medium 7 7 ## 4 f67f76e945aa8ce99454c66c47b78c87 M Finance Low 8 4 ## 5 bd3276714f5f60d356309f1533a24920 M Finance High 7 6 ## 6 e8edf7a19afb5841a8e6997e467dbfbf F R&D Medium 6 10 ``` * `sentiment` is the level of agreement to the statement 'I am happy in my job' on a Likert scale of 1 to 10. * `intention` is the level of agreement to the statement 'I intend to find a new job' on a Likert scale of 1 to 10. --- class: left, middle, r-logo ## Quick look at the survey response distribution  --- class: left, middle, r-logo ## Quick poll > Do you think sentiment or intention to leave will make a significant difference in departures over the next two years? > > None > > Sentiment Only > > Intention Only > > Both of them --- class: left, middle, r-logo ## Data set 2 - Data on departures in the past in 2019 and 2020 ```r departure_dates <- read.csv("https://peopleanalytics-regression-book.org/data/departure_dates.csv") head(departure_dates) ``` ``` ## iid departure_date ## 1 dad26b9ee392cb7197bc7df941b92e2b 2019-01-31 ## 2 e122762138e5e1b1c9cd09d1f3935c13 2019-11-30 ## 3 bd3276714f5f60d356309f1533a24920 2019-02-28 ## 4 e8edf7a19afb5841a8e6997e467dbfbf 2019-05-31 ## 5 b0f5468f305c719192575909563e7ea6 2019-11-30 ## 6 86d665dc11c92142b46db64260223cbe 2019-07-31 ``` * Only employees who departed are in this data * All departure dates are end of month --- class: left, middle, r-logo ## Designing the analysis Survival analysis requires an event and a time, so we will need to define and extract both of these from this data. * **Event:** Clearly we are interested in whether someone departed or not, which means they have a departure date in our records. So our event would be labelled 1 if there is a departure date and 0 otherwise. * **Time:** Given that the data is captured as at the end of every month over a two-year period, it makes sense to count our time in months from 1 to 24. If there is no departure date recorded for an individual, we assume they remain at the company and assign the time for that individual as 24. That is, we are assuming our data is well-captured and there are no *censored* observations. --- class: left, middle, r-logo ## Creating the data set - generating the departure event First we left join the survey responses to the departure data and create the event column. ```r survival_data <- survey_responses |> dplyr::left_join(departure_dates, by = "iid") |> dplyr::select(-iid) |> dplyr::mutate(departure_event = ifelse(is.na(departure_date), 0, 1)) head(survival_data) ``` ``` ## gender department level sentiment intention departure_date departure_event ## 1 M IT High 3 8 2019-01-31 1 ## 2 F Finance Low 8 4 <NA> 0 ## 3 M HR Medium 7 7 2019-11-30 1 ## 4 M Finance Low 8 4 <NA> 0 ## 5 M Finance High 7 6 2019-02-28 1 ## 6 F R&D Medium 6 10 2019-05-31 1 ``` --- class: left, middle, r-logo ## Creating the data set - generating the time To create the time, we will extract the month and year. If the year is 2019, we use the month. If the year is 2020, we add 12 to the month. Finally, if the event is zero, we assign a month value of 24. ```r library(lubridate) survival_data <- survival_data |> dplyr::mutate(month = dplyr::case_when( year(departure_date) == 2019 ~ month(departure_date), year(departure_date) == 2020 ~ month(departure_date) + 12, departure_event == 0 ~ 24, TRUE ~ NA_real_ )) |> dplyr::select(-departure_date) head(survival_data) ``` ``` ## gender department level sentiment intention departure_event month ## 1 M IT High 3 8 1 1 ## 2 F Finance Low 8 4 0 24 ## 3 M HR Medium 7 7 1 11 ## 4 M Finance Low 8 4 0 24 ## 5 M Finance High 7 6 1 2 ## 6 F R&D Medium 6 10 1 5 ``` --- class: left, middle, r-logo ## Creating the survival outcome The survival outcome is generated from both the `departure_event` and the `month` columns. ```r library(survival) survival_outcome <- Surv(event = survival_data$departure_event, time = survival_data$month) unique(survival_outcome) ``` ``` ## [1] 1 24+ 11 2 5 7 16 9 6 17 22 21 3 19 12 8 23 13 20 ## [20] 15 24 10 18 14 4 ``` --- class: left, middle, r-logo ## Kaplan-Meier survival rates We can calculate survival rates and sketch curves for any *categorical* variable. The survival rate `\(S_i\)` at month `\(i\)` is calculated as $$ `\begin{align*} S_i = S_{i - 1}(1 - \frac{l_i}{n_i}) \end{align*}` $$ where `\(l_i\)` is the number reported as departed in month `\(i\)`, and `\(n_i\)` is the number still at the company after month `\(i - 1\)`, with `\(S_0 = 1\)`. Let's look at how employee sentiment affects survival rates. --- class: left, middle, r-logo ## How does sentiment relate to survival? To do this we will convert our sentiment rating into three categories: "High", "Medium", "Low". ```r # create a new field to define high, medium and low sentiment (>= 7) survival_data$sentiment_category <- dplyr::case_when( survival_data$sentiment >= 7 ~ "High", survival_data$sentiment >= 4 ~ "Medium", survival_data$sentiment < 4 ~ "Low", TRUE ~ NA_character_ ) ``` We can then use a simple function in the `survival` R package to relate these categories to the survival rate: ```r # generate survival rates by sentiment category kmestimate_sentimentcat <- survival::survfit( formula = Surv(event = departure_event, time = month) ~ sentiment_category, data = survival_data ) ``` --- class: left, middle, r-logo ## Kaplan-Meier survival curves ```r library(survminer) # show survival curves with p-value estimate and confidence intervals survminer::ggsurvplot( kmestimate_sentimentcat, pval = TRUE, conf.int = TRUE, palette = c("blue", "green", "red"), linetype = c("solid", "dashed", "dotted"), xlab = "Month", ylab = "Retention Rate" ) ```  --- class: left, middle, r-logo ## We can do the same for the `intention` survey response  --- class: left, middle, r-logo ## Quick poll > What kind of regression model should we use to understand multivariate effects on a survival outcome? > > Linear Regression > > Structural Equation Model > > Cox Proportional Hazard Model > > Multinomial Logistic Regression --- class: left, middle, r-logo ## Regression using Cox's proportional hazard model We assume that each individual has a 'baseline' probability of departing as a function of time. This is called the 'baseline hazard' function and denoted `\(h_0(t)\)`. Like any logistic regression model, each input variable `\(x_1, x_2, \dots, x_p\)` will have an effect on that baseline hazard function, increasing it or decreasing it by certain multiples depending on a set of coefficients `\(\beta_1, \beta_2, \dots, \beta_p\)`. For individual A, their personal hazard function will be: $$ h_A(t) = h_0(t)e^{\beta_1x_1^A + \beta_2x_2^A + \dots + \beta_px_p^A} $$ If we take another person B and then ask 'what is their hazard function relative to person A?', we get: $$ `\begin{aligned} \frac{h^B(t)}{h^A(t)} &= \frac{h_0(t)e^{\beta_1x_1^B + \beta_2x_2^B + \dots + \beta_px_p^B}}{h_0(t)e^{\beta_1x_1^A + \beta_2x_2^A + \dots + \beta_px_p^A}} \\ &= e^{\beta_1(x_1^B-x_1^A) + \beta_2(x_2^B-x_2^A) + \dots \beta_p(x_p^B-x_p^A)} \end{aligned}` $$ Note that time has disappeared from our calculation. This works on the assumption that `\(h_B(t)\)` and `\(h_A(t)\)` are *proportional to each other*, in other words the hazard curves do not cross. This assumption needs to be checked before finalizing your model (see Section 9.2.2 of the textbook). --- class: left, middle, r-logo ## Running a Cox's proportional hazard model We can run a multiple regression to understand the relative effects of many input variables: ```r # run cox model against survival outcome cox_model <- survival::coxph( formula = Surv(event = departure_event, time = month) ~ gender + department + level + sentiment + intention, data = survival_data ) summary(cox_model) ``` --- class: left, middle, r-logo ## Interpreting model results ``` ## Call: ## survival::coxph(formula = Surv(event = departure_event, time = month) ~ ## gender + department + level + sentiment + intention, data = survival_data) ## ## n= 3770, number of events= 1354 ## ## coef exp(coef) se(coef) z Pr(>|z|) ## genderM 0.04324 1.04418 0.05899 0.733 0.463556 ## departmentHR -0.25350 0.77608 0.06684 -3.792 0.000149 *** ## departmentIT -0.14364 0.86620 0.08576 -1.675 0.093978 . ## departmentR&D 0.04249 1.04341 0.12699 0.335 0.737920 ## departmentSales/Marketing -0.12443 0.88300 0.09949 -1.251 0.211053 ## departmentStrategy & Operations -0.12534 0.88220 0.14328 -0.875 0.381689 ## levelLow 0.17191 1.18757 0.08976 1.915 0.055450 . ## levelMedium 0.12096 1.12858 0.10201 1.186 0.235707 ## sentiment -0.02984 0.97060 0.01521 -1.961 0.049830 * ## intention 0.20556 1.22821 0.01354 15.181 < 2e-16 *** ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## exp(coef) exp(-coef) lower .95 upper .95 ## genderM 1.0442 0.9577 0.9302 1.1722 ## departmentHR 0.7761 1.2885 0.6808 0.8847 ## departmentIT 0.8662 1.1545 0.7322 1.0248 ## departmentR&D 1.0434 0.9584 0.8135 1.3383 ## departmentSales/Marketing 0.8830 1.1325 0.7266 1.0731 ## departmentStrategy & Operations 0.8822 1.1335 0.6662 1.1682 ## levelLow 1.1876 0.8421 0.9960 1.4160 ## levelMedium 1.1286 0.8861 0.9241 1.3784 ## sentiment 0.9706 1.0303 0.9421 1.0000 ## intention 1.2282 0.8142 1.1960 1.2612 ## ## Concordance= 0.638 (se = 0.008 ) ## Likelihood ratio test= 309 on 10 df, p=<2e-16 ## Wald test = 327.2 on 10 df, p=<2e-16 ## Score (logrank) test = 337.3 on 10 df, p=<2e-16 ``` --- class: left, middle, r-logo ## Thank you! Key textbook chapters to learn this methodology... * Chapter 3 - Hypothesis testing * Chapter 4 - Basic elements of multivariate regression * Chapter 5 - Binomial logistic regression (binary event modeling) * Chapter 9 - Survival analysis


finmarchicus climate model Calanus Atlantic density RCP North Gulf models Northeast change Mar. ensemble projections {border-style Ecol. projected px;} used #ffffff;} Maine U.S. Figure Ocean Prog. temperature using GFDL Ser. species ./meps CM. Res. copepod different response right (Fig. GAM Georges Shelf important resolution NOAA changes distribution effects future mean .° × .° Change S). global population salinity surface variables whales year Biol. Climate Oceanogr. Sci. coarse dynamics ocean Bank Fish. World data decrease indicate life modelling present project px; {font-family ./j.-...x Beaugrand However, New Sea Southern additive climatology compared densities diapause effect font-size generalized high-resolution lower marine samples scenarios. seasonal time variable (). Atlas Figures Model Right SST Science affect conditions created density, does double; downscaled expected final food models. periods populations potential production scenarios showed spring stages use variability western years Bight England, Geophys. Glob. Maine, Mid-Atlantic Northwest Pershing Species Supplementary Whale abundance average averaged averages border-color border-width central circulation concentrations day decreases emissions environmental especially impacts included losses model, model. negative observations package particularly period, predictor prey primary results scenario scenario. scenarios, season similar smaller solid; spatially study success winter zooplankton {font-style {font-weight (GAM) (Supplemental (Table (https://www.eoas.ubc.ca/~rich/map.html). (https://www.mathworks.com/products/matlab.html) (~-km ./gcb. Additionally, Commons Creative Depth Despite Fisheries ICES Labrador MATLAB Modelling NMFS Oscillation Reygondeau Soc. Speirs WOA [], acidification areas available averaging better bold coefficient considered copepods correlation courier; data, depth development did discrepancy distributions em; finmarchicus, finmarchicus. fishery gas greater greenhouse grid.. habitat higher impact include individual internal larger material models, multiple niche percentage phytoplankton projecting projects pt;} regions required resolved sampled seasons, size southern spatial temperatures useful v. h variables, variation whale ‘M_Map’


three.js
-LWO (LightWave3D Model) Loader test
model data from
NASA 3D Resources
↓ read from your local file...
infomation:


Hello, this is Sai Krishna.
I am a DataScientist, currently working in an ARMSOFTECH.AIR company. In my years of experience, I have improved data warehousing solutions and performed machine learning projects for the organization.
Overall 5 years of experience with Data Science, Machine Learning, Deep Learning, Computer Vision, NLP and Asterisk. I have worked on Scikit-Learn, XGBoost and Keras for solving various Real World Classification, Regression and Clustering Problems using Machine Learning, Deep Learning Techniques.
During my free time, I like to work on Kaggle projects to improve my skills. I also write about My Work, Projects and Experiences to share them with the World. It's been a great journey so far.
I’m eager to learn and I love solving Technical Problems.
My goal is to provide value to society.
Data is my pathway towards that goal
I have posted my Data Science projects here.
Build a recommendation system for apparel which gives the most similar products using amazon dataset. Techniques used Tfidf-W2Vec, VGG-16.
View More..
Predict the movies for users with the help of surprise library and SVD. Trained different models and used the result of each model as feature to the next model with the final model as XgBoost to reduce RMSE.
View More..
Exploratory Data Analysis of Cancer data from kaggle and running various models and plotting confusion matrix and return probability score to make model interpretable. Techniques used Tfidf, Naive Bayes, Logistic Regression, SVM, Random Forest.
View More..
Predicting whether a question is duplicate or not and predict if the question is duplicate from quora dataset and reducing the loss using hyperparameter tuning. Techniques used : Avg-W2Vec, Logistic Regression, Linear SVM and XGBoost.
View More..
Predict the pick-up density of cabs at a given particular time and a location in New York City using simple models such as Rolling Window and its variants and Regression Models such as Random Forest and XGBoost and using Time Series Forecasting and Fourier Features.
View More..
Visualize the data set and apply various models and see which one performs better with respect to other on various performance metrics. Techniques used : KNN, Naive-Bayes, Logistic Regression, Decision Tree.
View More..
Predict the Activity related to the datapoint Each datapoint corresponds one of the 6 Activities (Walking,WalkingUpstairs,WalkingDownstairs,Standing,Sitting,Lying) Performed hyperparameter tunning with LSTM.
View More..
Predicted the tag related to the question and improved the micro-averaged-f1-score with hyperparameter tuning of Logistic Regression and SVM.
View More..


This script is to prove that it possible to set the initial position of a group node prior to injection into a layout.
In this case new nodes begin in the centre of the diagram


Class: Aws::MachineLearning::Types::RDSMetadata
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Struct
|
|
|
Instance Chain:
self,
Struct
|
|
| Inherits: |
Struct
|
| Defined in: | (unknown) |
Overview
The datasource details that are specific to Amazon RDS.
Returned by:
Instance Attribute Summary
-
#data_pipeline_id ⇒ String
rw
The ID of the Data Pipeline instance that is used to carry to copy data from Amazon RDS to Amazon S3.
-
#database ⇒ Types::RDSDatabase
rw
The database details required to connect to an Amazon RDS.
. -
#database_user_name ⇒ String
rw
The username to be used by Amazon ML to connect to database on an Amazon RDS instance.
-
#resource_role ⇒ String
rw
The role (DataPipelineDefaultResourceRole) assumed by an Amazon EC2 instance to carry out the copy task from Amazon RDS to Amazon S3.
-
#select_sql_query ⇒ String
rw
The SQL query that is supplied during CreateDataSourceFromRDS.
-
#service_role ⇒ String
rw
The role (DataPipelineDefaultRole) assumed by the Data Pipeline service to monitor the progress of the copy task from Amazon RDS to Amazon S3.
Instance Attribute Details
#data_pipeline_id ⇒ String
(rw)
The ID of the Data Pipeline instance that is used to carry to copy data from Amazon RDS to Amazon S3. You can use the ID to find details about the instance in the Data Pipeline console.
#database ⇒ Types::RDSDatabase (rw)
The database details required to connect to an Amazon RDS.
#database_user_name ⇒ String
(rw)
The username to be used by Amazon ML to connect to database on an Amazon RDS instance. The username should have sufficient permissions to execute an RDSSelectSqlQuery
query.
#resource_role ⇒ String
(rw)
The role (DataPipelineDefaultResourceRole) assumed by an Amazon EC2 instance to carry out the copy task from Amazon RDS to Amazon S3. For more information, see Role templates for data pipelines.
#select_sql_query ⇒ String
(rw)
The SQL query that is supplied during CreateDataSourceFromRDS. Returns only if Verbose
is true in GetDataSourceInput
.
#service_role ⇒ String
(rw)
The role (DataPipelineDefaultRole) assumed by the Data Pipeline service to monitor the progress of the copy task from Amazon RDS to Amazon S3. For more information, see Role templates for data pipelines.


Reporting Portal
Monitoring Panel
PELARD-N API
menu
ARNOLD MUGABE JR
ARNOLD MUGABE JR
Protection and Empowerment of Land Rights Defenders in Northern Uganda
SOFTWARE ENGINEER
A Soletere Foundation Initiative Funded By The European Eunion
group
Reporting Portal
Get Started
report.pelard-n.org
flash_on
Monitoring Panel
Get Started
monitor.pelard-n.org
settings
PELARD-N API
Get Started
api.pelard-n.org
Our Partners


Who am I?
Now: Web developer at Imagination Plus
Then: Web developer at Norfolk County
15+ years building websites
6+ years working with WordPress
5+ years working with accessibility
NOT an accessibility expert
- ask if anyone has any experience with a11y
- has anyone made any accessible websites?
Meet my brother, Dustin.
So Dustin, what frustrates you about the web?
"Most videos on the internet don't have closed captioning."
How does that make you feel?
"Disappointed. I really want to understand what the video is about and what people are saying."
Meet B
B fell down a hill while running to close his car windows in the rain, and fractured multiple fingers. He’s trying to surf the web with his left hand and the keyboard.
Meet M
M can’t consistently tell her left from her right. Neither can 15% of adults, according to some reports. Directions on the web that tell her to go to the top left corner of the screen don’t harm her, they just momentarily make her feel stupid.
Meet Y
Y was in a car accident that left her with vertigo so severe that for a few weeks she couldn’t get out of bed. The symptoms have lessened significantly now, but that new parallax scrolling craze makes her nauseous to the point that she shuts scripting off on her computer.
Closed captioning?
Alt tags? Aria roles?
AODA? WCAG 2.0?
Contrast and colours?
Accessibility = access for everyone.
AODA - Accessibility for Ontarians with Disabilities Act
Enacted in 2005
January 1, 2014
Any new public website or existing site that undergoes a significant refresh, the site and any of its web content published after January 1, 2012 must confirm to WCAG 2.0 Level A
January 1, 2021
All public websites and all web content published after January 1, 2012 must conform with WCAG 2.0 Level AA (other than providing captions on live videos or audio descriptions for pre-recorded videos).
Content posted before 2012 will need to be provided in an accessible format on request.
Is my website accessible?
Some manual testing still needs to happen.
So, how do I make my website accessible?
Non-Text Content
Form fields have labels (labels != placeholders)
Images have alternate text (when needed)
For complex images, provide a long-desc (another page will a full description)
Alt Text
Be accurate and equivalent.
Be succinct.
NOT be redundant.
NOT use the phrases "image of ..." or "graphic of ..." to describe the image.
Present the same content and function of the image.
Typically no more than a few words are necessary, though rarely a short sentence or two may be appropriate.
Don't repeat the same information as text within the context of the image.
NOT use the phrases "image of ..." or "graphic of ..." to describe the image. If the fact that an image is a photograph or illustration, etc. is important content, it may be useful to include this in alternative text.
Use Semantic HTML
Use tables for tabular data
Use proper heading structure
Use lists for lists
Forms
Labels
Keyboard accessible (including submission)
Clear instructions
Ensure error validation is clear and easy to fix
labels - appropriate and linked
clear instructions - required fields
errors - ensure it's clear what the user did wrong, allow form to be corrected and re-submitted easily
Colour
Don't use colour only to convey information.
Don't use colour alone to distinguish links
Text should have a contrast ratio of 4.5:1
- click the red button (that's beside the green button)
- large text can be 3:1
Media
Transcripts for audio
Closed captioning and text transcript for video
Accessible video/audio players
...and more
Keyboard navigable
Allow extended timelines
Avoid flashing content
Skip Navigation links
Aria roles
- time limit: carousels, countdowns, etc
- Accessible Rich Internet Applications (ARIA)
- special attributes that add additional info to html tags
- WP looks for: role="banner", "main", "complementary", "contentinfo", "search", "navigation"
Accessibility is overwhelming!!
But it doesn't have to be.
Accessibility and WordPress
Themes
Look for the "accessibility-ready" tag
Roll your own
- themes that use the tag accessibility-ready will undergo an accessibility review before made live
WP Accessibility
Add skip links with user-defined targets. (Customizable targets and appearance.)
Add language and text direction attributes to your HTML attribute
Add an outline to the keyboard focus state for focusable elements.
Add a toolbar toggling between high contrast, large print, and desaturated (grayscale) views of your theme.
Add a long description to images. Use the image's "Description" field to add long descriptions.
Enforcement for alt attributes on images.
Remove the target attribute from links.
And much more...
https://wordpress.org/plugins/wp-accessibility/
Content
Planning
Training and Education
Run an accessibility check!
The broader meaning of accessibility
Can your site be easily viewed on all devices?
How understandable is your content?
Read-able.com
Microsoft Word
If you don’t know who your target audience is, target your content towards a reader between the ages of 12 and 15 years old *
How much does your site cost?
whatdoesmysitecost.com
According to the April 15, 2015 run of HTTP Archive, the average site now weighs 2061kb
How much does your site cost? (cont'd)
Country
Cost (in USD)
Vanuatu $0.66
Angola $0.31
Germany $0.25
Japan $0.22
Papua New Guinea $0.20
Ireland $0.19
Botswana $0.18
Canada $0.18
- Machu Pichu in Pero
- accessibility is about removing barriers
- dignity for users
- accessibility still needs leaders
How can I help?
Make sure your website is accessible
Be an organizational champion
Educate your clients
Educate your peers
Contribute to the WordPress Accessibility group


To run a command as administrator (user "root"), use "sudo (command)".
See "man sudo_root" for details.
guest@nord-fail:~$ cat nordvpn.txt
Ah i've been expecting you... you're probably here because you have asked a question about nordvpn.
If you are considering spending money on Nord VPN then please reconsider,
almost all the good reviews have been "sponsered" by Nord VPN.
Not only are their servers slow and often detected by sites such as Netflix but they also:
- Commit price discrimination
- Pay media companies for 5 star reviews
- Tried to cover up that one of their servers got hacked.
- Hiding their past company history
- Affiliated with a data mining company
Suprisingly this isn't the whole list, more can be found here (credit to James).
If you would like an actual privacy focused VPN, consider Windscribe or Mullvad.
(I am not affiliated with any companies or websites listed in this website)
guest@nord-fail:~$


Elephant named for bin Laden caught after killing five people
by AFP, StaffAn elephant named after the late al Qaeda leader Osama bin Laden that killed five Indian villagers has been caught after a massive operation to hunt down the creature, officials said Monday.
Wildlife officers tracked the pachyderm -- dubbed "Laden" by the locals it menaced in northeastern Assam state -- through a forest for several days using drones and domesticated elephants.
"We started the final leg of the operation today... Two darts were fired by experts which had tranquilised the male elephant," a senior forestry official told AFP.
"Now the work is on to shift the elephant to a forest where there is no human habitation nearby."
The animal killed five people, including three women, during a 24-hour rampage through Goalpara district October.
Officials said they would take the elephant's welfare into account as well as the safety of people living nearby in deciding where it would be relocated
Nearly 2,300 people have been killed by elephants in India over the last five years, according to official figures released in June, while 700 elephants have been killed since 2011 -- figures resulting in part from shrinking natural habitats.
Elephants frequently migrate into Goalpara, resulting in high numbers of fatal encounters with humans amid rampant deforestation.
Some elephants there have been poisoned or shot by locals, while others have died on electric fences or on railways cutting through migration routes.


Octopus Permission demo
Example application demonstrating the permission based features of Octopus.
TODO refer to the more elaborated explanation in the Hands-On-Lab
Since you are not authenticated yet, navigating to one of the pages will show a login form.


--- layout: page title: About Me tags: [about] comments: false share: false category: about ---
Music is my first passion. I play guitar. I write music and have a small home studio for recording. I'm also fanatical about discovering new music and going to concerts.
I love to travel. I'm fascinated by nature and castles. I like to hike and ride my bike. And most of all, I enjoy doing all of these things with my wife, Stephanie.
I'm fascinated by Europe, and Scandinavia in particular. The culture, the sights, the music and the history.
I play ice hockey. I'm an avid Philadelphia Flyers fan.
And I like to cook.
Professionally, I'm a software developer with over 10 years of experience. I've primarily built rich web applications using C# and Microsoft web technologies (ASP.NET MVC and, ugh, WebForms), but I like to write in Ruby whenever the chance comes along. I'm a fan of messaging-centric programming, event-driven architectures and CQRS. I prefer Agile practices, test-driven development and good object orientation.
I chose Journeyman as the name of the site because it succinctly describes me in two ways.
A journeyman is an individual who is fully educated in a trade or craft, but not yet a master. I see an implication here in that the journey to mastering something is continual. That's how I feel about myself as a programmer. I'm on a constant path of self development.
In a more literal sense, I am also an individual who enjoys travel and nature - a man who journeys.


{% extends "politics/Page.html" %} {% load staticfiles otree %} {% block title %} Voting Decision {% endblock %} {% block content %}
{% if subsession.d_impeach == True %} Considering upon public concern, it has been decided by the Parliament that President {% if subsession.winning_cand == 'A' %} A{% else %}B{% endif %} needs to be put into inactive status indefinitely, as he requires to follow further investigations by the Public Attorney. {% else %} The Parliamentary assembly has decided that there is not enough support from public to impeach the recently elected President {% if subsession.winning_cand == 'A' %} A{% else %}B{% endif %}. He will remain in the office and proceed with his presidential duty. {% endif %}
The actual (Bayesian) probability of impeachment, given the news is true is {{ bayes_prob }}.
The actual (Bayesian) probability of impeachment, given the candidate is guilty is {{ impeach_prob }}.
Your final payoff is then:
| Your endowment: | {{ Constants.endowment }} points. |
| Your payoff from election and impeachment: | {{ player.payoff_from_voting }} points. |
| Your payoff from your guess: | {{ acc_score }} points out of {{ Constants.accuracy_multiplier }} possible. |
| Your total payoff: | {{ player.payoff }}. |


This exam has 10 different questions in Javascript. You need to answer all of them in order to get your score out of 10 (1 mark for each question).
After you finish make sure you compare your answers with the correct ones.


Numbers 17:13
Whosoever cometh any thing near unto the tabernacle of the LORD shall die: shall we be consumed with dying?


| Account ID | Last Sign in | ||
|---|---|---|---|
| 0003 | 10/10/2018 11:00:00 | Delete | Edit |
| 0003 | 10/10/2018 11:00:00 | Delete | Edit |
| 0003 | 10/10/2018 11:00:00 | Delete | Edit |
| 0003 | 10/10/2018 11:00:00 | Delete | Edit |
| 0003 | 10/10/2018 11:00:00 | Delete | Edit |
| 0003 | 10/10/2018 11:00:00 | Delete | Edit |
| 0003 | 10/10/2018 11:00:00 | Delete | Edit |
| 0003 | 10/10/2018 11:00:00 | Delete | Edit |
| 0003 | 10/10/2018 11:00:00 | Delete | Edit |
| 0003 | 10/10/2018 11:00:00 | Delete | Edit |


| Interface | Description |
|---|---|
| PathIterator |
The
PathIterator interface provides the mechanism
for objects that implement the Shape
interface to return the geometry of their boundary by allowing
a caller to retrieve the path of that boundary a segment at a
time. |
| Class | Description |
|---|---|
| AffineTransform |
The
AffineTransform class represents a 2D affine transform
that performs a linear mapping from 2D coordinates to other 2D
coordinates that preserves the "straightness" and
"parallelness" of lines. |
| Arc2D |
Arc2D is the abstract superclass for all objects that
store a 2D arc defined by a framing rectangle,
start angle, angular extent (length of the arc), and a closure type
(OPEN , CHORD , or PIE ). |
| Arc2D.Double |
This class defines an arc specified in
double precision. |
| Arc2D.Float |
This class defines an arc specified in
float precision. |
| Area |
An
Area object stores and manipulates a
resolution-independent description of an enclosed area of
2-dimensional space. |
| CubicCurve2D |
The
CubicCurve2D class defines a cubic parametric curve
segment in (x,y) coordinate space. |
| CubicCurve2D.Double |
A cubic parametric curve segment specified with
double coordinates. |
| CubicCurve2D.Float |
A cubic parametric curve segment specified with
float coordinates. |
| Dimension2D |
The
Dimension2D class is to encapsulate a width
and a height dimension. |
| Ellipse2D |
The
Ellipse2D class describes an ellipse that is defined
by a framing rectangle. |
| Ellipse2D.Double |
The
Double class defines an ellipse specified
in double precision. |
| Ellipse2D.Float |
The
Float class defines an ellipse specified
in float precision. |
| FlatteningPathIterator |
The
FlatteningPathIterator class returns a flattened view of
another PathIterator object. |
| GeneralPath |
The
GeneralPath class represents a geometric path
constructed from straight lines, and quadratic and cubic
(Bézier) curves. |
| Line2D |
This
Line2D represents a line segment in (x,y)
coordinate space. |
| Line2D.Double |
A line segment specified with double coordinates.
|
| Line2D.Float |
A line segment specified with float coordinates.
|
| Path2D |
The
Path2D class provides a simple, yet flexible
shape which represents an arbitrary geometric path. |
| Path2D.Double |
The
Double class defines a geometric path with
coordinates stored in double precision floating point. |
| Path2D.Float |
The
Float class defines a geometric path with
coordinates stored in single precision floating point. |
| Point2D |
The
Point2D class defines a point representing a location
in (x,y) coordinate space. |
| Point2D.Double |
The
Double class defines a point specified in
double precision. |
| Point2D.Float |
The
Float class defines a point specified in float
precision. |
| QuadCurve2D |
The
QuadCurve2D class defines a quadratic parametric curve
segment in (x,y) coordinate space. |
| QuadCurve2D.Double |
A quadratic parametric curve segment specified with
double coordinates. |
| QuadCurve2D.Float |
A quadratic parametric curve segment specified with
float coordinates. |
| Rectangle2D |
The
Rectangle2D class describes a rectangle
defined by a location (x,y) and dimension
(w x h) . |
| Rectangle2D.Double |
The
Double class defines a rectangle specified in
double coordinates. |
| Rectangle2D.Float |
The
Float class defines a rectangle specified in float
coordinates. |
| RectangularShape |
RectangularShape is the base class for a number of
Shape objects whose geometry is defined by a rectangular frame. |
| RoundRectangle2D |
The
RoundRectangle2D class defines a rectangle with
rounded corners defined by a location (x,y) , a
dimension (w x h) , and the width and height of an arc
with which to round the corners. |
| RoundRectangle2D.Double |
The
Double class defines a rectangle with rounded
corners all specified in double coordinates. |
| RoundRectangle2D.Float |
The
Float class defines a rectangle with rounded
corners all specified in float coordinates. |
| Exception | Description |
|---|---|
| IllegalPathStateException |
The
IllegalPathStateException represents an
exception that is thrown if an operation is performed on a path
that is in an illegal state with respect to the particular
operation being performed, such as appending a path segment
to a GeneralPath without an initial moveto. |
| NoninvertibleTransformException |
The
NoninvertibleTransformException class represents
an exception that is thrown if an operation is performed requiring
the inverse of an AffineTransform object but the
AffineTransform is in a non-invertible state. |
Dracula Javadoc Sample, Made with Allan Im.


FSChoice supports the execution of Lua scripts on the server, where the Lua scripts are stored in the FSChoice filesystem as files of MIME type, text/x-lua, which is the default MIME type for files with an extension of .lua.
A Lua script stored in the FSChoice filesystem can be executed via an Ajax operation from the client. Arguments for the script are transmitted to the server using JSON encoding, where they are deserialized into Lua values and passed to the script. Return value(s) of the script are serialized to JSON and returned to the client. The operation is invoked by an HTTP POST with a JSON-encoded body containing:
op lua, the operation code
path the file path of the Lua script to be executed
args an optional array containing the arguments for the script
asOwner an optional boolean with true
indicating a request that the script be run as the owner of the script
instead of the user associated with the current session
The POST URL normally takes the form: http://host:port/fschoice/?api=file.
The /scripts/fileops.js file provides a function to invoke a Lua script and return a promise for the result. fileops.js extends jQuery, so that the call takes the form:
promise = $.file('lua', reqobj, options)
The reqobj contains the path and any args and asOwner fields for the request. The options argument can be used to set Ajax options supported by jQuery.
The response object returned from the Ajax operation contains the following fields:
status
- a code of 1 if successful, otherwise a negative value and the msg
field should be present
msg - an error message if status
is negative
result - the return value of the Lua script if no error
The execution of a Lua script file is controlled by two specific access rights:
run_script
this right allows the principal to execute the script as itself, where
the principal is normally the user associated with the current session
run_as_owner this right allows the principal to execute
the script as the owner of the script file
If the asOwner parameter is false or not present in the request to execute a Lua script, the run_script access right to the script file is required, and the principal used for any file operations performed by the script is the user associated with the session making the request. If asOwner is true, the run_as_owner access right to the script file is required, and the principal used for any file operations performed by the script is the owner of the script file itself. The right to read a Lua script file is neither required nor conveyed by the run_script and run_as_owner rights. These only allow the script to be executed. However, navigating a file path to a Lua script requires additional rights for the folders traversed on the path, typically list_folder, but any of add_folder_member, replace_folder_member, or remove_folder_member implies the list_folder right. Note that all file operations requested by a Lua script are subject to FSChoice access control.
These operations are included in the Lua filelib module.
This operation returns basic metadata associated with a file, where the file can be specified by a string containing the file path, or by the file's unique numeric id. The metadata may vary somewhat with the type of file referenced, but generally the following keys are present in the returned table:
mimetype the MIME type of the file
name the simple name of the file within its folder
path the full file path
id the unique numeric file id of this file
size the size of the file in bytes
container a boolean indicating whether the file is a type of folder
paths an array-like table containing all the file paths which reference this file
mtime the file modification timestamp, as milliseconds since the epoch
crtime the file creation timestamp, as milliseconds since the epoch
owner the full file path of the user or group who owns the file
ownerId the file id corresponding to the owner user or group file
refcount count of the number of links to the file
special a boolean indicating whether the file is special, typically that FSChoice has a dedicated
handler for its MIME type
lookup returns a table if successful. If an error occurs, it returns nil as the first return value, and an error message string as the second return value.
This operation lists the files in a folder or folder-like file (such as a user group). A MIME type may be specified to list only member files of that MIME type. It returns an array-like table containing lookup information for each member file. The table contains entries for . and .., which correspond to the specified folder and its parent folder. The . and .. entries are not subject to the MIME type filter.
This creates a new folder with the specified file path. If recursive is specified as true, any folders which do not already exist in the given path are also created. If recursive is false or unspecified, then all the components of the file path except the last must already exist. If the operation is successful, a table is returned containing lookup information for the new folder, and a field, status=1. If an error occurs, the first return value is nil, and the second return value is an error message string.
This removes a link to a file at the specified file path. If it is the last link to the file, then the file itself is deleted. If the file is a folder or folder-like file, it must be empty, unless recursive is specified as true. If the link being removed is the last link to a folder, and recursive is true, the operation is applied recursively to the members of the folder before the folder itself is deleted. However, when multiple links to a folder exist, and this operation is applied to one of them, recursive is ignored, since the folder will continue to exist and be accessible through at least one other link. This operation returns a boolean value of true if it is successful and results in the deletion of a file. It returns false if it is successful, but other links to the same file remain. If an error occurs, the first return value is nil, and the second return value is an error message string.
This serializes a given Lua value or table to JSON and writes it to a specified file as a file with MIME type, application/json. If the file does not already exist, it is created. If the file does exist and has the MIME type, application/json, it is overwritten with the new JSON data. An error occurs if the file already exists and is not application/json. If successful, a table containing lookup information for the resulting file is returned. If an error occurs, the first return value is nil, and the second return value is an error message string.
This operation reads the file at the specified file path, which must be of type, application/json. It deserializes the JSON and returns it as an equivalent Lua value or table. If an error occurs, the first return value is nil, and the second return value is an error message string.
FSChoice supports extended file metadata in the form of file attributes. A file attribute definition specifies a type and description of an attribute, and is itself a file. Attribute values are assigned to other files by specifying the file path of the attribute definition file, and a value which is consistent with the attribute type contained in the definition. The supported attribute types are:
string the attribute value is a string, currently limited to 512 characters
number a numerical value
boolean a boolean value
json a JSON-encoded value
file a file path
The following operations are included in the Lua attrlib module.
This operation creates a new attribute definition if no file exists at the specified file path. The attribute has the given attribute type and description. If a file already exists at the file path, it must be an attribute definition with the same type as the specified type. The return value is lookup information for the attribute definition file. If an error occurs, the first return value is nil, and the second return value is an error message string.
This operation fetches attribute values assigned to a file, given by its file path. If only the file path is specified, all attribute values associated with the file are returned. Any arguments following path are interpreted as referencing attribute definitions for which the attribute values are desired. If successful, the result is an array-like table containing a table for each attribute value. An attribute value table contains these fields:
name the name
or file path of the attribute definition (attribute definitions
stored in /System/Attributes may be referenced by just their name)
id the file id of the attribute definition file
type the attribute type as specified by its definition
value the current value of the attribute for the specified file
lastset the timestamp of when the attribute value was last set on the file
setter the file path to the user who last set the attribute value on the file
If an error occurs, the first return value is nil, and the second return value is an error message string.
This operation sets file attribute values on a specified file. The arguments following path specify attribute name/value pairs, which may take the form of a name argument followed by a value argument, or a table argument containing the fields name and value, or an array-like table argument containing the attribute name as the first element, and the attribute value as the second element. These forms can be mixed in an argument list. An attribute name will generally be the full path to the attribute definition file, unless the definition is in /System/Attributes. An attribute value must be consistent with the attribute type specified in the attribute definition, though some implicit conversions are supported. For example, a number can be specified for a boolean value, with zero being interpreted as false and all other values true. Setting an attribute to an empty value, e.g. nil, results in that attribute being removed from the file.
The result is an array-like table containing a table entry for each set attribute. Each entry is similar to the table entries returned by get(), but may have an error field with an error message string if there was a problem setting a particular value. If some more global error occurs, the first return value is nil, and the second return value is an error message string.
These operations are included in the Lua userlib module.
This operation returns information about the current session, creating a session if one does not exist. If successful (and it generally should be), it returns a table containing the following fields:
sessionid a unique id assigned to this session (actually the file id of the
choice/session file)
cgid the current group id, which is the group containing the current user
logingroup the file path to the current login group, which is obtained from components used
to resolve an HTML request
user a table containing information about the current user, with fields:
name the username (without the group path) (guest if the user is not logged in)
id the file id of the current user
path the full file path of the current user (/System/Users/guest if not logged in)
home the home page associated with the current group (if any)
groups an array-like table containing a table for each group to which the current user belongs
(directly). Each group entry table contains:
gid the group id (the file id of the user group file)
name the simple name of the group
desc the group description, if any
member the username of the current user in the group (the same user may have different usernames in
different groups)
paths an array-like table containing all the file paths for the group
roles if the user is a
system administrator, an array-like table with one entry: ADMIN
If an error occurs, the first return value is nil, and the second return value is an error message string.
This operation returns the file path of the current login group. The current login group is determined by the last access to an HTML file that was resolved by a component which specified a user group. If an error occurs, the first return value is nil, and the second return value is an error message string.
Return a boolean indicating whether a user is currently logged in on the current session. If an error occurs, the first return value is nil, and the second return value is an error message string.
Login a specified user. The group containing the given username can be specified using the file path of the user group file, or the group id. If the group is not specified, the current login group is assumed. If a user is already logged in (even the same user), that user is logged out before the login is processed. If successful, the result is a table containing these fields:
status a value of 1
role an array-like table containing ADMIN if the user is a system administrator
redirect the home page, if any, for the user group containing the user
If an error occurs, the first return value is nil, and the second return value is an error message string.
This operation performs a logout operation for the current session, if a user is logged in, returning true if successful. If a user is not currently logged in, or some other error occurs, false is returned.
This operation checks the validity of a username, and optionally a password. It is generally used during user registration to determine if a username has valid syntax and has not been assigned already. The username is evaluated against a group that can be specified by user group file path or file id, or else the current login group is assumed. If the password is specified, its validity will also be checked. Two result values are returned. The first value is a numeric code with the following meanings:
-1 an error occurred
0 the username (and password if present) is valid and not currently assigned in the group
1 the username exists in the group and the password is valid
2 the username exists in the group, but the password is invalid
The second return value is a string, which is either an error message or an interpretation of the numeric code.
This operation checks whether registration is enabled for the indicated group, if specified, or else for the current login group. If successful, it returns a table containing:
status true if registration
is enabled for the group (or if no users have been registered in the
system yet, in which case the first user registered becomes a system
administrator
captcha true if the group settings indicate that a
captcha should be used when registering users for the group
If an error occurs, the first return value is nil, and the second return value is an error message string.
This operation creates a new user in the specified group, given by its user group file path. If the password is not specified, it defaults to an empty string. An email address and registration code may also be specified. The registration code can be a string or an integer. This operation does not check whether registration is enabled for the group, or whether the username is valid. However, it will fail if the username already exists in the group. If successful, a table containing file lookup information for the created user is returned. If an error occurs, the first return value is nil, and the second return value is an error message string.
This operation creates a new user group at the file path given by the group argument. A second argument can specify settings for the group as a table containing any of these fields:
description a text description of the group
loginEnabled a boolean indicating whether logins should be enabled for the group
signupEnabled a boolean indicating whether user self-registration should be enabled for the
group
captchaEnabled a boolean indication whether user self-registration should use a captcha
guestPage - a string containing the path to a guest (login) page for the group
homePage - a string containing the path to a home page for the group
A user group can be created in a folder or in another user group as a subgroup. If successful, a table containing file lookup information for the created group is returned. If an error occurs, the first return value is nil, and the second return value is an error message string.


Class Column
This class represents a single data column in a DataSourceBase.
Inherited Members
Namespace: FastReport.Data
Assembly: FastReport.OpenSource.dll
Syntax
public class Column : DataComponentBase, IFRSerializable, IParent
Constructors
Column()
Initializes a new instance of the Column class with default settings.
Declaration
public Column()
Properties
BindableControl
Gets or sets a value that specifies the type of a control that will be created when you drop this column on a report page.
Declaration
public ColumnBindableControl BindableControl { get; set; }
Property Value
| Type | Description |
|---|---|
| ColumnBindableControl |
Remarks
If you need to specify the custom type, use the CustomBindableControl property instead.
Calculated
Gets or sets a value that indicates whether this column is calculated.
Declaration
public bool Calculated { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Boolean |
Remarks
You should specify the Expression property for calculated columns.
Columns
Gets the collection of child columns.
Declaration
public ColumnCollection Columns { get; }
Property Value
| Type | Description |
|---|---|
| ColumnCollection |
CustomBindableControl
Gets or sets a name of custom bindable control.
Declaration
public string CustomBindableControl { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
Remarks
Use this property if you want to bind a column to custom object type. You need to specify the type name of your object; that object must be registered in FastReport using the RegisteredObjects.Add method.
DataType
Gets or sets the type of data supplied by this column.
Declaration
public Type DataType { get; set; }
Property Value
| Type | Description |
|---|---|
| System.Type |
Expression
Gets or sets expression of the calculated column.
Declaration
public string Expression { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
Remarks
This property is used if the Calculated property is true.
Format
Gets or sets the format of this column.
Declaration
public ColumnFormat Format { get; set; }
Property Value
| Type | Description |
|---|---|
| ColumnFormat |
Remarks
This property is used when you drag a column from the Data window to the report page. FastReport will create a "Text" object and set its "Format" property to the corresponding format. By default, this property is set to Auto. It means that the format will be determined automatically depending on the DataType property.
PropDescriptor
Gets or sets the business object property descriptor which this column is bound to.
Declaration
public PropertyDescriptor PropDescriptor { get; set; }
Property Value
| Type | Description |
|---|---|
| PropertyDescriptor |
PropName
Gets or sets the business object property name which this column is bound to.
Declaration
public string PropName { get; set; }
Property Value
| Type | Description |
|---|---|
| System.String |
Methods
AddChild(Base)
Adds a child object to this object's childs.
Declaration
public virtual void AddChild(Base child)
Parameters
| Type | Name | Description |
|---|---|---|
| Base | child | Object to add. |
CanContain(Base)
Gets a value indicating that this object can contain the specified child object.
Declaration
public virtual bool CanContain(Base child)
Parameters
| Type | Name | Description |
|---|---|---|
| Base | child | Child object. |
Returns
| Type | Description |
|---|---|
| System.Boolean | true if this object can contain the specified child object; otherwise, false. |
GetChildObjects(ObjectCollection)
Gets a list of child objects.
Declaration
public virtual void GetChildObjects(ObjectCollection list)
Parameters
| Type | Name | Description |
|---|---|---|
| ObjectCollection | list | List to fill with values. |
GetChildOrder(Base)
Returns z-order of the specified child object.
Declaration
public int GetChildOrder(Base child)
Parameters
| Type | Name | Description |
|---|---|---|
| Base | child | Child object. |
Returns
| Type | Description |
|---|---|
| System.Int32 | Z-order of the specified object. |
Remarks
This method must return the index of a specified child object in the internal child list.
GetExpressions()
Gets all expressions contained in the object.
Declaration
public override string[] GetExpressions()
Returns
| Type | Description |
|---|---|
| System.String[] | Array of expressions or null if object contains no expressions. |
Overrides
Remarks
Do not call this method directly. You may override it if you are developing a new component for FastReport.
This method is called by FastReport each time before run a report. FastReport do this to collect all expressions and compile them. For example, GetExpressions method of the TextObject class parses the text and returns all expressions found in the text.
RemoveChild(Base)
Removes a specified object from this object's childs.
Declaration
public virtual void RemoveChild(Base child)
Parameters
| Type | Name | Description |
|---|---|---|
| Base | child |
Serialize(FRWriter)
Serializes the object.
Declaration
public override void Serialize(FRWriter writer)
Parameters
| Type | Name | Description |
|---|---|---|
| FRWriter | writer | Writer object. |
Overrides
Remarks
Do not call this method directly. You should override it if you are developing a new component for FastReport.
This method is called when the object needs to save the state. It may happen when:
- saving the report to the file or stream;
- saving the report to the designer's undo buffer;
- assigning the object to another object using the Assign(Base) or AssignAll(Base) methods;
- saving the object to the designer's clipboard;
- saving the object to the preview (when run a report).
SetChildOrder(Base, Int32)
Sets the z-order of the specified object.
Declaration
public void SetChildOrder(Base child, int order)
Parameters
| Type | Name | Description |
|---|---|---|
| Base | child | Child object. |
| System.Int32 | order | New Z-order. |
Remarks
This method must place the specified child object at the specified position in the internal child list.
SetName(String)
Sets the object's name.
Declaration
public override void SetName(string value)
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | value | New name. |
Overrides
Remarks
This method is for internal use only. It just sets a new name without any checks (unlike the Name property setter).
See Also
UpdateLayout(Single, Single)
Updates the children layout when the size of this object is changed by dx, dy values.
Declaration
public void UpdateLayout(float dx, float dy)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Single | dx | X delta. |
| System.Single | dy | Y delta. |
Remarks
This method must update positions/sizes of child objects whose Dock or Anchor properties are set to non-default values.


@* * Copyright 2023 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @(field: play.api.data.Field, args: (Symbol,Any)*)(togglePanel: Html)(implicit messages: Messages) @import helpers.CSREmptyFieldConstructor._ @import FieldNameHelpers._ @selectRadio(currentValue: Option[String], questionType: String) = @{(currentValue, questionType) match { case (Some("true"), "yes") | (Some("false"), "no") => "checked=\"checked\"" case _ => "" }} @helper.input(field, args:_*) { (id, name, value, _) =>
} @togglePanel


import ballerina.log;function main(string[] args) {
error err = {message: "error occurred"}; log:printDebug("debug log");
log:printError("error log");
log:printErrorCause("error log with cause", err);
log:printInfo("info log");
log:printTrace("trace log");
log:printWarn("warn log");
}
|
The ‘ballerina.log’ package contains ballerina log handling functions. |
import ballerina.log;
|
function main(string[] args) {
error err = {message: "error occurred"};
|
|
|
The Ballerina log API provides functions to log at 5 levels: DEBUG, ERROR, INFO, TRACE and WARN.
By default, all log messages are logged to the console at the INFO level. In addition to these log levels,
there are 2 additionals levels: OFF and ALL.
Log level can be configured through a Ballerina config file or CLI parameters. |
|
log:printDebug("debug log");
log:printError("error log");
log:printErrorCause("error log with cause", err);
log:printInfo("info log");
log:printTrace("trace log");
log:printWarn("warn log");
|
|
|
To set the log level of the API use the CLI parameter: |
|
|
To configure using a config file, place the entry given below in the file: |
}
|
|
As it can be seen from the output, only Info and higher level logs are logged |
$ ballerina run log-api.bal
2017-11-05 21:20:12,313 ERROR [] - error log
2017-11-05 21:20:12,319 ERROR [] - error log with cause : {message:"error occurred", cause:null}
2017-11-05 21:20:12,320 INFO [] - info log
2017-11-05 21:20:12,321 WARN [] - warn log
|
$ ballerina run log-api.bal -B[ballerina.log].level=TRACE
2017-11-05 21:21:35,394 DEBUG [] - debug log
2017-11-05 21:21:35,400 ERROR [] - error log
2017-11-05 21:21:35,402 ERROR [] - error log with cause : {message:"error occurred", cause:null}
2017-11-05 21:21:35,403 INFO [] - info log
2017-11-05 21:21:35,403 TRACE [] - trace log
2017-11-05 21:21:35,404 WARN [] - warn log
|
Next example: Function Pointers.


Matthew Trost
This repo contains an attempt to integrate Famo.us and cassowary.js in order to provide an auto-layout system in Famo.us using a constraint system.
The code here is very much a proof of concept and not recommended for use in anything except prototypes and experimentation. YMMV!


LVM downloader a page where it allows you to download the legacy video maker clones. for more imfornation, Vist Here. GoAnimate Wrapper Download Wrapper Offline And Wrapper Electron Download Download Wrapper 2 https://wrappershop.ga/wrapper2.html


WSCT Core documentation.
What is WSCT?
WSCT is a framework written in C# initialy used to allow any .net software to connect to PC/SC smart card readers on windows through winscard.dll
library.
WSCT stands for WinSCard Tools.
It has evolved to allow any smart card reader to be used, even virtual smart cards.
The project is hosted on Github.
Developed by S.Vernois @ ENSICAEN / GREYC since 2006 with the help of some students for proof of concepts.
The projects
WSCT
Defines the core abstractions allowing the access to readers and smart cards.
WSCT.Core namespace
Main abstractions:
Core.ICardContext
Core.ICardChannel
Core.ICardContextObservable
(extendsICardContext
by adding activity observation through events)Core.ICardChannelObservable
(extendsICardChannel
by adding activity observation through events)
Decorators allowing the observation of an existing context or channel:
Core.CardContextObservable
Core.CardChannelObservable
WSCT.Stack namespace
Defines a layer architecture allows interception and modification of any ICard* method.
Stack.ICardContextLayer
Stack.ICardChannelLayer
Stack of layer implementation:
Stack.CardContextStack
(implementsICardContext
)Stack.CardChannelStack
(implementsICardChannel
)
WSCT.ISO7816 namespace
Defines ISO/IEC 7816-4 command & response APDU:
ISO7816.CommandAPDU
ISO7816.ResponseAPDU
ISO7816.CommandResponsePair
WSCT.Helpers
Defines some helper methods that may be used by any WSCT project.
WSCT.Wrapper
WSCT.Wrapper.Desktop namespace
Defines an implementation of WSCT abstractions that can adapt to any desktop OS (MacOS, Linux, Windows):
Wrapper.Desktop.Core.CardContextCore
(implementsICardContext
)Wrapper.Desktop.Core.CardChannelCore
(implementsICardChannel
)Wrapper.Desktop.Core.CardContext
(implementsICardContextObservable
)Wrapper.Desktop.Core.CardChannel
(implementsICardChannelObservable
)
Example:
using WSCT.Wrapper.Desktop.Core;
var context = new CardContext();
// ...
var cardChannel = new CardChannel(context, "Some reader name");
// ...
WSCT.MacOSX
Defines the implementation of WSCT abstraction for PC/SC service on MacOS.
WSCT.PCSCLite32
Defines the implementation of WSCT abstraction for PC/SC service on 32 bits linux OS.
WSCT.PCSCLite64
Defines the implementation of WSCT abstraction for PC/SC service on 64 bits linux OS.
WSCT.WinSCard
Defines the implementation of WSCT abstraction for PC/SC service on Windows OS.


public interface ClientStreamListener extends StreamListener
| Modifier and Type | Method and Description |
|---|---|
void |
closed(Status status,
Metadata.Trailers trailers)
Called when the stream is fully closed.
|
void |
headersRead(Metadata.Headers headers)
Called upon receiving all header information from the remote end-point.
|
messageRead
void headersRead(Metadata.Headers headers)
closed(io.grpc.Status, Metadata.Trailers)
is called.
This method should return quickly, as the same thread may be used to process other streams.
headers
- the fully buffered received headers.void closed(Status status, Metadata.Trailers trailers)
Status.Code.OK
is the only status code that is guaranteed
to have been sent from the remote server. Any other status code may have been caused by
abnormal stream termination. This is guaranteed to always be the final call on a listener. No
further callbacks will be issued.
This method should return quickly, as the same thread may be used to process other streams.
status
- details about the remote closuretrailers
- trailing metadata


Transfer
Name
Logout
Wallet
New Card
Transactions
See All
Overall
Overall
Uber
$45.00
23/05/19
Uber
$45.00
23/05/19
Uber
$45.00
23/05/19
Uber
$45.00
23/05/19
Uber
$45.00
23/05/19
Uber
$45.00
23/05/19
Select card type
Select Transfer Type
Transfer Between Accounts
Transfer To External Account
From
To
Amount
To
Account Holder's Name
Account Number
Amount
Transfer >


Intro | Version 1 | Version 2 | Viewer 1 | Collaboration
This is a series of experiments to get a feel for what Canvas Panel (CP) actually is, by attempting to build some simple viewing experiences and seeing where the code wants to go.
I think that there are many components in evidence at https://canvas-panel.digirati.com/styleguide/, above and below the level of the thing we want to call Canvas Panel (CP). I think that the component I'm looking for is somewhere around the level of CanvasRepresentation or Viewport in the current implementation. That doesn't mean that I wouldn't use all those other components in putting an application together - as we have done with Canvas Panel-based viewing experiences for V&A and Galway.
But if I want a multipurpose canvas renderer outside of any particular set of tools or frameworks, that will do the heavy lifting of scene evaluation and rendering, what are its interfaces? How do I program against it?
What is useful, and what's just going to get in the way?
The questions I'm trying to answer are:
In other words, can we be sure that our code is in the right places?
Rather than use the real Canvas Panel, I have a definitely less-than-MVP Canvas Panel implementation, as a web component. You'll have to imagine that this component renders a nice deep zoom interface, is capable of rendering AV, is capable of being given annotations to render, fires events as the user interacts, and so on. This is an exercise in determining the boundaries of the component - what do I need to know about how it works inside, where does the black box begin?
I've made CP a web component, because that is a simple way of encapsulating it to think about how I would want to code against it. It's also a favoured future direction for the Universal Viewer, that CP could fit into nicely. Obviously this demo is not a good cross-browser solution, there are no polyfills or any concessions to old browsers. I know that it works in Chrome on my machine and probably in Chrome on yours too.
On to Version 1.


Tourist Attraction
Tunisia
Hotels
Contact
Welcome to Tunisia
Read More
Find Hotel
{{s.msg}}
Read More
Find Hotel
Previous
Next
Night Party
Hotel Rooms
Golf
Raid Saharien
Massage


GQ's 'Men of the Year' 2019 are absolute legends
GQ’s Men of the Year include Jennifer Lopez, Tyler, the Creator and Al Pacino and Robert De Niro.
The popular have just put out their ‘Men of the Year’ issue and the four winners are powerful, inspirational and downright cool.
Describing each one as at ‘dramatically different junctures in their careers’ and yet all worthy of this recognition, the magazine went on to explain why they have won this award.
They began with singer and actress Jennifer Lopez, 50, who they called ‘The Icon’.
In particular, they drew attention to her unreal appearance in 2019’s Hustlers, suggesting it may have been the best film of the year.
Ultimately she is praised for all the incredible work she has done, being open about her age, potentially being a ‘bad bitch’.
Secondly there is Tyler, The Creator, 28, who GQ calls The Provocateur, probably because 2019 was ‘his most ambitious year yet’.
Advertisement Advertisement
The rapper, singer and fashion designer not only smashed his musical career but also showed the world his true entrepreneurial spirit.
‘He sold out arena shows, went platinum for the first time with “IGOR,” and expanded his sphere of creative influence in fashion, footwear, and ice cream.’
And finally, Hollywood heroes Al Pacino, 79 and Robert De Niro, 76, appeared together as GQ’s third winners.
The duo are about to appear in another movie together, the Irishman, which the magazine describes as potentially ‘one final coronation’ for the two actors.
In their Men of the Year interviews, the ‘two legends talk earnestly and honestly about their latest film, Martin Scorsese, The Godfather, and five decades of Hollywood fame’.
What absolute legends.
Got a showbiz story?
If you've got a story, video or pictures get in touch with the Metro.co.uk Entertainment team by emailing us<EMAIL_ADDRESS>calling 020 3615 2145 or by visiting our Submit Stuff page - we'd love to hear from you.


The_Brave
This fresh, heart-pounding journey into the complex world of America's elite undercover military heroes follows D.I.A. Deputy Director Patricia Campbell and her team of analysts as they wield the world's most advanced surveillance technology from headquarters in D.C. All the while, Adam Dalton and his heroic Special Ops squad of highly trained undercover specialists use their unbreakable bond and commitment to freedom to save lives of innocent people and execute missions in some of the most dangerous places in the world.


|
File-derived structure Jmol-derived structure |
This page demonstrates how to synchronize applets in Jmol.
The two applets are jmolAppletA and jmolAppletB. Once the checkbox is checked, going to either one controls the other.
The command used here is simply:
Alternatively, we could have used:
jmolScript("sync . ON;sync > SLAVE", "A")
which would cause only the applet on the top to do the controlling, but allowed the bottom applet to be moved independently of that control. Also, if you open a console on one, you can give commands to the other using something like:
The ">" means "all other synchronized applets".
Other options include "*" (all synchronized applets)
and "." (only this applet, if it is synchronized).
In addition, you can specify the applet by its extension, "A" or "B", or by its full name, "jmolAppletA" or "jmolAppletB" in this case.
Starting with Jmol 11.6, you can also use the script command with the APPLET option to send scripts to one or more applets. This operation is independent of the state of sync being ON or OFF.
Also new in Jmol 11.6, you can use the Jmol math script() function to get information from another applet. Simply indicate the target applet as a second parameter to the script command. For example, from Applet A's console, type:
|
|
Jmol version=11.3.9 # new feature: synchronization of applets using Jmol scripts: # # sync .|>|*|appletId[syncId] ON|OFF|SLAVE|command # # The sync command allows two or more applets to be synchronized in # terms of orientation. Move one with the mouse, and the other moves as well. # In addition, the sync command allows ANY command to be sent to one or more # other applets directly, without the intervention of JavaScript. # # Applets are identified by appletId (jmolApplet0, for instance) # along with an optional bracketed sync group identifier -- generally a random # number that identifies the page containing the controlling applet. If the # syncId is not given, then the ID for the page containing the controlling applet # is used. This feature is important for cross-frame synchronization only. # # # . this applet only # > all applets except this one # * all applets # appletId id of a specific applet # [syncId] (optional) a unique string of digits -- brackets included # # ON sync as driver (default) # OFF turn sync off # SLAVE turn sync on, but not as driver # command command to send # # for example: # # sync * # synchronize all applets as drivers # sync jmolApplet1 #syncs this applet with jmolApplet1 both as drivers # sync > "set echo top left;echo OK" # sends OK to top left of all OTHER applets # sync jmolApplet2[254678942] OFF # turns sync off for an applet ON A DIFFERENT PAGE # # or in a different FRAME # sync . OFF # turns sync off for this applet # # new Jmol.js feature: jmolGetSyncId(); jmolSetSyncId(id); # allows control over the sync ID via javascript. jmolSetSyncId(id) # should be called prior to jmolApplet() and should incorporate some sort of # random digits and no space characters. (A number is good.) # This should only be necessary for multi-frame pages. # ----------------------------------------------------------------------------- |


Welcome to our Live Stream!
This page will automatically guide you through setting up the stream.
Let's get started
Browser Check
We detected that you're using an unsupported browser. Please open this page again in Google Chrome!
Network Detection
Something went wrong.
Download Shortcut Installer
Download
file_download
This installer will automatically set up a shortcut on your desktop for our live stream.
Running the Installer
You should see the file downloading in the bottom left corner of your screen, like this:
Just click on it to run it.
Okay, I did that
keyboard_arrow_right
Now you'll probably see a warning like this:
Click "Run."
Okay, I did that
keyboard_arrow_right
Another window popped up...
help
Almost there!
You should see a black window with white text as shown below:
Please read the entire text of the window! If there were any problems during setup, it will tell you.
Something Went Wrong...
error
Okay, No Errors!
keyboard_arrow_right
That's it!
You should have a shortcut on your desktop that looks like this:
Show me how to use it
Opening the Stream
When you use your new desktop shortcut for the first time, it will probably give you another warning, like this:
Uncheck "Always ask before opening this file" and click "Run". Once you do this, you won't see the warning anymore.
Okay, I did that
keyboard_arrow_right
You're done!
Your stream window should pull up after a few seconds.
If the stream is garbled or gray at first, don't worry. We stream in full HD, so it often takes a moment to load. The stream should be finished loading in no more than 30 seconds.


Hi I have setup a emontx v3 and im running the default 3 phase sketch with ct4 used to also measure my solar.
I have my CT1 connected to my phase 1 and also solar wire and this all appears to be ok.
However my phase 2 and 3 CT's show negative values of -564 and -15 respectively. I tried to flip the clips around which of course gives me a positive value as it should read but then when i run my oven which is connected to my phase 2 line the increase in power usage shows a negative reading of about -2400 so i know that the CT clamp has to be the other way but at low usage it gives me -564. When i keep the clamps connected so that i get a negative value at low usage ie -564 and then put on the oven it then goes into the positive.
I have used a clamp meter and it shows that i have this amount of power going through but that it should be positive.
Any suggestions of what i can do to fix this as i also have a emonglcd that reads the input values and with the negative values it causes it to be inaccurate. thanks.
Re: Input value showing negative on 3 phase
Somebody here: http://openenergymonitor.org/emon/node/10419 claims to have found a bug that causes the stored voltage array to not always be correctly loaded. I'm not familiar with that code, but his patch seems simple enough to make it worth a try to see if it improves things for you. Hopefully, someone more knowledgeable will review that patch soon.
Re: Input value showing negative on 3 phase
I cant see anything in that thread that relates to my issue. Mind you im pretty noob when it comes to this sort of stuff.
Why when i use my clamp meter on either phase 2 or 3 i get the same reading but positive yet the emontx shows it as negative. Also even if i turn off my solar in the fuse box these values remain negative so i know there is no possibility for the solar to be exporting on these phases (its not connected on them anyway but just to be sure).
How is it that its negative value is exactly what it should be but positive? I know the ct clamps are correct as if i switch them around to get a plosive value and then turn on the oven it goes negative about -2400.
I purchased this device about a year ago and im still trying to get it set up. Its certainly not as easy as i thought. But im willing to learn and keep trying.
Anyone else have any ideas?
Re: Input value showing negative on 3 phase
Jose's post in the thread referenced above is the one of interest. If he's correct, and his analysis seems pretty thorough, then a mis-loaded storedV array could cause lots of weirdness, including negative power readings.
Re: Input value showing negative on 3 phase
FWIW, I think I've also seen this behavior (negative values at low consumption on L2 / L3), but I've not tried to debug it.
Re: Input value showing negative on 3 phase
Hello all,
See my comment at http://openenergymonitor.org/emon/node/10419
Seems to require rethinking the voltage array procedure.
Please let me know if it works for you, as my code surely requires more testing and feedback.
Thanks
Christophe


Adding a hardware Real Time Clock (RTC) to the emonPi
Submitted by glyn.hudson on Thu, 09/07/2015 - 14:09
The emonPi updates its internal Linux time from NTP when connected to the internet. However if the emonPi is to be used on an offline network or for an application when accurate timestamp is essential then a hardware Real Time Clock (RTC) can easily be added to the Pi's GPIO. We have tested using a DS3231 based RTC module. This RTC module communicates with the emonPi via I2C, it can be easily connected as follows by soldering a four-pin header onto the emonPi aux GPIO pins:
Adding a hardware Real Time Clock (RTC) to the emonPi
Submitted by glyn.hudson on Thu, 09/07/2015 - 14:09The emonPi updates its internal Linux time from NTP when connected to the internet. However if the emonPi is to be used on an offline network or for an application when accurate timestamp is essential then a hardware Real Time Clock (RTC) can easily be added to the Pi's GPIO. We have tested using a DS3231 based RTC module. This RTC module communicates with the emonPi via I2C, it can be easily connected as follows by soldering a four-pin header onto the emonPi aux GPIO pins:
Full install guide can be found on the wiki:
http://wiki.openenergymonitor.org/index.php/EmonPi#Adding_a_Real_Time_Clock_.28RTC.29
If there was demand we could look at stocking these RTC modules in the shop, or including option to have ready-installed on emonPi. What do you think?


Start Bootstrap has everything you need to get your new website up and running in no time! All of the templates and themes on Start Bootstrap are open source, free to download, and easy to use. No strings attached!
Get Started!Selected from wide range of collection of templates
Faster and Better Service
I update regularly to keep things new and fresh.
I design using HTML 5 CSS 3 and Javascript
Ready to start your next project with me? That's great! Give me a call or send me an email and I will get back to you as soon as possible!
512-924-8749


Google Stadia vs Project xCloud: Who reigns supreme in the streaming space?
by Jade KingGoogle Stadia is finally here, and Project xCloud is slowly expanding ahead of its official release with over 50 games now available in its beta program – more than Stadia’s offering at launch and beyond. Both of the services are throwing punches, not afraid to make themselves known in a space that’s still very much in its infancy.
The differences between both platforms are numerous and each offer their own range of benefits, so Trusted Reviews has compiled everything you need to know about Google Stadia and Project xCloud to determine which one is right for you.
Related: Best Xbox 2 Games
Google Stadia vs Project xCloud prices – how much are they?
Google Stadia Pro subscriptions will cost £8.99 a month, giving you access to games in a maximum resolution of 4K Ultra HD at 60fps with HDR implementation.
In 2020, Google Stadia Base – a lower, free tier which gives you access to games in Full HD only – will launch. In both cases, you will need to purchase titles individually, with the exception of games being available for free as part of Stadia Pro.
Prices for Project xCloud have still yet to be detailed, but Microsoft says that Xbox One owners will be able to use their consoles as free virtual servers. While remote access to titles you already own will be a standard Xbox One feature, it is unclear if non-console owners will be able to set up an xCloud account.
Presumably, Xbox Game Pass (£7.99 a month) and Xbox Game Pass Ultimate (£10.99 a month) subscribers will be able to tap into virtual libraries of titles on the go with xCloud as well – this has not been explicitly confirmed.
Related: Best PS5 Games
Google Stadia vs Project xCloud release dates – when are they coming out?
Google Stadia is due to launch in a number of countries including the UK, the United States, and Canada on November 19, 2019.
Project xCloud is now in preview on Android devices across a number of territories, and will be rolling out with its full release in the coming months. At X019, Microsoft confirmed that xCloud will be coming to PC in 2020, although a specific date remains unconfirmed.
Google Stadia vs Project xCloud games – what can I play?
Project xCloud currently have a grand total of fifty games available in its preview phase, a number which is poised to grow in the coming weeks and months. Microsoft has said that going forward, Game Pass support will be implemented alongside titles you already have in your digital library. Unlike Stadia, you won’t need to build a library from scratch.
Related: PS5
Google Stadia will launch with 22 games which we’ve listed below, with Destiny 2: The Collection and Samurai Shodown coming free as part of a Stadia Pro subscription. Having been doubled in the days before launch, the selection is far better than it could’ve been.
- Assassin’s Creed Odyssey
- Attack on Titan: Final Battle 2
- Destiny 2: The Collection (available in Stadia Pro)
- Farming Simulator 2019
- Final Fantasy XV
- Football Manager 2020
- Grid 2019
- Gylt
- Just Dance 2020
- Kine
- Metro Exodus
- Mortal Kombat 11
- NBA 2K20
- Rage 2
- Rise of the Tomb Raider
- Samurai Shodown (available in Stadia Pro)
- Shadow of the Tomb Raider
- Thumper
- Tomb Raider 2013
- Trials Rising
- Wolfenstein: Youngblood
Google Stadia vs Project xCloud devices – what can I play them on?
At launch, Google Stadia will be exclusive to Pixel smartphones, acting as your only way of playing on the move beyond a laptop or tablet with a compatible application or Chrome browser. You’ll soon be able to use a Chromecast Ultra to play, although we’re awaiting an update before that feature is available to the public.
The Project xCloud preview programme is available on a range of Android devices thus far, although is yet to make the jump to iOS. We imagine this will happen eventually alongside support for Xbox One and Windows, both of which have already been confirmed by Microsoft.
Unlike other sites, we thoroughly review everything we recommend, using industry standard tests to evaluate products. We’ll always tell you what we find. We may get a commission if you buy via our price links. Tell us what you think – email the Editor


| Allsky | |
| Click to show the source | |
| Measurement data | |
| Forecasts | |
Cloud Top |
Water Vapor |
True Color daytime, multispectral IR at night |
multispectral IR at night |
Tonight time lapse |
Webcam Tololo |


A mobile app made during CS506: Software Engineering to learn and practice Agile software development methods. The app connects volunteers with service projects. Organizations can post their events and volunteers can sign up.


This section is Submit your application
Declaration
I confirm that:
- all the information in this application is correct to the best of my knowledge.
- I understand that if it is not, I could be fined or taken to court.
This section is Submit your application
I confirm that:


Hobbies
I train for rugby 2 days a week
I go to the gym 3 days a week
I have a match once a week
I work 3 days a week