The query composer (ORM)
#constructor(Model, [parent])
Created by Model#query, used for composing SQL queries based on Models
Created by Model#query, used for composing SQL queries based on Models
Nodal.Model
Model
:
The model class the composer is querying from
[Nodal.Composer
]
parent
(default null
)
:
The composer's parent (another composer instance)
#end(callback)
Execute the query you've been composing.
Execute the query you've been composing.
The method to execute when the query is complete
#first(callback)
Shortcut for .limit(1).end(callback) that only returns a model object or error if not found
Shortcut for .limit(1).end(callback) that only returns a model object or error if not found
Function
callback
:
Callback to execute, provides an error and model parameter
#groupBy(column)
Groups by a specific field, or a transformation on a field
Groups by a specific field, or a transformation on a field
String
column
:
The column to group by
#limit(offset, count)
Limit to an offset and count
Limit to an offset and count
number
offset
:
The offset at which to set the limit. If this is the only argument provided, it will be the count instead.
number
count
:
The number of results to be returned. Can be omitted, and if omitted, first argument is used for count.
Nodal.Composer
:
new Composer instance
#safeWhere(comparisons, comparisonsArray)
Add comparisons to SQL WHERE clause. Does not allow filtering if Model.hides() has been called.
Add comparisons to SQL WHERE clause. Does not allow filtering if Model.hides() has been called.
Object
comparisons
:
Comparisons object. {age__lte: 27}, for example.
Nodal.Composer
:
new Composer instance
#update(fields, callback)
Execute query as an update query, changed all fields specified.
Execute query as an update query, changed all fields specified.
Object
fields
:
The object containing columns (keys) and associated values you'd like to update
The callback for the update query
#where(comparisons, comparisonsArray)
Add comparisons to SQL WHERE clause.
Add comparisons to SQL WHERE clause.
Object
comparisons
:
Comparisons object. {age__lte: 27}, for example.
Nodal.Composer
:
new Composer instance
Base entry for schedulers for performing repeated tasks.
#constructor(scheduler)
Nodal.Scheduler
scheduler
:
The scheduler instance this entry belongs to
#exec
Execute the scheduler entry's associated task
Execute the scheduler entry's associated task
#getDateOffset(cur)
Get the difference between now and the last time the task should be executed. Overwritten when inherited.
Get the difference between now and the last time the task should be executed. Overwritten when inherited.
Date
cur
:
The current Date object
#perform(task, Task)
Assign a task to this scheduler entry
Assign a task to this scheduler entry
Nodal.Task
or constructor
task
:
The Task to perform (must have an exec function)
#start
Begin the scheduler entry. Create a timeout for the first execution, and an interval for all subsequent ones.
Begin the scheduler entry. Create a timeout for the first execution, and an interval for all subsequent ones.
#stop
Clear all timeouts and intervals for the scheduler entry (stops it).
Clear all timeouts and intervals for the scheduler entry (stops it).
Basic Model implementation. Optionally interfaces with database.
.calculates(calcField, fnCalculate, fnCompute)
Create a calculated field (in JavaScript). Must be synchronous.
Create a calculated field (in JavaScript). Must be synchronous.
.column(columnName)
Return the column schema data for a given name
Return the column schema data for a given name
string
columnName
:
.columnLookup
Get the model's column lookup data
Get the model's column lookup data
Object
.columnNames
Get the model's column names (fields)
Get the model's column names (fields)
Array
.columns
Get the model's column data
Get the model's column data
Array
.create(data, callback)
Creates a new model instance using the provided data.
Creates a new model instance using the provided data.
object
data
:
The data to load into the object.
.destroy(id, callback)
Finds and destroys a model with a specified id. Return a notFound error if model does not exist.
Finds and destroys a model with a specified id. Return a notFound error if model does not exist.
number
id
:
The id of the model you're looking for
.find(id, callback)
Finds a model with a provided id, otherwise returns a notFound error.
Finds a model with a provided id, otherwise returns a notFound error.
number
id
:
The id of the model you're looking for
.hasColumn(columnName)
Check if the model has a column name in its schema
Check if the model has a column name in its schema
string
columnName
:
.hides(field)
Hides fields from being output in .toObject() (i.e. API responses), even if asked for
Hides fields from being output in .toObject() (i.e. API responses), even if asked for. Place in your model definition file. For example, to hide the password field of a User model, add `User.hides('password')` to the bottom of `./models/user.js` after the User class declaration.
String
field
:
.isHidden(field)
Tells us if a field is hidden (i.e. from API queries)
Tells us if a field is hidden (i.e. from API queries)
String
field
:
.joinedBy(Model, options)
Specifies joinsTo for the child model
Specifies joinsTo for the child model
.joinsTo(Model, [options])
Sets a joins relationship for the Model. Sets joinedBy relationship for parent.
Sets a joins relationship for the Model. Sets joinedBy relationship for parent.
[Object
]
options
(default {}
)
:
"name": The string name of the parent in the relationship (default to camelCase of Model name)
"via": Which field in current model represents this relationship, defaults to ${name}_id
"as": What to display the name of the child as when joined to the parent (default to camelCase of child name)
"multiple": Whether the child exists in multiples for the parent (defaults to false)
.query(db)
Creates a new Composer (ORM) instance to begin a new query.
Creates a new Composer (ORM) instance to begin a new query.
Nodal.Composer
.relationship(name)
FIXME
FIXME
.relationships
FIXME
FIXME
.setDatabase(db)
Set the database to be used for this model
Set the database to be used for this model
Nodal.Database
db
:
.setSchema(schema)
Set the schema to be used for this model
Set the schema to be used for this model
Object
schema
:
.table
Get the model's table name
Get the model's table name
string
#__safeSet__(field, value)
Sets specified field data for the model, assuming data is safe and does not log changes
Sets specified field data for the model, assuming data is safe and does not log changes
string
field
:
Field to set
any
value
:
Value for the field
#afterSave(callback)
Logic to execute after a model saves. Intended to be overwritten when inherited.
Logic to execute after a model saves. Intended to be overwritten when inherited.
Function
callback
:
Invoke with first argument as an error if failure.
#beforeSave(callback)
Logic to execute before a model saves. Intended to be overwritten when inherited.
Logic to execute before a model saves. Intended to be overwritten when inherited.
Function
callback
:
Invoke with first argument as an error if failure.
#calculate(field)
Calculate field from calculations (assumes it exists)
Calculate field from calculations (assumes it exists)
string
field
:
Name of the calculated field
#changedFields
Provides an array of all changed fields since model was created / loaded from storage
Provides an array of all changed fields since model was created / loaded from storage
Array
#constructor(modelData, fromStorage)
Object
modelData
:
Data to load into the object
#convert(field, value)
Converts a value to its intended format based on its field. Returns null if field not found.
Converts a value to its intended format based on its field. Returns null if field not found.
string
field
:
The field to use for conversion data
any
value
:
The value to convert
#destroy(callback)
Destroys model reference in database.
Destroys model reference in database.
#destroyCascade(callback)
Destroys model and cascades all deletes.
Destroys model and cascades all deletes.
function
callback
:
method to run upon completion
#errorObject
Creates an error object for the model if any validations have failed, returns null otherwise
Creates an error object for the model if any validations have failed, returns null otherwise
Error
#fieldDefaultValue(field)
Retrieve the defaultValue for this field from our schema
Retrieve the defaultValue for this field from our schema
string
field
:
any
#fieldDefinitions
Retrieve our field schema definitions
Retrieve our field schema definitions
Array
#fieldList
Retrieve an array of fields for our model
Retrieve an array of fields for our model
Array
#get(field, ignoreFormat)
Retrieve field data for the model.
Retrieve field data for the model.
string
field
:
Field for which you'd like to retrieve data.
#getErrors
Gives us an error object with each errored field as a key, and each value being an array of failure messages from the validators
Gives us an error object with each errored field as a key, and each value being an array of failure messages from the validators
Object
#hasErrors
Tells us whether or not the model has errors (failed validations)
Tells us whether or not the model has errors (failed validations)
boolean
#include(callback)
Retrieve associated models joined this model from the database.
Retrieve associated models joined this model from the database.
#inStorage
Indicates whethere or not the model is currently represented in hard storage (db).
Indicates whethere or not the model is currently represented in hard storage (db).
boolean
#joined(joinName)
Retrieves joined Model or ModelArray
Retrieves joined Model or ModelArray
String
joinName
:
the name of the join (list of connectors separated by __)
#read(data)
Reads new data into the model.
Reads new data into the model.
Object
data
:
Data to inject into the model
this
#relationship(name)
Grabs the path of the given relationship from the RelationshipGraph
Grabs the path of the given relationship from the RelationshipGraph
string
name
:
the name of the relationship
#save(callback)
Save a model (execute beforeSave and afterSave)
Save a model (execute beforeSave and afterSave)
Function
callback
:
Callback to execute upon completion
#set(field, value)
Sets specified field data for the model. Logs and validates the change.
Sets specified field data for the model. Logs and validates the change.
string
field
:
Field to set
any
value
:
Value for the field
#setJoined(field, value)
Set a joined object (Model or ModelArray)
Set a joined object (Model or ModelArray)
string
field
:
The field (name of the join relationship)
Model
or ModelArray
value
:
The joined model or array of models
#tableName
Get the table name for the model.
Get the table name for the model.
string
#toObject(arrInterface)
Creates a plain object from the Model, with properties matching an optional interface
Creates a plain object from the Model, with properties matching an optional interface
Array
arrInterface
:
Interface to use for object creation
Array of Models, for easy conversion to Objects
.from(arr)
Convert a normal Array into a ModelArray
Convert a normal Array into a ModelArray
Array
arr
:
The array of child objects
#constructor(modelConstructor)
Create the ModelArray with a provided Model to use as a reference.
Create the ModelArray with a provided Model to use as a reference.
#destroyAll(callback)
Destroys (deletes) all models in the ModelArray from the database
Destroys (deletes) all models in the ModelArray from the database
function
callback
:
Method to invoke upon completion
#destroyCascade(callback)
Destroys model and cascades all deletes.
Destroys model and cascades all deletes.
function
callback
:
method to run upon completion
#has(model)
Checks if ModelArray has a model in it
Checks if ModelArray has a model in it
Nodal.Model
model
:
#readAll(Object, data)
Calls Model#read on each Model in the ModelArray
Calls Model#read on each Model in the ModelArray
#saveAll(callback)
Saves / updates all models in the ModelArray. Uses beforeSave / afterSave. Will return an error and rollback if any model errors out.
Saves / updates all models in the ModelArray. Uses beforeSave / afterSave. Will return an error and rollback if any model errors out.
function
callback
:
returning the error and reference to self
#setAll(Object, field, value)
Calls Model#read on each Model in the ModelArray
Calls Model#read on each Model in the ModelArray
#toObject(arrInterface)
Creates an Array of plain objects from the ModelArray, with properties matching an optional interface
Creates an Array of plain objects from the ModelArray, with properties matching an optional interface
Array
arrInterface
:
Interface to use for object creation for each model
Use to delegate tasks minutely, hourly, daily, or weekly.
#daily
Construct a new Nodal.DailyEntry. All arguments passed represent the times to execute.
Construct a new Nodal.DailyEntry. All arguments passed represent the times to execute.
#hourly
Construct a new Nodal.HourlyEntry. All arguments passed represent the times to execute.
Construct a new Nodal.HourlyEntry. All arguments passed represent the times to execute.
#minutely
Construct a new Nodal.MinutelyEntry. All arguments passed represent the times to execute.
Construct a new Nodal.MinutelyEntry. All arguments passed represent the times to execute.
#restart
Restarts all associated SchedulerEntry objects for the Scheduler
Restarts all associated SchedulerEntry objects for the Scheduler
#setApp(app)
Set the app for the scheduler.
Set the app for the scheduler.
Nodal.Application
app
:
Your Nodal application
#start
Starts all associated SchedulerEntry objects for the Scheduler
Starts all associated SchedulerEntry objects for the Scheduler
#stop
Stops all associated SchedulerEntry objects for the Scheduler
Stops all associated SchedulerEntry objects for the Scheduler
#weekly
Construct a new Nodal.WeeklyEntry. All arguments passed represent the times to execute.
Construct a new Nodal.WeeklyEntry. All arguments passed represent the times to execute.
Intended to be overwritten when inherited. Run after renderware.
Specifies CORS (cross origin resource sharing) headers.
string
value
:
Use '*' for a generic API service that accepts requests from anywhere, otherwise specific a domain.
this
Using API formatting, send an http.ServerResponse indicating there was a Bad Request (400)
string
msg
:
Error message to send
Object
details
:
Any additional details for the error (must be serializable)
boolean
Intended to be overwritten when inherited. Run before middleware. Controller-specific middleware and renderware here
Method called when a route is hit with a DELETE request, if not first intercepted by custom Controller#destroy method. Intended to be overwritten when inherited.
Using API formatting, send an http.ServerResponse indicating there was an Internal Server Error (500)
string
msg
:
Error message to send
Object
details
:
Any additional details for the error (must be serializable)
boolean
Method called when a route is hit with a GET request, if not first intercepted by custom Controller#index or Controller#show methods. Intended to be overwritten when inherited.
Get the value of a specific response header
The current HTTP status code expected to be used by the outgoing http.ServerResponse
number
Using API formatting, send an http.ServerResponse indicating the requested resource was Not Found (404)
string
msg
:
Error message to send
Object
details
:
Any additional details for the error (must be serializable)
boolean
Endpoint not implemented
string
msg
:
Error message to send
Object
details
:
Any additional details for the error (must be serializable)
boolean
Method called when a route is hit with an OPTIONS request. Typically unused, exists for CORS purposes.
Method called when a route is hit with a POST request, if not first intercepted by custom Controller#create method. Intended to be overwritten when inherited.
Method called when a route is hit with a PUT request, if not first intercepted by custom Controller#update method. Intended to be overwritten when inherited.
Creates a 302 redirect to the desired location
string
location
:
Render an HTTP response (end ServerResponse) based on provided data
Object
data
:
Can be Buffer, String, or Plain Object
Using API formatting, generate an error or respond with model / object data.
Error
or Object
or Array
or Nodal.Model
or Nodal.ModelArray
data
:
Object to be formatted for API response
boolean
Add Content-Security-Policy headers
Set HTTP headers to be used by the outgoing http.ServerResponse
Object
object
:
Object containing key-value pairs for HTTP headers
Object
:
The headers object created
Set HTTP status code for this response
Number
code
:
Using API formatting, send an http.ServerResponse indicating there were Too Many Requests (429) (i.e. the client is being rate limited)
string
msg
:
Error message to send
Object
details
:
Any additional details for the error (must be serializable)
boolean
Using API formatting, send an http.ServerResponse indicating there was an Unauthorized request (401)
string
msg
:
Error message to send
Object
details
:
Any additional details for the error (must be serializable)
boolean
Intercepts requests to controller using Controller#authorize. Use with app using Application#useAuthorizer.
Factory for creating models
.createFromModels(Models, objModelData, callback)
Creates new factories from a supplied array of Models, loading in data keyed by Model name
Creates new factories from a supplied array of Models, loading in data keyed by Model name
.loadModels
Loads all model constructors in your ./app/models directory into an array
Loads all model constructors in your ./app/models directory into an array
Array
:
Array of model Constructors
.populate(Models, objModelData, callback)
Populates a large amount of model data from an Object.
Populates a large amount of model data from an Object.
Array
Models
:
Array of Model constructors
#constructor(modelConstructor)
Create the ModelFactory with a provided Model to use as a reference.
Create the ModelFactory with a provided Model to use as a reference.
Nodal.Model
modelConstructor
:
Must pass the constructor for the type of ModelFactory you wish to create.
#create(arrModelData, callback)
Creates models from an array of Objects containing the model data
Creates models from an array of Objects containing the model data
Array
arrModelData
:
Array of objects to create model data from
SchedulerEntry extension for weekly (on the day of week) execution
#constructor(scheduler, times)
Nodal.Scheduler
scheduler
:
the scheduler the entry belongs to
Array
times
:
The times (in days of week) to execute the task
#getDateOffset(cur)
Sets the offset to the nearest week
Sets the offset to the nearest week
Date
cur
:
The current Date
SchedulerEntry extension for minutely (on the second) execution
#constructor(scheduler, times)
Nodal.Scheduler
scheduler
:
the scheduler the entry belongs to
Array
times
:
The times (in seconds) to execute the task
#getDateOffset(cur)
Sets the offset to the nearest minute
Sets the offset to the nearest minute
Date
cur
:
The current Date
Array of Items, for easy conversion to Objects
.from(arr)
Convert a normal Array into a ItemArray
Convert a normal Array into a ItemArray
Array
arr
:
The array of child objects
#constructor
Create the ItemArray
Create the ItemArray
#setMeta(data)
Sets metadata for the modelArray
Sets metadata for the modelArray
Object
data
:
values to set
#toObject(arrInterface)
Creates an Array of plain objects from the ModelArray, with properties matching an optional interface
Creates an Array of plain objects from the ModelArray, with properties matching an optional interface
Array
arrInterface
:
Interface to use for object creation for each model
SchedulerEntry extension for hourly (on the minute) execution
#constructor(scheduler, times)
Nodal.Scheduler
scheduler
:
the scheduler the entry belongs to
Array
times
:
The times (in minutes) to execute the task
#getDateOffset(cur)
Sets the offset to the nearest hour
Sets the offset to the nearest hour
Date
cur
:
The current Date
Used to filter parameters from HTTP query string or body data
#constructor(object, props)
props
object
:
Properties
SchedulerEntry extension for daily (on the hour) execution
#constructor(scheduler, times)
Nodal.Scheduler
scheduler
:
the scheduler the entry belongs to
Array
times
:
The times (in hours) to execute the task
#getDateOffset(cur)
Sets the offset to the nearest day
Sets the offset to the nearest day
Date
cur
:
The current Date
GraphQuery class that translates GraphQL to something digestible by the Composer
.formatTree(tree, max, joins, parents)
Format a parsed syntax tree in a way that the Composer expects
Format a parsed syntax tree in a way that the Composer expects
.parse(str, max)
Fully parse a GraphQL query, get necessary joins to make in SQL
Fully parse a GraphQL query, get necessary joins to make in SQL
.parseSyntaxTree(str, state, arr)
Parse syntax tree of a GraphQL query
Parse syntax tree of a GraphQL query
#query(callback)
Query the GraphQuery object from the database
Query the GraphQuery object from the database
Function
callback
:
The function to execute upon completion
Multi-process HTTP Daemon that resets when files changed (in development)
#error(error)
Log an error on the Daemon
Log an error on the Daemon
Error
error
:
#exit(child, code)
Shut down a child process given a specific exit code. (Reboot if clean shutdown.)
Shut down a child process given a specific exit code. (Reboot if clean shutdown.)
child_process
child
:
Number
code
:
Exit status codes
#idle
Daemon failed to load, set it in idle state (accept connections, give dummy response)
Daemon failed to load, set it in idle state (accept connections, give dummy response)
#start(port)
Starts the Daemon. If all application services fail, will launch a dummy error app on the port provided.
Starts the Daemon. If all application services fail, will launch a dummy error app on the port provided.
Number
port
:
#unwatch
Stops watching a directory tree for changes
Stops watching a directory tree for changes
Creates a new MockRequest object (emulates an HTTP request)
Nodal.EndpointRequest
Do not need to extend from this class for new Renderware, just use this as a reference template.
Queues middleware, renderware, etc (make sure they fire in order).
#exec
Execute all items, in order. First parameter is a "steady" object that will be passed by reference to every item in the queue as the first parameter of exec. Middle parameters are passed by previous item#exec calls (as parameters, after err), and last parameter is a completion callback.
Execute all items, in order. First parameter is a "steady" object that will be passed by reference to every item in the queue as the first parameter of exec. Middle parameters are passed by previous item#exec calls (as parameters, after err), and last parameter is a completion callback.
#push
Alias for ExecutionQueue#use
Alias for ExecutionQueue#use
#unshift(arguments)
Tell the manager to put an object in the queue (first)
Tell the manager to put an object in the queue (first)
Object
arguments
:
The item constructor (must have exec function) plus other arguments you wish to add to the queue.
#use(arguments)
Tell the manager to put an object in the queue (last)
Tell the manager to put an object in the queue (last)
Object
arguments
:
The item constructor (must have exec function) plus other arguments you wish to add to the queue.
Do not need to extend from this class for new Middleware, just use this as a reference template.
Do not need to extend from this class for new Tasks, just use this as a reference template.
#exec(app, arguments, args, callback)
Execute the task
Execute the task
Nodal.Application
app
:
the Application Instance
object
arguments
:
passed to the task on the command line
HTTP Request Handler
http.ClientRequest
req
:
http.ServerResponse
res
:
Listens for incoming connections on a provided port
Number
port
:


Price Scraper
Git Hub
Featured
Cras justo odio
Dapibus ac facilisis in
Vestibulum at eros
New Listing Project
×
New Project Directory
Choose directory
SKU Base Name
Start SKU Number
Photo File Extension
Photo Converted File Extension
Listing Builder
New
Open
Export
Close
Items


Appversion
Docversion (HTML)
[CC]
IE7
[CC]
IE8
[CC]
IE9
[CC]
IE10
[CC]
IE11
You know it is about JavaScript...


Google Code-In
Google Code-in is a competitive event organised by Google which exposes young and budding developers to open source organisations, in a task based environment. In this way, they learn different ways to solve real life problems for open source organisations. This gives people much-needed experience that they will need to deal with situations they may face during their jobs or other later ventures. Famous open source organisations like Ubuntu, Wikimedia, and Apertium have come together to create tasks that will help the participants, and the open source organisations that are helping in this event.
What I’ve learnt:
This is the primary time I’m collaborating in Google code in 2017, so way it’s been fruitful. I learned regarding Musicbrainz, a music data wiki, and the Metabrainz foundation that maintains it. I actually have learned about the JBoss stretch organization, that has created some attention-grabbing comes sort of Facebook meme generator bot. i do know a way to use AN IRC consumer, and it’s been terribly useful for human activity with totally different organizations, and receiving feedback regarding my work. One particular factor about Google Code-In is that there are mentors, who are going to be there to tell you if you’re doing something wrong. I actually have learned to gift my work properly, and use many tools within the method. Even within the method of penning this web log post, I actually have learned a way to use Jekyll to come up with web log posts and use markdown to format them.
I have learned lots and understood however my skills ar applicable within the globe as a result of Google Code-In 2017. I’d wish to impart Google for giving Maine this chance to be told things by determination my very own issues, and other’s issues. I hope to extend the depth of my data, and improve my existing skill set by completing competitions and artistic contests like Google Code-In! Thanks to collaborating in GCI, i used to be ready to polish my English and work level supported however I add giant corporations.I gained plenty information|of data|of information} and knowledge in technology. I got accustomed mistreatment disagreeable person, writing in English and checking out info, i.e. operating with documentation (sometimes language, generally an internet site like IBM Bluemix) and Stack Overflow. This contest was conjointly a chance to go away the cave and take a look at your ability Thanks to JBoss Comunity, I will exchange experiences and skills with alternative GCI participants.
I think that Google has done a good job making this competition, because of that several teens have an opportunity for a higher future. I’m definitely participating again! Thanks Jboss!


Next: Classifying failure, Previous: Libmarpa's approach to failure, Up: Failure [Contents][Index]
This document specifies many behaviors for Libmarpa application programs to follow, such as the nature of the arguments to each method. The C language and the application environment impose many more behaviors, such as proper memory management. When a non-conformity to specified behavior is unintentional and problematic, it is frequently called a “bug”. Even the most carefully programmed Libmarpa application may sometimes contain a “bug”. In addition, some specified behaviors are explicitly stated as characterizing a primary branch of the processing, rather than made mandatory for all successful processing. Non-conformity to non-mandatory behaviors can be efficiently recoverable, and is often intentional.
This chapter describes how non-conformity to specified behavior by a Libmarpa application is handled by Libmarpa. Non-conformity to specified behavior by a Libmarpa application is also called, for the purposes of this document, a Libmarpa application programming failure. In contexts where no ambiguity arises, Libmarpa application programming failure will usually be abbreviated to failure.
Libmarpa application programming success in a context is defined as the absence of unrecovered failure in that context. When no ambiguity arises, Libmarpa application programming success is almost always abbreviated to success. For example, the success of an application means the application ran without any irrecoverable failures, and that it recovered from all the recoverable failures that were detected.


ON THE CAMPAIGN TRAIL: A storm in the British prime minister's teacup
by William JamesLONDON (Reuters) - Britain holds an election on Dec. 12, a political gamble by Prime Minister Boris Johnson who sees it as his best chance to break the deadlock in parliament over Brexit.
The main parties are on the campaign trail, traveling the length and breadth of the UK to drum up support.
Following are some colorful snapshots from the election trail:
STORM IN A TEA CUP
Boris Johnson’s first official election broadcast provoked immediate disapproval on social media. Not because of what he said about Brexit. Not because of the big election issues like the future of the health service, police or schools.
It was because of another national obsession - tea.
The five-minute broadcast showed Johnson walking through his campaign headquarters, answering questions put to him from behind the camera, greeting staff members, and making a cup of tea in a drab office kitchen.
Johnson put a teabag in his mug, added hot water and then, to the displeasure of some viewers, added milk without removing the bag and continued his tour.
“I can’t be the only one who couldn’t concentrate on what he was saying because he left his teabag in his tea, surely?” asked Twitter user Adam Rowe.
He wasn’t. Dozens of similar comments rolled in within minutes of the video being posted.
The furore prompted Johnson to respond on Twitter: “For those who’ve noticed, this really is how I make my tea. It lets it brew and makes it stronger.”
SHE’S GOT THE POWER
Liberal Democrat leader Jo Swinson stepped into a boxing ring in North London to spar with club owner Matt Garcia in front of the cameras.
Swinson, 39, put on a pair of boxing gloves in yellow, the party’s color, and enthusiastically threw punches into Garcia’s pads before stopping to do interviews.
“She was great, she had lots of power,” Garcia told Reuters.
The Lib Dems are hoping the same is true on Dec. 13, when the election results come in.
MISTRUST OF MEDIA
Campaign events bring together ardent party supporters and members of the media, who often turn up with awkward questions to ask.
That can make for an uncomfortable mix. Labour audiences have in recent years booed and heckled journalists when they stand to ask a question.
But at this election the party has been trying to stamp that out. At each Labour event, the hosts have pleaded with their audience.
“Sometimes at these events some of our members get a bit excited about the media asking questions,” Labour’s would-be finance minister John McDonnell said during an event on Wednesday.
“We honour the right of the profession of journalism.”
The call for calm has worked. Mostly.
Before things got started on Wednesday a Labour staffer asked a man trying to take a seat in the media row: “Are you media?”
“Oh God no,” came the shocked reply. “Do I look like it?


QValue3DAxis Class
The QValue3DAxis class manipulates an axis of a graph. More...
| Header: | #include <QValue3DAxis> |
| Since: | QtDataVisualization 1.0 |
| Instantiated By: | ValueAxis3D |
| Inherits: | QAbstract3DAxis |
Properties
|
|
- 10 properties inherited from QAbstract3DAxis
- 1 property inherited from QObject
Public Functions
| QValue3DAxis(QObject *parent = Q_NULLPTR) | |
| virtual | ~QValue3DAxis() |
| QValue3DAxisFormatter * | formatter() const |
| QString | labelFormat() const |
| bool | reversed() const |
| int | segmentCount() const |
| void | setFormatter(QValue3DAxisFormatter *formatter) |
| void | setLabelFormat(const QString &format) |
| void | setReversed(bool enable) |
| void | setSegmentCount(int count) |
| void | setSubSegmentCount(int count) |
| int | subSegmentCount() const |
- 19 public functions inherited from QAbstract3DAxis
- 32 public functions inherited from QObject
Signals
| void | formatterChanged(QValue3DAxisFormatter *formatter) |
| void | labelFormatChanged(const QString &format) |
| void | reversedChanged(bool enable) |
| void | segmentCountChanged(int count) |
| void | subSegmentCountChanged(int count) |
- 10 signals inherited from QAbstract3DAxis
- 2 signals inherited from QObject
Additional Inherited Members
- 1 public slot inherited from QObject
- 1 public variable inherited from QObject
- 10 static public members inherited from QObject
- 9 protected functions inherited from QObject
- 2 protected variables inherited from QObject
Detailed Description
The QValue3DAxis class manipulates an axis of a graph.
A value axis can be given a range of values and segment and subsegment counts to divide the range into.
Labels are drawn between each segment. Grid lines are drawn between each segment and each subsegment.
Note: If visible, there will always be at least two grid lines and labels indicating the minimum and the maximum values of the range, as there is always at least one segment.
Property Documentation
formatter : QValue3DAxisFormatter *
This property holds the axis formatter to be used.
Any existing formatter is deleted when a new formatter is set.
This property was introduced in QtDataVisualization 1.1.
Access functions:
| QValue3DAxisFormatter * | formatter() const |
| void | setFormatter(QValue3DAxisFormatter *formatter) |
Notifier signal:
| void | formatterChanged(QValue3DAxisFormatter *formatter) |
labelFormat : QString
This property holds the label format to be used for the labels on this axis.
The format string supports the following conversion specifiers, length modifiers, and flags provided by printf()
in the standard C++ library: d, i, o, x, X, f, F, e, E, g, G, c.
If QAbstract3DGraph::locale is anything else than "C"
, the supported specifiers are limited to: d, e, E, f, g, G, and i. Also, only the precision modifier is supported. The rest of the formatting comes from the default QLocale of the application.
Usage example:
axis->setLabelFormat("%.2f mm");
Access functions:
| QString | labelFormat() const |
| void | setLabelFormat(const QString &format) |
Notifier signal:
| void | labelFormatChanged(const QString &format) |
See also formatter and QAbstract3DGraph::locale.
reversed : bool
This property holds whether the axis is rendered in reverse.
If true
, the axis will be rendered in reverse, i.e. the positions of minimum and maximum values are swapped when the graph is rendered. This property doesn't affect the actual minimum and maximum values of the axis.
This property was introduced in QtDataVisualization 1.1.
Access functions:
| bool | reversed() const |
| void | setReversed(bool enable) |
Notifier signal:
| void | reversedChanged(bool enable) |
segmentCount : int
This property holds the number of segments on the axis.
This indicates how many labels are drawn. The number of grid lines to be drawn is calculated with formula: segments * subsegments + 1
. The preset default is 5
. The value cannot be below 1
.
Access functions:
| int | segmentCount() const |
| void | setSegmentCount(int count) |
Notifier signal:
| void | segmentCountChanged(int count) |
See also setSubSegmentCount().
subSegmentCount : int
This property holds the number of subsegments inside each segment on the axis.
Grid lines are drawn between each subsegment, in addition to each segment. The preset default is 1
. The value cannot be below 1
.
Access functions:
| int | subSegmentCount() const |
| void | setSubSegmentCount(int count) |
Notifier signal:
| void | subSegmentCountChanged(int count) |
See also setSegmentCount().
Member Function Documentation
QValue3DAxis::QValue3DAxis(QObject *parent = Q_NULLPTR)
Constructs QValue3DAxis with the given parent.
[virtual]
QValue3DAxis::~QValue3DAxis()
Destroys QValue3DAxis.


Reporter: 呂永鈞 - R02942034
Date submitted: 2013/11/11
Code emailed: 2013/11/11
Algorithm:
Sampling on Lens: I implement two methods showed on the slides. The ideas are very straight and easy to implement.
Refraction: I use Heckber's Method as my refraction method.
Intersection: I use the robust algorithm to implement my intersection between ray and lens.
Tracing: As for tracing ray between different lens, I implement a function, Propagating, to be called each time if the ray still could go next.
Bugs:
When building lens structure, the index of refraction of aperture stop needs to set as 1.
When building the transform from Raster to Camera, it's very tricky. We need to be very careful and focused.
Comment:
Although I personally thought that this work is easier than previous, the effors I paid for were still not much less.
DGAUSS LEN IN 512 BITS
DGAUSS LEN IN 512 BITS
TELEPHOTO LEN IN 4 BITS
TELEPHOTO LEN IN 512 BITS
FISHEYE LEN IN 4 BITS
FISHEYE LEN IN 512 BITS
WIDE LEN IN 4 BITS
WIDE LEN IN 512 BITS
Copyright © Fall 2013


GRUB & HUB
Home
Community
Find Food
Cuisine
Time
Difficulty
RECOMMENDED
CHICKEN ALFREDO
EGG BENEDICT
BUN BO HUE
CHICKEN & WAFFLES
SESAME NOODLES
CHICKEN & AVOCADO SALAD


Ok. Let's be real. This is the last screen before all the mums are thrown into the dark void and obliterated forever. This is your final chance to come to your senses and turn back. If you truly are conclusively, unmistakibly, indubitably, incontestably, incontrovertibly, unequivocaly resolved to do this thing, then type your password in the box below.


#include <stats.h>
List of all members.
Detailed Description
Member Data Documentation
| unsigned long long Statistics::n_best_at_move_number[MAX_MOVE] |
| unsigned long long Statistics::n_board_solve_2 |
| unsigned long long Statistics::n_concurrent_garbage |
| unsigned long long Statistics::n_cut_at_move_number[MAX_MOVE] |
| unsigned long long Statistics::n_esc_high_cutoff |
| unsigned long long Statistics::n_etc_high_cutoff |
| unsigned long long Statistics::n_etc_try |
| unsigned long long Statistics::n_good_square[BOARD_SIZE][10] |
| unsigned long long Statistics::n_hash_found |
| unsigned long long Statistics::n_hash_high_cutoff |
| unsigned long long Statistics::n_hash_low_cutoff |
| unsigned long long Statistics::n_hash_new |
| unsigned long long Statistics::n_hash_remove |
| unsigned long long Statistics::n_hash_search |
| unsigned long long Statistics::n_hash_try |
| unsigned long long Statistics::n_hash_update |
| unsigned long long Statistics::n_hash_upgrade |
| unsigned long long Statistics::n_master_helper |
| unsigned long long Statistics::n_move_number[MAX_MOVE] |
| unsigned long long Statistics::n_nocut_at_move_number[MAX_MOVE] |
| unsigned long long Statistics::n_nodes |
| unsigned long long Statistics::n_NWS_bad_candidate |
| unsigned long long Statistics::n_NWS_candidate |
| unsigned long long Statistics::n_NWS_endgame |
| unsigned long long Statistics::n_NWS_midgame |
| unsigned long long Statistics::n_NWS_shallow |
| unsigned long long Statistics::n_parallel_nodes |
| unsigned long long Statistics::n_played_square[BOARD_SIZE][10] |
| unsigned long long Statistics::n_probcut_high_cutoff |
| unsigned long long Statistics::n_probcut_high_try |
| unsigned long long Statistics::n_probcut_low_cutoff |
| unsigned long long Statistics::n_probcut_low_try |
| unsigned long long Statistics::n_probcut_try |
| unsigned long long Statistics::n_PVS_midgame |
| unsigned long long Statistics::n_PVS_root |
| unsigned long long Statistics::n_PVS_shallow |
| unsigned long long Statistics::n_search_eval_0 |
| unsigned long long Statistics::n_search_eval_1 |
| unsigned long long Statistics::n_search_eval_2 |
| unsigned long long Statistics::n_search_solve |
| unsigned long long Statistics::n_search_solve_0 |
| unsigned long long Statistics::n_search_solve_3 |
| unsigned long long Statistics::n_search_solve_4 |
| unsigned long long Statistics::n_split_success |
| unsigned long long Statistics::n_split_try |
| unsigned long long Statistics::n_stability_low_cutoff |
| unsigned long long Statistics::n_stability_try |
| unsigned long long Statistics::n_stopped_master |
| unsigned long long Statistics::n_stopped_slave |
| unsigned long long Statistics::n_task_nodes[MAX_THREADS] |
| unsigned long long Statistics::n_waited_slave |
| unsigned long long Statistics::n_wake_up |
The documentation for this struct was generated from the following file:


Devhub could not start because of some internal problems. Somebody is probaply already on his way to fix this. Please try again later.
The DevHub team
P.S. We always find waiting much more bearable when we have the Shuffling Duck.


Changed: sourceMappingURL comments used to be matched only when placed at the end of the script. However, since several commonly used JavaScript libraries do not follow this convention and all popular web browsers accept non-trailing comments, this has been revised.
So now non-trailing SourceMappingURL comments are matched as well.
Changed: sourceMappingURL comments used to be matched only if they appeared on their own line. However, the spec only says:
The generated code may include a line at the end of the source, with the following form:
//# sourceMappingURL=<url>
So now they are matched also when they appear on the same line as code.
Removed: The .set()
method. I couldn’t decide how it should work
considering the above change. Moreover, it was unnecessarily complex (and
would have gotten worse) for very little gain. It is much easier to run
.remove()
if needed, and then simply code += "\n//# sourceMappingURL=" +
url
(using the appropriate comment syntax and newline). KISS.
Changed: The .insertBefore()
method now always inserts the string exactly
before the sourceMappingURL comment; not before the newline before the
comment (if any). Moreover, it does not ensure that the comment will be on a
new line anymore. This is up to the caller. KISS.
Changed: The .remove()
method no longer removes the newline before the
sourceMappingURL (if any).
Changed: Renamed .get()
to .getFrom()
.
Changed: Renamed .remove()
to .removeFrom()
.
Added: The .existsIn()
method.
["/*", " */"]
instead of ["/*", "*/"]
). (Backwards
incompatible change.)


Class SoundList
java.lang.Object
|
+--SoundList
- All Implemented Interfaces:
- java.lang.Runnable
- class SoundList
- extends java.lang.Object
- implements java.lang.Runnable
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
TIMER
private static final int TIMER
- See Also:
- Constant Field Values
WAIVE_TIMER
private static final int WAIVE_TIMER
- See Also:
- Constant Field Values
songs
private java.util.ArrayList songs
count
private int count
running
private boolean running
random
private boolean random
player
private javax.sound.midi.Sequencer player
theSound
private javax.sound.midi.Sequence theSound
waiting
private long waiting
SoundList
public SoundList()
setRandom
public void setRandom(boolean r)
loadGameSound
public void loadGameSound()
waiting
protected boolean waiting(int mil)
add
public void add(java.lang.String f)
start
public void start()
stop
public void stop()
run
public void run()
- Specified by:
run
in interface java.lang.Runnable
play
public void play(java.lang.String file)
play
public void play()


RESET
Audio Check.
Play Audio
Stop Audio
START TIMER
PAUSE TIMER
second(s) has elapsed
minute(s) has elapsed


Gray Atkinson-Adams
About
Portfolio
Contact
About
Portfolio
Contact
Portfolio
Word Guess
Crystal Collector
Trivia Game
Giftastic
Train Scheduler
Curate(ss)
Liri CLI
Bamazon CLI
Friend Finder
Idea Board


Rusty Steele
Hi! I'm a dog , Woof!!
Some of my favorite places
beach
park
fhydrant
Make sure to follow me on
instagram


Hello there! This is an app that shows a person's vitals such as heart rate, legality, and ages. It is very simple and straightforward to understand.
Please show some love for the new app that I just made. Thanks!


Package org.bluez
Interface LEAdvertisement1
- All Superinterfaces:
org.freedesktop.dbus.interfaces.DBusInterface
,org.freedesktop.dbus.interfaces.Properties
public interface LEAdvertisement1
extends org.freedesktop.dbus.interfaces.DBusInterface, org.freedesktop.dbus.interfaces.Properties
File generated - 2018-07-25.
Based on bluez Documentation: advertising-api.txt.
Service: org.bluez
Interface: org.bluez.LEAdvertisement1
Object path:
freely definable
Supported properties:
string Type
Determines the type of advertising packet requested.
Possible values: "broadcast" or "peripheral"
array{string} ServiceUUIDs
List of UUIDs to include in the "Service UUID" field of
the Advertising Data.
dict ManufacturerData
Manufactuer Data fields to include in
the Advertising Data. Keys are the Manufacturer ID
to associate with the data.
array{string} SolicitUUIDs
Array of UUIDs to include in "Service Solicitation"
Advertisement Data.
dict ServiceData
Service Data elements to include. The keys are the
UUID to associate with the data.
dict Data [Experimental]
Advertising Type to include in the Advertising
Data. Key is the advertising type and value is the
data as byte array.
Note: Types already handled by other properties shall
not be used.
Possible values:
<type> <byte array>
...
Example:
<Transport Discovery> <Organization Flags...>
0x26 0x01 0x01...
bool Discoverable [Experimental]
Advertise as general discoverable. When present this
will override adapter Discoverable property.
Note: This property shall not be set when Type is set
to broadcast.
uint16 DiscoverableTimeout [Experimental]
The discoverable timeout in seconds. A value of zero
means that the timeout is disabled and it will stay in
discoverable/limited mode forever.
Note: This property shall not be set when Type is set
to broadcast.
array{string} Includes
List of features to be included in the advertising
packet.
Possible values: as found on
LEAdvertisingManager.SupportedIncludes
string LocalName
Local name to be used in the advertising report. If the
string is too big to fit into the packet it will be
truncated.
If this property is available 'local-name' cannot be
present in the Includes.
uint16 Appearance
Appearance to be used in the advertising report.
Possible values: as found on GAP Service.
uint16_t Duration
Duration of the advertisement in seconds. If there are
other applications advertising no duration is set the
default is 2 seconds.
uint16_t Timeout
Timeout of the advertisement in seconds. This defines
the lifetime of the advertisement.
Based on bluez Documentation: advertising-api.txt.
Service: org.bluez
Interface: org.bluez.LEAdvertisement1
Object path:
freely definable
Supported properties:
string Type
Determines the type of advertising packet requested.
Possible values: "broadcast" or "peripheral"
array{string} ServiceUUIDs
List of UUIDs to include in the "Service UUID" field of
the Advertising Data.
dict ManufacturerData
Manufactuer Data fields to include in
the Advertising Data. Keys are the Manufacturer ID
to associate with the data.
array{string} SolicitUUIDs
Array of UUIDs to include in "Service Solicitation"
Advertisement Data.
dict ServiceData
Service Data elements to include. The keys are the
UUID to associate with the data.
dict Data [Experimental]
Advertising Type to include in the Advertising
Data. Key is the advertising type and value is the
data as byte array.
Note: Types already handled by other properties shall
not be used.
Possible values:
<type> <byte array>
...
Example:
<Transport Discovery> <Organization Flags...>
0x26 0x01 0x01...
bool Discoverable [Experimental]
Advertise as general discoverable. When present this
will override adapter Discoverable property.
Note: This property shall not be set when Type is set
to broadcast.
uint16 DiscoverableTimeout [Experimental]
The discoverable timeout in seconds. A value of zero
means that the timeout is disabled and it will stay in
discoverable/limited mode forever.
Note: This property shall not be set when Type is set
to broadcast.
array{string} Includes
List of features to be included in the advertising
packet.
Possible values: as found on
LEAdvertisingManager.SupportedIncludes
string LocalName
Local name to be used in the advertising report. If the
string is too big to fit into the packet it will be
truncated.
If this property is available 'local-name' cannot be
present in the Includes.
uint16 Appearance
Appearance to be used in the advertising report.
Possible values: as found on GAP Service.
uint16_t Duration
Duration of the advertisement in seconds. If there are
other applications advertising no duration is set the
default is 2 seconds.
uint16_t Timeout
Timeout of the advertisement in seconds. This defines
the lifetime of the advertisement.
-
Nested Class Summary
-
Method Summary
Modifier and Type Method Description void
Release()
From bluez documentation:
This method gets called when the service daemon
removes the Advertisement.
-
Method Details
-
Release
void Release()From bluez documentation:
This method gets called when the service daemon
removes the Advertisement. A client can use it to do
cleanup tasks. There is no need to call
UnregisterAdvertisement because when this method gets
called it has already been unregistered.
-


--- layout: post status: publish published: true title: CS5 - Should you upgrade? author: Arthur Rosa author_login: arthurlockman author_email<EMAIL_ADDRESS>author_url: https://b.rthr.me wordpress_id: 166 wordpress_url: http://b.rthr.me/?p=166 date: '2010-04-15 16:38:07 -0400' date_gmt: '2010-04-15 16:38:07 -0400' ---
There's been a lot of talk going around as to whether or not to upgrade to Creative Suite 5. As an Adobe fanboy, and a person who already has their hands on most of the suite, I have one thing to say to this.


What is Lorem Ipsum?
Lorem Ipsum is simply dummy text of the printing and typesetting industry.
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer
took a galley of type and scrambled it to make a type specimen book. It has survived
not only five centuries, but also the leap into electronic typesetting, remaining essentially uncha
brnged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum p
assages, and more recently with desktop publishing software like Aldus PageMaker including versions o
f Lorem Ipsum


Common testing patterns for React components.
Note:
This page assumes you're using Jest as a test runner. If you use a different test runner, you may need to adjust the API, but the overall shape of the solution will likely be the same. Read more details on setting up a testing environment on the Testing Environments page.
On this page, we will primarily use function components. However, these testing strategies don't depend on implementation details, and work just as well for class components too.
act()
For each test, we usually want to render our React tree to a DOM element that's attached to document
.
This is important so that it can receive DOM events. When the test ends, we want to "clean up" and unmount the tree
from the document
.
A common way to do it is to use a pair of beforeEach
and afterEach
blocks so that they'll
always run and isolate the effects of a test to itself:
import { unmountComponentAtNode } from "react-dom";
let container = null;
beforeEach(() => {
// setup a DOM element as a render target
container = document.createElement("div");
document.body.appendChild(container);
});
afterEach(() => {
// cleanup on exiting
unmountComponentAtNode(container);
container.remove();
container = null;
});
You may use a different pattern, but keep in mind that we want to execute the cleanup even if a test fails. Otherwise, tests can become "leaky", and one test can change the behavior of another test. That makes them difficult to debug.
act()
When writing UI tests, tasks like rendering, user events, or data fetching can be considered as "units" of interaction with a user interface. react-dom/test-utils
provides a helper called act()
that makes sure all updates related to these "units" have been processed and applied to the DOM before you make any assertions:
This helps make your tests run closer to what real users would experience when using your application. The rest of these examples use act()
to make these guarantees.
You might find using act()
directly a bit too verbose. To avoid some of the boilerplate, you could use a library like React Testing Library, whose helpers are wrapped with act()
.
Note:
The name
act
comes from the Arrange-Act-Assert pattern.
Commonly, you might want to test whether a component renders correctly for given props. Consider a simple component that renders a message based on a prop:
// hello.js
import React from "react";
export default function Hello(props) {
if (props.name) {
return
Hello, {props.name}!
;
} else {
return Hey, stranger;
}
}
We can write a test for this component:
// hello.test.js
import React from "react";
import { render, unmountComponentAtNode } from "react-dom";
import { act } from "react-dom/test-utils";
import Hello from "./hello";
let container = null;
beforeEach(() => {
// setup a DOM element as a render target
container = document.createElement("div");
document.body.appendChild(container);
});
afterEach(() => {
// cleanup on exiting
unmountComponentAtNode(container);
container.remove();
container = null;
});
it("renders with or without a name", () => {
act(() => {
render(<Hello />, container);
});
expect(container.textContent).toBe("Hey, stranger");
act(() => {
render(<Hello name="Jenny" />, container);
});
expect(container.textContent).toBe("Hello, Jenny!");
act(() => {
render(<Hello name="Margaret" />, container);
});
expect(container.textContent).toBe("Hello, Margaret!");
});
Instead of calling real APIs in all your tests, you can mock requests with dummy data. Mocking data fetching with "fake" data prevents flaky tests due to an unavailable backend, and makes them run faster. Note: you may still want to run a subset of tests using an "end-to-end" framework that tells whether the whole app is working together.
// user.js
import React, { useState, useEffect } from "react";
export default function User(props) {
const [user, setUser] = useState(null);
async function fetchUserData(id) {
const response = await fetch("/" + id);
setUser(await response.json());
}
useEffect(() => {
fetchUserData(props.id);
}, [props.id]);
if (!user) {
return "loading...";
}
return (

{user.name}
{user.age} years old

lives in {user.address}

);
}
We can write tests for it:
// user.test.js
import React from "react";
import { render, unmountComponentAtNode } from "react-dom";
import { act } from "react-dom/test-utils";
import User from "./user";
let container = null;
beforeEach(() => {
// setup a DOM element as a render target
container = document.createElement("div");
document.body.appendChild(container);
});
afterEach(() => {
// cleanup on exiting
unmountComponentAtNode(container);
container.remove();
container = null;
});
it("renders user data", async () => {
const fakeUser = {
name: "Joni Baez",
age: "32",
address: "123, Charming Avenue"
};
jest.spyOn(global, "fetch").mockImplementation(() =>
Promise.resolve({
json: () => Promise.resolve(fakeUser)
})
);
// Use the asynchronous version of act to apply resolved promises
await act(async () => {
render(<User id="123" />, container);
});
expect(container.querySelector("summary").textContent).toBe(fakeUser.name);
expect(container.querySelector("strong").textContent).toBe(fakeUser.age);
expect(container.textContent).toContain(fakeUser.address);
// remove the mock to ensure tests are completely isolated
global.fetch.mockRestore();
});
Some modules might not work well inside a testing environment, or may not be as essential to the test itself. Mocking out these modules with dummy replacements can make it easier to write tests for your own code.
Consider a Contact
component that embeds a third-party GoogleMap
component:
// map.js
import React from "react";
import { LoadScript, GoogleMap } from "react-google-maps";
export default function Map(props) {
return (
<LoadScript id="script-loader" googleMapsApiKey="YOUR_API_KEY">
<GoogleMap id="example-map" center={props.center} />
</LoadScript>
);
}
// contact.js
import React from "react";
import Map from "./map";
export default function Contact(props) {
return (

<address>
Contact {props.name} via{" "}

email

or on their
website
.
</address>
<Map center={props.center} />

);
}
If we don't want to load this component in our tests, we can mock out the dependency itself to a dummy component, and run our tests:
// contact.test.js
import React from "react";
import { render, unmountComponentAtNode } from "react-dom";
import { act } from "react-dom/test-utils";
import Contact from "./contact";
import MockedMap from "./map";
jest.mock("./map", () => {
return function DummyMap(props) {
return (

{props.center.lat}:{props.center.long}

);
};
});
let container = null;
beforeEach(() => {
// setup a DOM element as a render target
container = document.createElement("div");
document.body.appendChild(container);
});
afterEach(() => {
// cleanup on exiting
unmountComponentAtNode(container);
container.remove();
container = null;
});
it("should render contact information", () => {
const center = { lat: 0, long: 0 };
act(() => {
render(
<Contact
name="Joni Baez"
<EMAIL_ADDRESS>site="http://test.com"
center={center}
/>,
container
);
});
expect(
container.querySelector("[data-testid='email']").getAttribute("href")
).toEqual("mailto:test@example.com");
expect(
container.querySelector('[data-testid="site"]').getAttribute("href")
).toEqual("http://test.com");
expect(container.querySelector('[data-testid="map"]').textContent).toEqual(
"0:0"
);
});
We recommend dispatching real DOM events on DOM elements, and then asserting on the result. Consider a Toggle
component:
// toggle.js
import React, { useState } from "react";
export default function Toggle(props) {
const [state, setState] = useState(false);
return (
<button
onClick={() => {
setState(previousState => !previousState);
props.onChange(!state);
}}
data-testid="toggle"
>
{state === true ? "Turn off" : "Turn on"}
</button>
);
}
We could write tests for it:
// toggle.test.js
import React from "react";
import { render, unmountComponentAtNode } from "react-dom";
import { act } from "react-dom/test-utils";
import Toggle from "./toggle";
let container = null;
beforeEach(() => {
// setup a DOM element as a render target
container = document.createElement("div");
document.body.appendChild(container);
});
afterEach(() => {
// cleanup on exiting
unmountComponentAtNode(container);
container.remove();
container = null;
});
it("changes value when clicked", () => {
const onChange = jest.fn();
act(() => {
render(<Toggle onChange={onChange} />, container);
});
// get ahold of the button element, and trigger some clicks on it
const button = document.querySelector("[data-testid=toggle]");
expect(button.innerHTML).toBe("Turn on");
act(() => {
button.dispatchEvent(new MouseEvent("click", { bubbles: true }));
});
expect(onChange).toHaveBeenCalledTimes(1);
expect(button.innerHTML).toBe("Turn off");
act(() => {
for (let i = 0; i < 5; i++) {
button.dispatchEvent(new MouseEvent("click", { bubbles: true }));
}
});
expect(onChange).toHaveBeenCalledTimes(6);
expect(button.innerHTML).toBe("Turn on");
});
Different DOM events and their properties are described in MDN. Note that you need to pass { bubbles: true }
in each event you create for it to reach the React listener because React automatically delegates events to the root.
Note:
React Testing Library offers a more concise helper for firing events.
Your code might use timer-based functions like setTimeout
to schedule more work in the future. In this
example, a multiple choice panel waits for a selection and advances, timing out if a selection isn't made in 5
seconds:
// card.js
import React, { useEffect } from "react";
export default function Card(props) {
useEffect(() => {
const timeoutID = setTimeout(() => {
props.onSelect(null);
}, 5000);
return () => {
clearTimeout(timeoutID);
};
}, [props.onSelect]);
return [1, 2, 3, 4].map(choice => (
<button
key={choice}
data-testid={choice}
onClick={() => props.onSelect(choice)}
>
{choice}
</button>
));
}
We can write tests for this component by leveraging Jest's timer mocks, and testing the different states it can be in.
// card.test.js
import React from "react";
import { render, unmountComponentAtNode } from "react-dom";
import { act } from "react-dom/test-utils";
import Card from "./card";
jest.useFakeTimers();
let container = null;
beforeEach(() => {
// setup a DOM element as a render target
container = document.createElement("div");
document.body.appendChild(container);
});
afterEach(() => {
// cleanup on exiting
unmountComponentAtNode(container);
container.remove();
container = null;
});
it("should select null after timing out", () => {
const onSelect = jest.fn();
act(() => {
render(<Card onSelect={onSelect} />, container);
});
// move ahead in time by 100ms
act(() => {
jest.advanceTimersByTime(100);
});
expect(onSelect).not.toHaveBeenCalled();
// and then move ahead by 5 seconds
act(() => {
jest.advanceTimersByTime(5000);
});
expect(onSelect).toHaveBeenCalledWith(null);
});
it("should cleanup on being removed", () => {
const onSelect = jest.fn();
act(() => {
render(<Card onSelect={onSelect} />, container);
});
act(() => {
jest.advanceTimersByTime(100);
});
expect(onSelect).not.toHaveBeenCalled();
// unmount the app
act(() => {
render(null, container);
});
act(() => {
jest.advanceTimersByTime(5000);
});
expect(onSelect).not.toHaveBeenCalled();
});
it("should accept selections", () => {
const onSelect = jest.fn();
act(() => {
render(<Card onSelect={onSelect} />, container);
});
act(() => {
container
.querySelector("[data-testid='2']")
.dispatchEvent(new MouseEvent("click", { bubbles: true }));
});
expect(onSelect).toHaveBeenCalledWith(2);
});
You can use fake timers only in some tests. Above, we enabled them by calling jest.useFakeTimers()
. The
main advantage they provide is that your test doesn't actually have to wait five seconds to execute, and you also
didn't need to make the component code more convoluted just for testing.
Frameworks like Jest also let you save "snapshots" of data with toMatchSnapshot
/ toMatchInlineSnapshot
. With these, we can "save" the rendered component output and ensure that a change to it has to be explicitly committed as a change to the snapshot.
In this example, we render a component and format the rendered HTML with the pretty
package, before saving it as an inline snapshot:
// hello.test.js, again
import React from "react";
import { render, unmountComponentAtNode } from "react-dom";
import { act } from "react-dom/test-utils";
import pretty from "pretty";
import Hello from "./hello";
let container = null;
beforeEach(() => {
// setup a DOM element as a render target
container = document.createElement("div");
document.body.appendChild(container);
});
afterEach(() => {
// cleanup on exiting
unmountComponentAtNode(container);
container.remove();
container = null;
});
it("should render a greeting", () => {
act(() => {
render(<Hello />, container);
});
expect(
pretty(container.innerHTML)
).toMatchInlineSnapshot(); /* ... gets filled automatically by jest ... */
act(() => {
render(<Hello name="Jenny" />, container);
});
expect(
pretty(container.innerHTML)
).toMatchInlineSnapshot(); /* ... gets filled automatically by jest ... */
act(() => {
render(<Hello name="Margaret" />, container);
});
expect(
pretty(container.innerHTML)
).toMatchInlineSnapshot(); /* ... gets filled automatically by jest ... */
});
It's typically better to make more specific assertions than to use snapshots. These kinds of tests include implementation details so they break easily, and teams can get desensitized to snapshot breakages. Selectively mocking some child components can help reduce the size of snapshots and keep them readable for the code review.
In rare cases, you may be running a test on a component that uses multiple renderers. For example, you may be running snapshot tests on a component with react-test-renderer
, that internally uses ReactDOM.render
inside a child component to render some content. In this scenario, you can wrap updates with act()
s corresponding to their renderers.
import { act as domAct } from "react-dom/test-utils";
import { act as testAct, create } from "react-test-renderer";
// ...
let root;
domAct(() => {
testAct(() => {
root = create(<App />);
});
});
expect(root).toMatchSnapshot();
If some common scenario is not covered, please let us know on the issue tracker for the documentation website.


Over 1,000 LGBTQ members hold pride parade in New Delhi
NEW DELHI (AP) - More than 1,000 members of the LGBTQ community and their supporters have marched through New Delhi to celebrate India’s sexual diversity, which they say is progressing but still has a long way to go to become a more accepting place for them.
Carrying rainbow flags, balloons and placards and dancing to the beat of drums, they demanded self-identification in any gender for legal recognition rather than first registering as a transgender and then providing proof of surgery to authorities, as suggested by a government bill.

Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


CanScripts
Dashboard
Prescribe
Video consult
Patient profile
Scheduling
Configure
Powered by HealthChain
Dashboard for Oct 24, 2019
Stats
Rx pipeline
Patient unanswered messages (7)
Patients to be scheduled (4)
Doctor referrals to be processed (2)
HealthChain settings


Enabling SmartScreen
SmartScreen is a security feature included with Windows that monitors programs and web sites to detect when they
try to access suspicious files or web servers. SmartScreen can detect and prevent attempts to install viruses or
steal personal information by malicious web sites. SmartScreen is currently turned off. To turn it on, follow
these steps.
-
First, click on the start button and then the settings gear.
-
When the Settings app opens, click on the "Search" box at the top and type in "smartscreen".
-
Below the search box, the words "App & Browser control" will appear. Click these words.
-
A new window will open with the title "Windows Defender Security Console".
-
Look for the words "Check apps and files". Below them there should be three check boxes labeled "Block",
"Warn", and "Off". Click on "Block".
-
Look for the words "SmartScreen for Microsoft Edge". Below them there should be three check boxes labeled
"Block", "Warn", and "Off". Click on "Block".
-
Look for the words "SmartScreen for Microsoft Store apps". Below them there should be two check boxes
labeled "Warn" and "Off". Click on "Warn".
-
For each of these buttons, you may see a message that says "Do you want to allow this app to make changes to
your device?". If this message appears, then press "Yes". If it does not appear, then skip this step.
-
Close the "Windows Defender Security Console" and the Settings app.
Congratulations, SmartScreen is now protecting your computer!


2K is an design and construction company engaged in Architecture, Interior Design and Interior Fit-out works. Our core team, including Vietnamese architects who have studied and worked overseas and foreign architects who are fulfilled with experience in the field, guarantees to provide the client professional services with international standards and a well-understanding of Vietnamese culture and tradition. With the thinking “from follows function with follows the human scale”, we believe that one’s perception of space is very unique. It can be simply comfortable to amazingly exciting. The variety of human’s behavior in different spaces can lead to many different activities. Nobody but the architects, with the ability to balance form and function, can determine those experiences.
We believe that architectural design is not only about drawings, construction skills or styles but also a process of working together between architects and clients to balance the complex of requirements by providing a range of solutions, with a both functional and aesthetic Therefor, the company’s foundation is building the relationship between us – the architects – and our clients. This relationship will bring the success for the project. Not only we understand the clients’ needs, expectations and visions, but also do we understand the particular function, schedule and budget will affect their decision. To satisfy each project’s unique demands, we appreciate the involvement of our clients in every single stage, from the beginning to the end, which, we believe, ensures the success of the project.


Resource Manager¶
-
class
pyvisa.highlevel.
ResourceInfo
(interface_type, interface_board_number, resource_class, resource_name, alias)¶ Resource extended information
Named tuple with information about a resource. Returned by some
ResourceManager
methods.Interface_type: Interface type of the given resource string. pyvisa.constants.InterfaceType
Interface_board_number: Board number of the interface of the given resource string. Resource_class: Specifies the resource class (for example, “INSTR”) of the given resource string. Resource_name: This is the expanded version of the given resource string. The format should be similar to the VISA-defined canonical resource name. Alias: Specifies the user-defined alias for the given resource string.
-
class
pyvisa.highlevel.
ResourceManager
[source]¶ VISA Resource Manager
Parameters: visa_library – VisaLibrary Instance, path of the VISA library or VisaLibrary spec string. (if not given, the default for the platform will be used). -
last_status
¶ Last status code returned for an operation with this Resource Manager
Return type: pyvisa.constants.StatusCode
-
list_resources
(query='?*::INSTR')[source]¶ Returns a tuple of all connected devices matching query.
- note: The query uses the VISA Resource Regular Expression syntax - which is not the same
- as the Python regular expression syntax. (see below)
The VISA Resource Regular Expression syntax is defined in the VISA Library specification: http://www.ivifoundation.org/docs/vpp43.pdf
Symbol Meaning ———- ———-
? Matches any one character.
- Makes the character that follows it an ordinary character
- instead of special character. For example, when a question mark follows a backslash (?), it matches the ? character instead of any one character.
- [list] Matches any one character from the enclosed list. You can
- use a hyphen to match a range of characters.
- [^list] Matches any character not in the enclosed list. You can use
- a hyphen to match a range of characters.
- Matches 0 or more occurrences of the preceding character or expression.
- Matches 1 or more occurrences of the preceding character or expression.
- Exp|exp Matches either the preceding or following expression. The or
- operator | matches the entire expression that precedes or follows it and not just the character that precedes or follows it. For example, VXI|GPIB means (VXI)|(GPIB), not VX(I|G)PIB.
(exp) Grouping characters or expressions.
Thus the default query, ‘?*::INSTR’, matches any sequences of characters ending ending with ‘::INSTR’.
Parameters: query – a VISA Resource Regular Expression used to match devices.
-
list_resources_info
(query='?*::INSTR')[source]¶ Returns a dictionary mapping resource names to resource extended information of all connected devices matching query.
For details of the VISA Resource Regular Expression syntax used in query, refer to list_resources().
Parameters: query – a VISA Resource Regular Expression used to match devices. Returns: Mapping of resource name to ResourceInfo Return type: dict[str, pyvisa.highlevel.ResourceInfo
]
-
open_bare_resource
(resource_name, access_mode=<AccessModes.no_lock: 0>, open_timeout=0)[source]¶ Open the specified resource without wrapping into a class
Parameters: - resource_name – name or alias of the resource to open.
- access_mode (
pyvisa.constants.AccessModes
) – access mode. - open_timeout – time out to open.
Returns: Unique logical identifier reference to a session.
-
open_resource
(resource_name, access_mode=<AccessModes.no_lock: 0>, open_timeout=0, resource_pyclass=None, **kwargs)[source]¶ Return an instrument for the resource name.
Parameters: - resource_name – name or alias of the resource to open.
- access_mode (
pyvisa.constants.AccessModes
) – access mode. - open_timeout – time out to open.
- resource_pyclass – resource python class to use to instantiate the Resource. Defaults to None: select based on the resource name.
- kwargs – keyword arguments to be used to change instrument attributes after construction.
Return type:
-
resource_info
(resource_name, extended=True)[source]¶ Get the (extended) information of a particular resource.
Parameters: resource_name – Unique symbolic name of a resource. Return type: pyvisa.highlevel.ResourceInfo
-
session
¶ Resource Manager session handle.
Raises: pyvisa.errors.InvalidSession
if session is closed.
-


| DOSE: |
1 tablet |
oral |
MDMA |
(pill / tablet) |
i swallowed one pill of XTC, one half hour before planned departure of friend's house. I made a phone call, and found my cousin who had agreed on accompanying me had felt sick. I persisted on going anyway, alone. and I arrived there 8:30.
A tall man named adam, who i instantly liked very much opened the door for me, and greeted me. i asked if he'd excuse my clumsiness, 'i'm a little on something tonight'. he laughed and pointed me to the entrance of the 'maze'.
the effect had just begun to increase, but i was completely aware of what was going on. at the exit of the maze i was greeted by a woman who gave me a beer bottle cap. i took it and put it into my pocket. the woman was perhaps fifty or sixty years old and dressed in a genie costume. I believe she called herself 'Madame' something. and i thought her to be somewhat 'weird'.
the thought never occurred to me that i might perhaps have been considered weird.
i climbed downstairs to get some water, and when i came back up i met a few other people who i considered to be very beautiful looking. i knew that this was the effects of the drug.
they met me with caution, and i wondered why. and soon i realized that under this drug, my appearance was almost frightening! i must have scared them with my exaggerated grin, and slow movements!
soon i realized that i had been talking too much, and entered back into the main room to receive my fortune read by the 'Madame'. she had given me a rock to hold in my hands and said that it was 'as old as the earth'. i sat as she stood behind me, and assumed she was waving her arms over my head. not knowing whether it was the drug, or her spells, i felt the ball wobblying in weight from light to heavy. soon after much concentration and breathing, i felt ONE with the ball, and almost as if i had put alittle soul inside of it.
i rested for awhile in a chair where i performed several experiments i always check on when experiencing a new drug. first was raising my legs as far as i could. i could raise it say two feet off the ground before it'd begin to shake. i put it down.
i remember humming songs to myself, more evidence of mental illness. but i remembered my grandfather, who i had long forgotten years ago, and how he's sing songs about the beauty surrounding him. i missed him deeply.
i've never acted this way. in fact i've always been very self- conscious of my behavior. it almost had seemed that everything that once 'editted' my life, was now gone. temporarily destroyed. all fear, or embarassment had now vanished, and i felt UNLOCKED. i felt FREE for the first time.
i didn't feel like Sam, i WAS my subsconscious, i WAS the 'unnamed spirit'. i was a seperate being from the cowardly 'Sam' who became the product of a conditioned society and had locked me up inside his brain.
the first thing i needed to do, i knew, was to dance. before you know it i was rolling on the ground dancing, then clawing at the rug in the room. soon i began BEATING the floor. (I'm assuming THIS is when onlookers began to feel worried about me)
The reason for such animal behavior, was that I, infact, FELT like an animal that had been taught by society to act 'human'. I felt like an ape in 'civilized' clothing. I began feeling my ANIMAL INSTINCTS, and the one thing that came to mind was, like a dog, digging a hole.
this all seemed very logical at the time. i assure you. under 'normal' law, this is CRAZY! but at the time i had felt 'normal' to be my enemy, 'normal' to be the product of years of fear, guilt and embarassment. i felt 'normal' to be disgusting lies. and even now, after returning to 'normal', i speak under embassassment and guilt for what i have done. in a way, i've come back to my senses. but in another way, i've built back up that wall, that 'disgusting barrier'.
when i felt fatigued, i finished digging lay on my back in relief. 'that felt good.' i told myself.
i looked up to see two figures. one man smirking an evil expression. i thought to ask if he was dressed as Satan or not for Halloween, but i withheld knowing that I might upset him. I felt guilt, and I didn't want to. It was unpleasant.
i heard the others say that 'when it gets this far, he shouldn't be here' as the man pulled me out. i agreed with them. i should have been in a safe environment, i shouldn't have been there.
but nevertheless i was disappointed when i was met with unfriendliness. the man was very harsh and very uncompassionate. i was experiencing a high high spiritual enlightenment, and this guy was being very very mean to me. i felt confused.
the man with the face of satan said, 'go' very simply. he walked down the street and i rested on the side of the building for awhile. he comes back and says, 'i told you to go. i left for awhile, and you're still here. what don't you understand? GO!'
i had thought to myself, 'THIS is your Temporary Autonomous Zone?!?! THIS is your place where one can escape the 'real world'? Where one man fufill his desires? Bey would be disappointed.' it was 10:20, and my spiritual exploration had been ruined.
i walked across the street and into a Thai resturaunt where the Thai people found me to be a homeless person and fed me free rice. i laughed. nothing of the sort had ever happened to me. At the table I reflected on my night.
this was one hilarious experience I never wanted to have again. i knew my moments in the secret theater to be very true, but understood how it might have scared the people who observed. I made a promise that I'd go home and do my homework, and that I'd never be a homeless druggy. I had decided on living an appearingly 'normal' life. like the RENDAN that Hakim Bey had wrote about. i wanted to be who i was, but i did not want to alarm the others. so i would follow their rules, while the entire time undermining them.
from the restaurant I made a phonecall to my Father who drove me home. by this time I was still feeling some secondary effects such as dizziness and serenity. but generally I could understand the situation, and easily respond to it. i had told my Father that I didn't really enjoy the show at the Theater, and had decided I'd had enough and wanted to go home. He believed me.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


In this step, you will add a feature to let your users control the order of the items in the phone list. The dynamic ordering is implemented by creating a new model property, wiring it together with the repeater, and letting the data binding magic do the rest of the work.
You should see that in addition to the search box, the app displays a drop down menu that allows users to control the order in which the phones are listed.
The most important differences between Steps 3 and 4 are listed below. You can see the full diff on GitHub:
app/index.html
:
... Search: <input ng-model="query"> Sort by: <select ng-model="orderProp"> <option value="name">Alphabetical</option> <option value="age">Newest</option> </select> ...

 {{phone.name}}
{{phone.snippet}}

 ...
We made the following changes to the index.html
template:
First, we added a <select>
html element named orderProp
, so that our users can pick from the
two provided sorting options.
We then chained the filter
filter with
filter to further process the input into the repeater. orderBy
orderBy
is a filter that takes an input
array, copies it and reorders the copy which is then returned.
Angular creates a two way data-binding between the select element and the orderProp
model.
orderProp
is then used as the input for the orderBy
filter.
As we discussed in the section about data-binding and the repeater in step 3, whenever the model changes (for example because a user changes the order with the select drop down menu), Angular's data-binding will cause the view to automatically update. No bloated DOM manipulation code is necessary!
app/js/controller.js
:
function PhoneListCtrl($scope) { $scope.phones = [ {"name": "Nexus S", "snippet": "Fast just got faster with Nexus S.", "age": 0}, {"name": "Motorola XOOM™ with Wi-Fi", "snippet": "The Next, Next Generation tablet.", "age": 1}, {"name": "MOTOROLA XOOM™", "snippet": "The Next, Next Generation tablet.", "age": 2} ]; $scope.orderProp = 'age'; }
We modified the phones
model - the array of phones - and added an age
property to each phone
record. This property is used to order phones by age.
We added a line to the controller that sets the default value of orderProp
to age
. If we had
not set the default value here, the model would stay uninitialized until our user would pick an
option from the drop down menu.
This is a good time to talk about two-way data-binding. Notice that when the app is loaded in the
browser, "Newest" is selected in the drop down menu. This is because we set orderProp
to 'age'
in the controller. So the binding works in the direction from our model to the UI. Now if you
select "Alphabetically" in the drop down menu, the model will be updated as well and the phones
will be reordered. That is the data-binding doing its job in the opposite direction — from the UI
to the model.
The changes we made should be verified with both a unit test and an end-to-end test. Let's look at the unit test first.
test/unit/controllerSpec.js
:
describe('PhoneCat controllers', function() { describe('PhoneListCtrl', function(){ var scope, ctrl; beforeEach(function() { scope = {}, ctrl = new PhoneListCtrl(scope); }); it('should create "phones" model with 3 phones', function() { expect(scope.phones.length).toBe(3); }); it('should set the default value of orderProp model', function() { expect(scope.orderProp).toBe('age'); }); }); });
The unit test now verifies that the default ordering property is set.
We used Jasmine's API to extract the controller construction into a beforeEach
block, which is
shared by all tests in the parent describe
block.
To run the unit tests, once again execute the ./scripts/test.sh
script and you should see the
following output.
Chrome: Runner reset.
..
Total 2 tests (Passed: 2; Fails: 0; Errors: 0) (3.00 ms)
Chrome 19.0.1084.36 Mac OS: Run 2 tests (Passed: 2; Fails: 0; Errors 0) (3.00 ms)
Let's turn our attention to the end-to-end test.
test/e2e/scenarios.js
:
... it('should be possible to control phone order via the drop down select box', function() { //let's narrow the dataset to make the test assertions shorter input('query').enter('tablet'); expect(repeater('.phones li', 'Phone List').column('phone.name')). toEqual(["Motorola XOOM\u2122 with Wi-Fi", "MOTOROLA XOOM\u2122"]); select('orderProp').option('Alphabetical'); expect(repeater('.phones li', 'Phone List').column('phone.name')). toEqual(["MOTOROLA XOOM\u2122", "Motorola XOOM\u2122 with Wi-Fi"]); }); ...
The end-to-end test verifies that the ordering mechanism of the select box is working correctly.
You can now refresh the browser tab with the end-to-end test runner to see the tests run, or you can see them running on Angular's server.
In the PhoneListCtrl
controller, remove the statement that sets the orderProp
value and
you'll see that Angular will temporarily add a new "unknown" option to the drop-down list and the
ordering will default to unordered/natural order.
Add an {{orderProp}}
binding into the index.html
template to display its current value as
text.
Now that you have added list sorting and tested the app, go to step 5 to learn about Angular services and how Angular uses dependency injection.


---
layout: page
title: Focus
categories: attributes
---
Single Focus
A focus is similar to sliding a window across the
genome. Only the region in this window can be analyzed.
{% for post in site.tools %}
{% if post.focus == "single" %}
{{post.title}}
{% endif %}
{% endfor %}
Multiple Foci
Multiple foci enable users to look at distinct segments of a genome in parallel
and compare features that are dispersed across the genome.
{% for post in site.tools %}
{% if post.focus == "multiple" %}
{{post.title}}
{% endif %}
{% endfor %}


Remember Me
Order Me Some Pizza