## encoding: utf-8
<%!
from web.auth import user
from brave.core.group.model import Group
from brave.core.group.acl import ACLList, ACLKey, ACLTitle, ACLRole, ACLMask, ACLVerySecure, ACLGroupMembership
def selected(bool):
return "selected" if bool else ""
%>
<%inherit file="brave.core.template.master"/>
<%block name="title">${group.id | h} - ${group.title | h}%block>
<%def name="aclrule(rule, group)">
% if isinstance(rule, ACLList):
${acllist(rule, group)}
% elif isinstance(rule, ACLKey):
${aclkey(rule)}
% elif isinstance(rule, ACLTitle):
${acltitle(rule)}
% elif isinstance(rule, ACLRole):
${aclrole(rule)}
% elif isinstance(rule, ACLMask):
${aclmask(rule)}
% elif isinstance(rule, ACLVerySecure):
${aclverysecure(rule)}
% elif isinstance(rule, ACLGroupMembership):
${aclgroupmembership(rule)}
% else:
ERROR THIS WON'T WORK: ${rule | h}
% endif
%def>
<%def name="select_grant(rule)">
Grant
Deny
%def>
<%def name="acllist(rule, group)">
${select_grant(rule)}
if character
is
is not
% if rule.kind == "c":
one of these characters:
% elif rule.kind == "o":
in one of these corporations:
% else:
in one of these alliances:
% endif
${stringlistinput("names", list(sorted(rule.target_objects(), key=lambda x: x.name.lower())), rule.kind, group)}
%def>
<%def name="aclkey(rule)">
${select_grant(rule)}
if we
have
don't have
a(n)
account
character
corporation (wtf?)
key for this character
%def>
<%def name="acltitle(rule)">
${select_grant(rule)}
if character
has any
has none
of these titles:
${stringlistinput("titles", rule.titles, None, None)}
%def>
<%def name="aclrole(rule)">
${select_grant(rule)}
if character
has any
has none
of these roles:
${stringlistinput("roles", rule.roles, None, None)}
%def>
<%def name="aclmask(rule)">
${select_grant(rule)}
if we
have
don't have
a key for this character supporting permissions:
%def>
<%def name="aclverysecure(rule)">
${select_grant(rule)}
if this user can
can only log in with
can log in without
OTP.
%def>
<%def name="aclgroupmembership(rule)">
${select_grant(rule)}
if the user/character
is
isn't
a member of the group
%def>
<%def name="rule_row(rule, group)">
${aclrule(rule, group) if rule else ""}
%def>
<%def name="stringlistinput(input_name, list, type, group)">
%def>
% if web.user.has_permission(group.edit_acl_perm):
<%
if rule_set == 'join':
rules = group.join_rules
elif rule_set == 'request':
rules = group.request_rules
else:
rules = group.rules
for rule in rules:
print rule_row(rule, group)
%>
Save ACL Rules
% endif
% if web.user.has_permission(group.edit_perms_perm) and not rule_set:
Group Permissions
ID
Description
Actions
% for perm in sorted(group._permissions, key=lambda p: p.id):
${perm.id | h}
${perm.description | h}
% endfor
% endif
% if rule_set == 'request':
Pending Membership Requests
Character Name
Corporation
Alliance
Actions
% for char in group.requests:
% if user.admin:
${char.name | h}
% else:
${char.name | h}
% endif
% if char.corporation:
${char.corporation.name | h}
% endif
% if char.alliance:
${char.alliance.name | h}
% endif
% endfor
% endif
% if rule_set:
<%
lang = ''
if rule_set == 'join':
lang = 'Joined'
else:
lang = 'Requested'
%>
Current Members That Have ${lang | h} This Group
Character Name
Corporation
Alliance
Actions
% for char in getattr(group, rule_set + "_members"):
% if user.admin:
${char.name | h}
% else:
${char.name | h}
% endif
% if char.corporation:
${char.corporation.name | h}
% endif
% if char.alliance:
${char.alliance.name | h}
% endif
% endfor
% endif
${aclrule(ACLList(grant=True, kind='c', ids=[]), group)}
${aclrule(ACLList(grant=True, kind='o', ids=[]), group)}
${aclrule(ACLList(grant=True, kind='a', ids=[]), group)}
${aclrule(ACLKey(grant=True, kind='Account'), None)}
${aclrule(ACLTitle(grant=True, titles=[]), None)}
${aclrule(ACLRole(grant=True, roles=[]), None)}
${aclrule(ACLMask(grant=True, mask=0), None)}
${aclrule(ACLVerySecure(grant=True), None)}
${aclrule(ACLGroupMembership(grant=True, group=Group(id='')), None)}
<%block name="pre">
${parent.pre()}
%block>
<%block name="post">
${parent.post()}
%block>


modes
add
delete
edit
cells
cells 1
cells 2
cells 3
cell parameters
hinge front distance:
0
hinge back distance:
0
hinge offset:
0
hinge front position:
0
hinge back position:
0
simulation
current compression:
0
import / export
cell size:
min. thick.:
import .stl
export .stl


Main
Pablo Baez Benavides, PhD
Education
University of Chile
Postdoctoral Researcher
Santiago, Chile
Present - Sep. 2018
PI: Steffen Härtel Gründler
University of Chile
Ph.D. in Biomedical Sciences
Santiago, Chile
Jan. 2018 - Mar. 2013
Dissertation: Genetic linkage and association analysis to identify genetic risk markers of cholelithiasis and gallbladder cancer in Chile.
University of Chile
M.S. in Medical and Biological Sciences, mention in Genetics
Santiago, Chile
Jun. 2013 - Apr. 2011
Dissertation: Role of the TRPM4 channel in the development of prostate cancer in a transgenic murine model.
University of Antioquia
B.S. Microbiology and Bioanalysis
Medellín, Colombia
May. 2009 - Jan. 2003
Research Experience
Postdoctoral Researcher
Center for Medical Informatics and Telemedicine (CIMT), University of Chile
Santiago, Chile
Present - Sep. 2018
- Population-based assessment of familial aggregation of chronic diseases in Chile
- Development and implementation of a multigenerational database.
Research Assistant
Laboratory of Genetics and Genomics of Neuropsychiatric Diseases, Human Genetics Program, University of Chile
Santiago, Chile
Dec. 2018 - Sep. 2018
- Search on whole-exome sequencing data for new genetic variants associated with isolated congenital anosmia in a Chilean family
Research Assistant
Foundation for Advanced Biomedical Studies (FEBA), Faculty of Medicine, University of Chile
Santiago, Chile
Apr. 2018 - Dec. 2017
- Analysis of germline and somatic genetic variants in patients with gallbladder cancer
Graduate Research Assistant
Cancer Genomics Laboratory, Faculty of Medicine, University of Chile
Santiago, Chile
Jan. 2018 - Aug. 2014
- Statistical analysis of socio-demographic information
- Genetic linkage analysis in families
- Fine mapping and genome wide association analysis in a case-control study
- Analysis of the rat genome promoter sequences to identify candidate genes with HIF response elements
- Identification and recruitment of Chilean patients with gallbladder cancer
- Blood sample collection and processing
Graduate Student Fellow
Institute of Medical Biometry and Informatics (IMBI), University Hospital Heidelberg
Heidelberg, Germany
Feb. 2016 - Aug. 2015
- Trained in standard statistical methods to analyze socio-demographic information
- Trained in specialized bioinformatics tools (R, PLINK and Mendel) to analyze genetic data
- Attended the EMBL Conference: Cancer Genomics
- Journal Club presentations
- Attended scientific talks organized by the University of Heidelberg and the German Center for Oncological Research (dkfz)
Graduate Research Assistant
Laboratory of Molecular Cancer Pathology, Faculty of Medicine, University of Chile
Santiago, Chile
Jun. 2013 - Mar. 2012
- Histopathological analysis of prostate, lymph nodes and lung sections of a murine model of prostate cancer (TRAMP mice)
- Quantification of mRNA using real-time RT-PCR on TRAMP mice prostates
Professional Experience
Teaching Experience
Graduate Teaching - Guest Professor
International Master in Medical Informatics, University of Chile
Santiago, Chile
Oct. 2018
- Genetic epidemiology studies in cancer
CA. Biomedicine II
Undergraduate Teaching - Guest Professor
School of Medical Technology, Universidad del Desarrollo
Santiago, Chile
Oct. 2018 - Aug. 2018
- Introduction to scientific research
CB. Scientific Bases of Medical Technology
Undergraduate Teaching - Guest Professor
School of Medical Technology, Universidad Mayor
Santiago, Chile
Sep. 2017
- Databases and bioinformatic tools in health
CB. Applied Biotechnology
Undergraduate Student Supervisor
Faculty of Medicine, University of Chile
Santiago, Chile
Jan. 2017 - Mar. 2016
- 40 hour tutoring of second-year medical students
- Guidance on the construction and execution of a short research project
Research Unit I and II
Adjunct Faculty
School of Microbiology, University of Antioquia
Medellín, Colombia
Aug. 2009 - Jun. 2009
- 90 hours in undergraduate teaching activities
- Tutoring students in laboratories and practices
Anatomy and physiology III - Hematopathology – Hematology
Auxiliary Professor
School of Microbiology, University of Antioquia
Medellín, Colombia
Nov. 2008 - Jun. 2007
- 378 hours on teaching support, workshops implementation and assessments, tutoring students in laboratories and practices
Hematology
Publications and Presentations
TRPM4 regulates Akt/GSK3-β activity and enhances β-catenin signaling and cell proliferation in prostate cancer cells
Mol Oncol. 2018 Feb; 12(2):151-165. doi:10.1002/1878-0261.12100
Santiago, Chile
2018
Sagredo, A. I., Sagredo, E. A., Cappelli, C., Báez, P., Rodrigo, A. M., et al.
Subtypes of Native American ancestry and leading causes of death: Mapuche ancestry-specific associations with gallbladder cancer risk in Chile
PLoS Genet 13(5): e1006756. https://doi.org/10.1371/journal.pgen.1006756
Santiago, Chile
2017
Lorenzo Bermejo J, Boekstegers F, González Silos R, Marcelain K, Báez P., et al.
Mast Cell Infiltration and Kit and Protease Expression During Progression of a Transgenic Prostate Cancer Murine Model (TRAMP)
Journal of Comparative Pathology, 150(1), 88.
Santiago, Chile
2014
González, C., Armisén, R., Stutzin, A., Baez, P., Landerer, E., Paredes, R., Contreras, I., Muñoz, C.
Actualización en cáncer de próstata: generalidades y diagnóstico
Medicina & Laboratorio, 18, 7-8.
Santiago, Chile
2012
Báez, P., Armisén Yañez, R.
Colonización por Staphylococcus aureus resistente a meticilina en las manos de individuos de la comunidad
Iatreia, 23(1), 5-9.
Medellín, Colombia
2010
Báez, P., Zapata Tamayo, M., Ramírez Pérez, A., Rúa Giraldo, A., & Jiménez Quiceno, J.
Genetic linkage and association analysis to identify genetic risk markers of gallstone disease and gallbladder cancer in Chile
Poster presentation at the Reunión Anual Conjunta 2018 Y LV Reunión Anual De La Sociedad De Genética De Chile
Puerto Varas, Chile
Nov. 20 22, 2018
Báez P., Boekstegers F., Barahona C., Fischer C., Lorenzo J. and Marcelain K.
Update on Environmental and Genetic Characteristics of Chilean Gallbladder Cancer Patients and Families
Oral presentation at the Symposium Towards Personalized Prevention and Treatment of Gallbladder Cancer
Santiago, Chile
May. 6, 2017
Báez P., Barahona Ponce C., Marcelain K., Lorenzo Bermejo J. and Fischer K.
Environmental and Genetic Characteristics of Chilean Gallbladder Cancer Families
Oral presentation at the Symposium Towards Personalized Prevention and Treatment of Gallbladder Cancer
Santiago, Chile
Apr. 2, 2016
Báez P., Barahona Ponce C., Marcelain K., Lorenzo Bermejo J. and Fischer K.
Role of TRPM4 in prostate cancer in mice models
Poster presentation at the XXVII Reunión Anual Sociedad Chilena de Ciencias Fisiológicas
Puerto Varas, Chile
Nov. 2012
Báez, P., Hermosilla, T., Sagredo, E.A., Sagredo, A., Díaz, P., Pérez, H., González, C., Landerer, E., Marcelain, K., Cid, P., Armisén, R. and Stutzin, A.
Scholarships & Awards
Postdoctoral Bridge Scholarship
Biomedical Neuroscience Institute (BNI), University of Chile
Santiago, Chile
Sep. 2018
Scholarship for Internship Abroad
MECESUP Program Uch1304, University of Chile
Santiago, Chile
Jul. 2015
CONICYT National PhD Scholarship for Foreigners
Ministry of Education, Government of Chile
Santiago, Chile
Mar. 2013
Master’s approval with maximum distinction
Postgraduate School, University of Chile
Santiago, Chile
Jun. 2013
Ten best results at national level according to academic program: ECAES test
Ministry of Education, Republic of Colombia
Medellín, Colombia
2008


_Office_Space_ (R) *** (out of ****)
_Beavis_and_Butt-Head_, _King_of_the_Hill_. Two of the most successful animated television series in recent years--and two of the most annoying creations to ever hit the tube, if you ask me. So I was surprised to find myself laughing through much of the offbeat workplace comedy _Office_Space_, the live-action directorial debut of those series' creator, Mike Judge.
 But this is nothing compared to the next circle that awaits Peter and his also-traffic-jammed friends Samir (Ajay Naidu) and Michael Bolton (David Herman) every single day as office dronces for the Initech Corporation. As we see Peter being harrassed by his numerous higher-ups about a memo regarding report cover sheets and Michael doing battle with the temperamental office fax and anyone who mentions a certain identically-named singer, Judge's point is abundantly clear: work sucks, as goes the film's tagline.
Judge's recreation of soul-deadening busy work is so painfully dead-on hilarious that it wouldn't really matter if there were much of a plot--and there really isn't much of one. Fed up with his unfulfilling, underappreciated efforts and his smarmy, condescending boss Bill Lumbergh (Gary Cole), Peter decides to rebel, and he and the about-to-be-laid-off Samir and Michael join forces in an elaborate scheme to fleece the corporation. While their scheming does pave the way for some very effective, very funny set pieces (one gangland-style "beating" is a showstopper), it doesn't have much of a payoff. In fact, perhaps _Office_Space_'s weakest element is its rather flat conclusion, which doesn't fulfill the buildup of what preceded it.
Nonetheless, Judge has come up with a wry, perceptive, always-amusing comedy, highlighted by some memorable characters, chief among them the gangsta-rap-loving Michael Bolton; the ever-unctuous Lumbergh; and Milton (Stephen Root), a perpetually stepped-on (or, rather, completely ignored) soft-spoken co-worker. But it's Livingston who holds the film together. Peter, while the main character, may not be the showiest role in the film, but Livingston's low-key, self-effacing attitude works in creating a likable character--and, in turn, an involving film.
Michael Dequina
<EMAIL_ADDRESS>|<EMAIL_ADDRESS>Mr. Brown's Movie Site: http://welcome.to/mrbrown
CompuServe Hollywood Hotline: http://www.HollywoodHotline.com
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


ClayHack is a mini hackathon designed to bring new students at RIT together for 6 hours of creativity and innovation. Form a team and start a project from nothing and transform it into greatness in only 6 hours. All new students no matter the skill level are encouraged to join us for a night of fun and programming!
What can you build in 6 hours?
A typical hackathon is a weekend where students have 24 hours to create something from nothing. It could be an app or a website or even a computer! The spirit of a hackathon is to foster a community of makers - no matter what the skill level.
In the spirit of a hackathon, everything's free.
Learn something new.
Join a community of makers.
Bring your imagination to life.


It’s the history, the space, the music, the drinks and the energy. Barzinho has been the standard for the nightlife in Ribamar and the forefront of life music in Ericeira for years. Opened 30 years ago, Barzinho has known how to grow organically with it’s surroundings and it’s people. Starting off as a tropical bar influenced by Afonso’s travels in Brazil, it has surely transformed itself as a home. A place where people can enjoy the later part of the day anyway they please be it singing and dancing with the crowd, playing a serious game of pool, listening to the soft melodies of the musicians or enjoying a quiet glass of wine in the outside area. Barzinho is prepared to welcome any kind of people. Nicely prepared cocktails or a mean pint of beer. A jazzy tune or a Rock Riff. Friendly staff will definitely show you the way. See you soon.
Hugo Negrelli Trio
O regresso do Tributo a Beatles ao Barzinho em Ribamar #FollowThePeakles
Na próxima Sexta-feira é Carnaval! O Barzinho vai estar aberto (obviamente) e bem disposto com um programa diferente para um dia diferente!
Para os primeiros a chegar vamos ter um brinde de Carnaval à espera. Até lá!
Rua de S. João, n.º 17 - Ribamar, Santo Isidoro
19:00 - 02:00 todos os dias excepto Terça-feira
<EMAIL_ADDRESS>968 717 337


Introduction
Now that you understood that the reason of why we call js objects "layers" is because we manipulate them as simple layers (even if they are complexe), let's have a look at the deepjs tools provided for those layers manipulations :
var src = { myVar:"hello" }; var target = { myBool:true }; deep.up(src, target); deep.log(target);
bottom with no collision
up with collision
bottom with collision
This is the main tool that let you apply a layer on top of another one.
deep.aup(src, target)
This method apply the "src" layer by the up side on the "target" layer.
Only the targeted layer is modified. And is now reflecting the merge of the 2 layers :
- the b property was overwritten with the "src" layer value. It is because the "src" layer was applied by the up side and so have the priority in case of collisions.
var obj1 = {
a:12,
b:true,
c:{
d:"hello"
}
};
var obj2 = {
b:false
}
deep.aup(obj2, obj1);
deep.log(obj1);
This method apply the "src" layer by the up side on the "target" layer.
Only the targeted layer is modified. And is now reflecting the merge of the 2 layers :
- the b property was overwritten with the "src" layer value. It is because the "src" layer was applied by the up side and so have the priority in case of collisions.
var obj1 = { a:12, b:true, c:{ d:"hello" } }; var obj2 = { b:false } deep.aup(obj2, obj1); deep.log(obj1);
deep.nodes(obj).up(layer)
This is the chained version of the up method.
var obj1 = {
a:12,
b:true,
c:{
d:"hello"
}
};
var obj2 = {
b:false
}
deep.nodes(obj1).up(obj2).log();
This is the chained version of the up method.
var obj1 = { a:12, b:true, c:{ d:"hello" } }; var obj2 = { b:false } deep.nodes(obj1).up(obj2).log();
Bottom
This is the main tool that let you apply a layer by the bottom side on another one.
deep.bottom(src, target)
This method apply the "src" layer by the bottom side on the "target" layer.
Only the targeted layer is modified. And is now reflecting the merge of the 2 layers :
- the b property was not overwritten with the "src" layer value. It is because the "src" layer was applied by the bottom side (so like a background) and so the "target" layer has the priority in case of collisions.
var obj1 = {
a:12,
b:true,
c:{
d:"hello"
}
};
var obj2 = {
b:false,
d:"world"
}
deep.bottom(obj2, obj1);
deep.log(obj1);
This method apply the "src" layer by the bottom side on the "target" layer.
Only the targeted layer is modified. And is now reflecting the merge of the 2 layers :
- the b property was not overwritten with the "src" layer value. It is because the "src" layer was applied by the bottom side (so like a background) and so the "target" layer has the priority in case of collisions.
var obj1 = { a:12, b:true, c:{ d:"hello" } }; var obj2 = { b:false, d:"world" } deep.bottom(obj2, obj1); deep.log(obj1);
deep.nodes(obj).bottom(layer)
This is the chained version of the bottom method.
var obj1 = {
a:12,
b:true,
c:{
d:"hello"
}
};
var obj2 = {
b:false,
d:"world"
}
deep.nodes(obj1).bottom(obj2).log();
This is the chained version of the bottom method.
var obj1 = { a:12, b:true, c:{ d:"hello" } }; var obj2 = { b:false, d:"world" } deep.nodes(obj1).bottom(obj2).log();
Collisions
Without any collision in the name of properties/methods of the two layers, the up and bottom operations are nothing more than : adding the properties of one layer to another (note that the final order of arguments is different if it's a up or a bottom). But what about if there are collisions?
primitives collisions
For primitives (integer, string, boolean) the default behaviour in case of collision is that the top layer overwrite the value with his own.
If you want a different behaviour than de default overwriting, you need to use a tool called a "collider". As it is a important part of the deepjs core, they have their own section : link to colliders
var obj1 = { a:12, b:true }; var obj2 = { a:"now a string", b:false } deep.nodes(obj1).up(obj2).log();
Array merging
The default behaviour in case of collisions is a little more complexe for arrays than primitives. They are not simply overwritten with the top layer values, they are merged.
If your arrays contains single values in it, it merge them. But it didn't duplicate "doublons"
var obj1 = { a:[12,"blue"] }; var obj2 = { a:["green", "blue", false] } deep.nodes(obj1).up(obj2).log();
But if your arrays contains objects, it looks for an "id" property so it can merge the data of each object present in the array.
You can see in the example that the "obj2" layer add a lastname to one of your array entry, and also add 2 single values in the array
var obj1 = { a:[{id:"1", firstname:"John"},{id:"2", firstname:"Chris"}] }; var obj2 = { a:[{id:"1", lastname:"Doe"}, "blue", 15] } deep.nodes(obj1).up(obj2).log();
If you want a different behaviour than de default array merging, you need to use a tool called a "collider". As it is a important part of the deepjs core, they have their own section : link to colliders
Functions compositions
the default behaviour in case of collision of two functions is that the top layer overwrite the function with his own.
var obj1 = { a:12, myMethod : function(){ deep.log("Hello"); } } var obj2 = { a:12, myMethod : function(){ deep.log("Goodbye"); } } deep.nodes(obj1).up(obj2); obj1.myMethod();
But of course you will want to compose and not overwrite some of your layers methods. There is a complete section dedicated to that : link to compostions
Compile
Compile is a tool that let you compile a set of layers in one operation. It returns the compiled object (so the layers that are present in the set are not modified).
deep.utils.compile(obj1, obj2, obj3, ...)
This method compiles the given layers in one layer.
The order of the arguments sets the priority in case of collisions.
It returns an object that is the result of the compiled layers
var obj1 = {
a:12,
b:true,
c:{
d:"hello"
}
};
var obj2 = {
b:false
};
var obj3 = {
e:function(){
deep.log("Hello");
}
};
var compiled = deep.utils.compile(obj1, obj2, obj3);
deep.log(compiled);
This method compiles the given layers in one layer.
The order of the arguments sets the priority in case of collisions.
It returns an object that is the result of the compiled layers
var obj1 = { a:12, b:true, c:{ d:"hello" } }; var obj2 = { b:false }; var obj3 = { e:function(){ deep.log("Hello"); } }; var compiled = deep.utils.compile(obj1, obj2, obj3); deep.log(compiled);
deep.compile(obj1, obj2, obj3, ....)
This is the chained version of the compile method.
var obj1 = {
a:12,
b:true,
c:{
d:"hello"
}
};
var obj2 = {
b:false
};
var obj3 = {
e:function(){
deep.log("Hello");
}
};
deep.compile(obj1, obj2, obj3).log();
This is the chained version of the compile method.
var obj1 = { a:12, b:true, c:{ d:"hello" } }; var obj2 = { b:false }; var obj3 = { e:function(){ deep.log("Hello"); } }; deep.compile(obj1, obj2, obj3).log();


I am a self-taught software developer and an interdisciplinary engineer in the fields of Electronics and AI/ML with a thought process to explore new skill sets and knowledge . With that saying, I love to solve real-world problems irrespective of the discipline.


Shitty Beer Bingo
Beer
Beer
Beer
Beer
Beer
Beer
Beer
Beer
Beer
Beer
Beer
Beer
Pabst Blue Ribbon
Beer
Beer
Beer
Beer
Beer
Beer
Beer
Beer
Beer
Beer
Beer
Beer
New Card


Use filters to narrow down your display and only see listings with specific characteristics.
All listings that do not match the chosen characteristics are hidden.
Click the Reset link, when available, to clear the filters
and view all listings in San Francisco.


HIPI - Hadoop Image Processing Framework
Overview
Getting Started
Documentation
Tools and Examples
Downloads
Contribute
About
Documentation
HIPI API Javadoc
This is the complete documentation of the HIPI API generated using javadoc. It contains all of the core classes that comprise the HIPI framework.


If you require any more information or have any questions about our privacy policy, please feel free to contact us by email at<EMAIL_ADDRESS>At http://homemaking.com/ we consider the privacy of our visitors to be extremely important. This privacy policy document describes in detail the types of personal information is collected and recorded by http://homemaking.com/ and how we use it.
Log Files
Like many other Web sites, http://homemaking.com/ makes use of log files. These files merely logs visitors to the site – usually a standard procedure for hosting companies and a part of hosting services’s analytics. The information inside the log files includes internet protocol (IP) addresses, browser type, Internet Service Provider (ISP), date/time stamp, referring/exit pages, and possibly the number of clicks. This information is used to analyze trends, administer the site, track user’s movement around the site, and gather demographic information. IP addresses, and other such information are not linked to any information that is personally identifiable.
Cookies and Web Beacons
http://homemaking.com/ uses cookies to store information about visitors’ preferences, to record user-specific information on which pages the site visitor accesses or visits, and to personalize or customize our web page content based upon visitors’ browser type or other information that the visitor sends via their browser.
DoubleClick DART Cookie
→ Google, as a third party vendor, uses cookies to serve ads on http://homemaking.com/.
→ Google’s use of the DART cookie enables it to serve ads to our site’s visitors based upon their visit to http://homemaking.com/ and other sites on the Internet.
→ Users may opt out of the use of the DART cookie by visiting the Google ad and content network privacy policy at the following URL – http://www.google.com/privacy_ads.html
Our Advertising Partners
Some of our advertising partners may use cookies and web beacons on our site. Our advertising partners include …….
- Amazon
- Clickbank
- DoubleClick
- Facebook Audience Network
While each of these advertising partners has their own Privacy Policy for their site, an updated and hyperlinked resource is maintained here: Privacy Policies.
You may consult this listing to find the privacy policy for each of the advertising partners of http://homemaking.com/.
These third-party ad servers or ad networks use technology in their respective advertisements and links that appear on http://homemaking.com/ and which are sent directly to your browser. They automatically receive your IP address when this occurs. Other technologies (such as cookies, JavaScript, or Web Beacons) may also be used by our site’s third-party ad networks to measure the effectiveness of their advertising campaigns and/or to personalize the advertising content that you see on the site.
http://homemaking.com/ has no access to or control over these cookies that are used by third-party advertisers.
Third Party Privacy Policies
You should consult the respective privacy policies of these third-party ad servers for more detailed information on their practices as well as for instructions about how to opt-out of certain practices. http://homemaking.com/’s privacy policy does not apply to, and we cannot control the activities of, such other advertisers or web sites. You may find a comprehensive listing of these privacy policies and their links here: Privacy Policy Links.
If you wish to disable cookies, you may do so through your individual browser options. More detailed information about cookie management with specific web browsers can be found at the browsers’ respective websites. What Are Cookies?
Children’s Information
We believe it is important to provide added protection for children online. We encourage parents and guardians to spend time online with their children to observe, participate in and/or monitor and guide their online activity.
http://homemaking.com/ does not knowingly collect any personally identifiable information from children under the age of 13. If a parent or guardian believes that http://homemaking.com/ has in its database the personally-identifiable information of a child under the age of 13, please contact us immediately (using the contact in the first paragraph) and we will use our best efforts to promptly remove such information from our records.
Online Privacy Policy Only
This privacy policy applies only to our online activities and is valid for visitors to our website and regarding information shared and/or collected there.
This policy does not apply to any information collected offline or via channels other than this website.
Consent
By using our website, you hereby consent to our privacy policy and agree to its terms.
Update
This Privacy Policy was last updated on: Wednesday, November 15th, 2017.
Should we update, amend or make any changes to our privacy policy, those changes will be posted here.


--- layout: default title: Home --- Subscribe
Subscribe to receive an email when we add new obituaries to our website. Your email will not be used for any other purpose and will not be shared. You may unsubscribe at any time.


Formera React is a formera encapsulator for React.
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
The only dependency is that you are in a project using React.
npm install --save formera-form@latest formera-form-react@latest
The full documentation can be found at formera-form-react.
See also the list of contributors who participated in this project.
This project is licensed under the MIT License - see the LICENSE.md file for details
Generated using TypeDoc


libPoMo.vcf¶
This module provides functions to read, write and access vcf files.
Objects¶
- Classes:
- Exception Classes:
- Functions:
update_base()
, read a line into a baseget_nuc_base_from_line()
, create a new NucBase from a linecheck_fixed_field_header()
, check a VCF fixed field header stringget_indiv_from_field_header()
, extract list of individuals from headerinit_seq()
, open VCF file and initialize VCFStreamopen_seq()
, open VCF file and save it to a VCFSeqget_header_line_string()
, print vcf header line
-
exception
libPoMo.vcf.
NotANucBaseError
[source]¶ Exception raised if given nucleotide base is not valid.
-
exception
libPoMo.vcf.
NotAVariantCallFormatFileError
[source]¶ Exception raised if given VCF file is not valid.
-
class
libPoMo.vcf.
NucBase
[source]¶ Stores a nucleotide base.
FIXME: Bases are split by ‘/’. They should also be split by ‘|’.
A class that stores a single nucleotide base and related information retrieved from a VCF file. Please see http://www.1000genomes.org/ for a detailed description of the vcf format.
Variables: - chrom (str) – Chromosome name.
- pos (int) – 1-based position on the chromosome.
- id (str) – ID.
- ref (str) – Reference base.
- alt (str) – Alternative base(s).
- qual (str) – Quality.
- filter (str) – Filter.
- info (str) – Additional information.
- format (str) – String with format specification.
- speciesData ([str]) – List with strings of the species data (e.g. 0/1:...).
- ploidy (int) – Ploidy (number of sets of chromosomes) of the
sequenced individuals. Can be set with
set_ploidy()
.
-
get_base_ind
(iI, iC)[source]¶ Return the base of a specific individual.
Parameters: - indiv (int) – 0-based index of individual.
- chrom (int) – 0-based index of chromosome (for n-ploid individuals).
Return type: character with nucleotide base.
-
get_speciesData
()[source]¶ Return species data as a list.
data[0][0] = data of first species/individual on chromatide A
- data[0][1] = only set for non-haploids; data of first
species/individual on chromatide B
Sets data[i][j] to None if the base of individual i on chromosome j could not be read (e.g. it is not valid).
Return type: matrix of integers
-
class
libPoMo.vcf.
VCFSeq
[source]¶ Store data retrieved from a VCF file.
Initialized with
open_seq()
.Variables: -
get_header_line_string
(indiv)[source]¶ Return a standard VCF File header string with individuals indiv.
-
-
class
libPoMo.vcf.
VCFStream
(seqName, vcfFileObject, speciesList, firstBase)[source]¶ Store base data from a VCF file line per line.
It can be initialized with
init_seq()
. This class stores a single base retrieved from a VCF file and the file itself. It is used to parse through a VCF file line by line processing the bases without having to read the whole file at one.Parameters: Variables: - name (str) – Name of the stream.
- fo (fo) – Stored VCF file object.
- speciesL ([str]) – List with species / individuals.
- nSpecies (int) – Number of species / individuals.
- base (NusBase) – Stored
NucBase
.
-
libPoMo.vcf.
check_fixed_field_header
(ln)[source]¶ Check if the given line ln is the header of the fixed fields.
Sample header line:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SpeciesL
-
libPoMo.vcf.
get_header_line_string
(indiv)[source]¶ Return a standard VCF File header string with individuals indiv.
-
libPoMo.vcf.
get_indiv_from_field_header
(ln)[source]¶ Return species from a fixed field header line ln.
Sample header line:
#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SpeciesL
-
libPoMo.vcf.
get_nuc_base_from_line
(ln, info=False, ploidy=None)[source]¶ Retrieve base data from a VCF file line ln.
Split a given VCF file line and returns a NucBase object. If info is set to False, only #CHROM, POS, REF, ALT and speciesData will be read.
Parameters: - info (Bool) – Determines if info is retrieved from ln.
- ploidy (int) – If ploidy is known and given, it is set.
-
libPoMo.vcf.
init_seq
(VCFFileName, maxskip=100, name=None)[source]¶ Open a (gzipped) VCF4.1 file.
Try to open the given VCF file, checks if it is in VCF format. Initialize a
VCFStream
object that contains the first base.Please close the associated file object with
VCFStream.close()
when you don’t need it anymore.Parameters: - VCFFileName (str) – Name of the VCF file.
- maxskip (int) – Only look maxskip lines for the start of the bases (defaults to 80).
- name (str) – Set the name of the sequence to name, otherwise set it to the filename.
-
libPoMo.vcf.
open_seq
(VCFFileName, maxskip=100, name=None)[source]¶ Open a VCF4.1 file.
Try to open the given VCF file, checks if it is in VCF format and reads the bases(s). It returns an
VCFSeq
object that contains all the information.Parameters: - VCFFileName (str) – Name of the VCF file.
- maxskip (int) – Only look maxskip lines for the start of the bases (defaults to 80).
- name (str) – Set the name of the sequence to name, otherwise set it to the filename.


Owners
Note: only unassigned owners can be deleted
Owner ID
Owner Name
Owner Email
Owner Phone Number
Update
Delete
Delete
Add Garden Owner


SEPTEMBER
N28 Wine & Cheese Night Light "And with the end of Summer, the harvest draws near..." Previous Month Next Month


| Kenya(https://www.cdc.gov/malaria/images/map/Kenya_3.24_updatedrec.jpg) |
Present in all areas (including game parks) at altitudes below 2,500 m (8,202ft). including the city of Nairobi. |
Moderate |
Chloroquine |
P. falciparum >85% P. vivax 5-10% P. ovale rare |
Atovaquone-proguanil, doxycycline, or mefloquine |
1) City(ies) of travel
2) Altitude of city(ies) of travel Altitude information for Kenya |


Pub Of The Week: Tony Leonard reviews the Grand Hotel, Richmond
by pub of the weekGrand Hotel
333 Burnley Street, Richmond.
9429 2530
When? November 22, 2019.
www.grandrichmond.com.au
VENUE:
The Grand Hotel Richmond, on (always congested) Burnley St., has established itself as one of the 5 most bankable pubs in Melbourne, a reputation that has grown for at least 15years, maybe longer.
Indeed it was the DeBortoli pub of the year in 2009, and in the following ten years since the last visit, some changes have been made at the rear of the public bar, renamed Piccolo Grand, serving only to enhance the overall offer, while reinforcing its Italian inspired pub grub.
The much loved dining room remains intact, separated by heavy curtains from the front bar, and looks as great as ever. Today’s focus however is the public/garden area and there is some very good dining and socialising to be had there.
A separate entrance has been introduced, so it’s down a small pathway from Burnley – italian images painted colourfully on the walls – where you are greeted by an outstanding compact “L” shaped beer garden. Either take block there, or head inside to a renovated back bar – exposed kitchen with massive pizza machine – and sit comfortably while perusing the menu.
This area really is split into halves, with the front half operating later in the day. The kitchen is a hive of activity as the staff worked the floor with a professional efficiency.
There is an exceptional lunchtime bargain of $12 woodfired pizzas. Also you can a DIY of meats/cheeses/vegetables of antipasti platters (from $20), and included is some good old fashioned pub classics.
The beer garden was near enough full, and in spite of continual tales of economic gloom, the Supertramp record “Crisis? What Crisis? seemed to be the theme running through my head.
People enjoying themselves at a ripper pub: It might catch on.
FOOD:
The dining room menu really amps it up but the food and drink in the bar is. Pizza is provided in two bases – Rosse (tomato), Bianchi (White) and averages out around $22.  Lunchtime, each workday, they sell for $12. No shortcuts. Any wonder they were doing a roaring business.
Parmigiana is $25, Lasagna $24, and Wagyu Rump Cap (John Dee), 300g with fires is $32. Good mix of pizza and favorites.
Tried was;
- Antipasti plate w/ rosemary and sea salt pizza bread. 3 ingredients – $26. Chosen was Salami finnochiana, duck prosciutto, buffalo mozzarella. Accompanied by a slab of pizza bread, a delightful mix of meat and cheese – the Duck with strong aniseed flavour a standout – was a perfect pick and mix, easily feeds 4.
- Fish of the day. $29. Crisp skinned Barramundi, with a salad of chicory/radicchio, excellent vinaigrette made for the right main on a very warm day. Under $30 for this quality is a bargain anywhere.
DRINK:
No Carlton D, but 4 Craft taps with the pride of Richmond Mountain Goat Steam the most prominent. Loved the Pale Ale “3 Sheets” from the Lord Nelson Brewery ($7/pot). Very, very good.
The wine list promotes an excellent mix of local and italian in styles not so commonplace. Trust the artisans in the King Valley to bring something different; Range Life Garganega (12.5/glass) – a refreshing, white, that I had never heard of before. The list is interesting; You will see different. $12pg/$60/btle is the mark..
MUSIC LEVELS:
Very Good. Steely Dan the mainstay of the tunes played. Right level, blending in with the din of the room. 9/10.
SERVICE:
Absolute sucker for the free taster. Got it with the wine. Glassware was looked after, the service/engagement of the staff made for a very pleasant lunchtime experience.
SOMETHING DIFFERENT:
Love a side/sneaky entrance. It’s not as simple as walking in from the main street. Up the alley, beer garden of a unique shape, giant pizza machine just staring you in the face inside. It is a good look.
SUMMARY:
The Grand is much lauded. Awards aplenty, signature dish (Vincisgrassi) that cannot be removed, a look and feel to please everyone with the offer pitched at all budgets.
I suffer badly from pub envy. The Grand is the pub you want to be within walking distance from your home, where you can stand around the bar/ take a seat, and talk about the same things ad nauseam, the only difference being you know you are in something special.
One of the keys to success is stability in ownership and those in charge now have been there for over a decade. Establish a standard, hold your nerve, continue to deliver, and repeat business ensues. They do it well.
The Grand in Richmond is a wonderful example of how great Melbourne pubs are.
SCORE: 15.5/20


Spark Document
|
A "Document Action" is a Spark Action that allows opening a Folder or a Document with default Application or with a specified Application. You can also create an Action that opens selected files in the Finder with a specified application.
If you want open a Folder or a document with its default application, just select "Open" in the Action Menu.
If you want to force an application for open a file, you can select "Open With…". When you choose a document, the menu "With Application" is filled
with the applications that can open this document. If the Application you want is not in the menu, you can add it by selecting the "Choose…" item in this menu.


-
StatusDisconnected
-
Registered IDUnregistered
-
Status
-
Mode
-
SSID
-
Channel
-
DHCP Server
-
Wireless MAC
-
IP Address
- Easy Setup
-
Status
-
Model


Registration for 2015 Jenkins User Conferences is closed!
This year, JUC will be a two-day event in three of the four cities. You will have more chances to meet and network with Jenkins users and developers around the world. You can learn a lot more about the JUC World Tour here.


Don’t want others to make the mistakes I made as youngster, says Virat Kohli
India skipper Virat Kohli said he wanted Mayank Agarwal to remain focussed and go on to make a huge score in the 1st Test vs Bangladesh, saying he knows the importance of getting big scores in the first few matches of one's career.
by Sports DeskIndia skipper Virat Kohli said he wanted Mayank Agarwal to remain focussed and go on to make a huge score in the 1st Test vs Bangladesh, which India won by an innings and 130 runs in Indore on Saturday.
Kohli and Agarwal exchanged signals after the India opener – whose 243 helped the hosts pile on a mountain of runs in their only innings – reached his century and his double century.
“I know the importance of getting big scores, I took a lot of time so I wanted him to score big. So as a senior batsman I wanted to make sure that he stayed focused. I don’t want the guys to make the same mistakes that I made,” Kohli said after the match ended on Day 3 on Saturday.
Also Read | After scoring 200, Virat Kohli sets Mayank Agarwal new challenge
Mayank Agarwal lost his wicket in the Tea session of Day 2, with India looking to hit expansive shots in the last session of the day. Agarwal’s 243 was his second double ton in Test cricket.
“The numbers and records are there for everyone to see, that’ll remain in the books, we haven’t focused on it. We’re looking at keeping the standards up, motivating the next lot of players. In that process, we’re pushing up the standard of Indian cricket. We don’t care about numbers at all as a team,” Kohli added.
Also Read | India blow away Bangladesh inside 3 days to win first Test
Kohli also lauded the pace bowling attack at his disposal. “These fast bowlers are at the top of their game. When they bowl, any pitch looks like a good pitch. Jasprit Bumrah is not a part of the attack now, when he comes back, it will be one heck of an attack to counter,” he said.
Mayank Agarwal, speaking after the match, said, “It’s great to have somebody who motivates you. When I got my first 150, Kohli was at the non-striker’s end and he said ‘nothing short of 200 for you next’.”
Also Read | Mayank Agarwal 2.00
The two teams will meet in the 2nd Test in Kolkata from November 22, which will be the first Day/Night Test to be played on Indian soil.


I am
Andrea Jaba
🎓 BS Computer Science, MIT (Cambridge, MA) class of 2020
📚 With experience in full-stack development, security, machine learning, data science, data visualization
🌱 Open to learning all things computer science
👩💻 Interned with NCSOFT (South Korea), Computime (Hong Kong)
🔎 Looking for work-from-home internship opportunities
📍 Philippines 🇵🇭


☰
☰
596071
Account
-
Settings
Profile
Settings
Projects
42
Logout
Dashboard
NEW
Stakeholder
Register
CSR Budget
Application Form
Report
Report1
Report2
Account
Profile
Setting
Admin
User Management
Search
Add
Role Management
Search
Add
System
Setting
Home
CSR Budget
Application Form
Application Form
1
Applicant Detail
2
Project Detail
3
Contact Detail
4
Status
5
Finish
1
2
3
First
Previous
Last
Next
Finish


We have outfits for the whole family!
Floral prints and pastel colors pair really nicely with a denim pant or skirt and a brown sandal. This color scheme compliments the scenery perfectly as flowers bloom and animals are born. Spring is a time of freshness and new beginnings, so start your season off right wearing one of these outfits.
Try these outfits on the whole family and book a family photo shoot!
2019 Spring Trend of the Year: Gladiator Sandals


This is a minimal document.
It contains only paragraphs with no formating, no block types, and no atoms or cards.


| Name | Description | Operations | Actions |
|---|---|---|---|
| {{ service.name }} | {{ service.description }} | {{ service.operations.count }} | Edit Delete |
{% extends 'base.html' %} {% block content %}
| Name | Description | Operations | Actions |
|---|---|---|---|
| {{ service.name }} | {{ service.description }} | {{ service.operations.count }} | Edit Delete |


CrimPapers
Articles published on 30 September 2017
On 30 September 2017, 5 new articles were published in 5 journals.
State Aid and Taxation of Transnational Companies: A Study of State-Corporate Crime
Mediating the Bullying Victimization–delinquency Relationship With Anger and Cognitive Impulsivity: A Test of General Strain and Criminal Lifestyle Theories
Intervening in A “Sketchy Situation”: Exploring the Moral Motivations of College Bystanders of Sexual Assault by Samuel C. Gable, Sharon Lamb, Madeline Brodt, Leah Atwell
Socialization, Selection, Or Both? the Role of Gene–environment Interplay in the Association Between Exposure to Antisocial Peers and Delinquency
Competing For Constituents: Trends in Terrorist Service Provision by William A. Wagstaff, Danielle F. Jung


Feature request: display track number
-
Fraser
I love synergy. I'm also really sorry to hear that you're having problems with piracy. It's kind of saddening when you think about it.
As it stands now the application is perfect for what i use it for. I've got the floater as small as it will go and set to always display. I just leave it down in the corner.
I'd like to be able to see the track number so that i can start thinking of an album to play next as the current one comes to an end. This little addition would free me from having to look to itunes for this information and make a great improvment to my synergy experience.
Thanks.
Keep up the good work!
Reply
This topic is now closed.


Video: Barcelona summer signing Frenkie de Jong shows INCREDIBLE pace in training
by Lucien SilverbergBarcelona new-boy Frenkie de Jong may not be known for his blistering pace, but he’s caught the eye in the video clip below.
Watch as the Netherlands international sprints rapidly past even Ousmane Dembele in training, showing yet another string to his bow.
De Jong first caught the eye at Ajax and has looked a quality signing so far for Barcelona.
Barcelona are back in action this weekend with an away game against Leganes in La Liga.


Basic AppCache test. The manifest for this page is specified in the appcached_cross_origin_resource.manifest file. The title of the page is set to AppCache updated if the cache is successfully updated.


RFCharacterSetSpecification
public class RFCharacterSetSpecification : RFSpecification
Check if a string has no illegal characters.
-
Undocumented
Declaration
Swift
public init(characterSet: CharacterSet)
-
Undocumented
Declaration
Swift
public static func charactersInString(_ charactersInString: String) -> RFCharacterSetSpecification
-
Check if all characters are contained in the characterset.
Declaration
Swift
public func isSatisfiedBy(_ candidate: Any?) -> Bool
Parameters
candidate
The object to be checked.
Return Value
true
if the candidate object is a string and all its characters are legal,false
otherwise.
-
Undocumented
Declaration
Swift
public static var alphanumerics: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var capitalizedLetters: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var controlCharacters: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var decimalDigits: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var decomposables: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var illegalCharacters: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var letters: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var lowercaseLetters: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var newlines: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var nonBaseCharacters: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var punctuationCharacters: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var symbols: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var uppercaseLetters: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var urlFragmentAllowed: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var urlHostAllowed: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var urlPasswordAllowed: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var urlPathAllowed: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var urlQueryAllowed: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var urlUserAllowed: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var whitespaces: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static var whitespacesAndNewlines: RFCharacterSetSpecification { get }
-
Undocumented
Declaration
Swift
public static func alphanumericCharacterSet() -> RFCharacterSetSpecification
-
Undocumented
Declaration
Swift
public static func capitalizedLetterCharacterSet() -> RFCharacterSetSpecification
-
Undocumented
Declaration
Swift
public static func controlCharacterSet() -> RFCharacterSetSpecification
-
Undocumented
Declaration
Swift
public static func decimalDigitCharacterSet() -> RFCharacterSetSpecification
-
Undocumented
Declaration
Swift
public static func decomposableCharacterSet() -> RFCharacterSetSpecification
-
Undocumented
Declaration
Swift
public static func illegalCharacterSet() -> RFCharacterSetSpecification
-
Undocumented
Declaration
Swift
public static func lowercaseLetterCharacterSet() -> RFCharacterSetSpecification
-
Undocumented
Declaration
Swift
public static func newlineCharacterSet() -> RFCharacterSetSpecification
-
Undocumented
Declaration
Swift
public static func nonBaseCharacterSet() -> RFCharacterSetSpecification
-
Undocumented
Declaration
Swift
public static func punctuationCharacterSet() -> RFCharacterSetSpecification
-
Undocumented
Declaration
Swift
public static func symbolCharacterSet() -> RFCharacterSetSpecification
-
Undocumented
Declaration
Swift
public static func uppercaseLetterCharacterSet() -> RFCharacterSetSpecification
-
Undocumented
Declaration
Swift
public static func whitespaceCharacterSet() -> RFCharacterSetSpecification
-
Undocumented
Declaration
Swift
public static func whitespaceAndNewlineCharacterSet() -> RFCharacterSetSpecification


|
robot_interfaces
|
Wrapper for RobotDriver that monitors timing. More...
#include <monitored_robot_driver.hpp>
Public Types | |
| typedef std::shared_ptr< Driver > | RobotDriverPtr |
| Public Types inherited from robot_interfaces::RobotDriver< Driver::Action, Driver::Observation > | |
| typedef Driver::Action | Action |
| typedef Driver::Observation | Observation |
Public Member Functions | |
| MonitoredRobotDriver (RobotDriverPtr robot_driver, const double max_action_duration_s, const double max_inter_action_duration_s) | |
| Starts a thread for monitoring timing of action execution. More... | |
| ~MonitoredRobotDriver () | |
| Shuts down the robot and stops the monitoring thread. | |
| virtual Driver::Action | apply_action (const typename Driver::Action &desired_action) final |
| Apply desired action on the robot. More... | |
| virtual void | initialize () |
| Initialize the robot. More... | |
| virtual Driver::Observation | get_latest_observation () |
| Return the latest observation immediately. More... | |
| virtual std::string | get_error () |
| Get error message if there is any error.  More... | |
| Public Member Functions inherited from robot_interfaces::RobotDriver< Driver::Action, Driver::Observation > | |
| virtual Action | apply_action (const Action &desired_action)=0 |
| Apply action immediately and block until it is executed. More... | |
Private Member Functions | |
| void | loop () |
| Monitor the timing of action execution. More... | |
Static Private Member Functions | |
| static void * | loop (void *instance_pointer) |
Private Attributes | |
| RobotDriverPtr | robot_driver_ |
| The actual robot driver. | |
| double | max_action_duration_s_ |
| Max. time for executing an action. | |
| double | max_inter_action_duration_s_ |
| Max. idle time between actions. | |
| std::atomic< bool > | is_shutdown_ |
| Whether shutdown was initiated. | |
| time_series::TimeSeries< bool > | action_start_logger_ |
| time_series::TimeSeries< bool > | action_end_logger_ |
| std::shared_ptr< real_time_tools::RealTimeThread > | thread_ |
| real_time_tools::SingletypeThreadsafeObject< std::string, 1 > | error_message_ |
Wrapper for RobotDriver that monitors timing.
Takes a RobotDriver instance as input and forwards all method calls to it. A background loop monitors timing of actions to ensure the following constraints:
max_action_duration_s_
seconds.apply_action()
) does not exceed max_inter_action_duration_s_
.If these timing constraints are not satisfied, the robot will be shutdown, and no more actions from the outside will be accepted.
This wrapper also makes sure that the shutdown()
method of the given RobotDriver is called when wrapper is destroyed, so the robot should always be left in a safe state.
| Action | |
| Observation |
|
inline |
Starts a thread for monitoring timing of action execution.
| robot_driver | The actual robot driver instance. |
| max_action_duration_s | Maximum time allowed for an action to be executed. |
| max_inter_action_duration_s | Maximum time allowed between end of the previous action and receival of the next one. |
|
inlinefinalvirtual |
Apply desired action on the robot.
If the robot is shut down, no more actions will be applied (the method will just ignore them silently.
| desired_action | The desired action. |
|
inlinevirtual |
Get error message if there is any error.
Implements robot_interfaces::RobotDriver< Driver::Action, Driver::Observation >.
|
inlinevirtual |
Return the latest observation immediately.
Implements robot_interfaces::RobotDriver< Driver::Action, Driver::Observation >.
|
inlinevirtual |
Initialize the robot.
Any initialization procedures that need to be done before sending actions to the robot should be done in this method (e.g. homing to find the absolute position).
Implements robot_interfaces::RobotDriver< Driver::Action, Driver::Observation >.
|
inlineprivate |
Monitor the timing of action execution.

After shutdown, actions sent by the user are ignored.
Implements robot_interfaces::RobotDriver< Driver::Action, Driver::Observation >.


A port of log4js to node.js
Many people have helped make log4js what it is today. Here’s a list of everyone who has contributed to the code. There are lots of people who’ve helped by submitting bug reports or pull requests that I haven’t merged, but I have used their ideas to implement a different way. Thanks to you all. This library also owes a huge amount to the original log4js project. If you’d like to help out, take a look at the contributor guidelines.


Realm
public final class Realm
extension Realm: Equatable
A Realm
instance (also referred to as “a Realm”) represents a Realm database.
Realms can either be stored on disk (see init(path:)
) or in memory (see Configuration
).
Realm
instances are cached internally, and constructing equivalent Realm
objects (for example, by using the same
path or identifier) produces limited overhead.
If you specifically want to ensure a Realm
instance is destroyed (for example, if you wish to open a Realm, check
some property, and then possibly delete the Realm file and re-open it), place the code which uses the Realm within an
autoreleasepool {}
and ensure you have no other strong references to it.
Warning
Realm
instances are not thread safe and cannot be shared across threads or dispatch queues. You must
construct a new instance for each thread in which a Realm will be accessed. For dispatch queues, this means
that you must construct a new instance in each block which is dispatched, as a queue is not guaranteed to
run all of its blocks on the same thread.
-
The
Configuration
value that was used to create theRealm
instance.Declaration
Swift
public var configuration: Configuration { get }
-
Indicates if the Realm contains any objects.
Declaration
Swift
public var isEmpty: Bool { get }
-
Obtains an instance of the default Realm.
The default Realm is persisted as default.realm under the Documents directory of your Application on iOS, and in your application’s Application Support directory on OS X.
The default Realm is created using the default
Configuration
, which can be changed by setting theRealm.Configuration.defaultConfiguration
property to a new value.Throws
AnNSError
if the Realm could not be initialized.Declaration
Swift
public convenience init() throws
-
Obtains a
Realm
instance with the given configuration.Throws
An
NSError
if the Realm could not be initialized.Declaration
Swift
public convenience init(configuration: Configuration) throws
Parameters
configuration
A configuration value to use when creating the Realm.
-
Obtains a
Realm
instance persisted at a specified file URL.Throws
An
NSError
if the Realm could not be initialized.Declaration
Swift
public convenience init(fileURL: URL) throws
Parameters
fileURL
The local URL of the file the Realm should be saved at.
-
Asynchronously open a Realm and deliver it to a block on the given queue.
Opening a Realm asynchronously will perform all work needed to get the Realm to a usable state (such as running potentially time-consuming migrations) on a background thread before dispatching to the given queue. In addition, synchronized Realms wait for all remote content available at the time the operation began to be downloaded and available locally.
Note
The returned Realm is confined to the thread on which it was created. Because GCD does not guarantee that queues will always use the same thread, accessing the returned Realm outside the callback block (even if accessed from
callbackQueue
) is unsafe.Declaration
Swift
public static func asyncOpen(configuration: Realm.Configuration = .defaultConfiguration, callbackQueue: DispatchQueue = .main, callback: @escaping (Realm?, Swift.Error?) -> Void)
Parameters
configuration
A configuration object to use when opening the Realm.
callbackQueue
The dispatch queue on which the callback should be run.
callback
A callback block. If the Realm was successfully opened, an it will be passed in as an argument. Otherwise, a
Swift.Error
describing what went wrong will be passed to the block instead.
-
Performs actions contained within the given block inside a write transaction.
If the block throws an error, the transaction will be canceled and any changes made before the error will be rolled back.
Only one write transaction can be open at a time for each Realm file. Write transactions cannot be nested, and trying to begin a write transaction on a Realm which is already in a write transaction will throw an exception. Calls to
write
fromRealm
instances for the same Realm file in other threads or other processes will block until the current write transaction completes or is cancelled.Before beginning the write transaction,
write
updates theRealm
instance to the latest Realm version, as ifrefresh()
had been called, and generates notifications if applicable. This has no effect if the Realm was already up to date.Throws
An
NSError
if the transaction could not be completed successfully. Ifblock
throws, the function throws the propagatedErrorType
instead.Declaration
Swift
public func write(_ block: (() throws -> Void)) throws
Parameters
block
The block containing actions to perform.
-
Begins a write transaction on the Realm.
Only one write transaction can be open at a time for each Realm file. Write transactions cannot be nested, and trying to begin a write transaction on a Realm which is already in a write transaction will throw an exception. Calls to
beginWrite
fromRealm
instances for the same Realm file in other threads or other processes will block until the current write transaction completes or is cancelled.Before beginning the write transaction,
beginWrite
updates theRealm
instance to the latest Realm version, as ifrefresh()
had been called, and generates notifications if applicable. This has no effect if the Realm was already up to date.It is rarely a good idea to have write transactions span multiple cycles of the run loop, but if you do wish to do so you will need to ensure that the Realm participating in the write transaction is kept alive until the write transaction is committed.
Declaration
Swift
public func beginWrite()
-
Commits all write operations in the current write transaction, and ends the transaction.
After saving the changes and completing the write transaction, all notification blocks registered on this specific
Realm
instance are called synchronously. Notification blocks forRealm
instances on other threads and blocks registered for any Realm collection (including those on the current thread) are scheduled to be called synchronously.You can skip notifiying specific notification blocks about the changes made in this write transaction by passing in their associated notification tokens. This is primarily useful when the write transaction is saving changes already made in the UI and you do not want to have the notification block attempt to re-apply the same changes.
The tokens passed to this function must be for notifications for this Realm which were added on the same thread as the write transaction is being performed on. Notifications for different threads cannot be skipped using this method.
Warning
This method may only be called during a write transaction.
Throws
An
NSError
if the transaction could not be written due to running out of disk space or other i/o errors.Declaration
Swift
public func commitWrite(withoutNotifying tokens: [NotificationToken] = []) throws
-
Reverts all writes made in the current write transaction and ends the transaction.
This rolls back all objects in the Realm to the state they were in at the beginning of the write transaction, and then ends the transaction.
This restores the data for deleted objects, but does not revive invalidated object instances. Any
Object
s which were added to the Realm will be invalidated rather than becoming unmanaged.Given the following code:
let oldObject = objects(ObjectType).first! let newObject = ObjectType() realm.beginWrite() realm.add(newObject) realm.delete(oldObject) realm.cancelWrite()
Both
oldObject
andnewObject
will returntrue
forisInvalidated
, but re-running the query which providedoldObject
will once again return the valid object.KVO observers on any objects which were modified during the transaction will be notified about the change back to their initial values, but no other notifcations are produced by a cancelled write transaction.
Warning
This method may only be called during a write transaction.Declaration
Swift
public func cancelWrite()
-
Indicates whether the Realm is currently in a write transaction.
Warning
Do not simply check this property and then start a write transaction whenever an object needs to be created, updated, or removed.  Instead, always prefer performing multiple updates during a single transaction.Declaration
Swift
public var isInWriteTransaction: Bool { get }
-
Adds or updates an existing object into the Realm.
Only pass
true
toupdate
if the object has a primary key. If no object exists in the Realm with the same primary key value, the object is inserted. Otherwise, the existing object is updated with any changed values.When added, all child relationships referenced by this object will also be added to the Realm if they are not already in it. If the object or any related objects are already being managed by a different Realm an error will be thrown. Instead, use one of the
create
functions to insert a copy of a managed object into a different Realm.The object to be added must be valid and cannot have been previously deleted from a Realm (i.e.
isInvalidated
must befalse
).Declaration
Swift
public func add(_ object: Object, update: Bool = false)
Parameters
object
The object to be added to this Realm.
update
If
true
, the Realm will try to find an existing copy of the object (with the same primary key), and update it. Otherwise, the object will be added. -
Adds or updates all the objects in a collection into the Realm.
See
Warning
This method may only be called during a write transaction.
Declaration
Swift
public func add<S>(_ objects: S, update: Bool = false) where S : Sequence, S.Element : Object
Parameters
objects
A sequence which contains objects to be added to the Realm.
update
If
true
, objects that are already in the Realm will be updated instead of added anew. -
Creates or updates a Realm object with a given value, adding it to the Realm and returning it.
You may only pass
true
toupdate
if the object has a primary key. If no object exists in the Realm with the same primary key value, the object is inserted. Otherwise, the existing object is updated with any changed values.The
value
argument can be a Realm object, a key-value coding compliant object, an array or dictionary returned from the methods inNSJSONSerialization
, or anArray
containing one element for each managed property. Do not pass in aLinkingObjects
instance, either by itself or as a member of a collection.If the object is being created, all required properties that were not defined with default values must be given initial values through the
value
argument. Otherwise, an Objective-C exception will be thrown.If the object is being updated, all properties defined in its schema will be set by copying from
value
using key-value coding. If thevalue
argument does not respond tovalue(forKey:)
for a given property name (or getter name, if defined), that value will remain untouched. Nullable properties on the object can be set to nil by usingNSNull
as the updated value, or (if you are passing in an instance of anObject
subclass) setting the corresponding property onvalue
to nil.If the
value
argument is an array, all properties must be present, valid and in the same order as the properties defined in the model.Warning
This method may only be called during a write transaction.
Declaration
Swift
@discardableResult public func create<T>(_ type: T.Type, value: Any = [:], update: Bool = false) -> T where T : Object
Parameters
type
The type of the object to create.
value
The value used to populate the object.
update
If
true
, the Realm will try to find an existing copy of the object (with the same primary key), and update it. Otherwise, the object will be added.Return Value
The newly created object.
-
Deletes an object from the Realm. Once the object is deleted it is considered invalidated.
Warning
This method may only be called during a write transaction.
Declaration
Swift
public func delete(_ object: Object)
Parameters
object
The object to be deleted.
-
Deletes zero or more objects from the Realm.
Do not pass in a slice to a
Results
or any other auto-updating Realm collection type (for example, the type returned by the Swiftsuffix(_:)
standard library method). Instead, make a copy of the objects to delete usingArray()
, and pass that instead. Directly passing in a view into an auto-updating collection may result in ‘index out of bounds’ exceptions being thrown.Warning
This method may only be called during a write transaction.
Declaration
Swift
public func delete<S>(_ objects: S) where S : Sequence, S.Element : Object
Parameters
objects
The objects to be deleted. This can be a
List<Object>
,Results<Object>
, or any other SwiftSequence
whose elements areObject
s (subject to the caveats above). -
Deletes all objects from the Realm.
Warning
This method may only be called during a write transaction.Declaration
Swift
public func deleteAll()
-
Returns all objects of the given type stored in the Realm.
Declaration
Parameters
type
The type of the objects to be returned.
Return Value
A
Results
containing the objects. -
Retrieves the single instance of a given object type with the given primary key from the Realm.
This method requires that
primaryKey()
be overridden on the given object class.Declaration
Swift
public func object<Element, KeyType>(ofType type: Element.Type, forPrimaryKey key: KeyType) -> Element? where Element : Object
Parameters
type
The type of the object to be returned.
key
The primary key of the desired object.
Return Value
An object of type
type
, ornil
if no instance with the given primary key exists.
-
Adds a notification handler for changes made to this Realm, and returns a notification token.
Notification handlers are called after each write transaction is committed, independent of the thread or process.
Handler blocks are called on the same thread that they were added on, and may only be added on threads which are currently within a run loop. Unless you are specifically creating and running a run loop on a background thread, this will normally only be the main thread.
Notifications can’t be delivered as long as the run loop is blocked by other activity. When notifications can’t be delivered instantly, multiple notifications may be coalesced.
You must retain the returned token for as long as you want updates to be sent to the block. To stop receiving updates, call
invalidate()
on the token.Declaration
Swift
public func observe(_ block: @escaping NotificationBlock) -> NotificationToken
Parameters
block
A block which is called to process Realm notifications. It receives the following parameters:
notification
: the incoming notification;realm
: the Realm for which the notification occurred.Return Value
A token which must be held for as long as you wish to continue receiving change notifications.
-
Set this property to
true
to automatically update this Realm when changes happen in other threads.If set to
true
(the default), changes made on other threads will be reflected in this Realm on the next cycle of the run loop after the changes are committed. If set tofalse
, you must manually callrefresh()
on the Realm to update it to get the latest data.Note that by default, background threads do not have an active run loop and you will need to manually call
refresh()
in order to update to the latest version, even ifautorefresh
is set totrue
.Even with this property enabled, you can still call
refresh()
at any time to update the Realm before the automatic refresh would occur.Notifications are sent when a write transaction is committed whether or not automatic refreshing is enabled.
Disabling
autorefresh
on aRealm
without any strong references to it will not have any effect, andautorefresh
will revert back totrue
the next time the Realm is created. This is normally irrelevant as it means that there is nothing to refresh (as managedObject
s,List
s, andResults
have strong references to theRealm
that manages them), but it means that settingautorefresh = false
inapplication(_:didFinishLaunchingWithOptions:)
and only later storing Realm objects will not work.Defaults to
true
.Declaration
Swift
public var autorefresh: Bool { get set }
-
Updates the Realm and outstanding objects managed by the Realm to point to the most recent data.
Declaration
Swift
@discardableResult public func refresh() -> Bool
Return Value
Whether there were any updates for the Realm. Note that
true
may be returned even if no data actually changed.
-
Invalidates all
Object
s,Results
,LinkingObjects
, andList
s managed by the Realm.A Realm holds a read lock on the version of the data accessed by it, so that changes made to the Realm on different threads do not modify or delete the data seen by this Realm. Calling this method releases the read lock, allowing the space used on disk to be reused by later write transactions rather than growing the file. This method should be called before performing long blocking operations on a background thread on which you previously read data from the Realm which you no longer need.
All
Object
,Results
andList
instances obtained from thisRealm
instance on the current thread are invalidated.Object
s andArray
s cannot be used.Results
will become empty. The Realm itself remains valid, and a new read transaction is implicitly begun the next time data is read from the Realm.Calling this method multiple times in a row without reading any data from the Realm, or before ever reading any data from the Realm, is a no-op. This method may not be called on a read-only Realm.
Declaration
Swift
public func invalidate()
-
Writes a compacted and optionally encrypted copy of the Realm to the given local URL.
The destination file cannot already exist.
Note that if this method is called from within a write transaction, the current data is written, not the data from the point when the previous write transaction was committed.
Throws
An
NSError
if the copy could not be written.Declaration
Swift
public func writeCopy(toFile fileURL: URL, encryptionKey: Data? = nil) throws
Parameters
fileURL
Local URL to save the Realm to.
encryptionKey
Optional 64-byte encryption key to encrypt the new file with.
-
Struct that describes the error codes within the Realm error domain. The values can be used to catch a variety of recoverable errors, especially those happening when initializing a Realm instance.
See morelet realm: Realm? do { realm = try Realm() } catch Realm.Error.incompatibleLockFile { print("Realm Browser app may be attached to Realm on device?") }
Declaration
-
Performs the given Realm configuration’s migration block on a Realm at the given path.
This method is called automatically when opening a Realm for the first time and does not need to be called explicitly. You can choose to call this method to control exactly when and how migrations are performed.
Declaration
Swift
public static func performMigration(for configuration: Realm.Configuration = Realm.Configuration.defaultConfiguration) throws
Parameters
configuration
The Realm configuration used to open and migrate the Realm.
-
Returns whether two
Realm
instances are equal.Declaration
Swift
public static func == (lhs: Realm, rhs: Realm) -> Bool
-
A notification indicating that changes were made to a Realm.
See moreDeclaration
Swift
public enum Notification : String
-
A
Configuration
instance describes the different options used to create an instance of a Realm.Configuration
instances are just plain Swift structs. UnlikeRealm
s andObject
s, they can be freely shared between threads as long as you do not mutate them.Creating configuration values for class subsets (by setting the
See moreobjectClasses
property) can be expensive. Because of this, you will normally want to cache and reuse a single configuration value for each distinct configuration rather than creating a new value each time you open a Realm.Declaration
-
If the Realm is a partially synchronized Realm, fetch and synchronize the objects of a given object type that match the given query (in string format).
The results will be returned asynchronously in the callback. Use
Results.observe(_:)
to be notified to changes to the set of synchronized objects.-warning: Partial synchronization is a tech preview. Its APIs are subject to change.
Declaration
-
Get the SyncSession used by this Realm. Will be nil if this is not a synchronized Realm.
Declaration
Swift
public var syncSession: SyncSession? { get }
-
Returns the computed privileges which the current user has for this Realm.
This combines all privileges granted on the Realm by all Roles which the current User is a member of into the final privileges which will be enforced by the server.
The privilege calculation is done locally using cached data, and inherently may be stale. It is possible that this method may indicate that an operation is permitted but the server will still reject it if permission is revoked before the changes have been integrated on the server.
Non-synchronized and fully-synchronized Realms always have permission to perform all operations.
Declaration
Swift
public func getPrivileges() -> RealmPrivileges
Return Value
The privileges which the current user has for the current Realm.
-
Returns the computed privileges which the current user has for the given object.
This combines all privileges granted on the object by all Roles which the current User is a member of into the final privileges which will be enforced by the server.
The privilege calculation is done locally using cached data, and inherently may be stale. It is possible that this method may indicate that an operation is permitted but the server will still reject it if permission is revoked before the changes have been integrated on the server.
Non-synchronized and fully-synchronized Realms always have permission to perform all operations.
The object must be a valid object managed by this Realm. Passing in an invalidated object, an unmanaged object, or an object managed by a different Realm will throw an exception.
Declaration
Swift
public func getPrivileges(_ object: Object) -> ObjectPrivileges
Parameters
object
A managed object to get the privileges for.
Return Value
The privileges which the current user has for the given object.
-
Returns the computed privileges which the current user has for the given class.
This combines all privileges granted on the class by all Roles which the current User is a member of into the final privileges which will be enforced by the server.
The privilege calculation is done locally using cached data, and inherently may be stale. It is possible that this method may indicate that an operation is permitted but the server will still reject it if permission is revoked before the changes have been integrated on the server.
Non-synchronized and fully-synchronized Realms always have permission to perform all operations.
Declaration
Swift
public func getPrivileges<T>(_ cls: T.Type) -> ClassPrivileges where T : Object
Parameters
cls
An Object subclass to get the privileges for.
Return Value
The privileges which the current user has for the given class.
-
Returns the computed privileges which the current user has for the named class.
This combines all privileges granted on the class by all Roles which the current User is a member of into the final privileges which will be enforced by the server.
The privilege calculation is done locally using cached data, and inherently may be stale. It is possible that this method may indicate that an operation is permitted but the server will still reject it if permission is revoked before the changes have been integrated on the server.
Non-synchronized and fully-synchronized Realms always have permission to perform all operations.
Declaration
Swift
public func getPrivileges(forClassNamed className: String) -> ClassPrivileges
Parameters
className
The name of an Object subclass to get the privileges for.
Return Value
The privileges which the current user has for the named class.
-
Returns the class-wide permissions for the given class.
Requires
This must only be called on a Realm using query-based sync.Declaration
Swift
public func permissions<T>(forType cls: T.Type) -> List<Permission> where T : Object
Parameters
cls
An Object subclass to get the permissions for.
Return Value
The class-wide permissions for the given class.
-
Returns the class-wide permissions for the named class.
Requires
className must name a class in this Realm’s schema.Requires
This must only be called on a Realm using query-based sync.Declaration
Swift
public func permissions(forClassNamed className: String) -> List<Permission>
Parameters
cls
The name of an Object subclass to get the permissions for.
Return Value
The class-wide permissions for the named class.
-
Returns the Realm-wide permissions.
Requires
This must only be called on a Realm using query-based sync.Declaration
Swift
public var permissions: List<Permission> { get }
-
Returns this list of the query-based sync subscriptions made for this Realm.
This list includes all subscriptions which are currently in the states
.pending
,.created
, and.error
. Newly created subscriptions which are still in the.creating
state are not included, and calling this immediately after callingResults.subscribe()
will typically not include that subscription. Similarly, because unsubscription happens asynchronously, this may continue to include subscriptions afterSyncSubscription.unsubscribe()
is called on them.Requires
This must only be called on a Realm using query-based sync.Declaration
Swift
public func subscriptions() -> Results<SyncSubscription<Object>>
-
Returns the named query-based sync subscription, if it exists.
Subscriptions are created asynchronously, so calling this immediately after calling Results.subscribe(named:)
will typically return
nil. Only subscriptions which are currently in the states
.pending,
.created, and
.error` can be retrieved with this method.Requires
This must only be called on a Realm using query-based sync.Declaration
Swift
public func subscription(named: String) -> SyncSubscription<Object>?
-
Returns the same object as the one referenced when the
ThreadSafeReference
was first created, but resolved for the current Realm for this thread. Returnsnil
if this object was deleted after the reference was created.Warning
A
ThreadSafeReference
object must be resolved at most once. Failing to resolve aThreadSafeReference
will result in the source version of the Realm being pinned until the reference is deallocated. An exception will be thrown if a reference is resolved more than once.Warning
Cannot call within a write transaction.
Note
Will refresh this Realm if the source Realm was at a later version than this one.
See
ThreadSafeReference(to:)
Declaration
Swift
public func resolve<Confined>(_ reference: ThreadSafeReference<Confined>) -> Confined? where Confined : ThreadConfined
Parameters
reference
The thread-safe reference to the thread-confined object to resolve in this Realm.


class: title-slide, left, middle background-image: url("images/tidymodels.svg") background-position: 85% 50% background-size: 30% background-color: #F9F8F3 .pull-left[ # Feature engineering ## Max Kuhn ### New York R Conference ### Repo: [https://github.com/topepo/2021-nyr-workshop](https://github.com/topepo/https://github.com/topepo/2021-nyr-workshop) ] --- layout: false class: inverse, middle, center # [`tidymodels.org`](https://www.tidymodels.org/) # _Tidy Modeling with R_ ([`tmwr.org`](https://www.tmwr.org/)) --- # What is feature engineering? First thing's first: what's a feature? I tend to think of a feature as some representation of a predictor that will be used in a model. Old-school features: * Interactions * Polynomial expansions/splines * PCA feature extraction "Feature engineering" sounds pretty cool, but let's take a minute to talk about _preprocessing_ data. --- # Two types of preprocessing  --- # Two types of preprocessing  --- # Easy examples For example, centering and scaling are definitely not feature engineering. Consider the `date` field in the Chicago data. If given as a raw predictor, it is converted to an integer. Spoiler alert: the date is the most important factor. It can be re-encoded as: * Days since a reference date 😪 * Day of the week ❤❤❤❤ * Month 😪 * Year ❤❤ * Indicators for holidays ❤❤❤ * Indicators for home games for NFL, NBA, etc. 😪 --- # Original column  --- # Features  (At least that's what we hope the difference looks like.) --- # General definitions * _Data preprocessing_ are the steps that you take to make your model successful. * _Feature engineering_ are what you do to the original predictors to make the model do the least work to predict the outcome as well as possible. We'll demonstrate the recipes package for all of your data needs. --- # Recipes prepare your data for modeling The package is extensible framework for pipeable sequences of feature engineering steps provides preprocessing tools to be applied to data. Statistical parameters for the steps can be estimated from an initial data set and then applied to other data sets. The resulting processed output can then be used as inputs for statistical or machine learning models. --- # A first recipe ```r chi_rec <- recipe(ridership ~ ., data = chi_train) # If ncol(data) is large, you can use # recipe(data = chi_train) ``` Based on the formula, the function assigns columns to roles of "outcome" or "predictor" ```r summary(chi_rec) ``` ``` ## # A tibble: 50 × 4 ## variable type role source ## <chr> <chr> <chr> <chr> ## 1 Austin numeric predictor original ## 2 Quincy_Wells numeric predictor original ## 3 Belmont numeric predictor original ## 4 Archer_35th numeric predictor original ## 5 Oak_Park numeric predictor original ## 6 Western numeric predictor original ## # … with 44 more rows ``` --- # A first recipe - work with dates ```r chi_rec <- recipe(ridership ~ ., data = chi_train) %>% * step_date(date, features = c("dow", "month", "year")) ``` This creates three new columns in the data based on the date. Now that the day-of-the-week column is a factor. --- # A first recipe - work with dates ```r chi_rec <- recipe(ridership ~ ., data = chi_train) %>% step_date(date, features = c("dow", "month", "year")) %>% * step_holiday(date) ``` Add indicators for major holidays. Specific holidays, especially those ex-US, can also be generated. At this point, we don't need `date` anymore. Instead of deleting it (there is a step for that) we will change its _role_ to be an identification variable. --- # A first recipe - work with dates ```r chi_rec <- recipe(ridership ~ ., data = chi_train) %>% step_date(date, features = c("dow", "month", "year")) %>% step_holiday(date) %>% * update_role(date, new_role = "id") ``` `date` is still in the data set but tidymodels knows not to treat it as an analysis column. --- # A first recipe -create indicator variables ```r chi_rec <- recipe(ridership ~ ., data = chi_train) %>% step_date(date, features = c("dow", "month", "year")) %>% step_holiday(date) %>% update_role(date, new_role = "id") %>% * step_dummy(all_nominal_predictors()) ``` For any factor or character predictors, make binary indicators. There are _many_ recipe steps that can convert categorical predictors to numeric columns. --- # A first recipe - filter out constant columns ```r chi_rec <- recipe(ridership ~ ., data = chi_train) %>% step_date(date, features = c("dow", "month", "year")) %>% step_holiday(date) %>% update_role(date, new_role = "id") %>% step_dummy(all_nominal_predictors()) %>% * step_zv(all_predictors()) ``` In case there is a holiday that never was observed, we can delete any _zero-variance_ predictors that have a single unique value. Note that the selector chooses all columns with a role of "predictor" --- # A first recipe - normalization ```r chi_rec <- recipe(ridership ~ ., data = chi_train) %>% step_date(date, features = c("dow", "month", "year")) %>% step_holiday(date) %>% update_role(date, new_role = "id") %>% step_dummy(all_nominal_predictors()) %>% step_zv(all_predictors()) %>% * step_normalize(all_numeric_predictors()) ``` This centers and scales the numeric predictors. Note that this will use the training set to estimate the means and standard deviations of the data. All data put through the recipe will be normalized using those statistics (there is no re-estimation). --- # A first recipe - reduce correlation ```r chi_rec <- recipe(ridership ~ ., data = chi_train) %>% step_date(date, features = c("dow", "month", "year")) %>% step_holiday(date) %>% update_role(date, new_role = "id") %>% step_dummy(all_nominal_predictors()) %>% step_zv(all_predictors()) %>% step_normalize(all_numeric_predictors()) %>% * step_corr(all_numeric_predictors(), threshold = 0.9) ``` To deal with highly correlated predicors, find the minimum predictor set to remove to make the pairwise correlations are less than 0.9. There are other filter steps too, --- # Other possible steps ```r chi_rec <- recipe(ridership ~ ., data = chi_train) %>% step_date(date, features = c("dow", "month", "year")) %>% step_holiday(date) %>% update_role(date, new_role = "id") %>% step_dummy(all_nominal_predictors()) %>% step_zv(all_predictors()) %>% step_normalize(all_numeric_predictors()) %>% * step_pca(all_numeric_predictors()) ``` PCA feature extraction... --- # Other possible steps ```r chi_rec <- recipe(ridership ~ ., data = chi_train) %>% step_date(date, features = c("dow", "month", "year")) %>% step_holiday(date) %>% update_role(date, new_role = "id") %>% step_dummy(all_nominal_predictors()) %>% step_zv(all_predictors()) %>% step_normalize(all_numeric_predictors()) %>% * step_umap(all_numeric_predictors(), outcome = ridership) ``` A fancy machine learning supervised dimension reduction technique --- # Other possible steps ```r chi_rec <- recipe(ridership ~ ., data = chi_train) %>% step_date(date, features = c("dow", "month", "year")) %>% step_holiday(date) %>% update_role(date, new_role = "id") %>% step_dummy(all_nominal_predictors()) %>% step_zv(all_predictors()) %>% step_normalize(all_numeric_predictors()) %>% * step_ns(Clark_Lake, deg_free = 10) ``` Nonlinear transforms like _natural splines_ and so on. --- # Recipes are estimated _Every_ preprocessing step in a recipe that involved calculations uses the _training set_. For example: * Levels of a factor * Determination of zero-variance * Normalization * Feature extraction and so on. Once a a recipe is added to a workflow, this occurs when `fit()` is called. --- # Recipes follow this strategy  --- # Adding recipes to workflows Let's stick to a linear model for now and add a recipe (instead of a formula): .code70[ ```r lm_spec <- linear_reg() chi_wflow <- workflow() %>% add_model(lm_spec) %>% add_recipe(chi_rec) chi_wflow ``` ``` ## ══ Workflow ═════════════════════════════════════════════════════════════════════════ ## Preprocessor: Recipe ## Model: linear_reg() ## ## ── Preprocessor ───────────────────────────────────────────────────────────────────── ## 6 Recipe Steps ## ## • step_date() ## • step_holiday() ## • step_dummy() ## • step_zv() ## • step_normalize() ## • step_corr() ## ## ── Model ──────────────────────────────────────────────────────────────────────────── ## Linear Regression Model Specification (regression) ## ## Computational engine: lm ``` ] --- # Estimate via `fit()` Let's stick to a linear model for now and add a recipe (instead of a formula): .code70[ ```r chi_fit <- chi_wflow %>% fit(chi_train) chi_fit ``` ``` ## ══ Workflow [trained] ═══════════════════════════════════════════════════════════════ ## Preprocessor: Recipe ## Model: linear_reg() ## ## ── Preprocessor ───────────────────────────────────────────────────────────────────── ## 6 Recipe Steps ## ## • step_date() ## • step_holiday() ## • step_dummy() ## • step_zv() ## • step_normalize() ## • step_corr() ## ## ── Model ──────────────────────────────────────────────────────────────────────────── ## ## Call: ## stats::lm(formula = ..y ~ ., data = data) ## ## Coefficients: ## (Intercept) Washington_Wells temp_change dew ## 13.61168 -0.10228 -0.02641 0.42201 ## humidity pressure pressure_change wind ## -0.07095 0.00210 0.03257 -0.12087 ## wind_max gust gust_max percip ## 0.00503 -0.03894 0.09753 -0.03411 ## percip_max weather_rain weather_snow weather_cloud ## -0.03043 -0.12718 -0.12712 -0.08740 ## weather_storm Blackhawks_Away Blackhawks_Home Bulls_Away ## 0.00912 -0.03736 -0.00532 0.01585 ## Bulls_Home Bears_Away Bears_Home Cubs_Home ## 0.11294 0.06151 0.05569 -0.25908 ## date_year date_LaborDay date_NewYearsDay date_ChristmasDay ## 1.74361 0.04465 -0.51293 -0.58151 ## date_dow_Mon date_dow_Tue date_dow_Wed date_dow_Thu ## 4.47531 4.96928 4.97429 4.90138 ## date_dow_Fri date_dow_Sat date_month_Feb date_month_Mar ## 4.69574 0.41180 0.11618 0.24674 ## date_month_Apr date_month_May date_month_Jun date_month_Jul ## 0.34673 0.23889 0.49822 0.33197 ## date_month_Aug date_month_Sep date_month_Oct date_month_Nov ## 0.40144 0.32620 0.48132 0.12800 ## date_month_Dec ## -0.05719 ``` ] --- # Prediction When `predict()` is called, the fitted recipe is applied to the new data before it is predicted by the model: ```r predict(chi_fit, chi_test) ``` ``` ## # A tibble: 14 × 1 ## .pred ## <dbl> ## 1 20.6 ## 2 21.4 ## 3 21.7 ## 4 21.5 ## 5 20.8 ## 6 8.41 ## # … with 8 more rows ``` You don't need to do anything else --- # Tidying a recipe .pull-left[ `tidy(recipe)` gives a summary of the steps: ```r tidy(chi_rec) ``` ``` ## # A tibble: 6 × 6 ## number operation type trained skip id ## <int> <chr> <chr> <lgl> <lgl> <chr> ## 1 1 step date FALSE FALSE date_l0C9L ## 2 2 step holiday FALSE FALSE holiday_LjSJc ## 3 3 step dummy FALSE FALSE dummy_BbpKX ## 4 4 step zv FALSE FALSE zv_hkEXE ## 5 5 step normalize FALSE FALSE normalize_dXJuL ## 6 6 step corr FALSE FALSE corr_ktvtE ``` After fitting the recipe, you might want access to the statistics from each step. We can pull the fitted recipe from the workflow and choose which step to tidy by number or `id` ] .pull-right[ ```r chi_fit %>% extract_recipe() %>% tidy(number = 5) # For step normalize ``` ``` ## # A tibble: 138 × 4 ## terms statistic value id ## <chr> <chr> <dbl> <chr> ## 1 Austin mean 1.52 normalize_dXJuL ## 2 Quincy_Wells mean 5.58 normalize_dXJuL ## 3 Belmont mean 4.09 normalize_dXJuL ## 4 Archer_35th mean 2.21 normalize_dXJuL ## 5 Oak_Park mean 1.32 normalize_dXJuL ## 6 Western mean 2.87 normalize_dXJuL ## # … with 132 more rows ``` ] --- # Debugging a recipe 90% of the time, you will want to use a workflow to estimate and apply a recipe. If you have an error, the original recipe object (e.g. `chi_rec`) can be estimated manually with a function called `bake()` (analogous to `fit()`). This returns the fitted recipe. This can help debug any issues. Another function (`bake()`) is analogous to `predict()` and gives you the processed data back. --- # Fun facts about recipes * Once `fit()` is called on a workflow, changing the model does not re-fit the recipe. * A list of all known steps is [here](https://www.tidymodels.org/find/recipes/). * Some steps can be [skipped](https://recipes.tidymodels.org/articles/Skipping.html) when using `predict()`. * The [order](https://recipes.tidymodels.org/articles/Ordering.html) of the steps matters. * There are recipes-adjacent packages with more steps: embed, timetk, textrecipes, and others. * If you do any text processing, textrecipes is 🆒♾. * Julia and Emil have written an amazing text processing book: [_Supervised Machine Learning for Text Analysis in R_](https://smltar.com/) * There are a lot of ways to handle [categorical predictors](https://recipes.tidymodels.org/articles/Dummies.html) even those with novel levels. * Several dplyr steps exist, such as `step_mutate()`.


If you want to get in trouble, it is the right spot
Terrible experience
It was not what i expected
메인페이지


Redirecting...
If you are not redirected automatically, follow this link
{# # Copyright 2018 - Swiss Data Science Center (SDSC) # A partnership between École Polytechnique Fédérale de Lausanne (EPFL) and # Eidgenössische Technische Hochschule Zürich (ETHZ). # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. #}
If you are not redirected automatically, follow this link