Version 7.1.0 is a major update with major implementation refactoring across all aspects of the product.
juneau-marshall
-
Significant improvements made to the internals of the Serializer and Parser classes.
-
Caching improvements on serializers and parsers have reduced execution time of the core
JUnits by approximately 1/3.
The 17000+ JUnit tests now execute in less than 10 seconds and have a cache-reuse hit rate
of 98% (164104 serializers/parsers/bean-contexts retrieved but only 1801 created from scratch).
-
All the various separate Context classes (e.g. JsonSerializerContext) have been folded into
their respective serializer or parser classes (e.g. JsonSerializer).
Additionally, these classes are their own bean contexts.
For example, the class hierarchy of JsonSerializer is now:
- {@link oaj.Context}
- {@link oaj.BeanContext}
- {@link oaj.serializer.Serializer}
- {@link oaj.serializer.WriterSerializer}
- {@link oaj.json.JsonSerializer}
All Context objects are thread-safe and read-only.
-
Session objects also now have a consistent class hierarchy.
For example, the class hierarchy of JsonSerializerSession is now:
Session
- {@link oaj.BeanSession}
- {@link oaj.serializer.SerializerSession}
- {@link oaj.serializer.WriterSerializerSession}
- {@link oaj.json.JsonSerializerSession}
Session objects are transient objects that live for the duration of a single parse.
-
Builder objects also now have a consistent class hierarchy.
For example, the class hierarchy of JsonSerializer.Builder is now:
- {@link oaj.Context.Builder}
- {@link oaj.BeanContext.Builder}
- {@link oaj.serializer.Serializer.Builder}
- {@link oaj.json.JsonSerializer.Builder}
Builder objects are used for building up and creating Context objects.
-
The
PropertyStore class has been completely rewritten.
It is now a read-only configuration store build using the PropertyStoreBuilder
class.
The previous PropertyStore class was overly-complicated with many read/write
locks to ensure thread-safety.
The new design shifts to a builder-based model with read-only PropertyStore objects
that can be used as hash keys.
-
Improvements to the HTTP-Part APIs.
The existing PartSerializer/PartParser classes
have been replaced with the following all located in the new org.apache.juneau.httppart package:
- {@link oaj.httppart}
- {@link oaj.httppart.HttpPartType}
- {@link oaj.httppart.HttpPartSerializer}
UonPartSerializer
SimpleUonPartSerializer
- {@link oaj.httppart.SimplePartSerializer}
- {@link oaj.httppart.HttpPartParser}
UonPartParser
SimplePartParser
Code for marshalling of parts have been removed from the URL-Encoding serializers and parsers.
-
Context.Builder.property(String,Object) renamed to
Builder.set(String,Object).
-
ResourceFinder class has been replaced with the following:
ClasspathResourceFinder
ClasspathResourceFinderSimple
ClasspathResourceFinderBasic
ClasspathResourceFinderRecursive
ClasspathResourceManager
-
New methods on {@link oaj.serializer.SerializerSession}:
- {@link oaj.serializer.SerializerSession#getListener() getListener()}
- {@link oaj.serializer.SerializerSession#getListener(Class) getListener(Class)}
-
New methods on {@link oaj.parser.ParserSession}:
- {@link oaj.parser.ParserSession#getListener() getListener()}
- {@link oaj.parser.ParserSession#getListener(Class) getListener(Class)}
-
New
Parser.PARSER_unbufferedsetting allows you to disable internal
buffering on the JSON and UON parsers so that they can be used to read continous streams of objects.
-
New
JsonParser.JSON_validateEndand UonParser.UON_validateEnd
settings allow you to control whether we validate that there is no garbage at the end of the parsed input.
-
New
Parser.PARSER_autoCloseStreams setting allows input streams and
readers passed into parsers to be automatically closed after parsing.
-
Syntax changed on unswap method on
Surrogate classes.
It's now a regular method instead of a static method.
-
{@link oaj.annotation.Swap @Swap} annotation can now be used with
Surrogateclasses.
-
New support for
PojoBuilders POJO Builders.
juneau-svl
-
New variables:
- {@link oaj.svl.vars.CoalesceVar}
- {@link oaj.svl.vars.PatternMatchVar}
- {@link oaj.svl.vars.NotEmptyVar}
- {@link oaj.svl.vars.UpperCaseVar}
- {@link oaj.svl.vars.LowerCaseVar}
-
Variables moved from juneau-microservice:
- {@link oaj.svl.vars.ArgsVar}
- {@link oaj.svl.vars.ManifestFileVar}
juneau-config
-
The Config API has been completely revamped.
New features include:
- Support for pluggable storage.
- File-system watcher integration support.
Changes made to file system files now automatically reflected in configurations
and interface proxies.
- New builder-based design.
juneau-dto
-
Enhancements to Swagger DTO:
- New methods for setting and retrieving properties via name:
- {@link oaj.dto.swagger.SwaggerElement#get(String,Class)}
- {@link oaj.dto.swagger.SwaggerElement#set(String,Object)}
-
Support for setting non-standard fields such as "$ref" via getter and setter
above.
-
Setter methods that take in beans and collections of beans can now take in
JSON strings.
juneau-rest-server
-
RestServletDefault renamed to
BasicRestServlet.
-
RestServletGroupDefault renamed to
BasicRestServletGroup.
-
The "$R{...}" variable has been split into the following:
- "$RA{key1[,key2...]}" - {@link oajr.vars.RequestAttributeVar}, first non-null value returned by HttpServletRequest.getAttribute(String).
- "$RF{key1[,key2...]}" - {@link oajr.vars.RequestFormDataVar}, first non-null value returned by
RestRequest.getFormData(String).
- "$RH{key1[,key2...]}" - {@link oajr.vars.RequestHeaderVar}, first non-null value returned by {@link oajr.RestRequest#getHeader(String)}.
- "$RI{key1[,key2...]}" -
RestInfoVar, first non-null value returned by RestRequest.getInfoProvider().
The possible values are:
- "contact" - Value returned by {@link oaj.dto.swagger.Info#getContact()}
- "description" - Value returned by
RestInfoProvider.getDescription(RestRequest)
- "externalDocs" - Value returned by {@link oaj.dto.swagger.Swagger#getExternalDocs()}
- "license" - Value returned by {@link oaj.dto.swagger.Info#getLicense()}
- "methodDescription" - Value returned by
RestInfoProvider.getMethodDescription(Method,RestRequest)
- "methodSummary" - Value returned by
RestInfoProvider.getMethodSummary(Method,RestRequest)
- "siteName" - Value returned by
RestInfoProvider.getSiteName(RestRequest)
- "tags" - Value returned by {@link oaj.dto.swagger.Swagger#getTags()}
- "termsOfService" - Value returned by {@link oaj.dto.swagger.Info#getTermsOfService()}
- "title" - See
RestInfoProvider.getTitle(RestRequest)
- "version" - See {@link oaj.dto.swagger.Info#getVersion()}
- "$RP{key1[,key2...]}" - {@link oajr.vars.RequestPathVar}, first non-null value returned by
RestRequest.getPath(String).
- "$RQ{key1[,key2...]}" - {@link oajr.vars.RequestQueryVar}, first non-null value returned by
RestRequest.getQuery(String).
- "$R{key1[,key2...]}" - {@link oajr.vars.RequestVar}, first non-null other request variable.
The possible values are:
- "contextPath" - Value returned by {@link oajr.RestRequest#getContextPath()}
- "method" - Value returned by {@link oajr.RestRequest#getMethod()}
- "methodDescription" - Value returned by
RestRequest.getMethodDescription()
- "methodSummary" - Value returned by
RestRequest.getMethodSummary()
- "pathInfo" - Value returned by {@link oajr.RestRequest#getPathInfo()}
- "requestParentURI" - Value returned by {@link oaj.UriContext#getRootRelativePathInfoParent()}
- "requestURI" - Value returned by {@link oajr.RestRequest#getRequestURI()}
- "resourceDescription" - Value returned by
RestRequest.getResourceDescription()
- "resourceTitle" - See
RestRequest.getResourceTitle()
- "servletParentURI" - Value returned by {@link oaj.UriContext#getRootRelativeServletPathParent()}
- "servletPath" - See {@link oajr.RestRequest#getServletPath()}
- "servletURI" - See {@link oaj.UriContext#getRootRelativeServletPath()}
- "siteName" - See
RestRequest.getSiteName()
-
Refactored the RestConfig class into {@link oajr.RestContext.Builder}.
Settings on {@link oajr.RestContext} objects can now be set declaratively through the
following new properties:
RestContext.REST_allowHeaderParams
RestContext.REST_allowBodyParam
RestContext.REST_allowedMethodParams REST_allowedMethodParams
RestContext.REST_renderResponseStackTraces REST_renderResponseStackTraces
RestContext.REST_useStackTraceHashes
RestContext.REST_defaultCharset REST_defaultCharset
RestContext.REST_maxInput REST_maxInput
RestContext.REST_paramResolvers
RestContext.REST_converters REST_converters
RestContext.REST_guards REST_guards
RestContext.REST_responseHandlers
RestContext.REST_defaultRequestHeaders
RestContext.REST_defaultResponseHeaders
RestContext.REST_produces REST_produces
RestContext.REST_consumes REST_consumes
RestContext.REST_clientVersionHeader REST_clientVersionHeader
RestContext.REST_resourceResolver
RestContext.REST_logger
RestContext.REST_callHandler
RestContext.REST_infoProvider
RestContext.REST_path REST_path
RestContext.REST_contextPath
RestContext.REST_staticFiles REST_staticFiles
RestContext.REST_staticFileResponseHeaders
RestContext.REST_classpathResourceFinder
RestContext.REST_useClasspathResourceCaching
RestContext.REST_widgets
RestContext.REST_mimeTypes
-
Support for static files has been simplified and improved.
- Syntax on
@RestResource(staticFiles)has been simplified, and
now allows you to specify response headers in the strings.
- Response headers for static files can also be configured through
RestContext.REST_staticFileResponseHeaders
- Static file in-memory caching now configurable through
RestContext.REST_useClasspathResourceCaching
- Static file retrieval can be customized through
RestContext.REST_classpathResourceFinder
-
Eliminated the RestMatcherReflecting class.
You can now simply create a RestMatcher that has a public constructor that
takes in the server and method arguments.
-
@RestResource.allowMethodParamrenamed to RestResource.allowedMethodParams.
-
@RestMethod.serializersInherit and @RestMethod.parsersInherit replaced with
simplified
@RestMethod(inherit).
-
Changes to
RequestFormData:
RequestFormData.addDefault(Map) addDefault(Map)takes in a
Map<String,Object> instead of Map<String,String>.
-
Changes to
RequestHeaders:
RequestHeaders.addDefault(Map) addDefault(Map)takes in a
Map<String,Object> instead of Map<String,String>.
-
Changes to
RequestQuery:
RequestQuery.addDefault(Map) addDefault(Map)takes in a
Map<String,Object> instead of Map<String,String>.
-
Changes to {@link oajr.RestContext}:
- getResource(String,Locale) renamed to
getClasspathResource(String,Locale)
- getResourceAsString(String,Locale) renamed to
getClasspathResourceAsString(String,Locale)
- getResource(Class,MediaType,String,Locale) renamed to
getClasspathResourceAsString(Class,MediaType,String,Locale)
- New method
getClasspathResource(Class,String,Locale).
- New method
getClasspathResourceAsString(Class,String,Locale).
- New method
getClasspathResource(Class,Class,MediaType,String,Locale).
RestContext.getDefaultRequestHeaders()returns a
Map<String,Object> instead of Map<String,String>.
RestContext.getDefaultResponseHeaders()returns a
Map<String,Object> instead of Map<String,String>.
-
Changes to {@link oajr.RestRequest}:
- getSupportedMediaTypes() replaced with
RestRequest.getConsumes() getConsumes()and
RestRequest.getProduces() getProduces().
- getReaderResource(String,boolean,MediaType) renamed to
getClasspathReaderResource(String,boolean,MediaType)
- getReaderResource(String,boolean) renamed to
getClasspathHttpResource(String,boolean)
- getReaderResource(String) renamed to
getClasspathHttpResource(String)
-
Changes to
@RestResource
- New
mimeTypes()annotation.
-
Changes to
RestMethod @RestMethod:
- New
RestMethod.consumes() consumes()and
RestMethod.produces() produces()
for overriding the supported media types inferred from the serializers and parsers.
-
RestCallHandler split up into
RestCallHandler and
BasicRestCallHandler
-
RestInfoProvider split up into
RestInfoProvider and
BasicRestInfoProvider
-
RestLogger split up into
RestLogger,
BasicRestLogger and NoOpRestLogger
-
RestResourceResolverSimple renamed to
BasicRestResourceResolver
-
Introduced the following classes that helps make the code more understandable:
RestContextProperties
RestMethodProperties
RequestProperties
-
Eliminated the @Messages and @Properties REST java method parameter
annotations.
These aren't needed anymore since you can just pass in MessageBundle and
RestRequestProperties as unannotated parameters.
-
Revamped the
RestInfoProviderclass.
-
New builder classes:
ReaderResourceBuilder
StreamResourceBuilder
-
{@link oajr.RestResponse#getNegotiatedOutputStream()} now returns a
FinishableServletOutputStreamand {@link oajr.RestResponse#getNegotiatedWriter()}
now returns a FinishablePrintWriter that allows you to finish the output
without closing the stream.
The DefaultHandler class now calls finish()
instead of close() on the stream.
-
Added the following annotations to the
BasicRestServlet class
(which were previously defined on the Resource class):
@RestResource(
htmldoc=@HtmlDoc(
navlinks={
"up: request:/..",
"options: servlet:/?method=OPTIONS"
},
stylesheet="$C{REST/stylesheet,servlet:/styles/devops.css}"
),
// Optional external configuration file.
config="$S{juneau.configFile}"
)
juneau-rest-client
-
New configuration property
RestClient.RESTCLIENT_queryand
builder method Builder.query(String,Object).
-
API changes to replace PartSerializer with {@link oaj.httppart.HttpPartSerializer}.
The default value is now SimpleUonPartSerializer which will
serialize strings as plain-text and collections/arrays as comma-delimited lists.
We decided to change the default behavior in favor of practicality over purity.
-
New methods on
RestCallclass:
RestCall.getResponseHeader(String) getResponseHeader(String)
RestCall.getResponseCode() getResponseCode()
-
RestCall and {@link oajrc.RestClient}
now implement the Closeable interface.
juneau-microservice
-
Resource and ResourceGroup classes removed.
BasicRestServlet and BasicRestServletGroup can be used instead.
-
ResourceJena and ResourceJenaGroup classes renamed to
BasicRestServletJenaand BasicRestServletJenaGroup.


Loading configuration...
Channel names
Master names
Pairs / Groups
One line per group
channel numbers separated with commas
Initializing 01v96 Remote...
ERROR (This isn't even remotely funny!)
Error message


Installing the Operator using the CLI
The procedures in this section show how to use the Kubernetes command-line interface (CLI) to install and deploy the latest version of the Operator for ArtemisCloud in a given Kubernetes project. In subsequent procedures, you use this Operator to deploy some broker instances.
Getting the Operator code
This procedure shows how to access and prepare the code you need to install the latest version of the Operator for ArtemisCloud .
-
Download the latest version of the Operator from https://github.com/artemiscloud/activemq-artemis-operator/archive/v0.18.1.zip
-
When the download has completed, move the archive to your chosen installation directory. The following example moves the archive to a directory called
~/broker/operator
.$ mkdir ~/broker/operator $ mv activemq-artemis-operator-0.18.1.zip ~/broker/operator
-
In your chosen installation directory, extract the contents of the archive. For example:
$ cd ~/broker/operator $ unzip activemq-artemis-operator-0.18.1.zip
-
Switch to the directory that was created when you extracted the archive. For example:
$ cd activemq-artemis-operator
-
Specify the project in which you want to install the Operator. You can create a new project or switch to an existing one.
-
Create a new namespace:
$ kubectl create namespace <project-name>
-
Or, switch to an existing namespace:
$ kubectl config set-context $(kubectl config current-context) --namespace= <project-name>
-
-
Specify a service account to use with the Operator.
-
In the
deploy
directory of the Operator archive that you extracted, open theservice_account.yaml
file. -
Ensure that the
kind
element is set toServiceAccount
. -
In the
metadata
section, assign a custom name to the service account, or use the default name. The default name isactivemq-artemis-operator
. -
Create the service account in your project.
$ kubectl create -f deploy/service_account.yaml
-
-
Specify a role name for the Operator.
-
Open the
role.yaml
file. This file specifies the resources that the Operator can use and modify. -
Ensure that the
kind
element is set toRole
. -
In the
metadata
section, assign a custom name to the role, or use the default name. The default name isactivemq-artemis-operator
. -
Create the role in your project.
$ kubectl create -f deploy/role.yaml
-
-
Specify a role binding for the Operator. The role binding binds the previously-created service account to the Operator role, based on the names you specified.
-
Open the
role_binding.yaml
file. Ensure that thename
values forServiceAccount
andRole
match those specified in theservice_account.yaml
androle.yaml
files. For example:metadata: name: activemq-artemis-operator subjects: kind: ServiceAccount name: activemq-artemis-operator roleRef: kind: Role name: activemq-artemis-operator
-
Create the role binding in your project.
$ kubectl create -f deploy/role_binding.yaml
-
In the procedure that follows, you deploy the Operator in your project.
Deploying the Operator using the CLI
The procedure in this section shows how to use the Kubernetes command-line interface (CLI) to deploy the latest version of the Operator for ArtemisCloud in your Kubernetes project.
-
You must have already prepared your Kubernetes project for the Operator deployment. See Getting the Operator code.
-
If you intend to deploy brokers with persistent storage and do not have container-native storage in your Kubernetes cluster, you need to manually provision Persistent Volumes (PVs) and ensure that they are available to be claimed by the Operator. For example, if you want to create a cluster of two brokers with persistent storage (that is, by setting
persistenceEnabled=true
in your Custom Resource), you need to have two PVs available. By default, each broker instance requires storage of 2 GiB.If you specify
persistenceEnabled=false
in your Custom Resource, the deployed brokers uses ephemeral storage. Ephemeral storage means that that every time you restart the broker Pods, any existing data is lost.
-
Specify the project in which you want to install the Operator. You can create a new project or switch to an existing one.
-
Create a new namespace:
$ kubectl create namespace <project-name>
-
Or, switch to an existing namespace:
$ kubectl config set-context $(kubectl config current-context) --namespace= <project-name>
-
-
Switch to the directory that was created when you previously extracted the Operator installation archive. For example:
$ cd ~/broker/operator/amq-broker-operator--ocp-install-examples
-
Deploy the CRDs that are included with the Operator. You must install the CRDs in your Kubernetes cluster before deploying and starting the Operator.
-
Deploy the main broker CRD.
$ kubectl create -f deploy/crds/broker_activemqartemis_crd.yaml
-
Deploy the address CRD.
$ kubectl create -f deploy/crds/broker_activemqartemisaddress_crd.yaml
-
Deploy the scaledown controller CRD.
$ kubectl create -f deploy/crds/broker_activemqartemisscaledown_crd.yaml
-
-
In the
deploy
directory of the Operator archive that you downloaded and extracted, open theoperator.yaml
file. Ensure that the value of thespec.containers.image
property is set to the latest Operator image for ActiveMQ Artemis , as shown below.spec: template: spec: containers: image: quay.io/artemiscloud/activemq-artemis-operator:0.18.1
-
Deploy the Operator.
$ kubectl create -f deploy/operator.yaml
In your Kubernetes project, the Operator starts in a new Pod.
In the Kubernetes web console, the information on the Events tab of the Operator Pod confirms that Kubernetes has deployed the Operator image that you specified, has assigned a new container to a node in your Kubernetes cluster, and has started the new container.
In addition, if you click the Logs tab within the Pod, the output should include lines resembling the following:
... {"level":"info","ts":1553619035.8302743,"logger":"kubebuilder.controller","msg":"Starting Controller","controller":"activemqartemisaddress-controller"} {"level":"info","ts":1553619035.830541,"logger":"kubebuilder.controller","msg":"Starting Controller","controller":"activemqartemis-controller"} {"level":"info","ts":1553619035.9306898,"logger":"kubebuilder.controller","msg":"Starting workers","controller":"activemqartemisaddress-controller","worker count":1} {"level":"info","ts":1553619035.9311671,"logger":"kubebuilder.controller","msg":"Starting workers","controller":"activemqartemis-controller","worker count":1}
The preceding output confirms that the newly-deployed Operator is communicating with Kubernetes, that the controllers for the broker and addressing are running, and that these controllers have started some workers.
It is recommended that you deploy only a single instance of the ActiveMQ Artemis Operator in a given Kubernetes project. Setting the replicas element of your Operator deployment to a value greater than 1 , or deploying the Operator more than once in the same project is not recommended.
|


- Security and correctness
- Designed with security and testability in mind
- Blockchain performance
- Cutting edge of public blockchain performance in terms of latency and throughput
- Application performance
- The application layer must perform on a par with professional (including non-blockchain based) trading systems
- Flexibility
- Connected blockchain or cryptocurrency for operation or trading and settlement
Kamram Reynolds
Over 6 years of experience in fintech and data product strategy, data science products, and technology architecture, building successful SAAS, PAAS, and blockchain data services platforms in multi languages.
Steven Stankovic
5+ years experience in software development, Senior Java / J2EE / Web / Android Developer and Architect with more than 5 years experience of full time work.
Peirre Richard
Network full-stack engineer, specializing in automated operation and maintenance, and has extensive experience in development and product shaping
Adam Taylor
With a PhD in computer science, he is an experienced infrastructure analyst.
Lamia Sophie
Many years of middle management experiences and relevant experiences in Internet operation and promotion.


You must enroll in the lecture and in a discussion section that meets twice weekly. See the Academic Guide for details. You can attend only the discussion section in which you are enrolled on CalCentral. Note that quizzes will be held in discussion sections.
Please see the Academic Guide or the About page for details. Prerequisites:
Corequisite:
These are enforced by CalCentral.
The course textbook will be available on the course website. Lectures and the textbook will be closely related in content and sequence, though examples done in lecture might be different from those in the text.
Data science is not a solitary activity; please expect to participate in lectures and discussion section. Lectures will not be webcast. The online text will contain the main points covered.
In the calculation of your overall score, we will drop
Course grades will be assigned by taking the maximum of:
Late submission of homework will not be accepted under any circumstances, unless you have relevant university accommodations. If you have such accommodations, please provide the formal notification to your lab GSI before the end of the second week of classes. There will be no alternate due dates for assignments missed due to illness, other commitments, and so on. The drops are intended to cover those situations.
You are encouraged to discuss practice problems and homework with your fellow students and with course staff. Arguing with friends about exercises is an excellent and time-honored way to learn. However, you must write up all your own assignments.
Copying assignments from others is not only dishonest, it also doesn’t help anyone. Each exercise requires its own combination of ideas, and each student needs practice in coming up with those combinations, or else they will be at a loss when trying to use probability theory in their future work. From a purely practical perspective, all students must work independently on Stat 88 quizzes and exams – no collaboration allowed. If a test is the first time a student works independently, then the test is not likely to go well.
Stat 88 materials including exams and solutions are the intellectual property of the course developers. From the campus statement on Academic Integrity: “… students may not circulate or post materials (handouts, exams, syllabi, i.e. any class materials) from their classes without the written permission of the instructor.”
I am extremely tough with dishonest students and I hope that I will not be put in that situation in Stat 88 I expect that you will work with integrity and with respect for other members of the class, just as the course staff will work with integrity and with respect for you.


WITNESS LIST Defense Affairs & State-Federal Relations Committee April 28, 2005-8:00A SB 11 For: Douglass, Cathy (Texas Association of School Boards) Tabak, Robert (Tech Radium) Thompson, Edwin (Texas Association of School Boards) Registering, but not testifying: For: Beneski, Amy (Texas Association of School Administrators) Fickel, Ann (Tx Classroom Teachers Assoc.) Rodkey, Ryan (Self) Whitsett, JoHannah (ATPE) SB 75 Registering, but not testifying: For: Fickel, Ann (Tx Classroom Teachers Assoc.) Whitsett, JoHannah (ATPE) SB 144 For: Anderson, James (US Air Force) SB 212 Registering, but not testifying: On: Smith, Michael (Texas Military Preparedness Commission - Office of the Governor) SB 863 Registering, but not testifying: For: Day, Aaron (Ciry of Fort Worth, City Council, Mayor and City Manager's Office)


What have you got? -- Marlon Brando, The Wild Ones
Brando might be answering the question, what do I teach?
pTeaching and problem solving both require clear exposition. Clear exposition requires understanding your audience. The audience for a problem solving exercise is who is expected to solve the problem. That audience may be just one person; the person posing the problem.
I am passionate about thinking deeply; considering unexpected consequences, precise descriptions, hidden commonalities and overlooked distinctions. Logic, code and mathematics, but also well crafted prose are tools to properly presentations. Only well constructed problems have any hope of solution. R, Python, data.
Experienced instructor. Innovate thinker. Twenty-first century philosopher.


To upgrade to html5 follow this w3schools tutorial.
To implement responsive web designs follow this w3school tutorial.


A port of log4js to node.js
This is a conversion of the log4js framework to work with node. I started out just stripping out the browser-specific code and tidying up some of the javascript to work better in node. It grew from there. Although it’s got a similar name to the Java library log4j, thinking that it will behave the same way will only bring you sorrow and confusion.
There have been a few changes between log4js 1.x and 2.x (and 0.x too). You should probably read this migration guide if things aren’t working.
cluster
modulenpm install log4js
Minimalist version:
var log4js = require('log4js');
var logger = log4js.getLogger();
logger.level = 'debug'; // default level is OFF - which means no logs at all.
logger.debug("Some debug messages");
If you’re writing a library and would like to include support for log4js, without introducing a dependency headache for your users, take a look at log4js-api.
The original log4js was distributed under the Apache 2.0 License, and so is this. I’ve tried to keep the original copyright and author credits in place, except in sections that I have rewritten extensively.


[gecode-users] ViewArray <-> VarArgArray
Lars Otten
ottenl at student.chalmers.se
Mon Jan 16 17:30:10 CET 2006
Hi,
first of all thank you very much for the quick reply.
On 01/16/06 08:47, Guido Tack wrote:
> Great. Please keep us informed of your progress!
I guess it's only a matter of time until I'll have some more issues /
questions to post here, so by that you'll be kept up to date. ;)
> To create a new propagator during propagation, you need to call the
> propagator's post method instead of posting it through the modelling
> interface as you do now.
OK, for the equality propagator that was an easy change.
For the element propagator, however, it is not that simple. While my class
currently has fields of type ViewArray<IntView>, something of type
IdxView<IntView>* is required for the array argument of
Element::ViewDom<IntView,IntView>::post(...).
My first idea was to introduce a new field in my propagator of just that
type -- but then I'd have two views for the same variable array, which seems
somehow redundant to me. So I decided to replace the respective field of
type ViewArray<IntView> with the IdxView<IntView>* thing, which entailed
several other changes.
Doing this I ran into several problems, both at compile time and
subsequently at runtime. I will continue to look into this, though...
Again, thank you very much so far.
/Lars
More information about the gecode-users
mailing list


housing-com
Businessmodel of Housing.com
Customer Segments
Housing.com provides services to two distinct customer groups: general consumers seeking to buy, rent or sell properties; and property developers, brokers and agents that wish to sell properties and market their services.
Professional customers primarily comprise small businesses and independent agents that do not have their own online sales portals and have limited market reach.
The Company’s real estate portal currently only covers properties across 40 of India’s largest cities, including Mumbai, Delhi, Hyderabad, Pune and Chennai. Among its customers the Company includes brokers and agents from Indian real estate companies such as Dosti Real Estate, Rithika Realtors, Gemini Properties and Vyankatesh Property.
Value Propositions
Housing.com’s key value to its consumers is the functionality, convenience and flexibility of its platform. The Housing.com search portal allows users to filter search results using a range of criteria, including by developer and by locality.
The Company also provides information regarding local amenities, commuting times, floor plans, price trends and location of nearby services. For brokers and agents, the platform greatly enhances their marketing reach and enables them to take advantage of the growing trend of online real estate sales.
Developers and builders are also provided tools to better track their inventory, sales, leads and commissions, all from a single platform.
Channels
Housing.com operates a real estate search portal at www.housing.com, or www.housing.co.in, which is accessible through mobile and desktop browsers.
The Company also has a mobile app that is available through the Apple App Store and the Google Play marketplace. The Company can also be contacted directly over the phone to discuss its services.
Customer Relationships
The Housing.com portal is entirely self-service for general consumers who are looking to buy or rent properties. Users can search the portal without registration but must set up an account before completing any transactions; this can be done via the Housing.com homepage. In order to sell a property, owners must fill in an online form providing information about the property and submit to an in-person property inspection before a listing can be completed.
Agents, brokers, developers and builders can take advantage of the Company’s services and platform by contacting the Housing.com sales team directly. Housing.com provides support to its customers via email.
Customers can interact with the Company directly through its Facebook, Twitter, LinkedIn, Pinterest, YouTube, Instagram and Google+ accounts.
Key Activities
Housing.com operates an online real estate platform that allows users to search for properties across 40 cities in India, with filters for price, location and child-friendliness.
In addition to providing information regarding properties for rent and sale, it offers information on new residential projects, real estate agents, home loans, and rental agreements. The Company supplements this by providing a range of data science products that analyse trends within the Indian property market.
Housing.com also operates a cloud-based sales lifecycle management platform for developers and agents that includes sales management, inventory tracking, call centre management, and lead tracking tools.
According to a corporate profile, the Company also provides ancillary risk assessment, project monitoring, business intelligence, and back-end research services.
Key Partners
Housing.com partners with a range of real estate companies and bodies, technology companies and financial institutions. In October 2015 the Company agreed a 3-year strategic partnership with trade organisation the Confederation of Real Estate Developers Association of India, with the Company agreeing to set up an online platform that would help developers to engage more effectively with customers.
Housing.com has also recently partnered with Uber, integrating the ride-sharing company’s functionality into its own mobile app so that customers can book a ride after identifying a property of interest.
It also has an integration partnership with Google Now that ensure customers can receive real-time property updates.
Housing.com also cooperates with a network of affiliate banks and credit institutions as part of its home loan comparison and tracking service. This includes tie-ups with leading institutions such as Citi Bank, Tata Capital, Axis Bank and Indiabulls Home Loans.
Key Resources
Housing.com’s key resources are its technology and property search portal, its IT infrastructure, its community of brokers and agents, and its personnel. The Company has no patent applications filed with the US Patent and Trademark Office in the name Housing.com or Locon Solutions. Patents in India do not appear to be searchable by applicant name.
Cost Structure
Housing.com incurs costs in relation to the development of its online platform, the maintenance of its IT infrastructure, and the retention of its personnel. In recent years the Company is also reported to have spent significantly on advertising and marketing, spending around INR 2.5 billion on an advertising campaign in 2015. This was reported to be the Company’s largest expense that year, ahead of human resources costs.
Revenue Streams
Housing.com’s revenue model has undergone several changes throughout its short lifespan. The Company originally generated revenue through a subscription system, with real estate brokers and agents paying a six-monthly or annual fee to list an unlimited number of properties on the Housing.com platform. Reports from 2014 suggest that subscriptions were priced at INR 5,000 (currently around $74) for six months or INR 8,000 (currently around $119) for a full year.
In 2014 Housing.com reportedly made attempts to further monetise its platform by providing technology products and solutions to builders, including a product named Slice View that enabled users to accurately view building plans. The Company also introduced media buying and advertising services for builders and developers. These new revenue streams ultimately proved unsuccessful after the Company’s new products and services reportedly failed to meet customer expectations.
Housing.com has since returned to a subscription-based model. Recent report’s, however, state that the Company has launched a series of new digital advertising and marketing products targeted at developers and brokers. Housing.com also operates an online marketplace that allows customers to compare, apply for and track home loans from a network of affiliate banking institutions. The Company reportedly expect to generate $10 million in revenue in fiscal year 2017.


up831162
Home
Discovery Log
Literature Review
Contact
☰
WEBF1 Coursework 2
Welcome to the homepage
My video
Your browser does not support the video tag.


LucasJin
Front-end Developer
HOME
ABOUT
PROJECT
CONTACT
contact me
XIN JIN
<EMAIL_ADDRESS>(0034)634246136
paseo zorrila
47007
Valladolid Spain
Do you have more question about me?
Your name
Your email
Do you like my website?
Yes,I like it a lot!
It´s quite normal.
No,I don´t like it at all!
Your age:
select your age
0-10
11-20
21-30
31-40
41-50
51-60
60++
Comments
Subscribe me to the newsletter
E-mail
Submit


Michelle Moreno
Have sent a photo
3 min ago| Name Device | HTC One |
| Serial Number | 21 |
| Product Number | 69 |
| User Borrow | Nam |
| Borrow Reason | For study |
| Borrow Date | 01/04/2019 |
| Return Date | 01/04/2020 |
| Created User | Nam |
| Update User | Linh123 |
| Created Time | 07/08/2015 |
| Update Time | 07/08/2016 |
| Status | Wait |
Copyright © 2018 Colorlib. Saishunkan Co.,Ltd. All Rights Reserved..


Top Ten Movies Fight Club Trainspotting Inglourious Basterds Star Wars: The Force Awakens Deadpool Zombieland Inglourious Basterds Inglourious Basterds Inglourious Basterds Inglourious Basterds
Top Ten TV Shows It's Always Sunny in Philadelphia Archer Rick and Morty Rick and Morty Rick and Morty Rick and Morty Rick and Morty Rick and Morty Rick and Morty Rick and Morty
Books The Lord of the Rings Trilogy, The Hobbit, and The Silmarillion By J.R.R. Tolkien The Harry Potter Series By J. K. Rowling Ender's Game and Series By Orson Scott Card
Other Stuff/Media Dungeons and Dragons (D&D) related things (i.e. books, blurbs, etc.) Critical Role - online D&D adventure (Twitch Show) Random/Useless information acquired by following "internet rabbit-holes"


-
Discuss a time you had an emotional conflict with someone. What was it about? What happened?
I had an emotional conflict with my best friend, I had to move away for higher studies and she couldn't accept the fact that we would not be able to see each other for a long time.
-
What was the source of the conflict?
We met in a cooking class, we hit it off immediately we had the same interests, the same hobbies, and we were close friends for 6 years. We saw each other almost everyday; she thought we would lose touch, she wasn't supportive of my decision or my dream of pursuing higher studies.
-
How did you handle that conflict?
I tried explaining her as why it was so important, I would try and convince her as to why I needed to leave. I then showed her my acceptance letter.
-
Did your actions make the conflict better or worse?
She refused to understand, we fought everyday. But then one day she saw my acceptance letter from the university and she understood the importance of the situation.
-
If you could go back, what would you do differently, if anything?
I would have been more patient with her, more understanding.
-
What did you learn from this experience?
I learnt how there are so many people who depend on you and your decisions, how your actions have consequences that are sometimes faced by the ones who care for you.


FIFA
Get and spend your levy funds for your apprenticeship programme
Team
Invite new users and manage existing ones
Funding
Manage your funds including how much you have available to spend, your transactions and funds you could lose
SFA agreements
Manage organisations and sign your agreements
PAYE
Manage the PAYE schemes associated with your Account
Apprentices
Add apprentices, review and approve cohorts and pause or stop apprentices
Give us your feedback
This is a new service and your feedback will help us improve it. Use the link below to take part in a short survey.


menu
Products
search
notifications
shopping_cart
arrow_back
search
local_offer
verified_user
view_list
view_module
filter_list
Latest products
Search results
Product {{n}} name
24in X 36in
$350
Product details
favorite_border
favorite
add_shopping_cart
remove_shopping_cart
Product {{n}} name
The titles of Washed Out's breakthrough song and the first single from Paracosm share the
View
favorite_border
favorite
add_shopping_cart
remove_shopping_cart


TABLE OF CONTENT
A. GS1 Related B. GS2 Related Polity 1. The past catches up Health Issues 2. A looming threat: on the TB crisis C. GS3 Related Economics 1. Plea in SC seeks curbs on cryptocurrencies 2. IBBI notifies rules for bankruptcy probe Science and Technology 1. Super-flexible and strong artificial silk developed 2. 3D-printed, functional heart made Environment and Ecology 1. Safe haven for endangered Egyptian vultures 2. GM mustard release faces another hurdle D. GS4 Related E. Concepts-in-News: Related Concepts to Revise/Learn F. Bills/Acts/Schemes/Orgs in News G. Practice Questions for UPSC Prelims Exam
UPSC Current Affairs 2017: News Analysis
A. GS1 Related
Nothing here for Today!!!
B. GS2 Related
Context
- By ordering an investigation by the Central Bureau of Investigation into more than 80 cases of suspected extra-judicial killings in Manipur, the Supreme Court has reiterated the principle of accountability as an essential part of the rule of law.
- These cases involved either suspected fake encounters or the use of excessive or retaliatory force.
- Even after this ruling on petitions demanding an inquiry into 1,528 deaths in counter-insurgency operations in Manipur, the Attorney General had argued against the court ordering an investigation into some specific instances.
What the SC has said?
- The court has rightly rebuffed an attempt by the government to stall any probe into these deaths on the ground that they were too old to be raked up now.
- It has taken the view that the killing of a person who was possibly innocent cannot be overlooked owing to mere lapse of time.
- The state cannot take advantage of its own inaction and scuttle a probe by citing the delay as a reason.
- Last year, the court had ruled that the armed forces cannot escape investigation for excesses even in places where they enjoy special powers, and that the legal protection provided by the Armed Forces (Special Powers) Act, or AFSPA, will have to yield to the principles of human rights.
Centre’s argument
- AG had come up with the unpalatable argument that inquiries conducted by the authorities in Manipur were biased in favour of the citizens owing to local pressure and the ground situation.
Court’s response
- The court stood firm in its assessment, deprecating the suggestion that all inquiries were biased and motivated.
- The court’s order is yet another reminder that AFSPA has contributed to the climate of impunity in States where it is in force, especially in Manipur, and this may trigger a fresh demand for its repeal.
National Human Rights Commission as “toothless tiger”
- Another worrying aspect in the domain of human rights is that the National Human Rights Commission has been reduced to a “toothless tiger”.
- It is grossly understaffed despite its increasing workload, and many State governments show little respect for its guidelines and instructions.
- The court’s directive that the Centre take note of the NHRC’s concerns and remedy the situation could not have come a day too soon.
1. A looming threat: on the TB crisis
In news
- About 5,500 of over 76,000 children tested in nine Indian cities have been diagnosed with tuberculosis, 9% of them with multi-drug resistant TB (MDR-TB), highlighting the silent spread of the disease.
- About 5,500 of over 76,000 children tested in nine Indian cities have been diagnosed with tuberculosis, 9% of them with multi-drug resistant TB (MDR-TB), highlighting the silent spread of the disease.
- Though the actual prevalence of MDR-TB among children in India is not known, the results from a limited number of children tested in this sample, under the Revised National TB Control Programme, is worrying.
Statistics
- According to a 2015 study, of the over 600 children who had tested positive for TB in four cities, about 10% showed resistance to Rifampicin, a first-line drug.
WHO Guidelines
- In line with World Health Organisation guidelines, the RNTCP requires all household contacts, particularly children, of a newly diagnosed pulmonary TB patient to be tested and started on treatment if needed.
- Children below six years of age in the household of a newly diagnosed patient are required to be given the drug Isoniazid as a prophylactic even when they do not have the disease.
Measures to be taken
- A proactive approach to testing helps in early and correct diagnosis of all contacts and in cutting the transmission chain.
- Unfortunately, as several studies have shown, the RNTCP guidelines on contact screening are heeded mostly in the breach.
- The results from this limited study should now compel the government to take up contact screening more urgently.
- In 2010, WHO had revised the dosage of certain TB drugs for children. Fixed-dose combination (FDC) drugs that take into account the revised dosages for children were finally made available in late 2015.
- The FDCs are meant for treating children with drug-susceptible TB and cannot be used to treat children who require second-line drugs or who have MDR-TB. After more than a year’s delay, a few months ago India finally introduced FDCs in six States.
- The remaining States will be covered by the end of this year. Adherence to treatment will improve, and correct dosage for children weighing less than 25 kg will become easier when child-friendly FDCs become available throughout the country.
- Using the Xpert molecular diagnostic test to screen children with TB is a positive step and should be welcomed, but all the diagnosed children should be guaranteed paediatric FDCs. It would be unethical to deny them this lifeline.
Category: ENVIRONMENT AND ECOLOGY
1. Plea in SC seeks curbs on cryptocurrencies
In news
- The Supreme Court has asked the Reserve Bank of India to consider the issues raised by a PIL petitioner seeking urgent steps to restrain the sale and purchase of illegal cryptocurrencies or “Virtual Currency” (VCs) like bitcoins.
PIL was filed in SC to seek curb on cryptocurrencies on following grounds
- Virtual currency was being traded anonymously over the Internet and used for a host of anti-national and illegal activities, from terror funding to illicit trade of arms and drugs and so on.
- The use of the parallel currency is having a negative impact on Indian currency.
- The online use of this currency, was without any border restrictions or geographical constraints, resulting in danger to the integrity and sovereignty of the nation.
2. IBBI notifies rules for bankruptcy probe
In news
- IBBI, which is implementing the Insolvency and Bankruptcy Code (IBC), has notified the regulations for inspection and investigation of service providers registered with it.
New regulation
- The Insolvency and Bankruptcy Board of India (IBBI) has powers to start probe against service providers registered with it without intimating them.
- As per the regulations, the investigation authority has to serve a notice intimating the entity concerned about the probe at least ten days in advance.
- However, the requirement could be done away with on grounds such as apprehensions that the records of the particular service provider might be destroyed before the probe starts.
- Insolvency professional agencies, professionals, entities and information utility are considered as service providers under the Code.
Category: SCIENCE AND TECHNOLOGY
1. Super-flexible and strong artificial silk developed
In news
- Scientists from the University of Cambridge have developed super-stretchy and strong artificial silk, composed almost entirely of water, which may be used to make eco-friendly textiles and sensors.
- The fibres, which resemble miniature bungee cords as they can absorb large amounts of energy, are sustainable, non-toxic and can be made at room temperature.
- The fibres are spun from a soupy material called a hydrogel, which is 98% water.
- The remaining 2% of the hydrogel is made of silica and cellulose, both naturally available materials, held together in a network by barrel-shaped molecular “handcuffs” known as cucurbiturils. The chemical interactions between the different components enable long fibres to be pulled from the gel, said the researchers.
These fibres are Non-toxic
- Although these fibres are not as strong as the strongest spider silks, they can support stresses in the range of 100 to 150 megapascals, which is similar to other synthetic and natural silks. However, these fibres are non-toxic and far less energy-intensive to make.
2. 3D-printed, functional heart made
In news:
- Scientists have developed a 3D-printed soft silicone heart that closely resembles and functions like the human organ, and could help save lives of people who suffer from cardiac failure.
- About 26 million people worldwide suffer from heart failure. The soft artificial heart weighs 390 grams and has a volume of 679 cubic centimetres.
- It is a silicone monoblock with complex inner structure.
Category: ENVIRONMENT AND ECOLOGY
1. Safe haven for endangered Egyptian vultures
In news:
- Breeding of the rare and threatened Egyptian vultures in a human habitat at the Punjabi University campus in Patiala has come as a pleasant surprise for birding enthusiasts.
Egyptian vulture
- The Egyptian vulture ( Neophron percnopterus ), one among the globally threatened vulture species found in India, is classified under the ‘Endangered’ (EN) red list of the International Union for Conversation of Nature (IUCN).
- The species is popularly known as safed giddh (white vulture) in Hindi.
- According to BirdLife International, a global partnership of organisations working for the conservation of birds, the present global breeding population of the Egyptian vulture is estimated to be 12,000 to 38,000 individuals.
Habitat Niche
- Egyptian vultures usually build their nests on the cliffs of mountains, roofs of buildings and on tree-tops.
Food Niche of the species
- The species rarely hunt its food — the birds mostly feed on dead carcasses of animals, birds and reptiles. They eat eggs and sometimes, in the absence of animal carcasses, switch over to household solid waste like rotten fruits and vegetables.
2. GM mustard release faces another hurdle
In news
- Dissent has crept in among agricultural scientists of the National Academy of Agricultural Sciences (NAAS) over the possible release of genetically modified mustard.
Background
- In May, NAAS President wrote to Prime Minister Narendra Modi, endorsing DMH-11, a variety of mustard developed by Deepak Pental of Delhi University, a NAAS Fellow, that employs genes from soil bacterium.
- If approved, it would be the first transgenic edible crop to be grown in Indian fields.
- The plant had gone through adequate tests and was declared “safe” and passed regulatory muster.
A dissent note by a member
- However, P.C. Kesavan, also a Fellow of the NAAS, wrote that he disagreed with this endorsement.
- According to him, the resolution of the NAAS is neither scientifically valid, nor ethical, and therefore not maintainable.
Counter arguments to GM Mustard
- DMH-11 is a hybrid variety of mustard developed by crossing a traditional variety of mustard, called Varuna, and an East European variety.
- DMH-11 did not perform as well as several other varieties and mustard hybrids and that the Genetic Engineering Appraisal Committee (GEAC), the Environment Ministry body that cleared DMH-11, was riddled by a “conflict of interest.”
- Using genetically-modified technology to produce hybrid seed varieties was a “failed experiment” as evidenced by the experience of Bt cotton.
- Though the latter occupied 95% of India’s acreage, its yields were on the decline since 2006, largely due to insect resistance, and that it nearly tripled the cost of producing cotton between 2006-2013.
Bodies associated
- The NAAS — a 625-member body of agricultural scientists — had about 200 scientists in its quorum when it passed a resolution endorsing the GEAC’s decision to clear DMH-11 for commercial field trials.
- The GEAC, India’s apex regulator for genetically modified seeds, had cleared GM mustard for environmental release and use in farmer fields on May 11 this year.
D. GS4 Related
Nothing here for Today!!!
PIB Articles Editorials Roundup
E. Concepts-in-News: Related Concepts to Revise/Learn
PRELIMS WORTHY FACTUAL INFORMATION
BirdLife International
- BirdLife International (formerly the International Council for Bird Preservation) is a global partnership of conservation organisations that strives to conserve birds, their habitats and global biodiversity, working with people towards sustainability in the use of natural resources.
- It is the world’s largest partnership of conservation organisations, with over 120 partner organisations.
- Bombay Natural History Society is India’s partner.
F. Bills/Acts/Schemes/Orgs in News
Nothing here for Today!!!
G. Practice Questions for UPSC Prelims Exam
Question 1. Consider the statements about DMH-11, a hybrid variety of mustard:
- If approved, it would be the first transgenic edible crop to be grown in Indian fields.
- DMH-11 is a hybrid variety of mustard developed by crossing a traditional variety of mustard, called Varuna, and an East European variety.
Which of the above statements is/are correct?
- 1 only
- 2 only
- Both 1 and 2
- None
Question 2. Xpert molecular diagnostic test is associated with which one of the following
diseases?
- Degue
- Chickengunya
- Ebola
- Tuberculosis
Question 3. Consider the statements about Egyptian vultures:
- Egyptian vultures usually build their nests on the cliffs of mountains, roofs of buildings and on tree-tops.
- The species rarely hunt its food — the birds mostly feed on dead carcasses of animals, birds and reptiles.
- The vultures, in the absence of animal carcasses, switch over to household solid waste like rotten fruits and vegetables.
Which of the above statements is/are correct?
- 1 and 2 only
- 1 and 3 only
- 2 and 3 only
- 1, 2 and 3
Question 4. Consider the statements about BirdLife International:
- It is a global partnership of conservation organisations that strives to conserve birds, their habitats and global biodiversity, working with people towards sustainability in the use of natural resources.
- It is the world’s second largest partnership of conservation organisations, with over 120 partner organisations.
- Bombay Natural History Society is India’s partner of BirdLife International.
Which of the above statements is/are correct?
- 1 and 2 only
- 1 and 3 only
- 2 and 3 only
- 1, 2 and 3
Question 5: Consider the statements about National Human Rights Commission of India:
- It is a constitutional body.
- Its chairperson should be retired Chief Justice of India.
Which of the above statements is/are correct?
- 1 only
- 2 only
- Both 1 and 2
- None
“Proper Current Affairs preparation is the key to success in the UPSC- Civil Services Examination. We have now launched a comprehensive ‘Online Current Affairs Crash Course’. Limited seats available. Click here to Know More.”
Practice More: Enroll for India’s Largest All-India Test Series


FACTS about Iceland
Toggle navigation
Home
Concerts
Carpools
Flights
The Basic Facts
Native Name
Island
Demonym
Icelander
Area(m2)
103000
Calling Code
352


Inclusive Design’s Hidden Legacy—And How to Rise with It
Austin Michael Sui, Senior Designer, Airbnb
Inclusive Design
In airbnb they have this internal system where it generates a series of screenshots of the app so designers can see them in diferent systems, sizes and flows
Icon contrast is acceptable at 3:1 Showing the chips of color contrast and the text that goes with each color
For accessibility on gradients he testes each one trasparency for each hue
words for accessibility that needs to be avoid Look for, see here, find those words and note them so we dont say them becuase in accessibility they can offend people
There is no normal user the users are a big spectrum you never know really how a user will interact with your product, so you shoul design more inclusive
What happenes wehn you use inclusive design
Inclusive whatch Hyungsoo Kim
Desire reduces stigma, when all users want a product or experiecne everyone wants the same and noone feels left out
Frank loy Wrigth design a hoyse for Phyluis & Kenneth Laurent that becomes an inclusive house. Apply existing skills to people new to you understand people needs and use them to adapt design
Accessibility Icons. Design activism is to create a positive reaction. Inclusive design calls to the rebel on you. The new inclusive icon is at the moma, it is open source
design decisions reveal our values. Inclusive Design is a practice of consciously designing experience that foster belonging
Jennifer Hom illustrator at airbnb @jhommnmmnom. Looking and finding people with dissabilities can help you get more comfortable and you can learn about their every day life. Get comfortable being uncomfortable 15 % of population has dissabilities
Airbnb.anotherlense balance your bias consider the opposite embrace a growth. Progress is to increase inclusion
Books and resources
Accessibility Contrast checker
Accessibility Color Contrast Analyzer chrome extention
Find all the slides for this talk
Slide for this conference Day 2 Talk-9 Progressive Web Apps


We’ve got a new case to crack. Let’s open RStudio.
We are Kristie, Dorian, and Derek and we like R.
We are cats and not computer scientists.
We make lots of mistakes. You will see us make mistakes. Feel free to laugh at us. It’s okay.
Spelling is very important in R.
Okay detective, let’s open a new dossier for today’s case.
Start a new project
"cat_mystery"
R “scripts” are where you write your R code and document your work. They’re like recipes or prescriptions you write the tell the computer what you want to happen to your data.
Open a new R script
Save script
cat_code.R
1. Code editor
This is where you write your scripts and document your work. The tabs at the top of the code editor allow you to view scripts and data sets you have open. This is where you’ll spend most of your time.
2. Console
This is where code is actually executed by the computer. It shows code that you have run and any errors, warnings, or other messages resulting from that code. You can input code directly into the console and run it, but it won’t be saved for later. That’s why we like to run all of our code directly from a script in the code editor.
3. Workspace
This pane shows all of the objects and functions that you have created, as well as a history of the code you have run during your current session. The environment tab shows all of your objects and functions. The history tab shows the code you have run. Note the broom icon below the Connections tab. This cleans shop and allows you to clear all of the objects in your workspace.
4. Plots and files
These tabs allows you to view and open files in your current directory, view plots and other visual objects like maps, view your installed packages and their functions, and access the help window. If at anytime you’re unsure what a function or package does, enter the name of thing after a question mark. For example, try entering ?mean
into the console and push ENTER.
Let’s add a little style so we feel more at home. Follow these steps to change the font-size and and color scheme:
Global Options...
Appearance
with the paint bucket.You can create objects and assign values to them using the “left arrow” <-
, more officially known as the assignment operator. Try adding the code below to your R script and creating an object called name
.
Once you add the code to your script, you can run the code by moving the blinking cursor to that line and pressing CTRL + ENTER.
# Create a new object
cat <- "Derek"
cat
# When saving text to a character object you need quotation marks.
# This won't work.
cat <- Demitri
# Without quotes, R looks for an object called Derek, and then let you know that it couldn't find one.
# You can copy an object by saving it to a new name.
cat2 <- cat
# Overwrite an object
cat <- "Demitri III"
cat
# Did name2 change as well?
cat2
If you create a name you don’t like you can drop it with the function rm()
.
# Delete objects to clean-up your environment
rm(cat)
rm(cat2)
# How can you get the original 'cat' object back?
HOORAY! Don’t worry about deleting data or making a mistake in R. When you load data files into R it only copies the contents. That means all your original data files will remain safe and won’t suffer from any accidental changes. If anything disappears or goes wrong in R, it’s okay! You can always re-load the data using your script. No more worries about whether you remembered to save the latest data file or not.
Everything has a name in R and you can name things almost anything you like. You can even name your data TOP_SECRET_Shhhhhh...
or unicorn_sightings
or the_worst_data_ever
.
Sadly, there are a few minor restrictions. Object names can’t include spaces or special characters such as a +
, -
, *
, \
, /
, =
, !
, or )
. However, on the plus side object names can include a _
.
Your turn! Try running some of these examples in your R console.
n cats <- 5
n*cats <- 5
n_cats <- 5
n.cats <- 5
all_the_cats! <- "A very a big number"
# You can add one cat
n_cats <- n_cats + 1
# But what if you have 10,000 cats?
n_cats <- 10,000
# They also cannot begin with a number.
1st_cat <- "Fluffer Puff"
# But they can contain numbers.
cat1 <- "Fluffer Puff"
NOTE: What happened when you created
n_cats
the second time?When you create a new object that has the same name as something that already exists, the new object will replace the old one. Sometimes you’ll want to update an existing object and replace the old version. Other times you may want to copy an object to a new name to preserve the original. This is similar to choosing between Save and Save As when you save a file.
You can put multiple values inside c()
to make a vector of items. Each additional item is separated by a comma. The c
stands for to conCATenate or to combine values.
Let’s use c()
to create a few vectors of cat names and their ages.
# Create a character vector and name it cat_names
cat_names <- c("Fluffy", "Longmire", "Lucy")
# Print cat_names to the console
cat_names
## [1] "Fluffy" "Longmire" "Lucy"
# Create a numeric vector and name it cat_ages
cat_ages <- c(3,7,14.5)
# Print cat_ages to the console
cat_ages
## [1] 3.0 7.0 14.5
A table in R is known as a data frame. Data frames have columns of data, each made from a named vector. Let’s make a data frame with two columns by using the cat names and ages from above.
# Create table with columns "names" and "ages" with values from the cat_names and cat_ages vectors
cat_df <- data.frame(names = cat_names,
ages = cat_ages)
# Print the cat_df data frame to the console
cat_df
## names ages
## 1 Fluffy 3.0
## 2 Longmire 7.0
## 3 Lucy 14.5
To see the values in one of your columns, use the $
sign after the name of your table.
# Print the "ages" column in cat_df
cat_df$ages
## [1] 3.0 7.0 14.5
Which of these names are valid for a new object? (Hint: You are allowed to test them.)
my cat fred
my_CAT55
5cats
my-cat
Whatever!
my_CAT55
Yes!! That was purrfect!
You may have noticed the text in the scripts with the #
in front. These are called comments. Any line that starts with a #
won’t be executed as R code. You can use the # to add notes in your script to make it easier for others and yourself to understand what is happening and why. You can also use comments to add warnings or instructions for others, add references to data you’re using, or point out things that need to be looked into further.
Now that you know what objects are and how to create them, let’s learn how to use them. Functions take one or more inputs called “arguments”. They perform steps based on the arguments and usually return an output object.
You can think of a function like ordering pizza.
order_pizza(address = "140 3rd place, Bingo MN",
toppings = c("mouse whiskers", "catnip", "anchovies"),
time = "ASAP")
The function above calls a pizza place and provides several arguments (your address, pizza toppings, and delivery time). With some luck, the function will sucessfully return a new object (your cat’s favorite pizza). Note that when you have more than one argument, you will use a comma to separate them.
We already covered two functions: c()
and data.frame()
. Now let’s use the mean()
function to find the average age of our cats.
# Call the mean function with cat_ages as input
cat_ages_mean <- mean(cat_ages) # Assigns the output to cat_ages_mean
# Print the cat_ages_mean value to the console
cat_ages_mean
## [1] 8.166667
The mean()
function takes the cat_ages vector as input, performs some calculations, and returns a single numeric object. Note that we assigned the output object to the name cat_ages_mean
. If you don’t assign the output object it will be printed to the console and won’t be saved. Sometimes this is okay, especially when you’re still in the exploratory stages.
# Alternative without assigning output
mean(cat_ages)
## [1] 8.166667
Note that our cat_ages
vector has not changed at all. Each function has its own “environment”, and all of its calculations happen inside its own bubble. Usually anything that happens inside a function won’t change objects outside of the function’s environment.
cat_ages
## [1] 3.0 7.0 14.5
There are functions in R that are more complex, but most boil down to the same general setup:
new_output <- function(input1, input2)
You call the function with input arguments inside parentheses and get an output object in return. You can make your own functions in R and call them almost anything you like, even my_amazing_cat_function()
. Naming rules for functions and arguments are the same as those for objects (no spaces or special characters like +
, -
, *
, /
, \
, =
, or !
and they can’t begin with a number, sorry).
Which of these is a valid function call?
lick(“paws” “tail”)
scratch, “couch”, “door”
sleep(3, “hours”)
meow(until fed)
shed(1 million, “hairs”)
sleep(3, "hours")
Correct! You’re quite good at this.
The first step of a good mystery is finding some clues. Here’s an example data table showing my favorite cats. It is saved on the internet as an Excel file here.
| Cat Name | Cat Age | Cat Color |
|---|---|---|
| Mr. Sauce | 3 | Salt-n-pepper |
| Sad Face | 2 | Tabby |
| Noodles | 6 | Calico |
But how do we get this data into R?
The main data format in R is the CSV (comma-separated values). A CSV is a simple text file that can be opened in R and most other stats software, including Excel.
Here’s how the example cat table looks when it is saved as a .CSV file.
my_cats.csv
Cat Name,Cat Age,Cat Color
Mr. Sauce,3,Salt-n-pepper
Two Face,2,Tabby
Noodles,6,Calico
It looks squished together right now, but that’s okay. When it’s opened in R the text will become a familiar looking table with columns and rows.
First, open the Excel cat table by copying this path into a new window or to the Windows search bar - X:\Agency_Files\Outcomes\Risk_Eval_Air_Mod\_Air_Risk_Evaluation\R\R_Camp\Student Folder\my_cats.xlsx
.
And then follow these instructions to save the Excel file as a CSV file.
Now let’s check that it worked. Return to RStudio and open your new data folder by finding it in your Files tab in the lower right window. Click on your CSV file and choose View File.
Copy the code below to your R script and run the line with the read.csv
function (Hit CTRL + ENTER). It will return a nice cat data frame called my_cats
. The character string "data/my_cats.csv"
inside the parentheses of the read.csv()
function is the path of the data file.
read.csv("data/my_cats.csv")
## Cat.Name Cat.Age Cat.Color
## 1 Mr. Sauce 3 Salt-n-pepper
## 2 Sad Face 2 Tabby
## 3 Noodles 6 Calico
Note: The location of the CSV file above will only work if you have your project open. When your project is open, R sets the working directory automatically to your project folder. We will demonstrate reading a file directly from the X-drive a bit later.
If you want to work with the data in R, you will need to give it a name by using the assignment operator <-
.
Try the code below.
my_cat_file <- "data/my_cats.csv"
my_cats <- read.csv(my_cat_file)
# Type the name of the table to view it in the console
my_cats
## Cat.Name Cat.Age Cat.Color
## 1 Mr. Sauce 3 Salt-n-pepper
## 2 Sad Face 2 Tabby
## 3 Noodles 6 Calico
You can save the file path as an object, such as cat_file <- "data/my_cats.csv"
. Then you can use that object as a shortcut to the location of your data. Now when you want to load the cat table you can write read.csv(cat_file)
. This handy trick will make it easier down the road when you want to update your code to use with new data.
# Assign the file path character string as an object with the name cat_file.
cat_file <- "data/my_cats.csv"
# Use read.csv with the object cat_file which refers to "data/my_cats.csv"
read.csv(cat_file)
## Cat.Name Cat.Age Cat.Color
## 1 Mr. Sauce 3 Salt-n-pepper
## 2 Sad Face 2 Tabby
## 3 Noodles 6 Calico
package
📦What is a package?
 They add capabilities like statistical functions, mapping powers, and special charts. In order to use a new package we first need to install it.
The readr package helps import data into R in different formats. It does extra work for you like cleaning the data of extra white space and formatting tricky dates.
Add a package to your library
install.packages("readr")
in the lower left consolePackages
tab in the lower right window of RStudio to see the packages in your library
readr
packageThe packages tab only shows the available packges that are installed. To use one of them, you will need to load it. Loading a package is like opening an App on your phone. To load a package we need to use the library()
function. After loading the readr package you will able to read the cat data with the shiny new function read_csv()
. This function is 300% better than read
.csv()
.
library("readr")
my_cat_file <- "data/my_cats.csv"
read_csv(my_cat_file)
## Parsed with column specification:
## cols(
## `Cat Name` = col_character(),
## `Cat Age` = col_integer(),
## `Cat Color` = col_character()
## )
## # A tibble: 3 x 3
## `Cat Name` `Cat Age` `Cat Color`
## <chr> <int> <chr>
## 1 Mr. Sauce 3 Salt-n-pepper
## 2 Sad Face 2 Tabby
## 3 Noodles 6 Calico
You may have noticed the row of three letter abbreviations under the column names. These describe the data type of each column.
chr
stands for character vector, or a string of characters. Examples: “apple”, “apple5”, “5 red apples”
int
stands for integer. Examples: 5, 34, 1071
We’ll see more data types, such as dates
and logical
, in later lessons.
What data type is the Color
column?
letters
character
words
numbers
integer
character
## Colors cannot be applied in this environment :( Try using a terminal or RStudio.
##
## --------------
## Meow! Not too shabby for a tabby.
## --------------
## \
## \
## \
## |\___/|
## ) (
## =\ /=
## )===(
## / \
## | |
## / \
## \ /
## jgs \__ _/
## ( (
## ) )
## (_(
##
Let’s look a bit closer at the read_csv()
function.
read_csv(my_cat_file)
# Get help
?read_csv
Function arguments
For read_csv()
, the character object argument my_cat_file is what the function uses to know where to find the data file to read. Funcitons often have more than one argument. Type ?read_csv
into your console to see help in the lower-right pane that describes all of the function’s arguments and what they do. Many of the options have default arguments (such as col_names = TRUE
), which the function will use if you don’t provide an alternative argument. A short scroll down in the help window will show you more details about the arguments and the values they take.
`function(arg1 = input1, arg2 = input2, arg3…)
The file argument tells us that the function expects a path to a file. It can be many types of files, even a ZIP file. Below that, you’ll see the col_names argument. This argument takes either TRUE
, FALSE
, or a character vector of column names. The default is TRUE
, which means the first row in the CSV is used as the column names for your data.
Don’t like the column names? We can give new column names to the col_names argument like this:
my_cat_file <- "data/my_cats.csv"
#Assign desired column names as a character vector named column_names
column_names <- c("Name", "Age", "Color")
read_csv(my_cat_file, column_names)
## # A tibble: 4 x 3
## Name Age Color
## <chr> <chr> <chr>
## 1 Cat Name Cat Age Cat Color
## 2 Mr. Sauce 3 Salt-n-pepper
## 3 Sad Face 2 Tabby
## 4 Noodles 6 Calico
We now have the column names we want, but now the original column names in our CSV file show up as a row in our data. We want read_csv
to ignore the first row. Let’s look through the help window and try to find an argument that can help us. The skip
argument looks like it could be helpful. Sure enough, the description is exactly what we’re looking for here. The default is skip = 0
(read every line), but we can skip the first line by providing skip = 1
.
column_names <- c("Name", "Age", "Color")
read_csv(my_cat_file, column_names, skip = 1)
## Parsed with column specification:
## cols(
## Name = col_character(),
## Age = col_integer(),
## Color = col_character()
## )
## # A tibble: 3 x 3
## Name Age Color
## <chr> <int> <chr>
## 1 Mr. Sauce 3 Salt-n-pepper
## 2 Sad Face 2 Tabby
## 3 Noodles 6 Calico
Success!
You may be wondering why we included skip =
for the skip argument, but only provided the objects for the other two arguments. When you pass inputs to a function, R will assume you’ve entered them in the same order that is shown on the ?help page. Let’s say you had a function called feed_pets()
with 3 arguments:
feed_pets(dogs = "dogfood", cats = "catnip", fish = "pellets")
.
A shorthand way to write this would be feed_pets("dogfood", "catnip", "pellets")
. If we write feed_pets("dogfood", "pellets", "catnip")
, the function will send fish pellets to your cat and catnip to your fish. No good. If you really wanted to write “pellets” second, you would need to tell R which food item belongs to each animal, such as feed_pets("dogfood", fish = "pellets", cats = "catnip")
.
The same thing goes for read_csv()
. In read_csv(my_cat_file, column_names, skip = 1)
, R assumes the file is my_cat_file
and that the col_names should be set to column_names
. The skip =
argument has to be included explicitly because skip is the 10th argument in read_csv()
. If we don’t include skip =
, R will assume the value we entered is meant for the function’s 3rd argument.
A handy shortcut to see the arguments of a function is to enter the name of the function in the console and the first parenthesis, such as read_csv(
, and then hit TAB
on the keyboard. This will bring up a drop-down menu of all the available arguments for that function.
Key terms
package
An add-on for R that contains new functions someone created to help you. It’s like an App for R.
library
The name of the folder that stores all your packages, and the function used to load a package.
What package does read_csv()
come from?
dinosaur
get_data
readr
dplyr
tidyr
readr
Great job! You’re fur real.
How would you load the package catfinder
?
catfinder()
library(“catfinder”)
load(“catfinder”)
package(“catfinder”)
library("catfinder")
Excellent! Keep the streak going.
On your way home from work you find a wet and mopey cat sitting on your front stoop. Oh my! It looks so sad, maybe you can bring it inside and give it a treat.
When you pick up the cat you notice a collar with a number on it.
HINT: Your cat’s tag number is the same as the last digit of your birthday. Weird coincidence right?
This gives you an idea! Your friend recently mentioned a list that has all the missing cats people have reported in the city. Maybe you can use the tag number to help find the lost kitty’s home.
Let’s get our script ready for some detective work. Since we bill by the hour we’re going to be very thorough with our documentation.
Script comments
Add a brief description of your new case to the top of the script using the comment symbol #
.
# This file documents my search for the home of a lost cat I found this evening.
# What I know so far
animal <- "cat"
tag_num <- 444
pet_detective <- "Agent Cooper"
# Next steps
# 1. Find the missing cat database.
# 2. Load the cat data.
#
Now let’s find ourselves some clues.
Thanks to your friend, you can download a list of all the missing cats in your town. Follow the steps below to read the cat data into R.
Open this URL in your browser https://github.com/MPCA-air/RCamp/tree/master/data, and find the file missing_cat_list.csv
. To download, Right click on your cat’s file and select Save Link As…. Navigate to your project folder and save the file into a folder named data\
. Don’t have a data
folder? Go ahead and create a new one.
Now you can paste the file’s location into the read_csv()
function. Here’s a code snippet to get you started.
library("readr")
# Replace the `...` with the name of the file
all_cats_file <- "data/..."
# Replace the `...` with 'all_cats_file'
all_cats <- read_csv(...)
library("readr")
all_cats_file <- "X:/Agency_Files/Outcomes/Risk_Eval_Air_Mod/_Air_Risk_Evaluation/R/R_Camp/Student Folder/missing_cat_list.csv"
all_cats <- read_csv(all_cats_file)
## Parsed with column specification:
## cols(
## name = col_character(),
## color = col_character(),
## age = col_integer(),
## gender = col_character(),
## country = col_character(),
## grumpy = col_integer(),
## fearful_of_people = col_integer(),
## playful = col_integer(),
## friendly_to_people = col_integer(),
## clumsy = col_integer(),
## greedy = col_integer(),
## owner_phone = col_character()
## )
In Windows there’s a handy trick to copy the path to a file on your computer:
File paths in R use forward slashes (
/
). In Windows you’ll need to switch backslashes (\
) to forward slashes (/
). A file on your desktop located atC:\Desktop\file.csv
would be read into R asread_csv("C:/Desktop/file.csv")
One trick to quickly fix a long path name is to press CTRL + F. Then you can use search tool to find any (
\
) and replace it with (/
).
NOTE: It’s good practice to load the packages you will need at the top of your script. You will need to run these lines every time you open R or switch projects. If you forget, you’re likely to see this error message.
read_csv(my_cat_file)
## Error in read_csv(my_cat_file): could not find function "read_csv"
Look in the upper right hand window of RStudio. This is the Environment window that shows all of the data frames you have created this session. You can see the names of the data frames, the number of observations (rows), and the number of variables (columns). This is helpful if you ever need to count your data (Hint Hint).
To see all the cat data click on the table called all_cats
in the Environment window.
“There’s over 2,000 missing cats!”
That’s a lot of cats. And there’s more bad news. There’s no column for tag numbers. So which cat is yours? Let’s see…  That’s a tough call. We need more information!
Let’s explore the missing cat data a bit more. Hopefully we can find some way to pick out your cat.
What is the second column in the all_cats
data frame?
age
gender
nametag
color
fur
color
You sure aren’t kitten around! Great work!
You’ve unlocked a new package!
The dplyr package is the go-to tool for exploring, re-arranging, and summarizing data.
Use install.packages("dplyr")
to add dplyr to your detective library.
Quick stretch break
Stand up. Move around.
Your analysis toolbox: The key dplyr functions
| Function | Returns |
|---|---|
select() |
select individual columns to drop, keep, or reorder |
arrange() |
reorder or sort rows by value of a column |
mutate() |
Add new columns or update existing columns |
filter() |
pick a subset of rows by the value of a column |
group_by() |
split data into groups by values in a column |
summarize() |
calculate a single summary row for the entire table |
select()
Use the select()
function to drop a column you no longer need, to select a few columns to create a new sub-table, or rearrange the order of your table’s columns.
Drop a single column with a minus sign
library("dplyr")
# Drop the grumpy column
select(all_cats, -grumpy)
## # A tibble: 2,785 x 11
## name color age gender country fearful_of_peop~ playful
## <chr> <chr> <int> <chr> <chr> <int> <int>
## 1 Latte grey and brown 3 Male Austral~ 2 5
## 2 Othello butterscotch 15 Female Thailand 1 7
## 3 Hershey tabby 5 Male Peru 1 6
## 4 Aboulomri brown 3 Female UK 1 2
## 5 Scratches white 11 Male Canada 1 5
## 6 Tuna salt and pepp~ NA Male Germany 1 7
## 7 Zonker white 4 Female China 5 5
## 8 Ovidius brown 10 Male Spain 2 5
## 9 Delia tabby 2 Female Canada 4 5
## 10 Hotdog salt and pepp~ 8 Female Spain 4 6
## # ... with 2,775 more rows, and 4 more variables:
## # friendly_to_people <int>, clumsy <int>, greedy <int>,
## # owner_phone <chr>
Drop multiple columns with -c(col_1, col_2)
# Drop the grumpy and greedy columns
select(all_cats, -c(grumpy, greedy))
## # A tibble: 2,785 x 10
## name color age gender country fearful_of_peop~ playful
## <chr> <chr> <int> <chr> <chr> <int> <int>
## 1 Latte grey and brown 3 Male Austral~ 2 5
## 2 Othello butterscotch 15 Female Thailand 1 7
## 3 Hershey tabby 5 Male Peru 1 6
## 4 Aboulomri brown 3 Female UK 1 2
## 5 Scratches white 11 Male Canada 1 5
## 6 Tuna salt and pepp~ NA Male Germany 1 7
## 7 Zonker white 4 Female China 5 5
## 8 Ovidius brown 10 Male Spain 2 5
## 9 Delia tabby 2 Female Canada 4 5
## 10 Hotdog salt and pepp~ 8 Female Spain 4 6
## # ... with 2,775 more rows, and 3 more variables:
## # friendly_to_people <int>, clumsy <int>, owner_phone <chr>
Keep only three columns
# Keep the name, grumpy and greedy columns
select(all_cats, c(name, grumpy, greedy))
## # A tibble: 2,785 x 3
## name grumpy greedy
## <chr> <int> <int>
## 1 Latte 2 2
## 2 Othello 2 2
## 3 Hershey 1 3
## 4 Aboulomri 7 7
## 5 Scratches 3 7
## 6 Tuna 1 2
## 7 Zonker 3 3
## 8 Ovidius 3 6
## 9 Delia 5 6
## 10 Hotdog 3 3
## # ... with 2,775 more rows
Rearrange: Move the age
and country
columns directly after name
# Move the `age` and `country` columns directly after `name`
# Leave `everything()` else in same order
select(all_cats, name, age, country, everything())
## # A tibble: 2,785 x 12
## name age country color gender grumpy fearful_of_peop~ playful
## <chr> <int> <chr> <chr> <chr> <int> <int> <int>
## 1 Latte 3 Austral~ grey and~ Male 2 2 5
## 2 Othello 15 Thailand buttersc~ Female 2 1 7
## 3 Hershey 5 Peru tabby Male 1 1 6
## 4 Aboulo~ 3 UK brown Female 7 1 2
## 5 Scratc~ 11 Canada white Male 3 1 5
## 6 Tuna NA Germany salt and~ Male 1 1 7
## 7 Zonker 4 China white Female 3 5 5
## 8 Ovidius 10 Spain brown Male 3 2 5
## 9 Delia 2 Canada tabby Female 5 4 5
## 10 Hotdog 8 Spain salt and~ Female 3 4 6
## # ... with 2,775 more rows, and 4 more variables:
## # friendly_to_people <int>, clumsy <int>, greedy <int>,
## # owner_phone <chr>
arrange()
Use the arrange()
function to sort data based on one or more of the columns in the table. Let’s use arrange()
to answer some questions about the missing cats.
library("dplyr")
# Sort by the grumpy column
all_cats <- arrange(all_cats, grumpy)
# Enter the table name to view the ordered data
all_cats
## # A tibble: 2,785 x 12
## name color age gender country grumpy fearful_of_peop~ playful
## <chr> <chr> <int> <chr> <chr> <int> <int> <int>
## 1 Hershey tabby 5 Male Peru 1 1 6
## 2 Tuna salt an~ NA Male Germany 1 1 7
## 3 Ludwig white 15 Male Peru 1 3 6
## 4 Beastie peaches~ 13 Male Thailand 1 2 5
## 5 Hayley grey an~ 1 Female USA 1 6 7
## 6 Fuzzina~ peaches~ 5 Male New Zea~ 1 2 6
## 7 Desiree black 9 Male Thailand 1 1 7
## 8 Zoloft butters~ 20 Female UK 1 2 7
## 9 Dinky salt an~ 4 Male Peru 1 1 7
## 10 Butters~ brown 6 Male Thailand 1 1 7
## # ... with 2,775 more rows, and 4 more variables:
## # friendly_to_people <int>, clumsy <int>, greedy <int>,
## # owner_phone <chr>
# To sort in descending order (highest to lowest)
# Add desc() around the column name
all_cats <- arrange(all_cats, desc(grumpy))
# View the top 5 rows using head()
head(all_cats)
## # A tibble: 6 x 12
## name color age gender country grumpy fearful_of_peop~ playful
## <chr> <chr> <int> <chr> <chr> <int> <int> <int>
## 1 Aboulo~ brown 3 Female UK 7 1 2
## 2 Abigail grey and b~ 5 Male Canada 7 3 7
## 3 Broody brown 17 Female China 7 1 7
## 4 Albert butterscot~ 15 Male Canada 7 7 1
## 5 Barbra striped 11 Female Thaila~ 7 1 6
## 6 Alfred peaches an~ 14 Male Peru 7 7 5
## # ... with 4 more variables: friendly_to_people <int>, clumsy <int>,
## # greedy <int>, owner_phone <chr>
# Find the Aussie cats
# Find the ancient Aussie cats
When you save an arranged data table it maintains its order. This is perfect for sending people a quick Top 10 list of pollutants or sites.
filter()
The filter()
function creates a subset of the data based on the value of one or more columns. Use filter()
to answer the questions below.
What are the cat names that are only 1 year old?
filter(all_cats, age == 1)
We use a
==
(double equals sign) for comparing values. A==
makes the comparison “is it equal to?” and returns a True or False answer. So the code above returns all the rows where the conditionage == 1
is TRUE.A single equals sign (
=
) is used within functions to set options, for exampleread_csv(file = "mydata.csv")
. Don’t worry too much. If you use the wrong symbol R is often helpful and will let you know which one is needed.
To use filtering effectively you’ll want to know how to select observations using various comparison operators.
Key comparison operators
| Symbol | Comparison |
|---|---|
> |
greater than |
>= |
greater than or equal to |
< |
less than |
<= |
less than or equal to |
== |
equal to |
!= |
not equal to |
%in% |
value is in a list |
What are the cat names that have a grumpy score greater than 6?
filter(all_cats, grumpy ...)
What are the cat names that are either striped
or orange
in color?
filter(all_cats, color %in% c("orange", "striped"))
What is that
c()
thing all about again?
You can put multiple values inside c()
to make a vector of items. Each item in the vector is separated by a comma. Let’s create a short vector of your favorite colors.
# This is an example vector
my_fave_colors <- c("green", "orange", "cornflower")
my_fave_colors
## [1] "green" "orange" "cornflower"
Create a small table called uk_oldies
that only has cats from the UK and are older than 20.
Work with your neighbor to create the table.
Are there more cats with the color striped
or butterscotch
?
more butterscotch
more striped
same amount in both groups
Hint: Start by creating a new table called striped
using the code filter(all_cats, color == ...)
more striped
Feline fine after that exercise! Great job!
Ask your neighbor a question about the cat data that requires the %in% operator.
Try to answer your neighbor’s question.
Team up with your neighbor to think of a summary question to ask the table next to you about the missing cat data. Ask them the question and they’ll ask you a question about the cats in return.
Work with your neighbor to find the answer.
Now that you are more familiar with the data, maybe you can use the personality traits of the missing cats to find which one is yours.
If only you knew the personality of your cat.
Spend some time getting to know your cat. Is it already hiding from you under the couch? Does it seem Australian? Is it a young cat? Once you’ve gotten to know your cat, move on to the next section.
Congratulations! You’ve unlocked your cat’s personality.
Thanks to all the quality time you spent with your cat, you were able to collect some high quality data describing your cat’s personality. You can use your cat’s tag number to find the CSV file for your cat. Download your file from the Cat personality files.
To download, Right click on your cat’s file and select Save Link As…. Navigate to your project folder and save the file into a folder named data\
.
Now you can read in the file with the personality traits of your cat.
library("readr")
# Replace the `##` with your tag number
my_cat <- read_csv("data/foundcat_tag##.csv")
Take a minute to explore your cat’s personality traits. Can you guess its name?
Almost there! Now you can use filter()
to check if the all_cats table has a cat with a similar personality as yours. Let’s hope so.
Use filter()
to find your cat in the big all_cats table.
# Replace the `?` marks with your cat's personality traits
the_one <- filter(all_cats,
greedy == ?,
playful == ?,
age ...)
Hint: You can also use the cat’s
age
range to help narrow down the number of potential cats.

Meet the R cats
Let’s introduce our rescued cats.
Possible topics:
- Your found cat’s name and best personality trait.
- Your name or detective name.
- Something you want to learn to do with data?
- Are you a Cat person? Dog person? Lizard person? Fish person? Plant person?
RECAP:
What packages have we added to our
library
?What new functions have we learned?
On the front of your sticky note answer one of these:
On the back:
We will compile the questions and send out answers before next class. If you think of something later, please e-mail us any questions you have. If you’re uncertain about something I guarantee someone else is as well. So help a friend, and ask a question.
When you close RStudio it will ask you about saving your workspace and other files. This can get tiresome after awhile. Follow the steps below to set these options once and for always.
Turn off “Save Workspace”
Global Options...
.


--- layout: page title: About permalink: /about/ group: navigation ---
Ellen is a librarian from North Carolina. She pretends she knows more about computers than she actually does. She obtained her Bachelor's (BA in Global Studies, French) from UNC, ran away to teach English in France, worked in a bookstore, and finally settled down to become a librarian (MSLS also from UNC).
Her previous attempts to document her life may be found below:
Her short-lived post-undergrad blogShe is also a shameless cat lover and mercilessly seeks any possible way to insert cats into her work.


All Classes
BeanMaker
ColdSpringDefinitionMaker
Environment
EnvironmentConfigAPI
EnvironmentService
Object


We stand for ethical, safe, and clean beauty products for everyone.
We have all types from makeup, skincare, hair products, to many more. As of right now, we are only linked with Sephora and Ulta products.
We created this application for everyone to be able to have access to beauty products in an organized and personalized matter.


Activities supported by our institution
1. Virtual Learning Experience
Our institution understands the need of the students and acknowledges their quest for learning more.
Hence we have established EduComp set ups in each and every class, so that every student experiences
learning at its best.
2. Focusing on Co-curricular activities
At liberty high we accept the fact that each student is diiferent and that each of their indivisuality
needs to be celebrated. Thus we not only promote academics but aslo take care that the students flourish
in cocurriculars such as Dancing, Singing, Art and Crafts.
3. Sports Facilities
We provide a range of Sports in the campus and the required set up for it as well. We have excellent fields
grounds for the students who are interested.


1. Which of the following country won Football world Cup maximum times?
2. Who among the following player scores highest number of goals in Footbal World Cup?
3. Which of the following term is recognised as an early form of football by FIFA?
4. When was the first FIFA World Cup inaugurated?
5. Which country became the first nation to win the Football World Cup?


Welcome to the Computer Science Application! We have the following sections:
Learn more about the CSIS Department.
Take a peek at the faculty members of the Computer Science Department.
Gain a brief introductrion to the filed of Computer Sciences.
Gain a brief introductrion to the filed of Computer Sciences.
Gain a brief introduction to the field of Computer Information Systems.
Gain a brief introduction to mastersz degree program.
The suggested path of classes for teh Computer Information Systems Major.
The suggested path of classes for teh Computer Information Systems Major.
A map of the campus.