In this HR analytics problem, we try to understand what causes the employees of a big company to leave prematurely, and come up with predictive models that predict which employees will leave next. With the help of actionable insights and accurate predictions, companies can take steps to ensure that their talent is happy and engaged and can rethink their retention strategies to keep employees from leaving.
Based on our analysis, we found that the Random Forests model outperformed all the other models in terms of predictive accuracy and AUC score. It is a model that is built based on the technique of ensemble learning, where several base estimators are built independently and their predictions are averaged. This helps reduce the variance and improves the generalizability and robustness over a single estimator. Furthermore, we obtain an importance score for each of the features used in the classification process which will help in interpreting the model's results. In our case, the model gave a lot of weight to Satisfaction Level, Time Spent at the Company, and Number of Projects. These attributes are quite obvious and therefore we feel confident in the predictions of this model.
We'll start by loading in all the required packages and defining a few helper functions that we'll use later on while performing machine learning.
import os
import time
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from __future__ import division
from sklearn import svm
from sklearn import metrics
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV, train_test_split, validation_curve, learning_curve
import seaborn as sns
#sns.set(style="white", context="talk")
sns.set(style="whitegrid")
from sklearn.tree import export_graphviz
from IPython.display import Image
import pydotplus
# Some helper functions for performing machine learning
def classify(grid, X_train, y_train, X_test, y_test):
results = dict()
#Training the model using grid search & cross validation
start_time = time.time()
grid.fit(X_train, y_train)
end_time = time.time() - start_time
results['training_time'] = end_time
#Testing the model on the held out test data set
start_time = time.time()
grid_test = grid.predict(X_test)
end_time = time.time() - start_time
results['testing_time'] = end_time
results['accuracy'] = metrics.accuracy_score(y_test, grid_test)
results['report'] = metrics.classification_report(y_test, grid_test)
results['matrix'] = metrics.confusion_matrix(y_test, grid_test)
results['grid'] = grid
results['grid_test'] = grid_test
return(results)
def get_feature_importances(grid, X_test):
#Returns a dataframe with feature importance info
ls = list()
ls.append({'feature':X_test.columns[a], 'importance':b})
feature_importances = pd.DataFrame(ls).sort_values(by = ['importance'], ascending=False)
return(feature_importances)
def plot_feature_importances(feature_importances):
ax = sns.stripplot(x = "importance", y = "feature", data = feature_importances)
ax.set(xlabel = 'Importance', ylabel='Feature')
return(ax)
def plot_validation_curve(model, X, y, items):
train_scores, test_scores = validation_curve(model,
X,
y,
param_name=items['param_name'],
param_range=items['param_range'],
cv=10,
scoring=items['scoring'],
n_jobs=-1)
train_score_means = np.mean(train_scores, axis=1)
test_score_means = np.mean(test_scores, axis=1)
plt.title(items['title'])
plt.xlabel(items['param_name'])
plt.ylabel(items['scoring'])
plt.ylim(0.0, 1.0)
plt.plot(items['param_range'], train_score_means, color="darkorange", label="Training Score")
plt.plot(items['param_range'], test_score_means, color="navy", label="Testing Score")
plt.legend(loc="best")
return(plt)
def plot_learning_curve(model, X, y, items):
train_sizes_abs, train_scores, test_scores = learning_curve(model,
X,
y,
train_sizes=items['train_sizes'],
cv=items['cv'],
n_jobs=1)
train_score_means = np.mean(train_scores, axis=1)
test_score_means = np.mean(test_scores, axis=1)
plt.title(items['title'])
plt.xlabel('train_sizes')
plt.ylabel(items['scoring'])
plt.ylim(0.0, 1.0)
plt.plot(train_sizes_abs, train_score_means, color="darkorange", label="Training Score")
plt.plot(train_sizes_abs, test_score_means, color="navy", label="Testing Score")
plt.legend(loc="best")
return(plt)
def plot_roc_curve(items):
false_positive_rate, true_positive_rate, thresholds = metrics.roc_curve(items['y_test'], items['y_pred'])
roc_auc = metrics.auc(false_positive_rate, true_positive_rate)
plt.title(items['title'])
plt.plot(false_positive_rate, true_positive_rate, "b", label='AUC = %0.2f'% roc_auc)
plt.plot([0,1],[0,1],'r--')
plt.legend(loc='lower right')
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
return(plt)
def print_results(results):
print "Best Estimator: \n\n%s"%(results['grid'].best_estimator_)
print "\nTraining Time: \n\n%s seconds"%(results['training_time'])
print "\nTesting Time: \n\n%s seconds"%(results['testing_time'])
print "\nAccuracy: \n\n%s"%(results['accuracy'])
print "\nConfusion Matrix: \n\n%s"%(results['matrix'])
print "\nClassification Report: \n\n%s"%(results['report'])
Lets first explore this dataset, which was obtained from Kaggle.
In our dataset we have the records of approximately 15,000 employees with information on attributes such as “Satisfaction Level”, “Salary”, “Department”, and “Average Monthly Hours”, to name a few. The target variable is “Sales”, a binary variable that tells us if an employee has quit or is still working for the company.
#Reading in the data
df = pd.read_csv("....csv")
print df.shape
print df.info()
Lets get a quick look at some high level stats about our dataset.
We can see that the median satisfaction level is about 61% and on average employees work for upto 200 hours a month.
df.describe()
The column “sales” represents the department to which the employees belong.
Lets go ahead and change the column name to something more intuitive, and find out how many departments are there.
print pd.unique(df.sales.ravel())
# We'll rename the "sales" column to "department".
df.rename(columns={"sales":"department"}, inplace=True)
We can see that there are over 4000 employees belonging to the sales department and they constitute the majority in the workforce.
ax = None
ax = sns.countplot(y="department", data=df)
sns.plt.show()
What are the average monthly hours for different salary groups? Lets find out by comparing the employees who have left with those who haven't.
From the plot below we can see that the mean average monthly hour is 200 hours and is almost consistent across all groups.
Former employees with low and medium salaries seem to have put in slightly more hours a month than everyone else and former employees with high salaries worked slightly less hours.
ax = None
ax = sns.factorplot(data=df, x="salary", y="average_montly_hours", col="left", kind="bar")
(ax
.set_axis_labels("Salary", "Mean Average Monthly Hour")
.set_xticklabels(["Low", "Medium", "High"])
.despine(left=True, right=True))
sns.plt.show()
What scores do employees get on their performance reviews? Is it the same across the different salary groups?
The plot below answers these questions for us. We can see that the employees of different salary groups who've stayed have similar average performance scores and they're all well above 70%.
Its interesting to note that the Low and Medium salaried employees who've left held an average performance score above 70%, but the scores of High salaried employees fall well below 70%.
ax = None
ax = sns.factorplot(data=df, x="salary", y="last_evaluation", col="left", kind="point")
(ax
.set_axis_labels("Salary", "Mean Last Evaluation")
.set_xticklabels(["Low", "Medium", "High"])
.despine(left=True, right=True))
sns.plt.show()
We wish to find out if satisfaction levels play a role in employees leaving their companies. Lets find out what the distribution looks like in this dataset.
It appears that the employees who have left have lower average satisfaction levels, ranging from a little over 0.37 to 0.46. Employees who stayed possess relatively higher satisfaction levels.
ax = None
ax = sns.factorplot(data=df, x="salary", y="satisfaction_level", col="left")
(ax
.set_axis_labels("Salary", "Satisfaction Level")
.set_xticklabels(["Low", "Medium", "High"])
.despine(left=True, right=True))
sns.plt.show()
Does the satisfaction level of the employees depend on how many projects they've been assigned to in a year? As it turns out, it does.
It appears that the people who are most satisfied with their jobs are assigned around 2 to 4 projects a year, and this satisfaction level is almost consistent across different salary groups. Employees who are assigned to just 1 or even more than 4 projects have relatively lower satisfaction levels.
ax = None
ax = sns.factorplot(data=df,
x="number_project",
y="satisfaction_level", col="salary")
(ax
.set_axis_labels("Number of Projects", "Satisfaction Level")
.set_xticklabels([1, 2, 3, 4, 5, 6, 7])
.despine(left=True, right=True))
sns.plt.show()
In this section we'll develop supervised classification models that will predict whether a given employee will or won't leave the company.
Before we go on to develop those models, we'll have to do a bit of data preprocessing.
The columns "salary" and "department" are both categorical and will need to be encoded as binary variables. We perform One Hot Encoding to obtain their binary representations.
print pd.unique(df.salary.ravel())
print pd.unique(df.department.ravel())
#One hot encoding - Transforming all the categorical variables to their binary representations
salary = pd.get_dummies(df['salary'], drop_first=False)
department = pd.get_dummies(df['department'], drop_first=False)
df.drop(['salary', 'department'], axis=1, inplace=True)
df = pd.concat([df, salary, department], axis=1)
print df.info()
The plot below shows us how the class label "left" is distributed. We see that the vast majority of data points belong to class 0, the label which represents the employees who have not left the company.
The remaining belong to class 1, the label which indicates that they have left.
ax = None
ax = sns.countplot(x="left", data=df)
sns.plt.show()
Since the dataset is imbalanced and skewed towards class 0, we'll use stratified sampling to construct our training and test data sets.
Stratified sampling ensures that the percentage of both the classes remains consistent across the training and test sets.
train, test = train_test_split(df, test_size = 0.3, random_state = 5, stratify = df['left'])
X_train = train.ix[:, df.columns.difference(['left'])]
y_train = train.ix[:, 'left']
X_test = test.ix[:, df.columns.difference(['left'])]
y_test = test.ix[:, ['left']]
print X_train.shape, y_train.shape
print X_test.shape, y_test.shape
We'll use four different classification algorithms to develop the predictive models and find out which one performs the best.
Lets start with the Random Forests algorithm, which works by building several decision trees and averaging their results.
Apart from being highly interpretable, Decision Tree based modelling techniques also help us in understanding how important the features of a dataset are.
#Random Forests classification
n = range(1, 101)
param_grid = dict(n_estimators=n)
random_forests = RandomForestClassifier(random_state=5)
grid = GridSearchCV(random_forests, param_grid, cv=10, scoring='accuracy', n_jobs=-1)
results1 = classify(grid, X_train, y_train, X_test, y_test)
#Visualizing the importance of the features
#The importance of a feature is computed as the (normalized) total reduction of the criterion brought by that feature.
#It is also known as the Gini importance.
feature_importances = get_feature_importances(results1['grid'], X_test)
ax = None
ax = plot_feature_importances(feature_importances)
sns.plt.show()
Our Random Forests model tells us that the feature "satisfaction_level" plays the most important role in determining the class of a tuple.
The processing times and accuracy scores are shown below.
print_results(results1)
Lets drop the features with relatively lower scores, generate new train/test sets,and retrain the RF model to see if there are any changes in the accuracy.
top_features = feature_importances[:5]['feature'].tolist() + ['left']
new_df = df[top_features]
train, test = train_test_split(new_df, test_size = 0.3, random_state = 5, stratify = new_df['left'])
X_train = train.ix[:, new_df.columns.difference(['left'])]
y_train = train.ix[:, 'left']
X_test = test.ix[:, new_df.columns.difference(['left'])]
y_test = test.ix[:, ['left']]
#Random Forests classification with reduced features
n = range(1, 101)
param_grid = dict(n_estimators=n)
random_forests = RandomForestClassifier(random_state=5)
grid = GridSearchCV(random_forests, param_grid, cv=10, scoring='accuracy', n_jobs=-1)
results1 = classify(grid, X_train, y_train, X_test, y_test)
feature_importances = get_feature_importances(results1['grid'], X_test)
ax = None
ax = plot_feature_importances(feature_importances)
sns.plt.show()
%%HTML

We can see that reducing the number of features hasn't affected the overall scores.

Although the model takes quite a while to train, it produces pretty impressive class precision and recall scores.

print_results(results1)
Lets take a look at what the ROC curve looks like for our Random Forests model.
The ROC curve is a plot of the False Positive Rate vs the True Positive Rate of a binary classifier.
AUC, which stands for Area Under the Curve, tells us what the value of the area under the curve is.
The closer AUC is to 1.0, the better our model is at performing classifications.
items = {"title":"Receiver Operating Characteristic (Random Forests)",
"y_test":y_test,
"y_pred":results1['grid_test']}
plt = plot_roc_curve(items)
plt.show()
Validation curves help us visualize how the performance of our model during training and testing varies with changes in its hyperparameter values.
#Random Forests Validation Curve
random_forests_classifier = RandomForestClassifier(random_state=5)
n_estimators = range(1, 101)
items = {'title':'Random Forests Validation Curve',
'param_range':n_estimators,
'param_name':'n_estimators',
'scoring':'accuracy'}
plt = plot_validation_curve(random_forests_classifier, X_train, y_train, items)
plt.show()
Learning curves help us visualize how the performance of our model during training and testing varies with changes in the training set size.
#Random Forests Learning Curve
random_forests_classifier = RandomForestClassifier(random_state=5, n_estimators=10)
train_sizes = np.linspace(.05, 1.0, 10)
items = {'title':'Random Forests Learning Curve',
'train_sizes':train_sizes,
'cv':10,
'scoring':'accuracy'}
plt = plot_learning_curve(random_forests_classifier, X_train, y_train, items)
plt.show()
We'll now develop prediction models using SVM, K Nearest Neighbors, and a standard Decision Tree, and also generate ROC, learning and validation curves for each of the models to find out how they perform.
#SVM Classification
kernel = ['sigmoid', 'rbf']
param_grid = dict(kernel=kernel)
support_vector_classifier = svm.SVC(random_state=5)
grid = GridSearchCV(support_vector_classifier, param_grid, cv=10, scoring='accuracy', n_jobs=-1)
results2 = classify(grid, X_train, y_train, X_test, y_test)
print_results(results2)
#ROC Curve for SVM
items = {"title":"Receiver Operating Characteristic (SVM)",
"y_test":y_test,
"y_pred":results2['grid_test']}
plt = plot_roc_curve(items)
plt.show()
#SVM Validation Curve
support_vector_classifier = svm.SVC(random_state=5, kernel="rbf")
gamma = np.logspace(-6, -1, 5)
items = {'title':'SVM Validation Curve',
'param_range':gamma,
'param_name':'gamma',
'scoring':'accuracy'}
plt = plot_validation_curve(support_vector_classifier, X_train, y_train, items)
plt.show()
#SVM Learning Curve
support_vector_classifier = svm.SVC(random_state=5, kernel="rbf")
train_sizes = np.linspace(.05, 1.0, 10)
items = {'title':'SVM Learning Curve',
'train_sizes':train_sizes,
'cv':10,
'scoring':'accuracy'}
plt = plot_learning_curve(support_vector_classifier, X_train, y_train, items)
plt.show()
#KNN Classification
p = range(1, 3)
n_neighbors = range(1, 101)
param_grid = dict(p=p, n_neighbors=n_neighbors)
knn_classifier = KNeighborsClassifier()
grid = GridSearchCV(knn_classifier, param_grid, cv=10, scoring='accuracy', n_jobs=-1)
results3 = classify(grid, X_train, y_train, X_test, y_test)
print_results(results3)
items = {"title":"Receiver Operating Characteristic (K Nearest Neighbors)",
"y_test":y_test,
"y_pred":results3['grid_test']}
plt = plot_roc_curve(items)
plt.show()
#KNN Validation curve
knn_classifier = KNeighborsClassifier()
n_neighbors = range(1, 50)
items = {'title':'KNN Validation Curve',
'param_range':n_neighbors,
'param_name':'n_neighbors',
'scoring':'accuracy'}
plt = plot_validation_curve(knn_classifier, X_train, y_train, items)
plt.show()
#KNN Learning curve
knn_classifier = KNeighborsClassifier(n_neighbors=2)
train_sizes = np.linspace(.05, 1.0, 10)
items = {'title':'KNN Learning Curve',
'train_sizes':train_sizes,
'cv':10,
'scoring':'accuracy'}
plt = plot_learning_curve(knn_classifier, X_train, y_train, items)
plt.show()
#Decision Tree Classifier
max_depth = range(10, 31)
param_grid = dict(max_depth=max_depth)
decision_tree_classifier = DecisionTreeClassifier(random_state=5)
grid = GridSearchCV(decision_tree_classifier, param_grid, cv=10, scoring='accuracy', n_jobs=-1)
results4 = classify(grid, X_train, y_train, X_test, y_test)
print_results(results4)
items = {"title":"Receiver Operating Characteristic (Decision Tree)",
"y_test":y_test,
"y_pred":results3['grid_test']}
plt = plot_roc_curve(items)
plt.show()
#Printing out the decision tree
my_tree = results4['grid'].best_estimator_
dot_data = export_graphviz(my_tree, out_file=None, feature_names=X_test.columns, filled=True, rounded=True)
graph = pydotplus.graph_from_dot_data(dot_data)
graph.write_pdf("~/Desktop/tree.pdf")
Image(graph.create_png())
Lets visualise the ROC curves of all our models together to find out which one performed the best.
We can see that all the models performed well, but the Random Forests model performed the best, with an AUC score of 0.98.
colors = ['cyan', 'indigo','blue', 'darkorange']
titles = ["Random Forests", "Support Vector Machines", "K Nearest Neighbors", "Decision Trees"]
results = [results1, results2, results3, results4]
models = zip(colors, results, titles)
for model in models:
false_positive_rate, true_positive_rate, thresholds = metrics.roc_curve(y_test, model[1]['grid_test'])
roc_auc = metrics.auc(false_positive_rate, true_positive_rate)
plt.plot(false_positive_rate, true_positive_rate, model[0], label=model[2]+'/AUC = %0.2f'% roc_auc)
plt.plot([0,1],[0,1],'r--')
plt.title("Receiver Operating Characteristic")
plt.legend(loc='lower right')
plt.ylabel('True Positive Rate')
plt.xlabel('False Positive Rate')
plt.show()


Have a look around!
My skillset ranges from website development to full-fledged web applications, hybrid mobile applications, and server-side support for both along with a database.
My skillset ranges from website development to full-fledged web applications, hybrid mobile applications, and server-side support for both along with a database.
My work experience~
Lorem ipsum
Position: Front-End Web Developer
Phone:<PHONE_NUMBER>
Position: Sole Proprietor / Full Stack Web Developer
Phone:<PHONE_NUMBER>
Position: IT Clerk / Sales Rep
Phone:<PHONE_NUMBER>
Here's my budding portfolio
Have a look
Shoot me a message
Fill out the form and hit submit to send me a quick email.


Paste tab separated data in as "Name [TAB] Category [TAB] Abatement potential [TAB] Cost [NEWLINE]
".
There shouldn't be a header row. Tab separated data is what you get if you copy and paste from Excel.
x axis name
y axis name
incremental cost name
Minimum width for label to be displayed in pixels (zero means label every box)
Minimum y to display (leave blank for automatic scaling)
Maximum y to display (leave blank for automatic scaling)
Width in pixels (leave blank for automatic scaling)
Height in pixels (leave blank for automatic scaling)
Margin top in pixels (increase if the labels go off of the top)
Margin bottom in pixels (increase if the labels go off of the bottom)


Featured Posts
New to
Steemit Philippines?
Sign Up
Quick Start Guide
About Us
Calendar of Events
Contact Us
Join us on Discord
Donate | Deligate
Steemit Philippines?
Sign Up
Quick Start Guide
About Us
Calendar of Events
Contact Us
Join us on Discord
Donate | Deligate


Properties
- Maximum - The maximum value allowed by the extender
- Minimum - The minimum value allowed by the extender
- RefValues - A list of strings separated by semicolons (;) to be used as an enumeration by NumericUpDown
- ServiceDownMethod - A Web service method that returns data used to get the previous value or the name of a method declared on the page which is decorated with the WebMethodAttribute
- ServiceDownPath - A path to a web service that returns data used to get the previous value
- ServiceUpMethod - A Web service method that returns data used to get the next value or the name of a method declared on the page that is decorated with the WebMethodAttribute
- ServiceUpPath - A path to a web service that returns data used to get the next value
- Step - A step used for simple numeric incrementing and decrementing. The default value is 1
- Tag - A custom parameter to pass to the Web Service
- TargetButtonDownID - A reference to a custom Down button
- TargetButtonUpID - A reference to a custom Up button
- Width - Combined size of the TextBox and Up/Down buttons. The minimum value 25


Request free support for your school or establishment
We’ll connect your school, college or educational establishment with an ASK delivery partner in your area. They’ll work with you to deliver apprenticeship support based on your needs, from visits and talks to resources and specific event support. Fill in our quick online form to get started.


{% extends 'base.html' %} {% block content %} Wellcome to StudyTime Please, login or register to use our features: Login Register {% endblock %}
Please, login or register to use our features:


Victoria Beckham shares adorable message from daughter Harper on World Kindness Day
Happy Kindness Day
by Richard BellVictoria Beckham has shared an adorable video featuring her daughter Harper to spread a message of positivity for fans.
To mark World Kindness Day on Wednesday (13.11.10), the former Spice Girl shared a clip that showed the eight-year-old telling followers: "Caring is sharing!"
 Happy Kindness Day everyone!"
Read more: David Beckham shares fun family snap on Bonfire Night
The caption read: "Kisses from Harper Seven on #worldkindnessday X."
Victoria's fans were delighted and rushed to tell her in the comments how adorable Harper is.
One said: "Aww she's so cute, love Harper x."
Another wrote, "She's the cutest" alongside a heart-eyes emoji.
A third put: "Aww she's so adorable... I can't believe she's not a little baby anymore."
Someone else commented: "So so sooo sweet, melt my heart."
"Gorgeous and super kind," wrote a fifth.
A sixth commented: "How cute you are Harper."
Victoria wasn't the only Spice Girl to share a message for her followers on World Kindness Day.
Scary Spice Mel B took the opportunity to urge her fans to take a quiz and see how healthy their relationship is.
She posted a quote that read, "Should, would, could. Did" and wrote in the caption: "It's #WorlddkindnessDay today and this is really important to me and @womensaid.
"Take this quiz to see how healthy your relationship is. Please be honest. I spent so many years in denial about the abusive relationship I was in, you owe it to yourself – and your family - to do this."
Read more: Beckhams hailed as 'ultimate family' after sharing impressive Halloween photo
After sharing a link to the quiz, she continued: "On average, one women is killed by a partner every four days. The police receive 100 calls every hour from victims of abuse.
"Shocking but true. We need to start with the basics and educate ourselves and our kids about what is acceptable behaviour. If you Know someone or you are someone in trouble, remember @womensaid have support available for you right NOW, if you are living with #domesticabuse #gethelp #dontfeelashamed."
In her memoir Brutally Honest, Mel claimed her ex husband Stephen Belafonte was abusive and told readers she could only get herself through the day by taking drugs for breakfast.
Leave us a comment on our Facebook page @EntertainmentDailyFix and let us know what you think of this story.


talks
The list of talks, presentations, and public appearances.
2021
- 26th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming, March (virtual).
Extracting Clean Performance Models from Tainted Programs, research paper presentation.
Slides, recording on SPCL YouTube..
2019
-
SPPEXA Final Symposium 2019, October, Dresden, Germany.
Presentation of the perf-taint project results.
Slides. -
ACM Student Research Competition at ACM/IEEE Supercomputing, November, Denver, USA.
perf-taint: Taint Analysis for Automatic Many-Parameter Performance Modeling, research poster.
Gold Medal presentation.
Poster, finals presentation slides.
2018
-
Die jungen Wilden: Googles Summer of Code.
Interview with me about the GSoC program on the heise.de portal (German). -
ETH D-INFK VMI Retreat, Fiesch, Switzerland.
Polyhedral compilation and loop counting, students association retreat.
Slides. -
ETH PhD Interview, Zurich, Switzerland.
On the Linear Ranking Problem for Integer Linear-Constraint Loops, presenting the POPL’13 paper.
Slides.
2017
-
RWTH Aachen University Master’s Thesis Defence, Aachen, Germany.
Parallel Prefix Algorithms for the Registration of Arbitrarily Long Electron Micrograph Series
Slides. -
DHPCC++ 2017 at 9th International Workshop on OpenCL and SYCL, Toronto, Canada.
Using SYCL as an Implementation Framework for HPX Compute, research paper presentation.
Slides. -
ACM Student Research Competition at ACM/IEEE Supercomputing 2017, November, Denver, USA.
Parallel Prefix Algorithms for the Registration of Arbitrarily Long Electron Micrograph Series, poster.
Poster.
2016
-
25th International Workshop on Concurrency, Specification and Programming, September, Rostock, Germany.
A GPGPU-based Simulator for Prism: Statistical Verification of Results of PMC (extended abstract) research paper presentation.
Slides. -
C++Now 2016, Aspen, USA.
HPX and GPU parallelized STL, conference talk.
Slides, recording on C++Now YouTube..
2015
- Automation, Compilers, and Code-Generation Seminar, RWTH Aachen University.
Smart Expression Templates, research seminar final presentation.
Slides. code repository.
2014
-
Silesian University of Technology, Bachelor Thesis Seminar, Gliwice, Poland.
GPU-accelerated stochastic simulator engine for PRISM model checker, presentation of Bachelor thesis.
Slides. -
Silesian University of Technology, Students Scientific Group of Programming Engineering and Linguistic Engineering, Gliwice, Poland.
C++11, presentation of new C++ features to fellow students (Polish).
Slides.
2013
-
Silesian University of Technology, 5th Computer Science Student Seminar: Summer Course, Gliwice, Poland.
Introduction to GPU programming (Polish).
Slides. -
Silesian University of Technology, Students Scientific Group of Programming Engineering and Linguistic Engineering, Gliwice, Poland.
Introduction to GPU programming, presentation to fellow students (Polish).
Slides.


Welcome to Simple REST Client
The first step is as good as half over
- AM REST Client | AM Advanced REST Client
- UCMDB REST Client
- SSH Web Client
AM REST Client
- ref-link
db/amLocation
or db/amLocation/123
Don't left / at the end
- collection
EmplDepts
Don't put / at the beginning
- All tables DEF
- Open a new window to display all tables definition, need authenticate again.
- A table DEF
- Open a new window to display the table definition (table in ref-link
db/amLocation
),
need authenticate again.
UCMDB REST Client
- Setup REST Agent
-
- Deploy rest-gateway in you UCMDB server
Download package
- Edit config.properties file in package (UCMDB Info)
- Edit
gateway.home
(this package installed folder) in startup.bat (java -Drest.gateway.home=C:\hp\UCMDB\REST
-jar rest-gateway-1.0.jar)
- Run
startup.bat
in package (latest Java is required)
- Sever
- Input your rest-gateway URL and PORT (Sample:
<IP_ADDRESS>:9091
)
- View
- Manually input TQL view name, after query this view name will be saved in history
- History
- Display all views your query before, click button X to remove items
- Customize
- Modify your TQL, for example: update filter; add
Element Layout
etc
Install this Web APP
- Git
- Install Git, then git clone https://github.com/masogit/rest.git
- NodeJS
- Install NodeJS, then npm install to install components
- Specify Port
- Windows:set PORT=80 Linux:export PORT=80 default is 8080
- Start Service
- node server.js
Browser will save your last parameters automatically.


Charlie Card, 11, would spend hours retching into an empty bowl and regularly missed school after constantly complaining he didn’t feel well.
His school became suspicious and even his loved ones thought his behaviour was strange, initially putting the blame for his stiff neck and tiredness on too much time playing Xbox.
But parents Rosie and Gary, who lost a six-month-old baby following an infection in 2009, kept bringing their son back to the doctors.
They initially dismissed the complaints, recommending he see a child psychologist, while one suggested he was telling fibs.
But in Easter this year Charlie was told he had been living with a brain tumour for six months.
Advertisement Advertisement
Gary, 43, said his boy is now a shell of his former self and has pleaded for parents to never ignore their children.
‘Listen to the kids if they tell you they are not right,’ he stressed.
‘I say to this day that it was Charlie who got himself diagnosed because he wouldn’t take no for an answer.
‘This is a common theme in hospitals.
‘We were told that a GP will never diagnose a brain tumour and if they do it will be once in their whole career.
‘We don’t blame the doctors because it is just so common for brain tumours to be dismissed.’
Charlie began missing school earlier this year and after a while, Gary said, his teachers began to think he was ‘putting it on’.
On Easter Monday he complained of having visual disturbances and was taken to the Royal Victoria Infirmary Hospital in Newcastle near their home.
A CAT scan later revealed pressure on the nerves of his eyes before a doctor informed the family of the tumour – known as malignant medulloblastoma.
‘He told Charlie he was a surgeon and needed to go into the back of his head and take the tumour out to make him better,’ Gary said.
Advertisement Advertisement
‘He was absolutely petrified and it was probably the only time he ever cried and he was saying “I want to go home – I promise I will come back”.’
Charlie underwent a five-and-a-half hour operation the following day where 99 per cent of the tumour was successfully removed.
He has since endured rounds of radiotherapy and chemotherapy with his final session due on Friday.
But Charlie, who has dreams of being a professional footballer, is now a different boy after the gruelling treatment.
‘Before he was so open, funny, had a wicked sense of humour but now he is a shell of his former self,’ Gary said.
‘He won’t open up, he has lost so much weight, 90 per cent of his hair is gone including his eyebrows and his lips are dry and cracked.
‘He is in constant pain.’
Gary is now planning to give his son the best Christmas ever after his year of hell.
He has set up a fundraising page to share Charlie’s story and has been overwhelmed by the response.
Charlie’s dream is to receive a signed pair of boots from his favourite footballer – Cristiano Ronaldo.
Advertisement
His dad has no idea if he will be able to achieve his son’s number one request but he has now raised over £1,000 to ensure Charlie gets some special gifts.
‘Ideally he wants the Ronaldo signed boots but if he was offered them or the chance to take away his treatment and never have another hospital appointment in his life he would take the latter,’ Gary said.
‘He is terrified because this is the same hospital his brother Hayden passed away in and Charlie knows all about him.
‘Even though he was only 14 months old when he died he has always said he lives his life twice for him.’
Sarah Lindsell, CEO for The Brain Tumour Charity, said: ‘We can only improve the quality of life for everyone affected by a brain tumour diagnosis by increasing awareness of the symptoms. This is the key to our HeadSmart campaign.
‘HeadSmart has two aims: to save lives and reduce long-term disability by bringing down childhood brain tumour diagnosis times.
‘The campaign helps us to achieve that goal by alerting more healthcare professionals, parents and young people to the signs and symptoms of the disease.
‘As the UK’s foremost brain tumour charity, we are leading the way in fighting brain tumours on all fronts through our work.
‘Together, we will find a cure.’
Got a story for Metro.co.uk?
Get in touch with our news team by emailing us at<EMAIL_ADDRESS>For more stories like this, check our news page.


{{ student.name }}
Student's Performance:
Student's Information:
Name: {{ student.name }}
Email: {{ student.email }}
Address:
{{ student.address }}
Parent's Phone Number: {{ student.parent_phone }}
Predicted Grade: {{ student.predicted_grade }}
Student's Classes:
{% for class in student.classes %}
{{ class.class_name }}
(Beginning: {{ class.class_starting_date.strftime('%d %b %Y') }})
{% endfor %}


DotArt
Image to braille character converter
Help / About
File select
Threshold
Max characters
Dithering
None
Ordered
Atkinson
Coloring
White on Black
Black on White
Horizontal gap
Vertical gap


It looks like you haven't specified a URL.
Right click the 'Webapp in a Box' icon, select 'options' and then enter the URL of your web app or website.


@Decker That zip file didn't work for me and I kept getting an error no what matter what i tried
Decker06-Jun-19 02:27 AM
If we are talking about Windows installer - there is no any zip.
komodo-qt-win.zip - static binaries of Komodo-Qt for Windows
komodo-qt-win.exe - Windows Installer(edited)
Feel the difference between zip with binaries, and installer.
In case of installer it automatically downloads ZCash Params and creates komodo.conf, in case of zip with binaries - you'll need to fetch ZCash params manually and create komodo.conf, also manually.
So, if you are not experienced with this, or don't understand what is the ZCash Params or komodo.conf file - read the docs, or just use the installer.
weldon.gull506-Jun-19 03:34 AM
Excuse me, if the wallet is encrypted, how can I export the private key? How to decrypt the wallet first
Decker06-Jun-19 04:14 AM
You should unlock wallet first.
weldon.gull506-Jun-19 04:33 AM
@Decker How to unlock? I don't see the unlock wallet option in the menu.
Decker06-Jun-19 04:45 AM
Same way as in Bitcoin Core and other wallets.
Help -> Debug window -> Console:
walletpassphrase "passphrase" timeout
weldon.gull506-Jun-19 04:46 AM
thank you
CryptAiz06-Jun-19 06:54 AM
Hi, when i run ./komodo-qt-linux It says Error Cannot parse configuration file: Missing komodo.conf. only use key=value syntax
i didnt modify the conf file
all the parameter in the conf file are key=value syntax... or atleast they seem to be
smk762 - dracocanis ominator06-Jun-19 07:02 AM
@CryptAiz make sure no special chars in your conf file (like /, , $,! etc)
CryptAiz06-Jun-19 07:15 AM
yup just checked it again.. no specfial chars
Decker06-Jun-19 10:27 AM
@CryptAiz show us your komodo.conf, just copy it on pastebin.com and put link here.
Also, show the full path to it on your system.
Helly8806-Jun-19 11:06 AM
@jl777c When will a Trezor connection finally come? You can see what happens if you don't have a hardware wallet. On the Trezor page it says that there is no wallet from KMD yet. When can one count on it
Decker06-Jun-19 11:36 AM
Hardware wallets is not 100% safe, bcz you can't be sure what actually you will receive with the next firmware update. It's a question of trust )
Let's imagine, just theoretically that somebody hacked Ledger firmware update servers ) And inject a code to change a transactions before sign. You trying to send coins on address X ... Ledger shows you address X and needed amount ... but after you pressed a button, coins will be sent on address Y. Just a theoretical case, but also possible.
4
1
Helly8806-Jun-19 04:12 PM
When Trezor ??
1
ParliamodiCrypto06-Jun-19 05:38 PM
Hello. The ocean wallet work with Dpos like agama for the staking? or I need to leave it runnig for the staking?
gcharang06-Jun-19 05:46 PM
@ParliamodiCrypto just send to own address once a month
no need to keep it running
I have komodo-qt running , but I have not been able to find any hints on how to start assetchains in komodoqt - can anyone please post a link to a howto if there is one?
so I have KMD blockchain native, and PirateOcean is a separate PirateWalletQt- but I can't seem to get CHIPS, BET, BOTS& hooked into it(edited)
Guide is for RFOX / PIRATE on Linux, but same process for other assetchains, and on other operating systems change the ./komodo-qt-linux bit to the launch file for your operating system
umm.. the signup for the support platform - email won't get sent, but when I try gaina it says 'email already taken' - I tried two email addresses
smk762 - dracocanis ominator07-Jun-19 07:23 AM
what you need? I can try and help here or in DM
otherwise, maybe try password reset?
LocoMB07-Jun-19 07:31 AM
@Smk-High - I'll wait a bit and try again later
maybe the sendbot has a hangover or so.. but why are the howtos in a member area anyway?
I'll just need to the cmd line params for launching ocean with different assetchains
- whereas I have to say, it is possible to enter a convoluted chunk of params, it is not really nice to do so for each of a dozen chains one wants to start- which is why I never did it
adamanto7507-Jun-19 07:40 AM
Hey Im trying to open the new ocean qt wallet on my computer but Im getting an error
cannot find zcash network parameters
please run zcash fetchparams
smk762 - dracocanis ominator07-Jun-19 07:43 AM
which operating system?
adamanto7507-Jun-19 07:43 AM
win10 64bit
TonyL07-Jun-19 07:43 AM
run fetchparams file first (it's in same folder with QT folder)
You’re a champion @smk762 - dracocanis ominator It worked
1
smk762 - dracocanis ominator08-Jun-19 09:07 AM
awse, great to hear!
FishyGuts09-Jun-19 08:04 AM
How do I rescan the wallet in Windows on restart?
./
And I know you like me.
You know why?
Because I didn't come back and say "That didn't work"
1
Instead just trying it gave me enough info to figure it out.
./KomodoOceanGUI.exe -rescan(edited)
Shift and Right click the folder KomodoOcean
-> Then choose Open Powershell Window Here
-> then type ./KomodoOceanGUI.exe -rescan(edited)
WorldOfCryptos09-Jun-19 07:34 PM
hi any help here regarding the wallet please ?
Yassin09-Jun-19 07:41 PM
maybe i can hlep you if i can, i am not expert in QT
and my english is bad (edited)
2
ecbuddy10-Jun-19 03:58 AM
after this agama fiasco. I now that I have KMD back in ocean wallet
wondering, how do I collect interest on this, like I used to on AGAMA?
CHMEX10-Jun-19 04:15 AM
You simply send the complete balance once each 30 days to your self
sybil10-Jun-19 11:42 AM
i found out about the agama problem and tried to install Ocean on linux and mac and i cannot manage to run it on both, on linux i get: libstdc++.so.6 version GLIBCXX_3.4.21 not found
on mac i get: cannot parse configuration file: missing komodo.config. only use key=value syntax


Whatever you gave us, we didn't like it. We're all for teh pr0n and all, but not here man, we can't process those goods.
If you feel offended or think that this shouldn't be an error, ">shoot us a love letter and let us know you saw this.


@examples The following example demonstrates how to use the GetHashCode method to return a hash code for an instance of UTF8Encoding. Notice that the hash code returned by this method varies depending on the constructor used to create the UTF8Encoding.
Public Sub Main() Dim UTF8A As UTF8Encoding Dim UTF8B As UTF8Encoding Dim UTF8C As UTF8Encoding Dim UTF8D As UTF8Encoding ' Many ways to instantiate a UTF8 encoding. Set UTF8A = New UTF8Encoding Set UTF8B = NewUTF8Encoding(True) Set UTF8C = NewUTF8Encoding(True, True) Set UTF8D = NewUTF8Encoding(False, True) ' But not all are the same. Console.WriteLine UTF8A.GetHashCode Console.WriteLine UTF8B.GetHashCode Console.WriteLine UTF8C.GetHashCode Console.WriteLine UTF8C.GetHashCode Console.ReadKey End Sub


APSMediaPlayerOverlayControllerProtocol
Objective-C
@protocol APSMediaPlayerOverlayControllerProtocol <KRAdapter>
Swift
protocol APSMediaPlayerOverlayControllerProtocol
The APSMediaPlayerOverlayController
defines all the methods that a UIViewController
subclass must or can implement to be able to register as an overlay controller with the player. This protocol extends the KRAdapter
protocol, so objects should also implement a type
method, returning a unique string to register under.
To use:
- Create a new class that implements this protocol
Register it with the player shared instance:
[[APSMediaPlayer sharedInstance] registerClass:[<YOURCLASS> class] inGroup:kAPSMediaPlayerOverlayControllersGroup];
Set up with the
APSMediaOverlay
:overlay.type = @"<YOURSTRINGCONSTANT>"
-
This method is invoked by the player when first diplaying the overlay controller object.
Declaration
Objective-C
- (void)load;
Swift
func load()
-
This method is invoked by the player on a background thread, before the overlay start point, as set by the [APSMediaEvent preTriggerInterval] property.
Declaration
Objective-C
- (void)preload;
Swift
optional func preload()
-
This method is called whenever the playback state of the player is changed (e.g. current playback time changes, playback state changes etc.). If the overlay controller needs to update its interface as a result of these changes, the updates should be performed in this method.
The method is invoked on the main application thread.
Declaration
Objective-C
- (void)update;
Swift
optional func update()
-
This method is invoked by the player, before the overlay controller’s view is removed from the player surface. Any overlay cleanup code should be performed in this method.
The method is invoked on the main application thread.
Declaration
Objective-C
- (void)overlayWillBeRemoved;
Swift
optional func overlayWillBeRemoved()
-
This method is invoked by the player, when fullscreen mode is enabled.
Declaration
Objective-C
- (void)didEnterFullscreen;
Swift
optional func didEnterFullscreen()
-
This method is invoked by the player, when fullscreen mode is disabled.
Declaration
Objective-C
- (void)didExitFullscreen;
Swift
optional func didExitFullscreen()
-
This method is invoked by the player, when picture in picture mode is enabled.
Declaration
Objective-C
- (void)didStartPictureInPicture;
Swift
optional func didStartPictureInPicture()
-
This method is invoked by the player, when picture in picture mode is disabled.
Declaration
Objective-C
- (void)didStopPictureInPicture;
Swift
optional func didStopPictureInPicture()
-
Allows an overlay controller to return a current playback time in place of the parent
APSMediaUnit
object, if theurl
property of that object is nil.This occurs for overlays that handle media playback in place of the parent unit, for e.g. the Youtube player overlay controller. *
- - returns: The current overlay-managed playback time, in seconds.
Declaration
Objective-C
- (NSTimeInterval)currentPlaybackTime;
Swift
optional func currentPlaybackTime() -> TimeInterval
-
Allows an overlay controller to return a total playable (buffered) time in place of the parent
APSMediaUnit
object, if theurl
property of that object is nil.This occurs for overlays that handle media playback in place of the parent unit, for e.g. the Youtube player overlay controller. *
- - returns: The current overlay-managed total playable (buffered) time, in seconds.
Declaration
Objective-C
- (NSTimeInterval)playableDuration;
Swift
optional func playableDuration() -> TimeInterval
-
Allows an overlay that handles media playback in place of the parent unit to internally set the current playback time.
Declaration
Objective-C
- (void)setCurrentPlaybackTime:(NSTimeInterval)playbackTime;
Swift
optional func setCurrentPlaybackTime(_ playbackTime: TimeInterval)
Parameters
playbackTime
The required playback time to seek to, in seconds.
-
Allows an overlay controller to return a total playback duration in place of the parent
APSMediaUnit
object, if theurl
property of that object is nil.This occurs for overlays that handle media playback in place of the parent unit, for e.g. the Youtube player overlay controller. *
- - parameter: playbackTime The total overlay-managed playback duration, in seconds.
Declaration
Objective-C
- (NSTimeInterval)duration;
Swift
optional func duration() -> TimeInterval
-
Allows an overlay controller to return a playback state in place of the parent
APSMediaUnit
object, if theurl
property of that object is nil.This occurs for overlays that handle media playback in place of the parent unit, for e.g. the Youtube player overlay controller. *
- - returns: The current overlay-managed playback state.
Declaration
Objective-C
- (APSMoviePlaybackState)playbackState;
Swift
optional func playbackState() -> APSMoviePlaybackState
-
Allows an overlay controller to return a load state in place of the parent
APSMediaUnit
object, if theurl
property of that object is nil.This occurs for overlays that handle media playback in place of the parent unit, for e.g. the Youtube player overlay controller. *
- - returns: The current overlay-managed load state.
Declaration
Objective-C
- (APSMovieLoadState)loadState;
Swift
optional func loadState() -> APSMovieLoadState
-
Allows an overlay controller to return a media source type in place of the parent
APSMediaUnit
object, if theurl
property of that object is nil.This occurs for overlays that handle media playback in place of the parent unit, for e.g. the Youtube player overlay controller. *
- - returns: The current overlay-managed media source type.
Declaration
Objective-C
- (APSMovieSourceType)movieSourceType;
Swift
optional func movieSourceType() -> APSMovieSourceType
-
Allows an overlay that handles media playback in place of the parent unit to start playback.
Declaration
Objective-C
- (void)play;
Swift
optional func play()
-
Allows an overlay that handles media playback in place of the parent unit to stop playback.
Declaration
Objective-C
- (void)stop;
Swift
optional func stop()
-
Allows an overlay that handles media playback in place of the parent unit to pause playback.
Declaration
Objective-C
- (void)pause;
Swift
optional func pause()
-
Allows an overlay that handles media playback in place of the parent unit to return a thumbnail image at a specific time interval from the managed video.
Warning
This method should execute blocking operations on a background thread, and should invoke the callback block on the main thread.
Declaration
Objective-C
- (void)thumbnailAt:(NSTimeInterval)playbackTime withCompletionBlock:(APSThumbnailGeneratedBlock _Nonnull)block;
Swift
optional func thumbnail(at playbackTime: TimeInterval, withCompletionBlock block: @escaping APSThumbnailGeneratedBlock)
Parameters
playbackTime
The time when the thumbnail should be taken from the video.
block
The block to be invoked on thumbnail generation completion.
-
Allows an overlay controller to specify what action the player should take when it comes back into focus, after a modal in-app web browser was triggered and dismissed by user interaction.
Declaration
Objective-C
- (APSWebviewDismissedAction)onWebviewDismiss;
Swift
optional func onWebviewDismiss() -> APSWebviewDismissedAction
Return Value
The desired action. See
APSWebviewDismissedAction
for more details.


Provides a unified view of a ServletConfig or a FilterConfig.
A template context for use in servlets
Loads files using ServletContext
.
A TemplateEngine which initializes itself using a ServletConfig or a FilterConfig.
Servlet which renders the requested Scalate template.
Some helper methods for servlet and web app based code
Easy access to servlet request state.


A lightweight jQuery plugin that transforms a standard input filed into a simple star rating system styling with Twitter's Bootstrap 4 or Bootstrap 3.
My rating:
My rating:
My rating:
My rating:
My rating:
Inline rating:
Readonly:
Readonly Div:
My rating:


Provide more information about your item and upload good qualit
Upgrade your ad to get more views & more replies
Provide more information about your


Wolverhampton Wanderers showing interest in Southampton's Cedric Soares?
Wolverhampton Wanderers have reportedly identified Southampton defender Cedric Soares as a potential January signing.
by Darren PlantWhile the West Midlands outfit are well stocked for options at wing-back, Nuno Espirito Santo has recently moved Adama Traore further up the pitch due to a change in formation.
With that in mind, it appears that Wolves may look to bring in a defensive player in that area at the midway point of the campaign.
According to TEAMtalk, there is an interest in Soares, who has less than a year remaining on his contract at St Mary's.
The report adds that the 28-year-old has already indicated that he wishes to leave the Saints, which could lead to the south-coast side cashing in on his services at the beginning of 2020.
The Portugal international has made seven starts in all competitions this season.
body check tags ::


In 2017, Shelly Simonds Lost Her Virginia House Race in a 'Luck of the Draw' Tiebreaker. This Year, She Won By Nearly 20 Points
by Associated Press(NEWPORT NEWS, Va.) — A Democratic candidate who lost a random drawing that determined control of the Virginia House of Delegates nearly two years ago has won a rematch against her Republican opponent.
Shelly Simonds defeated four-term Del. David Yancey handily Tuesday in a race for the 94th District in Newport News.
Read more: Democrats Seize Control of Historically Red Virginia’s State Legislature
The close 2017 race between the two went to a recount, then to court. Eventually, officials used the luck of the draw, placing the name of each candidate on a piece of paper and each piece of paper in a separate film canister. The canisters were put into a cobalt blue-and-white ceramic bowl made by a local artist and stirred around. The canister containing Yancey’s name was drawn, giving him the win.
On Tuesday, Simonds won nearly 58% of the vote. Yancey won about 40%.


The boxes contain the various parts of Go date formats. Click on a date format part to add it to the format string. Hover over a part for more information.
Add delimiters (spaces, dashes, colons) by typing in the text box. Delimiters and other text that isn't recognized as part of the date will be highlighted in red.


All
Number Keys (Static)
Custom Keys (From JSON or an Array of Objects)
Special Character Keys (Optional)
Keyboard
Custom Keys (From JSON or an Array of Objects)
Special Character Keys (Optional)
Numpad
Number Keys
3 types of keyboards can be used: all, keyboard, and numpad.
Number Keys (Static)
Custom Keys (From JSON or an Array of Objects)
Special Character Keys (Optional)
Custom Keys (From JSON or an Array of Objects)
Special Character Keys (Optional)
Number Keys
5 types of themes can be used. light, dark, flat, material, and oldschool.
There are two ways to add KioskBoard. The first one is adding CSS and JS files to the HTML file one by one. The second option is adding only the All In One file (Internal CSS).
HTML CSS and JS
<link rel="stylesheet" href="dist/kioskboard-2.3.0.min.css" />
<script src="dist/kioskboard-2.3.0.min.js"></script>
HTML Only JS (Internal CSS)
<script src="dist/kioskboard-aio-2.3.0.min.js"></script>
JS Import
import KioskBoard from 'kioskboard';
KioskBoard Virtual Keyboard can be used with the input or textarea elements.
KioskBoard must be initialized with the required options. The other ones are optional. Keyboard Type (the default value is "all") data-kioskboard-type, Keyboard Placement (the default value is "bottom") data-kioskboard-placement, and Special Characters data-kioskboard-specialcharacters settings are each element-based (data attributes).
All options and examples of data attribute usages are as below. Also, a custom class name can be defined as globally for all input and/or textarea elements to run KioskBoard.
HTML data-* options
<!-- An example of a textarea element: The keyboard type is "all", the placement is "top", and the availability of the special characters is "true". -->
<textarea class="js-kioskboard-input" data-kioskboard-type="all" data-kioskboard-placement="top" data-kioskboard-specialcharacters="true" placeholder="Your Address"></textarea>
<!-- An example of an input element: The keyboard type is "keyboard", the placement is "bottom", and the availability of the special characters is "false". -->
<input class="js-kioskboard-input" data-kioskboard-type="keyboard" data-kioskboard-placement="bottom" data-kioskboard-specialcharacters="false" placeholder="Your Name" />
<!-- An example of an input element: The keyboard type is "numpad", and the placement is "bottom". (Special characters are not allowed for "numpad".) -->
<input class="js-kioskboard-input" data-kioskboard-type="numpad" data-kioskboard-placement="bottom" placeholder="Your Number" />
JS Run with Init
@param1 {string | HTMLInputElement | HTMLTextAreaElement}: CSS selector(s) that matches the element(s) or an input/textarea element.
@param2 {Object}: The init options.
KioskBoard.run('.js-kioskboard-input', {
// ...init options
});
OR
JS Step 1: Initialize
// Initialize KioskBoard (default/all options)
KioskBoard.init({
/*!
* Required
* An Array of Objects has to be defined for the custom keys. Hint: Each object creates a row element (HTML) on the keyboard.
* e.g. [{"key":"value"}, {"key":"value"}] => [{"0":"A","1":"B","2":"C"}, {"0":"D","1":"E","2":"F"}]
*/
keysArrayOfObjects: null,
/*!
* Required only if "keysArrayOfObjects" is "null".
* The path of the "kioskboard-keys-${langugage}.json" file must be set to the "keysJsonUrl" option. (XMLHttpRequest to get the keys from JSON file.)
* e.g. '/Content/Plugins/KioskBoard/dist/kioskboard-keys-english.json'
*/
keysJsonUrl: null,
/*
* Optional: (Special Characters)
* An Array of Strings can be set to override the built-in special characters.
* e.g. ["#", "€", "%", "+", "-", "*"]
*/
keysSpecialCharsArrayOfStrings: null,
/*
* Optional: (Numpad Keys)
* An Array of Numbers can be set to override the built-in numpad keys. (From 0 to 9, in any order.)
* e.g. [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
*/
keysNumpadArrayOfNumbers: null,
// Optional: (Other Options)
// Language Code (ISO 639-1) for custom keys (for language support) => e.g. "de" || "en" || "fr" || "hu" || "tr" etc...
language: 'en',
// The theme of keyboard => "light" || "dark" || "flat" || "material" || "oldschool"
theme: 'light',
// Scrolls the document to the top or bottom(by the placement option) of the input/textarea element. Prevented when "false"
autoScroll: true,
// Uppercase or lowercase to start. Uppercased when "true"
capsLockActive: true,
// Allow or prevent real/physical keyboard usage. Prevented when "false"
// In addition, the "allowMobileKeyboard" option must be "true" as well, if the real/physical keyboard has wanted to be used.
allowRealKeyboard: false,
// Allow or prevent mobile keyboard usage. Prevented when "false"
allowMobileKeyboard: false,
// CSS animations for opening or closing the keyboard
cssAnimations: true,
// CSS animations duration as millisecond
cssAnimationsDuration: 360,
// CSS animations style for opening or closing the keyboard => "slide" || "fade"
cssAnimationsStyle: 'slide',
// Enable or Disable Spacebar functionality on the keyboard. The Spacebar will be passive when "false"
keysAllowSpacebar: true,
// Text of the Space key (Spacebar). Without text => " "
keysSpacebarText: 'Space',
// Font family of the keys
keysFontFamily: 'sans-serif',
// Font size of the keys
keysFontSize: '22px',
// Font weight of the keys
keysFontWeight: 'normal',
// Size of the icon keys
keysIconSize: '25px',
// Text of the Enter key (Enter/Return). Without text => " "
keysEnterText: 'Enter',
// The callback function of the Enter key. This function will be called when the enter key has been clicked.
keysEnterCallback: undefined,
// The Enter key can close and remove the keyboard. Prevented when "false"
keysEnterCanClose: true,
});
JS Step 2: Run
// Select the input or the textarea element(s) to run the KioskBoard
KioskBoard.run('.js-kioskboard-input');
The keysJsonUrl option has to be set if custom keys are not defined with the keysArrayOfObjects option. JSON format has to be: [{"key":"value", "key":"value"}, ...]. Each object in that array creates a row element (HTML) on the keyboard. The "key" in the objects is used as an "index" for each Keyboard Keys. The "value" is each key's value and inner text.
Additionally, KioskBoard includes 9 different language packages: Arabic , English , French , German , Hungarian , Persian , Russian , Spanish , and Turkish .
JSON Custom Keys example in English
[
{
"0": "Q",
"1": "W",
"2": "E",
"3": "R",
"4": "T",
"5": "Y",
"6": "U",
"7": "I",
"8": "O",
"9": "P"
},
{
"0": "A",
"1": "S",
"2": "D",
"3": "F",
"4": "G",
"5": "H",
"6": "J",
"7": "K",
"8": "L"
},
{
"0": "Z",
"1": "X",
"2": "C",
"3": "V",
"4": "B",
"5": "N",
"6": "M"
}
]


Why would someone want to create a website about themselves? I’m not sure. I just wanted to create a static page website sans CMS, but couldn't think of anything to create a site about. So, I created this hobby site wherein I could dabble in various backend computer stuff. In earlier years I had a blog on Blogger and even tried to create a commonplace book on Tumblr. Both were fun, but I didn’t keep them up. So, using Github and Jekyll, I thought I would try to pull my disparate sites together into one place. I have relied heavily on Yevgeniy Brikman for my site design. All good design is his. All screw-ups are mine. This is it, for better or worse.


Subtotal
n/a
Tax
n/a
Total
n/a
This payment method will be used for the annual membership charges associated with this purchase. You may change this at any time in your settings.
By clicking "Pay Now", I accept the Terms of Sale, the EA User Agreement, Privacy and Cookie Policy, and applicable Game Disclaimer(s) as described here. I also understand that installation of the Origin client and acceptance of the Origin End User License Agreement (EULA) may be required to access my purchase(s).
Need more help with your order? Visit EA Help.


--- layout: post date: 2006-01-09 time: "09:00:00" authors: ["Greg Wilson"] title: "Two More Revised Software Carpentry Lectures" tags: ["Carpentries Lessons"] ---
I have revised the second shell lecture and the lecture on version control for the Software Carpentry course, and added the necessary glossary definitions. As always, comments are greatly appreciated.


| Modifiers | Name | Description |
|---|---|---|
protected RabbitMessagePublisher |
rabbitMessagePublisher |
Rabbit message publisher. |
| Type | Name and description |
|---|---|
static int |
DEFAULT_TIMEOUT Default timeout for RPC calls (5 seconds). |
java.lang.String |
appId Application ID. |
boolean |
autoConvert Whether to auto-convert the reply payload. |
java.lang.Object |
body Message body. |
com.rabbitmq.client.Channel |
channel Channel to publish messages through. |
java.lang.String |
connection Connection name. |
java.lang.String |
contentEncoding Content encoding. |
java.lang.String |
contentType Content type. |
java.lang.String |
correlationId Correlation id. |
int |
deliveryMode Delivery mode (1 == non-persistent, 2 == persistent) |
java.lang.String |
exchange Exchange to send the message to. |
java.lang.String |
expiration Message expiration. |
java.util.Map |
headers Message headers. |
java.lang.String |
messageId Message ID. |
int |
priority Priority. |
java.lang.String |
replyTo Queue to reply to. |
java.lang.String |
routingKey Routing key to send the message to. |
int |
timeout RPC timeout, in milliseconds. |
java.util.Calendar |
timestamp Message timestamp. |
java.lang.String |
type Message type name. |
java.lang.String |
userId User ID. |
| Constructor and description |
|---|
RabbitMessageBuilder
(com.rabbitmq.client.Channel channel = null) Constructor |
| Type | Name and description |
|---|---|
RabbitMessageProperties |
buildMessageProperties() Builds a RabbitMessageProperties object to submit to the message publisher. |
protected RabbitMessagePublisher |
getRabbitMessagePublisher() Returns the rabbit message publisher bean, loading it if necessary. |
java.lang.Object |
rpc() Sends a message to the bus and waits for a reply, up to the "timeout" property. |
java.lang.Object |
rpc(groovy.lang.Closure closure) Sends a message to the bus and waits for a reply, up to the "timeout" property. |
java.lang.Object |
rpc(java.lang.String routingKey, java.lang.Object body) Sends a message to the bus and waits for a reply, up to the "timeout" property. |
java.lang.Object |
rpc(java.lang.String exchange, java.lang.String routingKey, java.lang.Object body) Sends a message to the bus and waits for a reply, up to the "timeout" property. |
protected void |
run(groovy.lang.Closure closure) Runs a passed closure to implement builder-style operation. |
void |
send() Sends a message to the rabbit service. |
void |
send(groovy.lang.Closure closure) Sends a message to the rabbit service. |
void |
send(java.lang.String routingKey, java.lang.Object body) Sends a message to the rabbit service. |
void |
send(java.lang.String exchange, java.lang.String routingKey, java.lang.Object body) Sends a message to the rabbit service. |
void |
setRabbitMessagePublisher(RabbitMessagePublisher rabbitMessagePublisher) Sets the rabbit message publisher bean. |
| Methods inherited from class | Name |
|---|---|
class java.lang.Object |
java.lang.Object#wait(long, int), java.lang.Object#wait(long), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll() |
Rabbit message publisher.
Default timeout for RPC calls (5 seconds).
Application ID.
Whether to auto-convert the reply payload.
Message body.
Channel to publish messages through.
Connection name.
Content encoding.
Content type.
Correlation id.
Delivery mode (1 == non-persistent, 2 == persistent)
Exchange to send the message to.
Message expiration.
Message headers.
Message ID.
Priority.
Queue to reply to.
Routing key to send the message to.
RPC timeout, in milliseconds.
Message timestamp.
Message type name.
User ID.
Constructor Loads the rabbit template bean registered from the grails plugin.
Builds a RabbitMessageProperties object to submit to the message publisher.
Returns the rabbit message publisher bean, loading it if necessary.
Sends a message to the bus and waits for a reply, up to the "timeout" property.
Sends a message to the bus and waits for a reply, up to the "timeout" property. This method returns a Message object if autoConvert is set to false, or some other object type (string, list, map) if autoConvert is true.
Sends a message to the bus and waits for a reply, up to the "timeout" property. This method returns a Message object if autoConvert is set to false, or some other object type (string, list, map) if autoConvert is true.
routingKey
- Routing key to send the message to.body
- Message payload.Sends a message to the bus and waits for a reply, up to the "timeout" property. This method returns a Message object if autoConvert is set to false, or some other object type (string, list, map) if autoConvert is true.
exchange
- Exchange to send the message to.routingKey
- Routing key to send the message to.body
- Message payload.Runs a passed closure to implement builder-style operation.
Sends a message to the rabbit service.
Sends a message to the rabbit service.
Sends a message to the rabbit service.
routingKey
- Routing key to send the message to.body
- Message payload.Sends a message to the rabbit service.
exchange
- Exchange to send the message to.routingKey
- Routing key to send the message to.body
- Message payload.Sets the rabbit message publisher bean.
Groovy Documentation


Redirecting...
You should be redirected to
{url}
in a moment. Click below to be redirected now.
go now


Optional(field: T?, addByteToStart: Boolean = false)
Container template class used whenever we have an optional field.
The idea here is that the binary serialization of this field should be performed in a specific way determined by the field implementing the {@link ByteSerializable} interface, more specifically using the {@link ByteSerializable#toBytes()} method.
However, if the field is missing, the Optional class should be able to know how to serialize it, as this is always done by placing an zero byte.
Author
Daria Pechkovskaya


Pledis Entertainment decides to stop Minhyun's send-off with fans after musical due to safety issues
by jennywillMinhyun will no longer be greeting fans in a send-off after his musical 'Marie Antoinette' performances.
Pledis Entertainment said, "Hello. This is PLEDIS ENTERTAINMENT. We would like to make an announcement with regards to NU’EST MINHYUN’s musical ‘Marie-Antoinette.’ Recently, there have been increasing number of complaints from the mall, the theater and more regarding safety issues due to fans gathered in the parking that artist vehicle leaves after the show. Due to the safety of the fans and the Artist, we have decided to no longer do send-off after the show from now on. We hope for your kind understanding and cooperation. Thank you."
A send-off is when idols, after their musical performances, come see the fans outside in an informal fanmeeting-type event.


Guess the Right Word!
Use the alphabet below to guess the word, or click hint to get a clue.
Clue -
Hint
Play again


Work smarter not harder
Smart Compose is coming to Google Docs starting with G Suite users
Currently only available in English.
by Jason EnglandWhat you need to know
- Smart Compose is expanding to Google Docs starting with G Suite users.
- Google is accepting sign-ups from G Suite admins who want to be part of the beta.
- It is currently only available in English.
Writing is hard, and if it's up to Google, you won't have to do it anymore in the future thanks to Smart Compose. Smart Compose makes writing easier by using machine learning to predict what you might say and then making suggestions.
You can then accept these suggestions and have it complete sentences for you to cut down on the amount of typing you have to do while also preventing any spelling or grammar mistakes.
Google first rolled this out to Gmail back in 2018 and later we saw it launch in the Gmail app as a Pixel 3 exclusive. Then, to celebrate Gmail's 15th birthday, Google released Smart Compose for Gmail to all Android users in April of 2019.
Now, Google is looking to expand this beyond emails and is allowing G Suite users to sign up for the Smart Compose in Docs Beta program. Unfortunately, if you are not a G Suite user, you won't even have the opportunity to sign up to test it. However, at least this will give Google some time and data to improve Smart Compose for Docs before rolling it out more widely.
It's also important to note that while Smart Compose in Gmail works for several languages, the beta for Docs is only currently available in English.
Just think, in the future Google may be writing your papers for you giving you more time to play on Stadia. Hopefully by thenn Stadia will have worked out all its issues.


- select(String) - Method in interface edu.cnm.deepdive.videopoker.model.dao.PaytableDao
-
Retrieve the data from a paytable that matches the name.
- select() - Method in interface edu.cnm.deepdive.videopoker.model.dao.PaytableDao
-
Retrieve a list of paytables from the database according to the ID.
- selectPokerHandNamesByBetOneFromPaytable(long) - Method in interface edu.cnm.deepdive.videopoker.model.dao.PokerHandDao
-
This query returns a list of hand names for a specific paytable in descending order by the
betOneValue.
- selectPokerHandsByBetOneFromPaytable(long) - Method in interface edu.cnm.deepdive.videopoker.model.dao.PokerHandDao
-
This query returns a list of PokerHands for a specific paytable in descending order by the
betOneValue.
- setBestHand(PokerHand) - Method in class edu.cnm.deepdive.videopoker.model.PlayerHand
-
Stores a PokerHand parameter as the best possible hand for this card.
- setBet(int) - Method in class edu.cnm.deepdive.videopoker.model.Game
-
- setBetFiveValue(int) - Method in class edu.cnm.deepdive.videopoker.model.entity.PokerHand
-
- setBetOneValue(int) - Method in class edu.cnm.deepdive.videopoker.model.entity.PokerHand
-
- setChecked(boolean) - Method in class edu.cnm.deepdive.videopoker.controller.CardButton
-
Sets the checked flag to a desired state if it is not already in that state, and refreshes the
drawable view if not.
- setId(long) - Method in class edu.cnm.deepdive.videopoker.model.entity.Paytable
-
- setId(long) - Method in class edu.cnm.deepdive.videopoker.model.entity.PokerHand
-
- setLocalDb(List<Paytable>) - Method in class edu.cnm.deepdive.videopoker.GameApplication
-
- setName(String) - Method in class edu.cnm.deepdive.videopoker.model.entity.Paytable
-
- setName(String) - Method in class edu.cnm.deepdive.videopoker.model.entity.PokerHand
-
- setPaytableId(long) - Method in class edu.cnm.deepdive.videopoker.model.entity.PokerHand
-
- setPlayerHand(PlayerHand) - Method in class edu.cnm.deepdive.videopoker.model.Game
-
- setPurse(int) - Method in class edu.cnm.deepdive.videopoker.model.Game
-
- setRuleSequence(String) - Method in class edu.cnm.deepdive.videopoker.model.entity.PokerHand
-
- setShowInTable(boolean) - Method in class edu.cnm.deepdive.videopoker.model.entity.PokerHand
-
- setWin(int) - Method in class edu.cnm.deepdive.videopoker.model.Game
-
- shuffle() - Method in class edu.cnm.deepdive.videopoker.model.Deck
-
Shuffles the deck according to the Random object held in this class.
- SplashActivity - Class in edu.cnm.deepdive.videopoker.controller
-
This is the launcher screen activity that opens when the user opens the app.
- SplashActivity() - Constructor for class edu.cnm.deepdive.videopoker.controller.SplashActivity
-
- Suit - Enum in edu.cnm.deepdive.videopoker.model
-
This class represents the suit value in the order Clubs, Diamonds, Hearts, Spades.
- Suit.Color - Enum in edu.cnm.deepdive.videopoker.model
-
A store of the color state of the suit in BLACK or RED.


The 4 Week Challenge has ended. Thank you for following our journey. Good luck on your studies. ♥ Team NaN.
We'll keep this site around for old-times sake, our app will remain available for download until the domain expires... next year.
We're Team Not a Name, or NaN for short.
Team 8A in the UCLan 4-week computing challenge, we're building a multiplayer hide & seek game for Android.
We'll be publishing a new version of our app every Friday, with new features, improved user interfaces and more.


Having worked since the 1980s in the international auction houses and acquired the experience learned from them, and later in international galleries, we decided that our task would not be the one of the previous ones that are forced to sell what they have for sale at their inventories, or under the pressure of advertising or fashions. Therefore, and after years of experience, our ethics made us choose not to have our own works or our own artists, but to pursue the way to offer our collectors the best of private collections or market, advising them without any interest. And so, the commitment made with our collectors makes us select the best available from all international portfolios, thanks to our extensive network of contacts with individuals and professionals.
We prefer methodical, personal and direct work with our collectors, and our method is thorough and rigorous, based on confidentiality for both sellers and buyers. We usually do not introduce works that have been in the public market in the last 25 years, and though we are essentially specialized in Impressionist and Modern paintings, we sometimes fall under the fascination of an Old Master or a Contemporary painting and we introduce it to our collectors. However we are not present at international social events, and we do not consider the idea that we work with asset class investments.
For us research work is essential, as well as conscientious examination of provenance, confirmation of the legal status of the work and its conservation, for which we develop and maintain close contact with museums and scholars of each field or artist. While we can provide the best legal services specialized in the field of art, we generally work with the trusted attorneys of our clients, as well as with their curators and conservators.
In the artist section of this website, you can find the names of some of the artists that we have sold masterpieces in the last 3 years.


Save an existing file
An existing petri-net file can be saved by pressing the following incon on the task-bar which is illustrated below.The same result can be obtained by pressing Ctrl-S.


| Rate |
{{ rule['rate'] }} |
|
| Delay |
{{ rule['delay'] }} |
ms |
±{{ rule['delayVariance'] }} |
± ms |
| Loss |
{{ rule['loss'] }} |
% |
{{ rule['lossCorrelation'] }} |
% |
| Duplicate |
{{ rule['duplicate'] }} |
% |
| Reorder |
{{ rule['reorder'] }} |
% |
{{ rule['reorderCorrelation'] }} |
% |
| Corrupt |
{{ rule['corrupt'] }} |
% |
| Limit |
{{ rule['limit'] }} |
|


As an Apache project, Apache Ivy is very open to external contributions. There are many ways to contribute to Apache Ivy. First, [[download]] and use it, subscribe to the [[mailing-lists]], and answer other user questions. You can also browse [[issues jira issues]], vote for the ones you are most interested in, and add your comments and feedback. You can also very easily contribute to the [[wiki]]. When you browse the documentation, whenever you see something that could be improved, feel free to edit it and provide a documentation patch. It's very easy if you browse the documentation offline (in the doc directory if you check out Apache Ivy from git), you will see a small toolbar at the upper right of the page, which allows you to edit the page. Then all you have to do is attach your modification as a patch to a new issue in JIRA.
If you are interested in contributing documentation, read [[write-doc this page]].
You can also provide brand new documentation pages, tutorials, demos, or even links to a tutorial on your own blog. Another useful way to contribute is to spread the word: if you like Apache Ivy, say it! On your blog, on other blog comments, on popular java related sites, wherever. The more popular Apache Ivy becomes, the more it will get external contributions, and the better it will be, for the benefit of the whole community. When you get more confident with Apache Ivy, you can check it out from git, and begin to see if there are issues you could fix or implement, and provide patches to allow the whole community to benefit from your work. When you provide a patch, to increase the chance to get integrated, do not forget to provide a junit test, and a patch to the documentation if it changes anything in Apache Ivy's behaviour. And if you provide patches often, or answer many of the mailing list questions, you may get the chance to become a commiter, with write access to the git repository!


Let's use NVM
Sun Jun 14, 2015
My colleague just came to me with a troubled face. He couldn’t figure out why his gulp script failed to start up local server where everyone else is able to do so. After a short debugging session, I found that the culprit is Node JS version. Certainly, our gulp scripts have a conflict with the latest Node JS. Now, my colleague has to downgrade his Node JS installation, or does he have to? :)
In this fast-moving industry, maintaining specific versions for your libraries or tools seems to be a chore. That’s why there are so many xyz managers, e.g. pip, apt-get, bower, npm, jspm, and homebrew, etc. For managing versions of Node JS, there is NVM - Node Version Manager. I highly recommend using it to have better controls of which version of Node I use.
If you already installed Node via other installers, it’s better to completely remove the existing Node and NPM. To do that, I stole the following command from this stackoverflow thread - How do I completely uninstall Node.js, and reinstall from beginning (Mac OS X). Here are the commands:
lsbom -f -l -s -pf /var/db/receipts/org.nodejs.pkg.bom | while read f; do sudo rm /usr/local/${f}; done
sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.*
That should remove all Node JS and NPM from Mac OS X. Now let’s install NVM. As of June 2015, the following might be the easiest command to install NVM:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.25.4/install.sh | bash
(Note: It’s always safe to check if NVM updated their installation command.)
The install.sh script will insert a few lines to ~/.bashrc, however, Mac OS X for some reason won’t source ~/.bashrc (see details). So we have to copy the inserted lines to ~/.bash_profile instead:
# Node version manager
export NVM_DIR="/Users/your_username/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
Change your_username to your home dir name. After sourcing ~/.bash_profile, NVM will be loaded and ready to use.
source ~/.bash_profile
Let’s install Node JS, for example, version 0.10.38:
nvm install 0.10.38
nvm use 0.10.38
Type node -v
to check if the correct version is installed and in use.
Node 0.10.38 is installed. However, it will be a bit tedious to type nvm use 0.10.38
to switch to that version every time a terminal session starts. To fix that, I assign ‘default’ as an alias to v0.10.38:
nvm alias default 0.10.38
Versions tied to the ‘default’ alias will be the default active version.
You are free to install many versions of Node JS with NVM. For instance, here we install the stable version (0.12.4 as of June 2015):
nvm install stable
To list all installed Node Js, and see which one is active, use the nvm ls
command:
The command reports that I have v0.10.38 and v0.12.4 installed. The current active version is 0.10.38. I have four aliases - default, node, sable, and iojs. Aliases can refer to other aliases. In this example, node refers stable, and stable refers 0.12.
Conclusion
Managing versions is crucial but tedious. The task should be automated. NVM helps us manage multiple Node Js versions without a sweat. It becomes much easy to work in a working version, and try something new in the latest version. All I have to do is nvm use default
and nvm use stable
.
And a side benefit is that I don’t have to sudo npm install
any more. Just npm install
.


If desired, the location can be set to a directory outside of the Tomcat install directory. See the TDS Configuration Directory section of the TDS Reference for more information.
All TDS configuration information is stored under the TDS content directory. The location of the directory is
controlled by the tds.content.root.path
Java system property. The default location is
${tomcat_home}/content/
, however we strongly recommend that you explicitly set this value in your Tomcat
startup script.
The content directory is created and populated with default files the first time the TDS is deployed. It is persistent even when a TDS installation is upgraded or re-deployed. All your configuration, modifications, and additions should be made in this directory. Do not place files containing passwords or anything else with security issues in this directory. Typically you will only be adding and modifying catalogs and configuration files.
For now, we will focus on the following subset of the content directory:
<tds.content.root.path>/thredds/
catalog.xml
- the main TDS configuration catalog
(root catalog for TDS configuration)
enhancedCatalog.xml
- an example catalog [Note: It
is referenced from catalog.xml
.]
threddsConfig.xml
- configuration file for allowing non-default
services, configuring caching, etc (more details available
here).
logs/
catalogInit.log
- log file for messages generated while reading TDS
configuration catalogs during TDS initialization and reinitialization.
threddsServlet.log
- log messages about individual TDS requests,
including any error messages. Useful for debugging problems.
cache/
- various cache directories
agg/
cdm/
collection/
ehcache/
ncss/
wcs/
The main TDS configuration catalog is at <tds.content.root.path>/thredds/catalog.xml
.
We ship a simple test catalog:
<?xml version="1.0" encoding="UTF-8"?> <catalog name="THREDDS Server Default Catalog : You must change this to fit your server!" xmlns="http://www.unidata.ucar.edu/namespaces/thredds/InvCatalog/v1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.unidata.ucar.edu/namespaces/thredds/InvCatalog/v1.0 https://schemas.unidata.ucar.edu/thredds/InvCatalog.1.0.6.xsd"> <service name="all" base="" serviceType="compound"> <service name="odap" serviceType="OpenDAP" base="/thredds/dodsC/" /> <service name="dap4" serviceType="DAP4" base="/thredds/dap4/" /> <service name="http" serviceType="HTTPServer" base="/thredds/fileServer/" /> <!--service name="wcs" serviceType="WCS" base="/thredds/wcs/" /--> <!--service name="wms" serviceType="WMS" base="/thredds/wms/" /--> <!--service name="ncss" serviceType="NetcdfSubset" base="/thredds/ncss/" /--> </service> <service name="dap" base="" serviceType="compound"> <service name="odap" serviceType="OpenDAP" base="/thredds/dodsC/" /> <service name="dap4" serviceType="DAP4" base="/thredds/dap4/" /> </service> <datasetRoot path="test" location="content/testdata/" /> <dataset name="Test Single Dataset" ID="testDataset" serviceName="dap" urlPath="test/testData.nc" dataType="Grid"/> <dataset name="Test Single Dataset 2" ID="testDataset2" serviceName="odap" urlPath="test/testData2.grib2" dataType="Grid"/> <datasetScan name="Test all files in a directory" ID="testDatasetScan" path="testAll" location="content/testdata"> <metadata inherited="true"> <serviceName>all</serviceName> <dataType>Grid</dataType> </metadata> <filter> <include wildcard="*eta_211.nc"/> <include wildcard="testgrid*.nc"/> </filter> </datasetScan> <catalogRef xlink:title="Test Enhanced Catalog" xlink:href="enhancedCatalog.xml" name=""/> </catalog>
When the TDS starts, this root configuration catalog is read, as are all catalogs in the catalog tree defined by
catalogRef
elements. The resulting tree of catalogs are used
as the top-level catalogs served by the TDS. In the case of our test catalog, the tree looks like:
catalog.xml
|
|-- enhancedCatalog.xml
The tree of configuration catalogs can be as deeply nested as desired.
Additional root configuration catalogs can be defined in
<tds.content.root.path>/thredds/threddsConfig.xml
file. For instance, to add a test catalog add the following line:
<catalogRoot>myTestCatalog.xml</catalogRoot>
Each additional root configuration catalog can be the root of another tree of configuration catalogs.
TDS configuration catalogs are like THREDDS Client catalogs with extensions. They contain information detailing the datasets the TDS will serve and what services will be available for each dataset:
datasetRoot
and datasetScan
elements are extensions that:
The TDS configuration catalogs represent the top-level catalogs served by the TDS:
datasetRoot
ElementEach datasetRoot
element defines a single mapping between a URL base path and a directory. The URL base path so defined can then be used in
accessible datasets for files under the mapped directory. For instance, you have a directory /machine/tds/data/my/test
that contains:
afile.nc testData.nc junk.nc grib/ data1.grib2 data2.grib2
You can serve the "testData.nc" and "grib1/data1.grib2" files with the following:
... <service name="odap" serviceType="OpenDAP" base="/thredds/dodsC/" /> <datasetRoot path="my/test" location="/machine/tds/data/my/test" /> <!-- 1 --> <dataset name="A Test Dataset" ID="testDataset" urlPath="my/test/testData.nc" > <!-- 2 --> <serviceName>odap</serviceName> </dataset> <dataset name="A Test Dataset 2" ID="testDataset2" urlPath="my/test/grib/data1.grib2" > <!-- 3 --> <serviceName>odap</serviceName> </dataset> ...
The datasetRoot element above (1) maps the "my/test
" path to the "/machine/tds/data/my/test/
" directory. The URLs to access the datasets
(2 & 3) are
http://hostname:port/thredds/dodsC/my/test/testData.nc http://hostname:port/thredds/dodsC/my/test/grib/data1.grib2
When the server receives a request for one of the above URLs, it uses the URL path to look for a matching dataset root. In this case it finds the mapping
provided by the datasetRoot element above and looks in the /machine/tds/data/my/test
directory for the file.
The client catalog that results from this catalog is the same as the above without the datasetRoot element.
datasetScan
ElementEach datasetScan
element also defines a single mapping between a URL base path and a directory. Unlike the datasetRoot
element
which works with dataset
elements to define the datasets served, the datasetScan
element will automatically serve some or all of
the datasets found in the mapped directory. So, all the files in the above listing could be served with the following:
... <service name="odap" serviceType="OpenDAP" base="/thredds/dodsC/" /> <datasetScan name="Test all files in a directory" ID="testDatasetScan" path="my/test/all" location="/machine/tds/data/my/test"> <metadata inherited="true"> <serviceName>odap</serviceName> </metadata> </datasetScan> ...
In the client view of a configuration catalog, datasetScan
elements are converted to catalogRef
elements. So, the
resulting client view of this catalog looks like:
... <service name="odap" serviceType="OpenDAP" base="/thredds/dodsC/" /> <catalogRef xlink:title="Test all files in a directory" ID="testDatasetScan" xlink:href="/thredds/catalog/my/test/all/catalog.xml" name="" /> ...
The generation of the catalog referenced by the catalogRef
element is deferred until a request is made for that catalog. When the catalog is
requested the location directory is scanned, directories are represented as catalogRef
elements and files are represented as
dataset
elements. The scanning of each subdirectory is deferred until a request is made for the corresponding catalog. The catalog referenced
above would look like:
... <service name="odap" serviceType="OpenDAP" base="/thredds/dodsC/" /> <dataset name="Test all files in a directory" ID="testDatasetScan" > <metadata inherited="true"> <serviceName>odap</serviceName> </metadata> <dataset name="afile.nc" ID="testDatasetScan/afile.nc" urlPath="my/test/all/afile.nc" /> <dataset name="testData.nc" ID="testDatasetScan/testData.nc" urlPath="my/test/all/testData.nc" /> <dataset name="junk.nc" ID="testDatasetScan/junk.nc" urlPath="my/test/all/junk.nc" /> <catalogRef xlink:title="grib" ID="testDatasetScan/grib" name="" xlink:href="/thredds/catalog/my/test/all/grib/catalog.xml" /> </dataset> ...
Note: The datasetScan
element provides ways for limiting the datasets that are included in the scan, changing the names of datasets, sorting
datasets, etc. We will go into more detail on this later.
Modify the main TDS configuration catalog to include some model data.
$ ls /machine/tds/data fc gfs grib my nam_12km ncmlExamples ncss ocean precip sage $ ls /machine/tds/data/nam_12km/ NAM_CONUS_12km_20141010_0000.grib2 NAM_CONUS_12km_20141010_0600.grib2 ...
$ cd <tds.content.root.path>/thredds $ vi catalog.xml // Use the editor of your choice
datasetScan
element for the NAM data:
<datasetScan name="NCEP NAM 12km" ID="NAM_12km" path="nam_12km" location="/machine/tds/data/nam_12km"> <metadata inherited="true"> <serviceName>odap</serviceName> </metadata> </datasetScan>
$ cd ${tomcat_home}/bin $ ./shutdown.sh $ ./startup.sh
datasetScan
is working:
http://localhost:8080/thredds/catalog.html
$ cd <tds.content.root.path>/thredds/logs $ more catalogInit.log
$ cd <tds.content.root.path>/thredds/logs $ more threddsServlet.log


R/SpatialLinesNetwork.R
SpatialLinesNetwork.Rd
Creates a new SpatialLinesNetwork (for SpatialLines) or sfNetwork (for sf) object that can be used for routing analysis within R.
SpatialLinesNetwork(sl, uselonglat = FALSE, tolerance = 0)
| sl | A SpatialLines or SpatialLinesDataFrame containing the lines to use to create the network. |
|---|---|
| uselonglat | A boolean value indicating if the data should be assumed
to be using WGS84 latitude/longitude coordinates. If |
| tolerance | A numeric value indicating the tolerance (in the units of the coordinate system) to use as a tolerance with which to match nodes. |
This function is used to create a new SpatialLinesNetwork from an existing SpatialLines or SpatialLinesDataFrame object. A typical use case is to represent a transport network for routing and other network analysis functions. This function and the corresponding SpatialLinesNetwork class is an implementation of the SpatialLinesNetwork developed by Edzer Pebesma and presented on RPubs. The original implementation has been rewritten to better support large (i.e., detailed city-size) networks and to provide additional methods useful for conducting transport research following on from the initial examples provided by Janoska(2013).
Pebesma, E. (2013). Spatial Networks, URL:http://rpubs.com/edzer/6767.
Janoska, Z. (2013). Find shortest path in spatial network, URL:http://rpubs.com/janoskaz/10396.
SLN <- SpatialLinesNetwork(route_network) class(SLN)#> [1] "SpatialLinesNetwork" #> attr(,"package") #> [1] "stplanr"#> [1] "length"plot(SLN)#> Error in as.double(y): cannot coerce type 'S4' to vector of type 'double'# NOT RUN { points(sln2points(SLN)[1, ], cex = 5) points(sln2points(SLN)[50, ], cex = 5) shortpath <- sum_network_routes(SLN, 1, 50, sumvars = "length") plot(shortpath, col = "red", lwd = 4, add = TRUE) points(sln2points(SLN)[35, ], cex = 5) shortpath <- sum_network_routes(SLN, 1, 35, sumvars = "length") plot(shortpath, col = "red", lwd = 4, add = TRUE) library(sf) SLN_sf <- SpatialLinesNetwork(route_network_sf) plot(SLN_sf) shortpath <- sum_network_routes(SLN_sf, 1, 50, sumvars = "length") plot(shortpath$geometry, col = "red", lwd = 4, add = TRUE) # }


Add new Material modules you intend to use under material.module.ts
.
Find the Material Icon List here.
Run the following command to pull the Docker image:
docker pull duluca/angular4-material2-starter
Learn about Angular Flex Layout here.


--- layout: post title: Sketchbook page date: '2018-04-08T11:30:11+02:00' categories: - Sketchbooks - Sketches picture_url: https://film-Storyboards.tumblr.com/post/172726939429 ---


change climate people affected health Bangladesh Sidr water children Aila Climate cyclone {border-style vulnerable coastal impact px;} women #ffffff;} lack natural cyclones research changes disasters diseases living different hit population study agricultural data impacts life respondents elderly like village areas disaster food group local mental shelter Research Upazila adverse analysis areas. conditions died drinking families focus household increased physical px; theme {font-family Health area changing community crops cyclone. effects font-size lands saline suffered weather According Amtali Change Cyclone Disaster Khan Khulna area. cases discussion double; global level livelihood number participants people. problems researcher responsible risk sea situation skin studies suffering used years Aila, Dhaka, Guha-Sapir London, People border-color border-width change. collect common condition cyclones, diarrhoea, disasters. family farmers financial fishing government hard households infectious information lost members order people, shows solid; them. themes work working worst {font-style {font-weight Aila. Bangladesh. Barguna Children Global Group Impact International Public Sidr, Social South University Women bold caused children, collab: courier; current cyclones. damage diarrhoea diseases. districts education em; emerged extreme families. farming frequency general going groups growing high highly however, job major make money observed older organizations polluted poor population. pt;} pure rainfall recent relation said social socioeconomic thematic villages vulnerability waterborne women.