An introduction to the Semantic Web
Nathalie Hernandez, PhD., Nicolas Seydoux, PhD., engineer at Inrupt
Syllabus
Course content
Evaluation
Material
Web page: https://zwifi.eu/public/pages/syllabus_iss.html
Slides: https://zwifi.eu/slides/teaching/5iss/
Some definitions
"The goal of AI is to develop machines that behave as though they were intelligent" - John McCarthy
"If a human could not distinguish between responses from a machine and a human, the machine could be considered 'intelligent'" - Alan Turing
Talking
Turing test
Master natural language
Manipulate knowledge
Understand and reason
Automatic learning
Playing
27/05/2017, Alphago outplays M. Ke Jie, Go world champion, to be in its turn outplayed by DeepMind ref
Seeing
AutoML optimizes neuron networks for computer vision
Selling
Key take-away
Language conveys meaning
The model matters
DIKW pyramid
Noise : Stimulus devoid of meaning
Data : Output of a measure
Information : Data contextualized
Knowledge : Meaning associated to information
Wisdom : Attitude driven by knowledge
Formal logic
Logics aims at formally modelling mechanisms of the common sense and reasoning to study and automate them.
Image: SMBC comics
What is a logic ?
Constituting elements
A syntax (grammar + vocabulary)
A semantics
A deduction mechanism
Their roles (respectively)
Describe knowledge
Pair it with meaning
Infer new information
IoT: the must-have
Who are these people ?
Tim Berners Lee and Vint Cert
Internet, or the Web?
Internet
The Web
Fortnite
Article wikipédia
SSH
Mail
Git
GitHub
The Web, an Internet application
The World Wide Web
Fundamental principles
Identification of ressources (pages, images, sounds...)
Representation of ressources in different serializations
Interaction between agents for representation negociation, resource discovery, etc.
Resource identification: the IRI
Unique and unambiguous identifier
Dereferencable: an IRI can be looked up
URL, URI, IRI
URL: U niform R esource L ocator
URI: U niform R esource I dentifier
IRI I nternational R esource I dentifier
http://subdomain.domain.tld:port/path
Interacting on the Web: HTTP
Client/server protocol
Hypertext navigation
Content negociation
CRUD operations
PUT, GET, PATCH, DELETE
POST, HEAD, OPTIONS...
GET / HTTP/1.1
Host: perdu.com
HTTP/1.1 200 OK
Content-Type: text/html
<html><head><title>...
Invention of the Web
The Web was invented at CERN in 1990 by Tim Berners Lee
Motivation: building an interoperable file system that scales.
A timeline of the Web
1990: First Web browsers
1991: Distribution of browsers, first websites (info.cern.ch )
1995: Amazon is a book store
1998: Google is a seach engine
2001: Wikipedia, an encyclopedia
2006: Twitter, for micro-blogging
2014: Over a billion websites
Some figures of the WWW
Over 1000 billion URL indexed and interconnected
W3C: Standardization for the Web
Founded in april 1993 by Sir Tim B.L., the World Wide Web Consortium (W3C) has 436 members as of November 14th 2020.
What is standardized by the W3C ?
All Web-related technologies
Web documents (HTML, CSS...)
XML and related languages (XPath, and *ML)
Web services (SOAP, WSDL)
Web browsers
Accessibility, payments, consent...
Semantic Web technologies (To be announced)
Other standards organizations
Some Web protocols are standardized by the IETF
IoT: the must-have
What you can do... if you know where to look
Get plane tickets for London this weekend
Check the weather in London this weekend
Look for housing in London this weekend
Check my bank account
Cancel my flight
Order pizza fr comfort
What the user wants
Use complex research tools
Browse to find an information
Quickly find relevant and reliable information
The regular Web is not helping
Finding the cheapest flight is a pain
Finding relevant information about a certain version of a library
What the user sees
What the user understands
What the computer sees
In one word : syntactic
Addressing with URLs
Interlinked documents
Multimedia content
All the meaning is directed towards a human user
Adding meaning to the document
With annotations?
<recipe>
<title>Raclette (Recipe)</title>
<ingredient>
<name>Raclette (Cheese)</name>
<origin>Switzerland</origin>
</ingredient>
<link rel="stylesheet" href="screen.css">
<origin>Switzerland</origin>
<side>Potato</side>
</recipe>
Annotation limits
Annotation define information zones
... but not a meaning to these zones
Markup text remains targeted at humans
Data on the "old" Web...
...is raw
A lot of information, but very little metadata
Untyped links
...is driven by supply
Data is structured by the one collecting it
User requirements are only guessed
The old Web is "human-driven"
Tedious tasks are left up to people
Finding good, reliable ressources
Extracting relevant information
Making synthetis of the results
These limitations are very current
Web scale
More and more content.
More and more users.
The paradox
Manual processing gets harder.
Automated processing is still very complex.
IoT: the must-have
The W3C layer cake
Tim at it again
Data is available on the Web (has an IRI), under a free licence
.
1-star
Data is structured
.
2-star
Data is expressed in an open format
.
3-star
Data complies with W3C specifications
.
4-star
Data is linked to other data
.
The Web is a graph of linked documents
Each IRI is a graph node
Each href
link is a graph edge
Let's apply the same thinking to data
Linked data concepts
Each entity has an IRI
Entities are linked together with typed links
Links are also identified with an IRI
Representing a graph in RDF
Atomic graph unit: the triple
The subject : What/Who are we taking about
The predicate : a property of the subject
The object : Value of the predicate for the subject
IRIs for everything
Putting triples together to build a graph
Putting triples together to build a graph
Putting triples together to build a graph
IoT: the must-have
The Linked Open Data cloud
Who links what?
Who
A LOT of people
Google,
BBC,
Wikipedia,
IEEE,
IBM,
governments...
What
A LOT of things
Musical,
cultural,
scientific,
geographical,
technical,
personal data...
The LOD in 2007: 12 datasets
The LOD in 2008: 32 datasets
The LOD in 2009: 95 datasets
The LOD in 2010: 203 datasets
The LOD in 2011: 295 datasets
The LOD in 2014: 570 datasets
The LOD in 2018: 1231 datasets
The LOD in 2020: 1255 datasets
Adding Semantics do the Web
Tim Berners Lee, WWW conference, 1994: fundamental article
"The Semantic Web: A new form of Web content that is meaningful to computers will unleash a revolution of new possibilities" - Tim Berners-Lee, James Hendler and Ora Lassila, Scientific American, May 2001
What is an ontology (with the hands) ?
An ontology is a vocabulary allowing the description of data .
What is an ontology (formally) ?
An ontology is a formal, explicit specification of a shared conceptualisation. ref
What's in an ontology?
Concepts
Key ideas of the modelled domain
e.g. Sensor, Service, Temperature...
Relations
Typed links between concepts
e.g. Observes, hasPrecision, InteractsWith...
Axioms
Tools for manipulating ontologies
IoT: the must-have
Ontology applicative lifecycle
Design
Deployment
Exploitation
Ontology applicative lifecycle
Design
Deployment
Exploitation
Protégé, the ontology editor
Link
Designing a class
Class usage
Properties (relations)
Properties (relations)
Individuals (data)
Type
Contains
Vocabulary
Taxonomy
Hierarchical relations
SKOS
"Light" ontology
Hierarchical relations
Non-taxonomic relations
RDFS
"Heavy" ontology
Hierarchical relations
Non-taxonomic relations
Logical axioms
OWL
Focusing on the languages: RDF
What RDF allows
Type a resource
Declare a property
Connect resources with relations
Graph language, no additional semantics
Focusing on the languages: RDFS
What RDFS allows
Classes and relation hierarchies
Domain /range for properties
Add labels and comments
RDFS limitations
No set operators
No properties for properties
No class disjunctions
Focusing on the languages: RDFS
RDFS in RDF
RDF is a representation , RDFS is a convention
rdfs:label a rdf:Property ;
rdfs:isDefinedBy <http://www.w3.org/2000/01/rdf-schema#> ;
rdfs:label "label" ;
rdfs:comment "A human-readable name for the subject." ;
rdfs:domain rdfs:Resource ;
rdfs:range rdfs:Literal .
Focusing on the languages : OWL
What OWL allows
What we juste said RDFS did not
Define cardinality restrictions
Define equivalences
Focusing on the languages: OWL
OWL in RDF
owl:sameAs a rdf:Property ;
rdfs:label "sameAs" ;
rdfs:comment "The property [...] two given individuals are equal." ;
rdfs:domain owl:Thing ;
rdfs:isDefinedBy <http://www.w3.org/2002/07/owl#> ;
rdfs:range owl:Thing .
IoT: the must-have
What value do these conventions add?
Reasoning
Inference of new facts from information , knowledge and logics
Detect incoherences and inconsistencies
Different inference methods
Hierarchical inference
Hierarchical inference
Hierarchical inference
Non-taxonomic inference
Non-taxonomic inference
Non-taxonomic inference
Axiom-based inference
Axiom-based inference
Axiom-based inference
Introduction to knowledge engineering
Linking ontologies at design time: import
Red imports blue
Linking ontologies at design time: reuse
Red reuses blue
Reuse example: SSN and DUL
Linking ontologies a posteriori: align
Equivalence/Disjoncontion
Subsumption, part-of
Any relation
Going beyond alignment
Automatic alignments
Leverage the expressiveness of ontologies
"Discover" alignments as you go
Similar to content negociation on the Web
Alignement example
SSN et SAREF: alignements de T-box
saref:Device owl:sameAs ssn:Device
ssn:startTime rdfs:subClassOf saref:Time
Alignement de A-box
http://sws.geonames.org/2972315 owl:sameAs http://fr.dbpedia.org/resource/Toulouse
Alignement and reasoning
Alignement and reasoning
Alignement and reasoning
Different ontology types
schema.org
Created by Google, Microsoft, Yahoo and Yandex
Used in millions of websites
Think about it for SEO
https://schema.org/Person
Google's knowledge graph
IoT: The must-have
Where in the W3C layer cake ?
Where in the W3C layer cake ?
Smart building use case
Motivation
Interoperability is a source of value creation for the IoT (Source)
IoT challenges
Vertical fracturation
Lots of ad-hoc data with a low reusability
High heterogeneity for hardware, software and app. domains
Interoperability...
... or interoperabilities?
Back to the DIK pyramid
SWoT architecture
SWoT architecture
SWoT architecture
SWoT architecture
SWoT architecture
SWoT architecture
Discovery
IoT networks are dynamic
Dereferencable identifiers: real time information lookup
Network self-configuration
Discovery in oneM2M
Discovery in oneM2M
Discovery in oneM2M
Discovery in oneM2M
Discovery in oneM2M
Reasoning
Expressing deduction rules can enable complex event processing: event recognition, malfunction detection, autonomic control...
Abstraction and virtual devices
Describing devices input/output at different granularity
Reusing sensor data based on description
What if a presense sensor was really a presence sensor?
Computing results for "composite" sensors
IoT constraints: dynamicity
Challenge
"Static" knowledge representation, dynamic data
Strong spatio-temporal contextuality
Approaches
Stream processing
Distributed computing
IoT constraints: devices
Challenge
Limited processing power, storage, connectivity, energy
Approaches
Adapting data representation to target device
Fog computing
Natural language interaction
Privacy-aware applications


Input is converted from 0.0->1.0 to 0->1024
| AI 0 | AI 1 | ||
| AI 2 | AI 3 | ||
| AI 4 | AI 5 | ||
| AI 6 | AI 7 |
Green is HIGH and Red is LOW. Grey is disabled.
Press to toggle (only enabled ones)
| D0 | D4 | D8 | D12 |
| D1 | D5 | D9 | D13 |
| D2 | D6 | D10 | |
| D3 | D7 | D11 |
On Arduino devices most share their digital outputs
with the analog outputs. The result is a single digital
pin can be used to drive digital or analog outputs.
Use the config to define how your Arduino is used.


(Taken from the UC Berkeley Course Guide)
This course covers elastic and plastic deformation under static and dynamic loads. Failure by yielding, fracture, fatigue, wear, and environmental factors are also examined. Topics include engineering materials, heat treatment, structure-property relationships, elastic deformation and multiaxial loading, plastic deformation and yield criteria, dislocation plasticity and strengthening mechanisms, creep, stress concentration effects, fracture, fatigue, and contact deformation.
C85
The central theme of this course is the mechanical behavior of engineering materials, such as metals, ceramics, polymers, and composites, subjected to different types of loading. The main objectives are to provide students with basic understanding of phase transformation by heat treating and stress-induced hardening, linear and nonlinear elastic behavior, deformation under multiaxial loading, plastic deformation and yield criteria, dislocation plasticity and strengthening mechanisms, creep, stress concentration effects, brittle versus ductile fracture, fracture mechanisms at different scales, fatigue, contact deformation, and wear.
3 hours of lecture, 1 hour of discussion, and 2 hours of laboratory per week.


Node.js cartoon avatar library
A library to generate cartoon style avatar URLs in Node.js
Installation
$ npm install cartoon-avatar
Usage
var toonavatar = require('cartoon-avatar');
toonavatar.generate_avatar();
toonavatar.generate_avatar(options);
options
:
-
Gender
can bemale
orm
orfemale
orf
. -
id
can be any number within the Range limit specified below.id Range
for a given gender :- MALE : 1 - 129
- FEMALE : 1 - 114
Note :
id's greater than the limit will start over from 1.
Examples
var toonavatar = require('cartoon-avatar');
var url = toonavatar.generate_avatar()
//Generates Image URL with random gender avatar.
//https://raw.githubusercontent.com/Ashwinvalento/cartoon-avatar/master/lib/images/female/10.png
//https://raw.githubusercontent.com/Ashwinvalento/cartoon-avatar/master/lib/images/male/86.png
Image Preview :
var url = toonavatar.generate_avatar({"gender":"male"})
//Generates Image URL with random Male avatars
//https://raw.githubusercontent.com/Ashwinvalento/cartoon-avatar/master/lib/images/male/45.png
Image Preview :
var url = toonavatar.generate_avatar({"gender":"female"})
//Generates Image URL with random Female avatars
//https://raw.githubusercontent.com/Ashwinvalento/cartoon-avatar/master/lib/images/female/68.png
Image Preview :
var url = toonavatar.generate_avatar({"gender":"male","id":5})
//Generates Image URL with Male avatar having id 5
//https://raw.githubusercontent.com/Ashwinvalento/cartoon-avatar/master/lib/images/male/5.png
Image Preview :
var url = toonavatar.generate_avatar({"gender":"female","id":5})
//Generates Image URL with Female avatar having id 5
//https://raw.githubusercontent.com/Ashwinvalento/cartoon-avatar/master/lib/images/female/5.png
Image Preview :
Running test
$ npm test
Avatar Image Credits
People vector designed by Skydesign - Freepik.com.
License:
(The MIT License)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


In 1943 the Partcutin Volcano erupted in the state of Michoaco, Mexico.
The first man to witness the eruption was a Tarascan Indian farmer, named Dominic Pulido.
The Partcutinn is a Monogenetic cone, which means it stems from a single point of eruption.
The volcano now stands at 410 metres above ground.
Its hardened lava covers 16 square kilometres and its volcanic sand covers 32 square kilometres.
Named after a small Tarascan Indian village, particutin is now counted as one of the seven wonders of the world.


Ootopia App
You requested to reset your password.
Please, click the link below to reset your password
Reset Password


BOYS DON'T CRY (1999) by George Wu
Rating: ***1/2 (out of 4)
She was born Teena Brandon in Lincoln, Nebraska, but she introduced herself to everyone as Brandon Teena. She dressed like a boy, acted like a boy, and had girlfriends whom she apparently treated better than had she been a boy. Even after she was found out, raped, and murdered, Brandon's girlfriends remained enraptured of him, for in every case aside from Brandon's biological gender, Brandon was a "he." Susan Muska and Gréta Olafsdóttir produced The Brandon Teena Story, a documentary released last year recording these events. That film was poorly-made, unintentionally exploitative, but nevertheless, enormously powerful owing to its subject matter alone. Now comes first-time filmmaker, Kimberly Peirce's dramatic narrative version, Boys Don't Cry. It's well-made, non-exploitative, and enormously powerful owing to Peirce's creative direction and her stars bravura performances.
Following actual events pretty closely, Peirce and her co-writer Andy Bienen pick up the story from Brandon's move from Lincoln to Falls City, Nebraska, where Brandon meets and falls in love with local girl, Lana. This incurs the wraths of Brandon's heretofore friends, John Lotter and Tom Nissen, both ex-cons. What is impressive about Boys Don't Cry is that Peirce doesn't sensationalize the material, which is easily done in lesser hands with such subjects as gender-bending, rape, and murder. Nor does Peirce, a lesbian, exude an agenda. Brandon is shown warts and all as a thief and habitual liar (about far more than his gender), while John and Tom are welcoming and amicable before they uncover Brandon's secret. Peirce even allows that John's loathing for Brandon may derive more from his jealousy of Lana than homophobia, though homophobia abets his actions. Brandon does not come off as a martyr, but very much an individual. Brandon refuses the label of lesbian. The subtext is gender fluidity and the questioning of why we have to categorize sexual orientation at all. Labels emphasize difference, and difference is a code word for misanthropy.
Peirce intersperses wonderful time-lapse sequences of the horizon, the clouds, the stars, even a refinery throughout the film.  Only at the end, does Pierce's romanticization get the better of her, in a fictional love scene between Lana and the doomed Brandon.
The entire cast is superb. Actress Hilary Swank holds nothing back in giving the character of Brandon brashness, longing, hope, naivete, and denial. Matching her every step of the way is Chloë Sevigny as Lana, and their chemistry together is wholly convincing. Sevigny (along with Sarah Polley) is among the great actors of her generation. Peter Sarsgaard imbues John with both humanity and barbarous malevolence. In two smaller roles of great merit are Alicia Goranson, who plays Candace, Brandon's first friend in Falls City, and Jeanetta Arnette as Lana's outlandish mom.
http://pages.prodigy.net/zvelf/
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


This is a bookmarklet for iOS devices which lets you search the current page using a search string or a Regular Expression. It highlights the matches and lets you jump between them, and the bar follows you around the page. Also, the search is carried out asynchronously, so your browser won't freeze. On top of this, it uses a new nifty caching system to work instantenously, even when offline, yet it is automatically updated whenever a new version is released.
Curious? Feel free to have a look at the source code repository here
Just tap the link at the bottom of the install section to try prettySearching on this page. Warning - Safari and Chrome has an overzealous security feature that might prevent this, so you'd better save it and test it on another page.
If you're on a desktop computer whose bookmarks you're syncing to your iOS device, you can just drag the link below to your bookmark bar and perform a sync.
Otherwise, you'll have to get somewhat dirty. Bookmark this page on your iOS device. When it's saved, go in to your bookmarks list and edit the address. It will be quite long, since we've appended the bookmarklet to it. Your mission is to delete the # and everything before it. Tap and hold on the address field and scroll to the left until you see the #. Then delete everything before it. Now you're good to go!
prettySearch.jsTry using a regexp like /\w+a\b/ to find all words ending in an "a". PrettySearch will look for the first subgroup, if any, so you can do stuff like /\w+ok(\w)\w+/ to make advanced searches.


When modifying your own format strings, it is useful
to start with the default values for the frame and
thread format strings. These can be accessed with the
"settings show"
command:
(lldb)
settings show thread-format
thread-format (string) = 'thread #${thread.index}: tid = ${thread.id}{, ${frame.pc}}{ ${module.file.basename}`${function.name}{${function.pc-offset}}}{, stop reason = ${thread.stop-reason}}{, name = ${thread.name}}{, queue = ${thread.queue}}\n'
(lldb) settings show frame-format
frame-format (string) = 'frame #${frame.index}: ${frame.pc}{ ${module.file.basename}`${function.name}{${function.pc-offset}}}{ at ${line.file.basename}:${line.number}}\n'
When making thread formats, you will need surround any
of the information that comes from a stack frame with scopes ({ frame-content })
as the thread format doesn't always want to show frame information.
When displaying the backtrace for a thread, we don't need to duplicate
the information for frame zero in the thread information:
(lldb) thread backtrace
thread #1: tid = 0x2e03, stop reason = breakpoint 1.1 2.1
frame #0: 0x0000000100000e85 a.out`main + 4 at test.c:19
frame #1: 0x0000000100000e40 a.out`start + 52
The frame related variables are:
${file.*}
${frame.*}
${function.*}
${line.*}
${module.*}
Looking at the default format for the thread, and underlining
the frame information:
'thread #${thread.index}: tid = ${thread.id}{, ${frame.pc}}{ ${module.file.basename}`${function.name}{${function.pc-offset}}}{, stop reason = ${thread.stop-reason}}{, name = ${thread.name}}{, queue = ${thread.queue}}\n'
We can see that all frame information is contained in scopes so
that when the thread information is displayed in a context where
we only want to show thread information, we can do so.
For both thread and frame formats, you can use ${target.script:python_func}, ${process.script:python_func} and ${thread.script:python_func}
(and of course ${frame.script:python_func} for frame formats)
In all cases, the signature of python_func is expected to be:
def python_func(object,unused):
...
return string
Where object is an instance of the SB class associated to the keyword you are using.
e.g. Assuming your function looks like
def thread_printer_func (thread,unused):
return "Thread %s has %d frames\n" % (thread.name, thread.num_frames)
And you set it up with
(lldb) settings set thread-format "${thread.script:thread_printer_func}"
you would see output like:
* Thread main has 21 frames


Streaming Parameters
Unknown Transport
Controls
Connect
Disconnect
Clear
Local Sum
From Channel
Results


Fluent, LLC, is a rapidly growing agile audience engine, fueled by first party consumer data. As Associate Product Manager, I am the product owner of two of our nascent products, and contribute to the larger network strategy.
In addition to product management, I serve on the Diversity Taskforce, leveraging my vast knowledge of inclusion programs and best practices to strengthen internal culture and broaden recruitment initiatives.
The Muslim-Jewish Solidarity Committee is a grassroots community where Jews, Muslims, and all are welcome. We build relationships to stand against hate through shared values and social action.
Since the MJSC’s founding in 2014, I’ve dedicated myself to our mission by organizing volunteer meetings, designing our logos and promotional materials, building strategic partnerships with community organizations, and planning events.
Lesbians Who Tech is a community of queer women and nonbinary folks in or around tech (and the people who love us). Since its launch in late 2012, LWT has become a community of over 12,000 queer women in 25 cities, including 5 international cities.
As a NYC Director, I work with the LWT staff and other local leaders to plan and execute events in collaboration with our sponsors, such as Yext, Spotify, and Twitter. I also act as a brand ambassador and community manager to maintain and grow our local chapter of LWT.


|
Bullet Collision Detection & Physics Library
|
Go to the source code of this file.
Classes | |
| struct | ThreadsafeCounter |
| class | btTaskSchedulerSequential |
| btTaskSchedulerSequential – non-threaded implementation of task scheduler (really just useful for testing performance of single threaded vs multi) More... | |
Macros | |
| #define | THREAD_LOCAL_STATIC static |
| #define | BT_DETECT_BAD_THREAD_INDEX 0 |
Functions | |
| unsigned int | btGetCurrentThreadIndex () |
| bool | btIsMainThread () |
| void | btResetThreadIndexCounter () |
| void | btPushThreadsAreRunning () |
| void | btPopThreadsAreRunning () |
| bool | btThreadsAreRunning () |
| void | btSetTaskScheduler (btITaskScheduler *ts) |
| btITaskScheduler * | btGetTaskScheduler () |
| void | btParallelFor (int iBegin, int iEnd, int grainSize, const btIParallelForBody &body) |
| btScalar | btParallelSum (int iBegin, int iEnd, int grainSize, const btIParallelSumBody &body) |
| btITaskScheduler * | btGetSequentialTaskScheduler () |
| btITaskScheduler * | btGetOpenMPTaskScheduler () |
| btITaskScheduler * | btGetTBBTaskScheduler () |
| btITaskScheduler * | btGetPPLTaskScheduler () |
Variables | |
| static btITaskScheduler * | gBtTaskScheduler =0 |
| static int | gThreadsRunningCounter = 0 |
| static btSpinMutex | gThreadsRunningCounterMutex |
| static ThreadsafeCounter | gThreadCounter |
| #define BT_DETECT_BAD_THREAD_INDEX 0 |
Definition at line 274 of file btThreads.cpp.
| #define THREAD_LOCAL_STATIC static |
Definition at line 212 of file btThreads.cpp.
| unsigned int btGetCurrentThreadIndex | ( | ) |
Definition at line 290 of file btThreads.cpp.
| btITaskScheduler* btGetOpenMPTaskScheduler | ( | ) |
Definition at line 762 of file btThreads.cpp.
| btITaskScheduler* btGetPPLTaskScheduler | ( | ) |
Definition at line 784 of file btThreads.cpp.
| btITaskScheduler* btGetSequentialTaskScheduler | ( | ) |
Definition at line 755 of file btThreads.cpp.
| btITaskScheduler* btGetTaskScheduler | ( | ) |
Definition at line 407 of file btThreads.cpp.
| btITaskScheduler* btGetTBBTaskScheduler | ( | ) |
Definition at line 773 of file btThreads.cpp.
| bool btIsMainThread | ( | ) |
Definition at line 324 of file btThreads.cpp.
| void btParallelFor | ( | int | iBegin, |
| int | iEnd, | ||
| int | grainSize, | ||
| const btIParallelForBody & | body | ||
| ) |
Definition at line 412 of file btThreads.cpp.
| btScalar btParallelSum | ( | int | iBegin, |
| int | iEnd, | ||
| int | grainSize, | ||
| const btIParallelSumBody & | body | ||
| ) |
Definition at line 439 of file btThreads.cpp.
| void btPopThreadsAreRunning | ( | ) |
Definition at line 374 of file btThreads.cpp.
| void btPushThreadsAreRunning | ( | ) |
Definition at line 367 of file btThreads.cpp.
| void btResetThreadIndexCounter | ( | ) |
Definition at line 329 of file btThreads.cpp.
| void btSetTaskScheduler | ( | btITaskScheduler * | ts | ) |
Definition at line 386 of file btThreads.cpp.
| bool btThreadsAreRunning | ( | ) |
Definition at line 381 of file btThreads.cpp.
|
static |
Definition at line 244 of file btThreads.cpp.
|
static |
Definition at line 247 of file btThreads.cpp.
|
static |
Definition at line 245 of file btThreads.cpp.
|
static |
Definition at line 246 of file btThreads.cpp.


Glass on glass water pipes and dab rigs contain multiple sizes and different gender types, and here at DankStop we get a lot of questions about glass on glass joints. We love constantly educating our customers on the proper terminology because we believe that informed consumers make the best decisions for their individual needs. Knowing the difference between a male and a female joint, or the difference between a 10mm and an 18mm sized joint, can lead you to making the perfect purchase.
Joint Sizes:
-
10mm Joint Size
10mm joints are sometimes referred to as mini or nano joints. They are generally found on pendant concentrate rigs and other small rigs and pipes. They are the most rare of the three joint types.
-
14mm Joint Size
14mm joints are very prevalent throughout different sizes and brands of water pipes and concentrate pipes.
-
18mm Joint Size
Usually reserved for larger dab rigs and glass water pipes, 18mm joints are also very common throughout different brands.
Joint Types:
-
Male Joint Type
Male joints are more commonly found on vapor rigs, although they are found on water pipes as well. To properly use a male jointed glass pipe, you need to use the same sized female dome, female bowl, or female domeless nail.
-
Female Joint Type
Female joints are reserved primarily for water pipes, although in rare instances a concentrate rig that comes with a male jointed domeless nail can contain a female joint. To properly use a female jointed glass pipe, you need to use the same sized male bowl or male domeless nail.
Due to the consistency of joint types, glass adapters and dropdowns have been created to let you interchange your glass pipe between different joint sizes as well as transforming to the other joint type. Male jointed dab rigs can be turned into female water pipes while female water pipes can be turned into male jointed concentrate rigs.
To learn more about the interchanging of joints, check out our in-depth article on how to use your bong for dabbing.


Workflowr custom format for converting from R Markdown to an HTML document.
wflow_html
has two distinct functionalities: 1) configure the
formatting of the HTML by extending html_document
(see the
RStudio
documentation for the available options), and 2) configure the workflowr
reproducibility features (typically specified in a file named
_workflowr.yml
). wflow_html
is intended to be used to generate
webpages for a workflowr website, but it can also be used outside a workflowr
project to implement reproducibility features for single R Markdown documents.
wflow_html(...)
| ... | Arguments passed to |
|---|
An output_format
object to pass to
render
.
wflow_html
extends
html_document
. To set default formatting options to
be shared across all of your HTML files, set them in the file
analysis/_site.yml
. This special file can also be used to configure
other aspects of the website like the navigation bar (for more details see
the documentation on
R Markdown
websites). For example, to use the theme "cosmo" and add a table of contents
to every webpage, you would add the following to analysis/_site.yml
:
output: workflowr::wflow_html: toc: true theme: cosmo
Formatting options can also be set for a specific file, which will override
the default options set in analysis/_site.yml
. For example, to remove
the table of contents from one specific file, you would add the following to
the YAML header of that file:
output: workflowr::wflow_html: toc: false
However, this will preserve any of the other shared options (e.g. the theme
in the above example). If you are not overriding any of the shared options,
it is not necessary to specify wflow_html
in the YAML header of your
workflowr R Markdown files.
wflow_html
also implements the workflowr reproducibility features. For
example, it automatically sets a seed with set.seed
; inserts
the current code version (i.e. Git commit ID); runs sessionInfo
at the end of the document; and inserts links to past versions of the file
and figures.
These reproducibility options are not passed directly as arguments to
wflow_html
. Instead these options are specified in
_workflowr.yml
or in the YAML header of an R Markdown file (using the
field workflowr:
). These options (along with their default values) are
as follows:
The directory where code inside an R Markdown file is
executed; this ultimately sets argument knit_root_dir
in
render
. By default, wflow_start
sets
knit_root_dir
in the file _workflowr.yml
to be the path
"."
. This path is a
relative
path from the location of _workflowr.yml
to the directory for the
code to be executed. The path "."
is shorthand for "current working
directory", and thus code is executed in the root of the workflowr project.
You can change this to be a relative path to any subdirectory of your
project. Also, if you were to delete this line from _workflowr.yml
,
then this would cause the code to be executed from the same directory in
which the R Markdown files are located (i.e. analysis/
in the
default workflowr setup). It is also possible (though in general not recommended) to configure the
knit_root_dir
to apply to only one of the R Markdown files by
specifying it in the YAML header of that particular file. In this case, the
supplied path is interpreted as relative to the R Markdown file itself.
Thus knit_root_dir: "../data"
would execute the code in the
subdirectory data/
.
The seed
argument in the call to set.seed
,
which is added to the beginning of an R Markdown file. In
wflow_start
, this is set to the date using the format
YYYYMMDD
. If no seed is specified, the default is 12345
.
The function that is run to record the session
information. The default is "sessionInfo()"
.
The URL of the remote repository for creating links to past
results. If unspecified, the URL is guessed from the "git remote" settings
(see wflow_git_remote
). Specifying this setting inside
_workflowr.yml
is especially helpful if multiple users are
collaborating on a project since it ensures that everyone generates the
same URLs.
By default a workflowr report is inserted at the top
of every HTML file containing useful summaries of the reproducibility
features and links to past versions of the analysis. To suppress this
report, set suppress_report
to TRUE
In the default workflowr setup, the file _workflowr.yml
is located in
the root of the project. For most users it is best to leave it there, but if
you are interested in experimenting with the directory layout, the
_workflowr.yml
file can be located in the same directory as the R
Markdown files or in any directory upstream of that directory.
Here is an example of a customized _workflowr.yml
file:
# Execute code in project directory knit_root_dir: "." # Set a custom seed seed:<PHONE_NUMBER> # Use devtools to generate the session information. sessioninfo: "devtools::session_info()" # Use this URL when inserting links to past results. github: https://github.com/repoowner/mainrepo
And here is an example of a YAML header inside an R Markdown file with the same exact custom settings as above:
--- title: "About" output: workflowr::wflow_html: toc: false workflowr: knit_root_dir: ".." seed:<PHONE_NUMBER> sessioninfo: "devtools::session_info()" github: https://github.com/repoowner/mainrepo ---
Note that the path passed to knit_root_dir
changed to ".."
because it is relative to the R Markdown file instead of
_workflowr.yml
. Both have the effect of having the code executed in
the root of the workflowr project.


Version 0.3 introduces a new toolkit called DTK (dred toolkit) which is designed for light weight, traditional desktop
applications. Benefits of this toolkit include:
- Small a light weight.
- Easy to compile. The entire source code for DTK is compiled as a single translation unit (dtk.c) and requires linking
to only necessary platform-specific libraries such as GTK.
- Written entirely in C.
- Improved control/widget and event handling infrastructure.
- Windows are treated just like any other control and are no longer special entities.
- Events are now handled through a central event queue rather than callbacks.
- Improved painting performance.
-
Controls can be redrawn immediately or scheduled for later. Scheduling redraws improves performance because
it gives the toolkit an opportunity batch drawing.
-
Painting on GTK has been improved. Previously, painting was done to an intermediary surface and then copied
onto the window. The toolkit will now draw directly to the window. This also saves on a bit of memory.
Many more features and improvements are in the pipline for DTK, including common controls, better high DPI
support, drag-and-drop, and much more.


Conveyor Belt Thermodynamic Integration with Ensembler¶
In this notebook, we give examples how to run conveyor belt simulations with Ensembler.
Maintainers: [@SchroederB](https://https://github.com/SchroederB), [@linkerst](https://https://github.com/linkerst), [@dfhahn](https://https://github.com/dfhahn)
Loading Ensembler and necessary external packages¶
[14]:
import os, sys
sys.path.append(os.getcwd()+"/..")
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib import colorbar
from mpl_toolkits.mplot3d import Axes3D
import ensembler.potentials.OneD as pot
import ensembler.system.perturbed_system as system
import ensembler.ensemble.replicas_dynamic_parameters as cvb
from ensembler.samplers import stochastic
Interactive Example¶
The following is an interactive example, which explains the concept of the conveyor belt algorithm
[28]:
from ensembler.visualisation.interactive_plots import interactive_conveyor_belt
iwidget = interactive_conveyor_belt()
iwidget
Build a conveyor belt object¶
For building a conveyorBelt
object, you first have to build a system
, which will be used as a template for the replicas. The system
itself needs to to be initialized with a potential and an integrator. For details, see the Tutorial Simulations.
[16]:
sampler = stochastic.metropolisMonteCarloIntegrator()
potential = pot.linearCoupledPotentials(Va = pot.harmonicOscillatorPotential(k=1, x_shift=0.0),
Vb = pot.harmonicOscillatorPotential(k=2, x_shift=2.0))
sys = system.perturbedSystem(potential=potential ,
sampler=sampler)
Additional the number of replicas n_replicas
and the initial capital Lambda value needs to be specified. The latter can usually be set to 0. An additional (optional) argument is the build
variable, which will be discussed later.
The output shows the current state of the conveyor belt as a table with the replica ID, the corresponding lambda value and the energy of the replica.
[17]:
ensemble = cvb.conveyorBelt(capital_lambda=0.0,
n_replicas=4,
system=sys)
ensemble
[17]:
i lambda_i E_i
-------------------------
0 0.00 32.975
1 0.50 32.975
2 1.00 32.975
3 0.50 32.975
Start a conveyor belt simulation¶
The conveyor belt is simulated by using its member function simulate
with the number of steps as argument.
[18]:
steps = 100
ensemble.simulate(steps)
The trajectories of the ensemble cvb_traj
and the single systems sys_trajs
can be retrieved by using its member function get_trajs
.
[19]:
(cvb_traj, systrajs) = ensemble.get_trajs()
The ensemble trajectory is a pandas.DataFrame
object with the following columns: - Step: index of frame (starting from 1) - capital_lambda: the capital lambda of the frame - TotE: the current total energy of the ensemble - biasE: the current bias energy - doAccept: information whether the Monte Carlo step before the frame was accepted or not
[20]:
cvb_traj.head()
[20]:
| Step | capital_lambda | TotE | biasE | doAccept | |
|---|---|---|---|---|---|
| 0 | 0 | 0.000000 | 131.899937 | 0.0 | True |
| 1 | 0 | 5.539295 | 131.899937 | 0.0 | True |
| 2 | 1 | 5.249743 | 80.759163 | 0.0 | True |
| 3 | 2 | 5.748955 | 41.452370 | 0.0 | True |
| 4 | 3 | 6.149164 | 26.454378 | 0.0 | True |
The system trajectory object systrajs
is a list
of pandas.DataFrame
objects (one per replica) with the following columns: - position: (spatial) position of particle - temperature: temperature - total_system_energy: the current total energy of the replica - total_potential_energy: the current potential energy of the replica - total_kinetic_energy: the current kinetic energy of the replica - dhdpos: the derivative of the hamiltonian with repect to the position
(negative of the force) - velocity: velocity of the particle - lam: lambda value of the particle - dhdlam: Hamiltonian derivative with respect to lambda The kinetic energy and the velocity are NaN
in the following, becauce this example uses the stochastic metropolisMonteCarloIntegrator
, which does not calculate velocities.
[21]:
systrajs[0].head()
[21]:
| position | temperature | total_system_energy | total_potential_energy | total_kinetic_energy | dhdpos | velocity | lam | dhdlam | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | -3.478970704571898 | 298.0 | 11.726825 | 11.726825 | NaN | 1.7510607172656856 | NaN | 0.236788 | 23.967501 |
| 1 | 0.7551488977681826 | 298.0 | 0.701098 | 0.701098 | NaN | 4.234119602340081 | NaN | 0.328955 | 1.264529 |
| 2 | 0.44181625124460233 | 298.0 | 0.493877 | 0.493877 | NaN | -0.3133326465235803 | NaN | 0.170051 | 2.330336 |
| 3 | -0.4361344163389951 | 298.0 | 0.344227 | 0.344227 | NaN | -0.8779506675835974 | NaN | 0.042660 | 5.839644 |
| 4 | 0.2002660837131477 | 298.0 | 0.395400 | 0.395400 | NaN | 0.6364005000521428 | NaN | 0.116604 | 3.218989 |
Visualizations of the trajectories¶
The following graph shows exemplarious the trajectories and histograms of the lambda variables of the single replicas. Other of the above mentioned variables can be plottet in the same way.
[22]:
fig, ax = plt.subplots(1, 2, figsize=(10,4), sharey=True)
for i in systrajs:
ax[0].plot(systrajs[i].index, systrajs[i].lam, label=f"{i}")
h1=np.histogram(systrajs[i].lam, bins=50, density=1)
ax[1].plot( h1[0], (h1[1][:-1]+h1[1][1:])/2)
ax[0].set_xlabel("time step")
ax[1].set_xlabel("probability density")
ax[0].set_ylabel("$\lambda$")
ax[1].set_xlim(0, 1.5)
out = plt.suptitle("$\lambda$ trajectories and histograms of the replicas", x=.6, y=1.0)
Simple analysis of the conveyor belt simulation¶
First, we simulate the conveyor belt even longer to get more statistics. Then, we sort the combined dhdlam trajectories from all replicas according to the associated lambda value. Then, we calculate the average per bin, which gives you the <dhdlam>
(lam) estimate at point lam
. In the following we use nbins=100
, but you can adapt it according to your sampled data.
[ ]:
ensemble.simulate(900)
(cvb_traj, systrajs) = ensemble.get_trajs()
[ ]:
nbins=100
bins=np.zeros(nbins)
dhdlbins=np.zeros(nbins)
for i in systrajs:
for j in range(systrajs[i].shape[0]):
index=int(np.floor(systrajs[i].lam[j]*nbins))
if index == nbins:
index=nbins-1
bins[index]+=1
dhdlbins[index]+=systrajs[i].dhdlam[j]
# avoid division by zero by setting elements == 0 to 1
bins = np.where(bins, bins, 1)
dhdlbins/=bins
The plotted <dhdlam>(lam)
curve is similar to the curves you get from TI simulations, but is usually base on more lambda points.
[ ]:
fig = plt.figure(figsize=(10,4))
plt.plot(np.linspace(0,1,nbins), dhdlbins)
plt.xlabel("$\lambda$")
plt.ylabel("$\partial H / \partial \lambda$")
out = plt.suptitle("$\partial H / \partial \lambda (\lambda)$ curve", x=.6, y=1.0)
The integral of this curve gives the free energy estimate. As you have many points along \(\lambda\), you can use the rectangular integration:
[ ]:
integral=np.sum(dhdlbins)*1.0/nbins
print(f'Delta G = {integral:.2f} kJ/mol')
This value agrees well to the analytical value, which is calculated below.
[ ]:
#analytical
u=1.66053886e-27
NA=6.0221415e23
hbar=1.054571800e-34*1e12*1e-3*NA #kJ/mol*ps
R=0.00831446 #kJ/mol/K
mu=0.5 #u
T=298.0 #K
fc1=1 #kJ/nm^2/mol
fc2=2.0 #kJ/nm^2/mol
omega1=np.sqrt(fc1/mu)
omega2=np.sqrt(fc2/mu)
alpha1=hbar*np.sqrt(fc1/mu)/(R*T)
alpha2=hbar*np.sqrt(fc2/mu)/(R*T)
Z1=np.exp(-alpha1/2.0)/(1-np.exp(-alpha1))
Z2=np.exp(-alpha2/2.0)/(1-np.exp(-alpha2))
DF=-R*T*np.log(Z2/Z1)
print(f'Analytical value = {DF:.2f} kJ/mol')


Who is a CORE TEAM?
Our core team is a group of leaders who have a dual responsibility; they are responsible for the project
achieving its goals and they are responsible to ensure that the project has successfully rendered it’s
objectives. From organising events to directing new Campaigns, the core team is tirelessly Reviving
Lives.
Core Team Delhi
SFC Foundations – Delhi is a college youth run unit which is established to spread
smiles all around in its capacity and to work for upliftment of underprivileged
communities and individuals who are suffering disproportionately through advocacy al,
projects and awareness campaigns. It is the Delhi unit of SFC Foundations ,that has been
mainly established in Chandigarh. SFC Delhi unit holds and strongly believes on values
like inclusivity, compassion, unity and empathy and if we can bring positive change even
in one person’s life, it will be magical and satisfactory.
Tabassum
President
Bio
Tabassum is pursuing Political Science (hons) from IPCW, University of Delhi. She strongly believes that all that this world needs is little more of love. She is an empathetic and compassionate member of the team who strives to create an inclusive emotional space around her. She wants to reach out to communities and individuals who have been suffering disproportionately in whatever capacity she can as a student.
Anshaj Srivastava
General Secretary
Bio
Anshaj Srivastav is pursuing B.Sc (hons) Mathematics from Shivaji College, University of Delhi. An honest, strong and hardworking member of the team who always wanted to work for the underprivileged weaker uneducated society. He is full of liveliness and he keeps the spirit of team high and motivates everyone around.
Ishana
Project Gyan Head
Bio
Ishana is pursuing Mathematics Hons from Shivaji College, University of Delhi. She is extremely compassionate who is passionate about working for education and literacy of underprivileged community. She wants to give her contribution in upliftment of the nation. She wants to spread smile and love with her small actions of kindness and humanity and she believes that change starts from oneself
Aditi Singh
Project Sampuran Head
Bio
Aditi Singh is pursuing B.A Philosophy hons from IPCW, University of Delhi. She is really an inquisitive member of the team who has intrinsic desire of serving people and being an element of change in the society. She is always keen to learn and explore more and wants to work for humankind in all her capacity.
Shivangi Srivastava
Vatavaran head
Bio
Shivangi is very sensitive towards animals and wants to create a world where both humans and animals coexist peacefully. And she wants people to understand that animals too have souls and now it’s high time that people should recognise animal cruelty and their rights too. People have become so selfish today that they just take Mother Earth for granted, Shivangi wants people to respect both flora and fauna. Since her childhood she wanted to do something for the environment but always found herself helpless. So working as a Vatavarn Head at SFC she is determined to create sensitivity amongst the Youth for Environment.
Core Team Jalandar
SFC Jalandhar unit holds and strongly believes on values like inclusivity, compassion,
unity and empathy. The unit strives to build positive change in the deprived section of
the Society with its devoted team members and edifying social activities.
Aastha
President
Bio
Aastha has a charming personality alongwith the blend of excellent decision making skills and to bind all the forces altogether. Her aura inspires all the other Heads, Coordinators and the whole team to work for the society and to continue doing noble deeds
Gurleen Singh
General Secretary
Bio
All the qualities that a leader requires, Gurleen Singh has shown that he possesses them all.  His exceptional personality creates a positive aura that inspires the others to work towards making the world a remarkable place to live in.
Himanshu
Project Gyan Head
Bio
Himanshi is a noble, enthusiastic and an inspiring Head of Project Gyan of SFC Foundations. He is committed towards providing education and knowledge to the people. Setting benchmarks for everyone, he accomplishes every task incredibly and spectacularly.
Swapnil
Project Sampuran Head
Bio
Swapnil is an honourable, up-standing and an innovative leader with a charming personality who never stops doing good deeds. He is an outstanding and honest man. His ‘out of the box’ thinking makes him an incredible fit for Project sampuran
Kartavya
Project Vatavarn Head &
Website Associate
Bio
A leader with heart overflowing with care , kindness, empathy and compassion, Kartavya leaves everyone astound. His love, heart-warming selflessness and generosity towards animals, nature and humankind makes him 'a perfect fit ' for the Project Vatavaran.
Core Team Mumbai
SFC Foundation - Mumbai , marks the expansion of the NGO to the south region. Beginning with the new journey, Mumbai Team inspires the society and tries its best to nurture lives. Apart from the projects, its uniqueness in ideas always leave an imprint on our minds.
Palak Shah
President
Bio
Palak has a keen desire of giving something back to the society with her social service. She is an approachable person.Great leader with empathy, integrity, ability to delegate but most importantly kind hearted towards her work.
Raajalakshmi Iyer
General Secretary and Social Media Incharge
Bio
Raajalakshmi, a confident leader has a friendly and helpful nature and has a spirit to work for the betterment of the society. She is known for her sincerity and professionalism towards her work. She has a spark to do noble works and is all set to take the initiative
Komal Shah
Project Gyan Head
Bio
Enthusiastic, hardworking and kind hearted - that's what defines Komal Shah.She is ready to take a move for the change in the society. She believes in an Inclusive Society in which everyone is given an equal status and opportunity irrespective of their background. She believes in sincerity and clarity in the work.
Vinita Ubbu
Project Sampuran Head
Bio
Vinita is a combination of strong and outgoing personality. Passion for her work and a steady source of motivation leads her to challenge herself and learn new things. The best way to describe her is 'people's person'.


RuuviTag
I backed Ruuvi sometime late last year for a RuuviTag, a battery powered Bluetooth LE microcontroller with an onboard temperature and humidity sensor. As soon as I saw this project I had several ideas. And because I run openHAB at home, naturally, I’d want to collate this date into here for usage in my home automation system. I finally got it in the mail last week, and what surprised me was that they had teamed up the the guy who made espruino and had him port it to the Ruuvi! Javascript on a microcontroller. Pretty impressive stuff. Me and javascript have had some okay times, so I was comfortable that they had javascript here instead of C, which is what Ruuvi natively runs
So battery powered BLE temperature sensor, that runs javascript, and a raspberry pi 3 that is running openhab. Pretty much a perfect mix. Here is how I got them talking to each other
You may be looking at the RuuviTag setup page and see that the default weather station firmware actually works for both RuuviTags. At the time of getting my Ruuvi, it only supported the RuuvTag+, so I looked at using the espruino firmware to get what I needed to work.
Ruuvi
- Following the instructions here we need to flash the espruino firmware to ruuvi. Quick overview, but the video they have here is quite good
- Download nRF connect app
- Put Ruuvi into boot mode (hold R + B, let go of R while still holding B until red light comes and stays on)
- Connect to the ruuvi with nRF connect
- Press the “DFU” button that comes up in the app once you are connected, and select the espruino firmware zip file
- wait a little while
- Now follow the instructions here to get the IDE up and running to connect to Ruuvi
- Once you are able to get into the IDE and connect to ruuvi, upload this little snippet. Essentially it gathers the temp data every 60 seconds, converts it to a uint8 array, and then advertises it over BLE
- after following this guide, you may be asking why I’m not using the ruuvitag package to get all the data
var Ruuvitag = require("Ruuvitag");
. It seems that this package does not work with the RuuviTag basic. I need to raise this on the forums to see when it will be supported. But for now we can just use the code you would use for the puck.js on the ruuvi, and it does the same job - Links to the espruino forum that helped me get this working one, two, three
- after following this guide, you may be asking why I’m not using the ruuvitag package to get all the data
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function tempTo(temp) {
var f = parseFloat(temp.toFixed(2)) * 100;
if (tempTo.buf === undefined) tempTo.buf = new Uint8Array(2);
tempTo.buf[0] = f & 0xff;
tempTo.buf[1] = f >> 8 & 0xff;
return tempTo.buf;
}
setInterval(function(fn){
console.log(E.getTemperature());
},60000);
setInterval(function() {
NRF.setAdvertising({
0x1809 : tempTo(E.getTemperature())
});
}, 60000);
RaspberryPi 3
Now onto the server side. I have a raspberry pi 3 running openhab. This is perfect as it has bluetooth built in. There were a few options to make this work, if you head over to the ruuvi forums there is a java and python module to scan the ruuvi’s and get their data. I was actually looking for something more like this. This is a BLE -> mqtt bridge, that will scan for data on ruuvi (or Puckjs) and then publuish that to a mqtt service. EspruinoHub didn’t quite fit my setup, it is apparently a 2 way bridge, but I only really wanted a 1 way (getting the data). I also did not want to install nodered and all the other dependancies for it. So I decided to use this as a basis and write something else (source here) It does esentially the same job, scans the BLE range and gets any data being advertised, and then publishes it to a mqtt stream. My openHAB server subscribes to these streams to get the data into the system. One use case I have for this is to monitor a bedroom temperature, and then if it gets to cold overnight, turn on the heating. Keep monitoring the temperature and if it gets a bit too hot, turn it off again.
Setup
- So firstly during my trials, and some help from the Ruuvi Slack channel, we need to upgrade the version of bluez that is on the raspberry pi to the latest. There is apparently an issue in 5.23 that was causing me some grief.
- First lets install all the dependancies we will need
sudo apt-get install bluetooth bluez bluez-hcidump libbluetooth-dev libudev-dev
- Add the stretch repo (with the newer bluez versions) to apt source list
sudo vim /etc/apt/sources.list
-> adddeb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi
sudo vim /etc/apt/apt.conf.d/40defaultrelease
-> addAPT::Default-Release "jessie";
- Update package list
sudo apt-get update
- Upgrade bluez using the strech repo
sudo apt-get install bluez bluez-hcidump -t stretch
- Now we need node. I’m going to install the latest, but the LTS version works great too
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install nodejs npm
So before we go any further, lets do some testing. We can use the tools from the bluez
package to scan BLE and see what data we can find
Cool, we can see ruuvi in the scan! No lets see what data ruuvi is giving us
Pretty neat, we can see a raw stream of hex data that the RuuviTag is giving out. Lets try again with the -x
flag (show ascii and hex data)
More interesting things happening. We can see the name of the tag, its MAC address and RSI. Unforuntely we can’t see the data its advertising. I haven’t been able to find out how to do that just with hcidump
but we will now turn to some javascript to get this info!
- Lets install some node dependacies we will need for this.
npm install noble mqtt
- The noble module is pretty much where all the work happens, and we will just need the mqtt module to send messages to our openhab server
- I have also borrowed a few bits of code out of the EspruinoHub project, this made my life alot easier. We needed the config.js and attributes.js files out of the lib folder
- And here is
index.js
, that does the scanning and prints the data. Its still a bit of work in progress at the moment, but does exactly what I need. Although I do not have multiple RuuviTags, this solution should work just fine for mulitple tags.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
var noble = require('noble');
var attributes = require('./attribute');
var config = require('./config');
var mqtt = require('mqtt');
// my mqtt server needs some authentication, if you dont, you can just remove that object
var client = mqtt.connect('mqtt://<IP_ADDRESS>', { username: 'Username', password: 'Password' })
var connected = false;
var inRange = {};
var packetsReceived = 0;
var lastPacketsReceived = 0;
var isScanning = false;
noble.on('stateChange', function(state) {
if (state === 'poweredOn') {
noble.startScanning([], true);
} else {
noble.stopScanning();
}
});
client.on('connect', function () {
connected = true;
});
noble.on('discover', function(peripheral) {
packetsReceived++;
var addr = peripheral.address;
var id = addr;
if (id in config.known_devices)
id = config.known_devices[id];
var entered = !inRange[addr];
if (entered) {
inRange[addr] = {
id : id,
address : addr,
peripheral: peripheral,
name : "?",
data : {}
};
};
inRange[addr].lastSeen = Date.now();
inRange[addr].rssi = peripheral.rssi;
console.log('hello my local name is:');
console.log('\t' + peripheral.advertisement.localName);
var serviceData = peripheral.advertisement.serviceData;
//If the advertising BLE device has any service data, then lets loop throught it and find out what it is
if (serviceData && serviceData.length) {
for (var i in serviceData) {
//If statement to limit the outgoing mqtt stream. We are checking to see if the device is already in our array we made above, and if it hasnt been seen in 60s, and that data hasnt changed
if (inRange[addr].data[serviceData[i].uuid] &&
inRange[addr].data[serviceData[i].uuid].payload.toString() == serviceData[i].data.toString() &&
inRange[addr].data[serviceData[i].uuid].time > Date.now()-60000){
console.log("waiting....");
}else{
//Bit of debugging here so we can see whats going on
console.log('\t\t' + JSON.stringify(serviceData[i].uuid) + ': ' + JSON.stringify(serviceData[i].data.toString('hex')));
var n = attributes.getReadableAttributeName(serviceData[i].uuid);
console.log(JSON.stringify(attributes.decodeAttribute(n,serviceData[i].data))+"\n");
inRange[addr].data[serviceData[i].uuid] = { payload : serviceData[i].data, time : Date.now() };
var extendedData = attributes.decodeAttribute(n,serviceData[i].data);
//Can only sent mqtt if its actually connected, so if connected send data. We are only sending the temp number, not the whole json string which looks like { "temp": 20 } in debug messages above
if (connected && extendedData.temp) client.publish(inRange[addr].peripheral.id +'/temp', extendedData.temp.toString());
}
}
}
if (peripheral.advertisement.manufacturerData) {
console.log('\there is my manufacturer data:');
console.log('\t\t' + JSON.stringify(peripheral.advertisement.manufacturerData.toString('hex')));
}
if (peripheral.advertisement.txPowerLevel !== undefined) {
console.log('\tmy TX power level is:');
console.log('\t\t' + peripheral.advertisement.txPowerLevel);
}
console.log();
});
If you go ahead and run this, nodejs index.js
you will see somethings being printed out to console. Once it picks up Ruuvi, it should tell you the temperature now!
- The script is set to only re-send data on change, or ever 60 seconds. This is just so mqtt isn’t flooded with messages
Now lets go over to openhab, and makde sure its ready to receive some data
- Pre-requisites for this is obviously having mqtt biniding installed and working
vim /etc/openhab2/items/ruuvi.items
- Add something like this -
Number ruuvi "RuuviTag [%.2f C]" (climate) {mqtt="<[mosq:cea2590e85c2/temp:state:default]"}
- So the node script is publishing to a mqtt topic by the ruuvitag ID, which is just the tag’s MAC address without any
:
- So the node script is publishing to a mqtt topic by the ruuvitag ID, which is just the tag’s MAC address without any
- While you have the node script running, tail the openhab log to make sure things are working.
tail -f /var/log/openhab2/events.log
Excellent. We can see that we are getting updates into openhab. Now make sure you are persisting this data (I’m using the rrdj4 persistance) and you can get some pretty charts to display into your sitemap
So lets tidy this up and manage the node script with systemd, so we don’t have to have it running in a screen
or something funky like that. Just put this into /etc/systemd/system/ruuvi.service
Now you can start and stop it with systemctl
So here you have it. A RuuviTag, lots of javascript and openHAB. All working together. Now I just need to buy some more, 1 for each room!
I will also upload the files to github, so you can just download it from there too..


On the 2016 Mustang GT Premium the default dash vent panel color is matte silver and there are 3 circular vents above the infotainment system. While the matte silver is not a bad aesthetic choice I changed this to black. I also replaced the central vent with the LUND Racing nGauge®. The nGauge® provides an interface through which an aftermarket tune can be loaded into the vehicle. Additionally it displays and records a series of real-time diagnostics essential for evaluating vehicle performance.
After removing the four matte silver pieces comprising the dash vent panels I removed the vents and placed the panels on top of newspaper on my work bench. I proceeded to apply black PlastiDip® in several very light and even coats. The total number of coats was 12. PlastiDip® is a rubberized coating that is applied much like spray paint but if applied in a thick enough layer can be simply peeled away from most surfaces if no longer desired. For this application I wanted each coat to be incredibly light such that it wouldn't gloss out and the final product would have a smooth textured matte black appearance to match the housing around the infotainment system.
The next day, after allowing 15 hours for the refinished dash panels to dry, I routed the cable for connecting the nGauge® to OBD diagnostics port and re-installed the panels into the vehicle. I then installed the nGauge® vent mount, which fits perfectly in the opening for the center vent. Finally I plugged in the nGauge®, inserted a micro SD card loaded with the new tune, most recent LUND Racing nGauge® firmware, and snapped the gauge into its mount. I feel the black dash panels look much cleaner and complete a more aggressive look for the interior of the Mustang. With the interior modifications made I turned my attention to under the hood.
Under the hood the work was very simple and took only 10 minutes. The JLT intake comes with simple and complete installation instructions. After installing the JLT intake, I returned to the inside of the car and flashed the new tune to the ECM. (Since the JLT intake diameter is different than the stock intake an aftermarket tune is required). After another few minutes I started the car and took it for a drive. The first thing I noticed was an increase in power along with dramatic improvements in throttle response and aggressiveness of the transmission shifting gears. Essentially "Normal" mode now feels like "Sport +" mode and I am very pleased with the results. I strongly suggest this be the first performance upgrade one should do to their mustang.


--- layout: page title: MNIST subtitle: Handwriting recognition --- {%- if site.navbar-links.Projects[0].MNIST -%}


888.995.3533
Easily share updated product content through multiple marketing channels
Establish an online storefront accessible from smartphones, tablets, and PC's
Drive B2B and B2C sales using a integrated solution
Powerful Search with Auto Complete and results ranking
Setup coupons and promotions
Integration with multiple payment gateways
Create and manage vendors & vendor information
Create PDF invoices & package slips
Create & manage quotes and convert a quote into an order
Integration with multiple shopping carts such as Shopify, Magento, Wordpress, etc.
Share updated product content through multiple channels including: B2B/B2C websites, online dealer portals, e-campaigns and mobile devices. Product inventory, pricing and order management are automated.
Establish an online storefront accessible from smartphones, tablets, PC's. Sales reps, product dealers and customers get real-time pricing and inventory updates, and can place orders from any mobile device.
“Our naval clients will get updated pricing information on demand, so orders can be processed faster and without error. As a result, RBS will benefit from increased customer satisfaction, larger order sizes and repeat businesses.”
-Republic Brass Sales
“The ability to have our entire product line available to customers online with product images, descriptions, inventory and pricing will save us valuable time and money in the order process.”
-Daka Medical Corp


|
App Engine Python SDK
v1.6.9 rev.445
The Python runtime is available as an experimental Preview feature.
|
Public Member Functions | |
| def | __init__ |
| def | get_current_file |
| def | get_index |
| def | increment_index |
| def | get_cache |
| def | default_instance |
| def | __repr__ |
| def | __str__ |
| def | checkpoint |
| def | to_json |
| def | from_json |
| def | can_split |
| def | split |
| def | __iter__ |
| def | preprocess |
| def | next |
| def | get_next |
Static Public Attributes | |
| tuple | ARGUMENTS = set() |
| string | NAME = '_file' |
FileFormat can operate/iterate on files of a specific format. Life cycle of FileFormat: 1. Two ways that FileFormat is created: file_format_root.split creates FileFormat from scratch. FileFormatRoot.from_json creates FileFormat from serialized json str. Either way, it is associated with a FileFormatRoot. It should never be instantiated directly. 2. Root acts as a coordinator among FileFormats. Root initializes its many fields so that FileFormat knows how to iterate over its inputs. 3. Its next() method is used to iterate. 4. It keeps iterating until either root calls its to_json() or root sends it a StopIteration. How to define a new format: 1. Subclass this. 2. Override NAME and ARGUMENTS. file_format_parser._FileFormatParser uses them to validate a format string contains only legal names and arguments. 3. Optionally override preprocess(). See method doc. 4. Override get_next(). Used by next() to fetch the next content to return. See method. 5. Optionally override split() if this format supports it. See method. 6. Write unit tests. Tricky logics (to/from_json, advance current input file) are shared. Thus as long as you respected get_next()'s pre/post conditions, tests are very simple. 7. Register your format at FORMATS. Attributes: ARGUMENTS: a set of acceptable arguments to this format. Used for parsing this format. NAME: the name of this format. Used for parsing this format.
| def google.appengine.ext.mapreduce.file_formats.FileFormat.__init__ | ( | self, | |
| index, | |||
index_range = None , |
|||
| kwargs | |||
| ) |
Initialize. Args: index: the index of the subfile to read from the current file. index_range: a tuple [start_index, end_index) that if defined, should bound index. When index is end_index, current file is consumed. kwargs: kwargs for a specific FileFormat. What arguments are accepted and their semantics depend on each subclass's interpretation. Raises: ValueError: if some argument is not expected by the format.
| def google.appengine.ext.mapreduce.file_formats.FileFormat.can_split | ( | cls | ) |
Indicates whether this format support splitting within a file boundary. Returns: True if a FileFormat allows its inputs to be splitted into different shards.
| def google.appengine.ext.mapreduce.file_formats.FileFormat.checkpoint | ( | self | ) |
Save _index before updating it to support potential rollback.
| def google.appengine.ext.mapreduce.file_formats.FileFormat.default_instance | ( | cls, | |
| kwargs | |||
| ) |
Create an default instance of FileFormat. Used by parser to create default instances. Args: kwargs: kwargs parser parsed from user input. Returns: A default instance of FileFormat.
| def google.appengine.ext.mapreduce.file_formats.FileFormat.from_json | ( | cls, | |
| json | |||
| ) |
Deserialize from json compatible structure.
| def google.appengine.ext.mapreduce.file_formats.FileFormat.get_cache | ( | self | ) |
Get cache to store expensive objects. Some formats need expensive initialization to even start iteration. They can store the initialized objects into the cache and try to retrieve the objects from the cache at later iterations. For example, a zip format needs to create a ZipFile object to iterate over the zipfile. It can avoid doing so on every "next" call by storing the ZipFile into cache. Cache does not guarantee persistence. It is cleared at pickles. It is also intentionally cleared after the currently iterated file is entirely consumed. Returns: A dict to store temporary objects.
| def google.appengine.ext.mapreduce.file_formats.FileFormat.get_current_file | ( | self | ) |
Get the current file to iterate upon. Returns: A Python file object. This file is already seeked to the position from last iteration. If read raises EOF, that means the file is exhausted.
| def google.appengine.ext.mapreduce.file_formats.FileFormat.get_index | ( | self | ) |
Get index. If the format is an archive format, get_index() tells the format which subfile from current file should it process. This value is maintained across pickles and resets to 0 when a new file starts. Returns: index of the subfile to process from current file.
| def google.appengine.ext.mapreduce.file_formats.FileFormat.get_next | ( | self | ) |
Finds the next content to return. Expected steps of any implementation: 1. Call get_current_file() to get the file to iterate on. 2. If nothing is read, raise EOFError. Otherwise, process the contents read in anyway. _kwargs is guaranteed to be a dict containing all arguments and values specified by user. 3. If the format is an archive format, use get_index() to see which subfile to read. Call increment_index() if finished current subfile. These two methods will make sure the index is maintained during (de)serialization. 4. Return the processed contents either as a file-like object or Python str. NO UNICODE. Returns: The str or file like object if got anything to return. Raises: EOFError if no content is found to return.
| def google.appengine.ext.mapreduce.file_formats.FileFormat.increment_index | ( | self | ) |
Increment index. Increment index value after finished processing the current subfile from current file.
| def google.appengine.ext.mapreduce.file_formats.FileFormat.next | ( | self | ) |
Returns a file-like object containing next content. Returns: A file-like object containing next content. Raises: ValueError: if content is of none str type.
| def google.appengine.ext.mapreduce.file_formats.FileFormat.preprocess | ( | self, | |
| file_object | |||
| ) |
Does preprocessing on the file-like object and returns another one. Normally a FileFormat directly reads from the file returned by get_current_file(). But some formats need to preprocess that file entirely before iteration can starts (e.g. text formats need to decode first). Args: file_object: read from this object and process its content. Returns: a file-like object containing processed contents. This file object will be returned by get_current_file() instead. If the returned object is newly created, close the old one.
| def google.appengine.ext.mapreduce.file_formats.FileFormat.split | ( | cls, | |
| desired_size, | |||
| start_index, | |||
| input_file, | |||
| cache | |||
| ) |
Splits a single chunk of desired_size from file. FileFormatRoot uses this method to ask FileFormat how to split one file of this format. This method takes an opened file and a start_index. If file size is bigger than desired_size, the method determines a chunk of the file whose size is close to desired_size. The chuck is indicated by [start_index, end_index). If the file is smaller than desired_size, the chunk will include the rest of the input_file. This method also indicates how many bytes are consumed by this chunk by returning size_left to the caller. Args: desired_size: desired number of bytes for this split. Positive int. start_index: the index to start this split. The index is not necessarily an offset. In zipfile, for example, it's the index of the member file in the archive. Non negative int. input_file: opened Files API file to split. Do not close this file. cache: a dict to cache any object over multiple calls if needed. Returns: Returns a tuple of (size_left, end_index). If end_index equals start_index, the file is fully split.
| def google.appengine.ext.mapreduce.file_formats.FileFormat.to_json | ( | self | ) |
Serialize states to a json compatible structure.


+++ title = "test html" date = "2016-07-30T14:09:58+08:00" tags = ["zabbix"] description = "" slug = "Just-a-test" +++ test fffss fffff fssss fsdfsdfsdf sdfsdf
fffffsdf sdfsdf sdfsdfsdf sdfsdf


Preparation time
less than 30 mins
Cooking time
10 to 30 mins
Serves
Serves 4
White asparagus and white grapefruit make an unusual combination in this deliciously zesty starter. Try it served with griddled green asparagus and chargrilled bread.
Bring a pan of water to the boil over a medium heat, add the egg, return to the boil, then turn the heat down to low and simmer for 10 minutes. Drain and refresh under cold water, then crack and peel the egg. Finely chop the cooked egg and leave to one side.
Divide the asparagus into four equal-sized bunches and tie each bunch with kitchen string to secure. Bring a pan of salted water to the boil over a medium heat, add the bunched asparagus and simmer for 5-8 minutes (depending on the size of your asparagus) until tender, but with just a little resistance when pierced with the top of a knife.
Grate the zest from the grapefruit, reserve a pinch and put the rest in a small bowl. Peel the grapefruit, then take out four segments, cut each one in half and leave to one side, juice the rest of the grapefruit, pressing it through a fine sieve into the bowl with the zest. Add the mustard and mayonnaise and whisk together until well blended, then whisk in the sunflower oil in a steady stream. Stir in the chopped egg and chervil and season with salt and pepper to taste.
Remove the asparagus from the pan and drain briefly on a plate lined with kitchen paper or a clean tea towel. Remove the string and put the asparagus onto four serving plates. Spoon the dressing over the top and finish with the reserved grapefruit segments and a sprinkling of the reserved zest.
Serve with griddled green asparagus and chargrilled bread.


Appendix: PhD Portfolio & Curriculum Vitae
PhD Portfolio
| Name PhD student: | Nicole S. Erler |
| Department: | Department of Biostatistics |
| Erasmus Medical Center Rotterdam | |
| PhD period: | 2014 – 2018 |
| Promotors: | Prof.dr. Dimitris Rizopoulos |
| Prof.dr. Emmanuel M.E.H. Lesaffre |
Presentations
| year | ECTS | |
|---|---|---|
| at international conferences | ||
| 35th ISCB conference, Vienna, Austria | 2014 | 1.0 |
| 5th IBC Channel Meeting, Nijmegen, the Netherlands | 2015 | 1.0 |
| 8th IBS EMR conference, Kapadokya, Turkey | 2015 | 1.0 |
| 36th ISCB conference, Utrecht, the Netherlands | 2015 | 1.0 |
| 28th IBS conference, Victoria, Canada | 2016 | 1.0 |
| 37th ISCB conference, Birmingham, United Kingdom | 2016 | 1.0 |
| Joint Modeling and Beyond, Hasselt, Belgium | 2016 | 1.0 |
| 9th IBS EMR conference, Thessaloniki, Greece | 2017 | 1.0 |
| 38th ISCB conference, Vigo, Spain | 2017 | 1.0 |
| 29th IBS conference, Barcelona, Spain | 2018 | 1.0 |
| other | ||
| Heidelberger Kolloquium, Heidelberg, Germany | 2015 | 1.0 |
| Erasmus Statistics Day, Rotterdam, the Netherlands | 2016 | 1.0 |
Teaching
| year | ECTS | |
|---|---|---|
| Teaching | ||
| Missing Values in Clinical Research (EP16), NIHES | 2018 | 15 |
| Assisting | ||
| SPSS practical, MSc Medicine, Erasmus MC | 2014 – 2018 | 1.3 |
| Biostatistical Methods II (EP03), NIHES | 2014 – 2018 | 1.4 |
| Repeated Measurements (CE08), NIHES | 2016 | 1.0 |
Courses
| year | ECTS | |
|---|---|---|
| GAMLSS in Action (Erasmus MC, Rotterdam) | 2014 | 0.6 |
| INLA (IBC Channel Meeting, Nijmegen) | 2015 | 0.1 |
| Causal Questions and Principled Answers (ISCB, Vigo, Spain) | 2017 | 0.3 |
| Microbiomics I (MolMed, Erasmus MC) | 2017 | 0.6 |
| Bayesian non-parametric methods (Leuven, Belgium) | 2017 | 1.0 |
| Scientific Integrity (Erasmus MC) | 2017 | 0.3 |
| Network Meta Analysis with R (IBC, Barcelona, Spain) | 2018 | 0.3 |
| Bayesian Parametric and Nonparametric Methods for Missing Data and Causal Inference (Leuven, Belgium) | 2018 | 1.0 |
| DSMB training: To stop or not to stop, is that the question? (Erasmus MC) | 2018 | 0.1 |
Seminars and Workshops
| year | ECTS | |
|---|---|---|
| Erasmus MC bi-weekly Biostatistics / CQM seminar | 2014 – 2018 | 1.0 |
| Erasmus MC bi-weekly ErasmusAGE seminar | 2014 – 2017 | 1.0 |
| BMS-Aned Meeting, Rotterdam, the Netherlands | 2014 | 0.2 |
| BMS-Aned Meeting, Leiden, the Netherlands | 2017 | 0.2 |
| BMS-Aned Meeting, Amsterdam, the Netherlands | 2017 | 0.2 |
| BMS-Aned Meeting, Rotterdam, the Netherlands | 2018 | 0.2 |
Consulting
| year | ECTS | |
|---|---|---|
| Statistical consultant in the Erasmus MC CPO system | 2014 – 2018 | 16.0 |
Curriculum Vitae
Education
| since 2014 |
PhD in Biostatistics Erasmus University Rotterdam, Rotterdam, the Netherlands |
| 2013 – 2014 |
DSc Epidemiology Netherlands Institute of Health Sciences, Erasmus Medical Center, Rotterdam, the Netherlands |
| 2006 – 2012 |
Diplom Statistics Ludwig-Maximilians-Universität München, Munich, Germany |
Work Experience
| since 03/2013 |
Scientific Researcher Department of Biostatistics, Erasmus Medical Center, Rotterdam, the Netherlands |
| 12/2012 – 02/2013 |
Scientific Researcher Rotterdam Ophthalmic Institute, Rotterdam, the Netherlands |
| 11/2010 – 06/2011 |
Student Assistant Central Examination Office for Natural Sciences, Ludwig-Maximilians-Universität München, Munich, Germany |
| 07/2008 – 11/2010 |
Student Assistant to Prof. Dr. Augustin Department of Statistics, Ludwig-Maximilians-Universität München, Munich, Germany |
Awards
| 2016 | Student Award of the International Society for Clinical Biostatistics |
| 2015 | Student Award of the International Biometric Society (Eastern Mediterranean Region) |
Collaborations and Consulting
| since 2017 |
Collaboration with the Department of Gastroenterology and
Hepatology, Erasmus Medical Center statistical support for the planning and analysis of clinical trials, preparation of scientific manuscripts, analysis of data with advanced statistical methods |
| since 2014 |
Statistical consultant in the Consultation Center for Patient
Oriented research, Erasmus Medical Center providing statistical support to researchers within the Erasmus Medical Center |
| 2013 – 2017 |
Collaboration with ErasmusAGE (research group within the Department of Epidemiology, Erasmus Medical Center) providing statistical support and collaboration on various research projects with focus on nutrition, lifestyle and healthy ageing |
Publications
Alferink LJ, Kiefte-de Jong JC, Erler NS, de Knegt RJ, Hoorn EJ, Ikram MA, Janssen HL, Metselaar HJ, Franco OH, Darwish Murad S (2019). “Diet-dependent acid load - the missing link between an animal protein-rich diet and non-alcoholic fatty liver disease?” In press.
Alferink LJ, Radjabzadeh D, Erler NS, Vojinovic D, Gomez CM, Uitterlinden AG, de Knegt RJ, Amin N, Ikram MA, Janssen HL, Metselaar HJ, van Duijn CM, Kraaij R, Murad SD (2019). “Microbiomics, metabolomics, predicted metagenomics and hepatic steatosis in a population-based study of 1355 adults.” Manuscript submitted for publication.
Alferink LJ, Trajanoska K, Erler NS, Schoufour JD, de Knegt RJ, Ikram MA, Janssen HL, Franco OH, Metselaar HJ, Rivadeneira F, Murad SD (2019).  Journal of Bone and Mineral Research. doi: 10.1002/jbmr.3713 (URL: https://doi.org/10.1002/jbmr.3713).
Boor PP, Sideras K, Biermann K, Levink IJ, Mancham S, Erler NS, van Eijck CH, Bruno MJ, Sprengers D, Zang X, Kwekkeboom J (2019). “HHLA2 is expressed in pancreatic and ampullary cancers and increased expression is associated with better post-surgical prognosis.” Manuscript in preparation.
Coopmans EC, Schneiders JJ, El-Sayed N, Erler NS, Muhammad A, Hofland LJ, Petrossians P, van der Lely A, Neggers SJ (2019). “T2-signal intensity, SST receptor expression and first-generation somatostatin analogues efficacy predict hormone and tumor responses to pasireotide in acromegaly.” Manuscript in preparation.
De Wijs LE, Bosma A, Erler NS, Hollestein LM, Nijsten T, Spuls PI, Hijnen D (2019). “Dupilumab treatment for moderate-to-severe atopic dermatitis: daily practice data.” Manuscript submitted for publication.
Erler NS, Rizopoulos D, Jaddoe VW, Franco OH, Lesaffre EM (2019). “Bayesian imputation of time-varying covariates in linear mixed models.” Statistical Methods in Medical Research, 28(2), 555 - 568. doi: 10.1177/0962280217730851 (URL: https://doi.org/10.1177/0962280217730851).
Erler NS, Rizopoulos D, Lesaffre EM (2019). “ Joint Analysis and Imputation of Incomplete Data in R.” Manuscript in preparation.
Hu C, Duijts L, Erler NS, Elbert NJ, Piketty C, Bourdès V, Blanchet-Réthore S, de Jongste JC, Jaddoe VW, Pasmans SG, Felix JF, Nijsten T (2019). “Most associations of early life environmental exposures and genetic risk factors poorly differentiate between eczema phenotypes. The Generation R Study.” British Journal of Dermatology. doi: 10.1111/bjd.17879 (URL: https://doi.org/10.1111/bjd.17879).
Koolhaas CM, Kocevska D, te Lindert BHW, Erler NS, Franco OH, Luik AI, Tiemeier H (2019). “Objectively measured sleep and body mass index: a prospective bidirectional study in middle-aged and older adults.” Sleep Medicine, 57, 43 - 50. doi: 10.1016/j.sleep.2019.01.034 (URL: https://doi.org/10.1016/j.sleep.2019.01.034).
Oey RC, Aarts P, Erler NS, Metselaar HJ, Lakenman PL, der Ree SRB, van Kemenade MC, van Buuren HR, de Man RA (2019). “Limited efficacy of recently proposed EASL criteria for identifying patients with malnutrition and sarcopenia in a population screened for liver transplantation.” Manuscript submitted for publication.
Oey RC, Buck LE, Erler NS, van Buuren HR, de Man RA (2019). “The efficacy and safety of rifaximin-\(\alpha\): a 2-year observational study of overt hepatic encephalopathy.” Manuscript submitted for publication.
Oey RC, van Tilburg L, Erler NS, Metselaar HJ, Spaander MC, van Buuren HR, de Man RA (2019). “The yield and safety of screening colonoscopy in patients evaluated for liver transplantation.” Hepathology. doi: 10.1002/hep.30562 (URL: https://doi.org/10.1002/hep.30562).
Overbeek KA, Kamps A, van Riet PA, Marco MD, Zerboni G, van Hooft JE, Carrara S, Ricci C, Gonda TA, Schoon E, Polkowski M, Beyer G, Honkoop P, van der Waaij LA, Casadei R, Capurso G, Erler NS, Bruno MJ, Bleiker EM, Cahen, D. L. On behalf of the Pancreatic CYst Follow-up: an International Collaboration (PACYFIC) study work group. (2019). “Pancreatic cyst surveillance imposes low psychological burden.” Manuscript submitted for publication.
Rauwers AW, Voor in ’t holt AF, Buijs JG, de Groot W, Erler NS, Bruno MJ, Vos MC (2019). “A nationwide risk analysis of duodenoscope and linear echoendoscope contamination.” Manuscript submitted for publication.
Van der Veer MA, Nangrahary N, Hesselink DA, Erler NS, Metselaar HJ, van Gelder T, Darwish Murad S (2019). “High Intra-Patient Variability in Tacrolimus Exposure Is Not Associated with Immune-Mediated Graft Injury after Liver Transplantation.” Transplantation. doi: 10.1097/TP.0000000000002680 (URL: https://doi.org/10.1097/TP.0000000000002680).
Van Riet PA, Larghi A, Attili F, Rindi G, Nguyen NQ, others (2019). “A multicenter randomized trial comparing a 25-gauge EUS fine-needle aspiration device with a 20-gauge EUS fine-needle biopsy device.” Gastrointestinal Endoscopy, 89(2), 329 - 339. doi: 10.1016/j.gie.2018.10.026 (URL: https://doi.org/10.1016/j.gie.2018.10.026).
Alferink LJ, Kiefte-de Jong JC, Erler NS, Veldt BJ, Schoufour JD, de Knegt RJ, Ikram AM, Metselaar HJ, Janssen HL, Franco OH, Darwish Murad S (2018). “Association of dietary macronutrient composition and non-alcoholic fatty liver disease in an ageing population: The Rotterdam Study.” Gut. doi: 10.1136/gutjnl-2017-315940 (URL: https://doi.org/10.1136/gutjnl-2017-315940).
Beelen EM, van der Woude CJ, Pierik M, Hoentjen F, de Boer K, Oldenburg B, van der Meulen A, Ponsioen C, Dijkstra G, Gijsbers A, Erler NS, Schouten W, de Vries. On AC, (ICC) C (2018). “Decreasing trends in ileocecal resections and postoperative surgical recurrence in Crohn’s disease: a nationwide cohort study in the Netherlands.” Manuscript submitted for publication.
Buschow SI, Biesta PJ, Groothuismink ZM, Erler NS, Vanwolleghem T, Ho E, Najera I, Ait-Goughoulte M, de Knegt RJ, Boonstra A, Woltman AM (2018). “TLR7 polymorphism, sex and chronic HBV infection influence plasmacytoid DC maturation by TLR7 ligands.” Antiviral Research, 157, 27 - 37. doi: 10.1016/j.antiviral.2018.06.015 (URL: https://doi.org/10.1016/j.antiviral.2018.06.015).
De Jonge EA, Rivadeneira F, Erler NS, Hofman A, Uitterlinden AG, Franco OH, Kiefte-de Jong JC (2018). “Dietary patterns in an elderly population and their relation with bone mineral density: The Rotterdam Study.” European Journal of Nutrition, 57(1), 61-73. doi: 10.1007/s00394-016-1297-7 (URL: https://doi.org/10.1007/s00394-016-1297-7).
Didden P, Reijm AN, Erler NS, Wolters L, Tang T, ter Borg PC, Leeuwenburgh I, Bruno MJ, Spaander MC (2018). “Fully vs. partially covered selfexpandable metal stent for palliation of malignant esophageal strictures: a randomized trial (the COPAC study).” Endoscopy, 50(10), 961-971. doi: 10.1055/a-0620-8135 (URL: https://doi.org/10.1055/a-0620-8135).
Kamst NW, Mathijssen IM, Erler NS, van Veelen MC (2018). “Patient Reported Outcome Measurements in patients after scaphocephaly correction (PROM).” Manuscript submitted for publication.
Kanis SL, Modderman SC, Escher J, Erler NS, Beukers R, others (2018). “Long-term health outcomes of 1000 children born to mothers with Inflammatory Bowel Disease in the anti-TNF-\(\alpha\) era.” Manuscript submitted for publication.
Oey RC, de Man RA, Erler NS, Verbon A, van Buuren HR (2018). “Microbiology and antibiotic susceptibility patterns in spontaneous bacterial peritonitis: A study of two Dutch cohorts at a 10-year interval.” United European Gastroenterology Journal, 6(4). doi: 10.1177/2050640617744456 (URL: https://doi.org/10.1177/2050640617744456).
Oey RC, de Wit K, Moelker A, Atalik T, Van Delden OM, Maleux G, Erler NS, Takkenberg B, De Man RA, Nevens F, van Buuren HR (2018). “Variable efficacy of transjugular intrahepatic portosystemic shunt (TIPSS) in the management of ectopic variceal bleeding: a multicenter retrospective study.” Alimentary Pharmacology & Therapeutics, 48(9), 975 - 983. doi: 10.1111/apt.14947 (URL: https://doi.org/10.1111/apt.14947).
Oey RC, van Buuren HR, de Jong DM, Erler NS, de Man RA (2018). “Bacterascites: A study of clinical features, microbiological findings, and clinical significance.” Liver International, 38(12), 2199 - 2209. doi: 10.1111/liv.13929 (URL: https://doi.org/10.1111/liv.13929).
Ottenhof MJ, Fani L, Erler NS, Castricum J, Obdam IF, van der Vaart T, Kushner SA, de Wit MY, Elgersma Y, Tulen J (2018). “Within-subject consistency of paired associative stimulation as assessed by linear mixed models.” bioRxiv. doi: 10.1101/434431 (URL: https://doi.org/10.1101/434431).
Santosaningsih D, Erikawati D, Hakim IA, Santoso S, Hidayat M, Suwendha AH, Puspitasari V, Irhamni I, Kuntaman K, van Arkel A, Terlouw L, Oudenes N, Willemse-Erix D, Snijders S, Erler NS, Verbrugh HA, Severin J (2018). “Reducing transmission of methicillin-resistant Staphylococcus aureus in a surgical ward of a resource-limited hospital in Indonesia: an intervention study.” Manuscript submitted for publication.
Tielemans MJ, Erler NS, Franco OH, Jaddoe VW, Steegers EA, Kiefte-de Jong JC (2018). “Dietary acid load and blood pressure development in pregnancy: the Generation R Study.” Clinical Nutrition, 37(2), 597-603. doi: 10.1016/j.clnu.2017.01.013 (URL: https://doi.org/10.1016/j.clnu.2017.01.013).
Vergouwe FW, IJsselstijn H, Biermann K, Erler NS, Wijnen RM, Bruno MJ, Spaander MC (2018). “High Prevalence of Barrett’s Esophagus and Esophageal Squamous Cell Carcinoma after Repair of Esophageal Atresia.” Clinical Gastroenterology and Hepatology, 16(4). doi: 10.1016/j.cgh.2017.11.008 (URL: https://doi.org/10.1016/j.cgh.2017.11.008).
Brouwer J, Dolhain RJ, Hazes JM, Erler NS, Visser JA, Laven JS (2017). “Decline of ovarian function in patients with rheumatoid arthritis: serum anti-Müllerian hormone levels in a longitudinal cohort.” Manuscript submitted for publication.
Cepeda M, Schoufour JD, Erler NS, Marques-Vidal P, Franco OH (2017). “Influence of lifestyle markers and meteorological factors on the seasonality of cardiovascular risk factors: The Rotterdam Study.” Manuscript submitted for publication.
Garcia A, Erler NS, Jadooe VW, Tiemeier H, van den Hooven EH, Franco OH, Rivadeneira F, Voortman T (2017). “25-hydroxyvitamin D concentrations during fetal life and bone health in children aged 6 years: a population-based prospective cohort study.” The Lancet Diabetes & Endocrinology, 5(5), 367-376. doi: 10.1016/S2213-8587(17)30064-5 (URL: https://doi.org/10.1016/S2213-8587(17)30064-5).
Jaspers L, Erler NS, Fauser BC, Laven JS, Franco OH, Kavousi M (2017). “Towards a life-course approach in women’s healthy ageing: fertile lifespan characteristics are associated with a healthy ageing score in postmenopausal women of the Rotterdam Study.” Manuscript submitted for publication.
Jaspers L, Kavousi M, Erler NS, Hofman A, Laven JS, Franco OH (2017). “Fertile lifespan characteristics and all-cause and cause-specific mortality among postmenopausal women: The Rotterdam Study.” Fertility and Sterility, 107(2), 448-456.e1. doi: 10.1016/j.fertnstert.2016.11.006 (URL: https://doi.org/10.1016/j.fertnstert.2016.11.006).
Jaspers L, Schoufour JD, Erler NS, Darweesh SK, Portegies ML, Sedaghat S, Lahousse L, Brusselle GG, Stricker BH, Tiemeier H, Ikram AM, Laven JS, Franco OH, Kavousi M (2017). “Development of a Healthy Aging Score in the Population-Based Rotterdam Study: Evaluating Age and Sex Differences.” Journal of the American Medical Directors Association, 18(3), 276.e1-276.e7. doi: 10.1016/j.jamda.2016.11.021 (URL: https://doi.org/10.1016/j.jamda.2016.11.021).
Jen V, Erler NS, Tielemans MJ, Braun KV, Jaddoe VW, Franco OH, Voortman T (2017). “Mothers’ intake of sugar-containing beverages during pregnancy and body composition of their children during childhood: The Generation R Study.” The American Journal of Clinical Nutrition, 105(4), 834-841. doi: 10.3945/ajcn.116.147934 (URL: https://doi.org/10.3945/ajcn.116.147934).
Muka T, Blekkenhorst LC, Lewis JR, Prince RL, Erler NS, Hofman A, Franco OH, Rivadeneira F, Kiefte-de Jong JC (2017).  Clinical Nutrition, 36(5), 1411 - 1419. doi: 10.1016/j.clnu.2016.09.018 (URL: https://doi.org/10.1016/j.clnu.2016.09.018).
Schoufour JD, Erler NS, Jaspers L, Kiefte-de Jong JC, Voortman T, Ziere G, Lindemans J, Klaver CC, Tiemeier H, Stricker B, Ikram AM, Laven JS, Brusselle GG, Rivadeneira F, Franco OH (2017). “Design of a frailty index among community living middle-aged and older people: The Rotterdam Study.” Maturitas, 97, 14-20. doi: 10.1016/j.maturitas.2016.12.002 (URL: https://doi.org/10.1016/j.maturitas.2016.12.002).
Braun KV, Erler NS, Kiefte-de Jong JC, Jaddoe VW, van den Hooven EH, Franco OH, Voortman T (2016). “Dietary Intake of Protein in Early Childhood Is Associated with Growth Trajectories between 1 and 9 Years of Age.” The Journal of Nutrition, 146(11), 2361-2367. doi: 10.3945/jn.116.237164 (URL: https://doi.org/10.3945/jn.116.237164).
Egal M, Erler NS, De Geus HR, Van Bommel J, Groeneveld JA (2016). “Targeting Oliguria Reversal in Goal-Directed Hemodynamic Management Does Not Reduce Renal Dysfunction in Perioperative and Critically Ill Patients: A Systematic Review and Meta-Analysis.” Anesthesia & Analgesia, 122(1), 173-185. doi: 10.1213/ANE.0000000000001027 (URL: https://doi.org/10.1213/ANE.0000000000001027).
Erler NS, Rizopoulos D, van Rosmalen J, Jaddoe VW, Franco OH, Lesaffre EM (2016). “Dealing with missing covariates in epidemiologic studies: A comparison between multiple imputation and a full Bayesian approach.” Statistics in Medicine, 35(17), 2955-2974. doi: 10.1002/sim.6944 (URL: https://doi.org/10.1002/sim.6944).
Ophuis CMO, van Akkooi AC, Rutkowski P, Voit CA, Stepniak J, Erler NS, Eggermont AM, Wouters MW, Grünhagen DJ, Verhoef C (2016). “Effects of time interval between primary melanoma excision and sentinel node biopsy on positivity rate and survival.” European Journal of Cancer, 67, 164-173. doi: 10.1016/j.ejca.2016.08.014 (URL: https://doi.org/10.1016/j.ejca.2016.08.014).
Leermakers ET, Felix JF, Erler NS, Cerimagic A, Wijtzes AI, Hofman A, Raat H, Moll HA, Rivadeneira F, Jaddoe VW, Franco OH, Kiefte-de Jong JC (2015). “Sugar-containing beverage intake in toddlers and body composition up to age 6 years: The Generation R Study.” European Journal of Clinical Nutrition, 69(3), 314-321. doi: 10.1038/ejcn.2015.2 (URL: https://doi.org/10.1038/ejcn.2015.2).
Tielemans MJ, Erler NS, Leermakers ET, van den Broek M, Jaddoe VW, Steegers EA, Kiefte-de Jong JC, Franco OH (2015). “A Priori and a Posteriori Dietary Patterns during Pregnancy and Gestational Weight Gain: The Generation R Study.” Nutrients, 7(11), 9383-9399. doi: 10.3390/nu7115476 (URL: https://doi.org/10.3390/nu7115476).
Erler NS, Bryan SR, Eilers PH, Lesaffre EM, Lemij HG, Vermeer KA (2014). “Optimizing Structure-Function Relationship by Maximizing Correspondence Between Glaucomatous Visual Fields and Mathematical Retinal Nerve Fiber Models.” Investigative Ophthalmology & Visual Science, 55(4), 2350-2357. doi: 10.1167/iovs.13-12492 (URL: https://doi.org/10.1167/iovs.13-12492).


New Advert
Login
Back to main
New advert
Drop your files here
Title
Description
End Date
Date
Category
Email
Phone
Submit
×
Login
Username
Password
Login
×