A series of shiny modules to help shiny sense the world around it.
It’s called shinysense
because shinyinputs
seemed kinda lame.
Currently the package supports the following ‘senses’.
drawr
& shinydrawr
: Draws a line chart that obscures the end of the results, the user then draws what they think the rest of the chart is and then the rest of the chart is revealed.
shinyswipr
: Embeds a card that can be swiped in different directions, the swipe direction is returned to shiny.shinyviewr
: Record images from a webcam or any other camera connected to browser viewing app.shinylistenr
: Records audio on a button press and returns the fast-fourier transformed signal to the server.shinymovr
: Capture and return accelerometer data from your phone or tablet.
Every sense included in the package has a demo app. To run the demo app you can run the included function run_demo()
and pass it the name of the function you want to see.
E.g.
This will run a basic demo application that includes the code behind the app. Giving you a jumping off point for including the function in your app!
Available demos include
'shinydrawr'
'shinyviewr'
'shinyswipr'
'shinymovr'
'shinylistenr'
'draw_your_dist'
: A demo app using shinydrawr
to fit a beta distribution to a drawn line.shinysense
is not currently on CRAN. To install it use the devtools
github function.
Once the app is installed just included it in your shiny app the way you usually would:
The names of the functions follow a few general rules.
The shiny-based functions are all prefixed with shiny
. E.g. shinyswipr
, shinydrawr
…
Of those shiny-based functions there are two functions per sense, the server function (just plain name), and the UI function, which has _UI
appended to the end.
Note that if you used shinysense in earlier versions, this naming scheme was inconsistant, I sincerely appologize for any frustration this may cause!
shiny
prefix.
drawr
which allows you to embed a you-draw-it chart in a static report, and run_demo
which starts up the demo apps for the various senses.Recently browsers have been making large steps to protect user’s data. This is great, however, it means that it can sometimes be tricky to get these applications working. Almost everything will require a secure connection to work. Secure connection generally means two things: one the website address includes https://
at the front, meaning that all data passed between the browser and server is encrypted, or the app is being run locally and acessed with localhost
.
The easiest way to experiment with these functions is to run a local rstudio instance on your laptop or desktop and then run the shiny app in the browser. When hosting an app for public consumption make sure you have an ssl encrypted server (I.e. https
).
A workaround for using Rstudio Server on a remote server that is not secured with https
is to do port forwarding with the ssh
command. E.g. ssh -L <IP_ADDRESS>:8787: <IP_ADDRESS>:8787 me@my_servers_address
. This will allow you to use localhost
for your apps.
The probability of there being bugs in these functions is unfortunately high. If you’ve found one I would be delighted if you could file a new issue here. I’ll try my best to at least respond.


Slaying the Dragon: Refactoring CSS for Maintainability
Refactoring is a practice that is often overlooked when it comes to CSS. As a result, styles seem to just grow and grow, until no one knows for sure which styles apply where, or whether many rules are still used at all. In this talk, we’ll cover strategies for refactoring CSS using Sass, with a focus on maintainability of code. Topics include code organization, naming, incremental change, and handling special cases such as responsive styles. This talk is based on my experience refactoring thousands of lines of CSS into Sass, in a way that allowed for continuous feature development, as well as supporting multiple layers of responsive styles and device-specific styles.
Video Vimeo
Video Youtube
A Startup's Secret Weapon: The Product Engineer
Startups often require employees to take on multiple roles, and one such combination is for an engineer to take on product management functions. In this talk, you will learn what a product engineer role looks like, why you should be a product engineer, and how to become one. I will discuss why product engineers are an invaluable asset to an early-stage startup, and how having product engineers result in better products and happier developers. This talk relates my experience over the last eight years in the trenches of early-stage startups, as a founder, and most recently as a product engineer at Coach.me.
Leveling Up in Angular
After you've developed that first demo app using the Angular JavaScript framework, now what? This presentation covers patterns and strategies for developing more complex apps using Angular, avoiding pitfalls, and how to write your own directives and components the "Angular Way".
Code Github
Slides HTML
Directives Demo
Video Youtube


{{For|a list of national alcoholic drinks by country|List of national liquors}} {{Refimprove|date=February 2013}}
Liqueurs are alcoholic beverages that are bottled with added sugar and have added flavors that are usually derived from fruits, herbs, or nuts. Liqueurs are distinct from eaux-de-vie, fruit brandy, and flavored liquors, which contain no added sugar. Most liqueurs range between 15% and 55% alcohol by volume.
Contents |
{{Main|Chocolate liqueur}}
{{Main|Cream liqueur}}
{{Main|Crème liqueur}}
Note: the exact recipes of many herbal liqueurs (which may contain up to 50 or more different herbs) are often closely guarded trade secrets. The primary herbal ingredients are listed where known.
See also Category:Anise liqueurs and spirits
<!-- Deleted image removed:
-->
{{portal|Drink}}
{{Reflist}}
{{Lists of beverages}}


Age Well
Issues Affecting Older People
Trips and Falls
Each year, around a third of over-65s will experience one or more falls, rising to 50% of over-80s. Falls in this age-group can result not only in pain and injury, but also loss of confidence and independence (PHE 2018h). Hip fractures in particular severely impair the patient’s prospects of being able to continue to live independently, and also carry a high mortality risk (PHE 2018h; University of East Anglia 2017). The fear of falling will often restrict the activities even of those who have not yet experienced a fall themselves (PHE 2017e).
Hospital Admissions
After several years of persistently higher-than-average falls-related hospital admissions, Blackburn with Darwen is now similar to the England average, both among the 65-79 and the 80+ age-groups (PHE 2018w).
Hip Fractures
The overall rate of hip fracture for older people aged 65+ in Blackburn with Darwen has been close to average for several years. However, among the 80+ population (where most of these events occur), it is more erratic. The latest rate for this age-group was significantly above average, and one of the ten highest in England (PHE 2018w).
Prevention and Response
- Blackburn with Darwen’s Falls Prevention Service offers targeted exercise programmes to improve the balance, strength and mobility of anybody over 65 who is at risk of falling (Re:fresh 2018). The Chartered Society of Physiotherapists estimates that such programmes in Blackburn with Darwen can produce a return on investment of £3.85 per £1 (CSP 2018).
- Home Assessment and Modification (‘HAM’) schemes aim to reduce falls risks by tackling issues such as loose mats, poor lighting and lack of handrails. They can produce a financial return on investment of £3.17 for every £1 spent, which rises to £7.34 per £1 when gains in Quality of Life are taken into account (PHE 2018a; LGA 2018b).9
- If an older person does fall, it is vital that help can be summoned quickly. Blackburn with Darwen now has over 2500 users of assistive technology, including falls pendants, alarms and bed occupancy sensors. Most are linked to the provider’s monitoring and response centre, ensuring a prompt and appropriate response (LGA 2018b; LGA 2018a).
Falls Prevention in the Asian Community
Concerned by the low attendance of South Asian heritage residents at falls prevention classes, Baiter Sehat (‘Better Health’) recently carried out a community engagement project on this topic with the borough’s BME communities.
Focus group disussions confirmed that awareness of these services was low. However, when a special demonstration event was arranged for Asian ladies, it attracted nearly 50 enthusiastic participants. The report recommends that such sessions should be provided within community settings, for men and women separately. These should be promoted both verbally and in writing, in languages familiar to Asian elders. Two residents volunteered to become ‘Falls Prevention Champions’, who will help to spread the message (One Voice 2018c; One Voice 2018b).
Dementia
What the papers say….
Looking Ahead
Predicting the future burden of dementia is far from straightforward. Research at UCL and Liverpool University has concluded that: ‘The risk of developing dementia at any given age is going down over time, shifting dementia to later years in life. This decline is mainly because of improvements in healthcare and adopting healthier lifestyles.’ (UCL 2018)
Even so, the researchers predict a 57% rise in the number of people living with dementia by 2040 in England and Wales, because of rising life expectancy.
Be Ambitious about Prevention
These predictions assume a continued decline in incidence rates, and would be higher still without it (UCL 2018). The study thus reinforces the key importance of public health measures aimed at dementia prevention (Shuttle 2017; PHE 2017c). Advice about how people can reduce their dementia risk now forms part of the NHS Health Check (PHE 2018g).
Further new research, published in the Lancet, has quantified the proportion of new cases of dementia across the world that might theoretically be preventable (Lancet 2018). As shown in Figure 87, modifiable risk factors are spread across the life-course, and together account for 35% of dementia incidence.
Dementia in Blackburn with Darwen
As at August 2018, GP practices in Blackburn with Darwen had a total of 1133 patients aged 65 or over who had been formally diagnosed with dementia. It is estimated that the true number of people aged 65+ with the condition is likely to be nearer 1531, so this means that around 74% of those affected have received a diagnosis (England average 67.8%) (NHS Digital 2018e). The latest age breakdown is for April 2018, when the total number of diagnosed patients aged 65+ was 1123 (Figure 88).
BME Communities
Previous work carried out by Baiter Sehat (‘Better Health’) has found low levels of dementia awareness within the local BME community, and a reluctance to come forward for diagnosis or accept help. There is significant stigma surrounding dementia, and no word for the condition in Urdu, Gujarati or Punjabi.
However, these barriers are beginning to be overcome, and there is now an increased desire to learn about dementia and how it can be prevented, recognised and managed. With the support of schools, mosques and local businesses, a growing volunteer force of Dementia ‘Friends’ and ‘Champions’ are spreading the message in ways that recognise the language and cultural needs of the BME community, and have helped turn Whalley Range into the the borough’s first ‘Dementia Friendly Area’ (One Voice 2017a; One Voice 2018d).Quality and Length of Life
Healthy Life Expectancy
Everything within the Public Health Outcomes Framework is geared towards achieving two ‘overarching outcomes’, one of which is increased healthy life expectancy. The importance accorded to this indicator reflects the philosophy that the public health system should be concerned not just with extending life, but with improving health and wellbeing across the life course. The calculation of Healthy Life Expectancy involves splitting total Life Expectancy into the portion spent in ‘good’ health and the remainder spent in ‘not good’ health, based on responses to a survey question such as: “How is your health in general?” (Figure 89) (ONS 2017e):
It can be seen that Healthy Life Expectancy in Blackburn with Darwen is 57.3 years for males and 60.0 years for females, both of which are significantly lower than the England average. The borough’s male Healthy Life Expectancy is the sixth equal lowest in England. When Healthy Life Expectancy is divided by total Life Expectancy, we find that males in Blackburn with Darwen can expect to spend 75.2% of their life in good health, and females 74.5%, which again is below average for both sexes.
If the 2014-16 results for Blackburn with Darwen are compared with 2011-13 (the most recent non-overlapping period), there has been no significant change. The same is true if we compare them with the earliest available set of results, for 2009-11.
The Public Health Outcomes Framework acknowledges that Healthy Life Expectancy is the sort of measure which can take a long time to show any marked improvements, which is why the overarching outcomes are underpinned by a large collection of supporting indicators (DH 2016).
End of Life
Cause of Death
It is natural to ask ‘What is the biggest cause of death in Blackburn with Darwen?’. The answer to that depends on how the causes have been grouped together, but if we accept the very broad classification used here, the biggest category is ‘Cancer & tumours’ (with 353 deaths in 2016), followed by ‘CVD’ (343). This means that Cancer has overtaken CVD in Blackburn with Darwen since the previous Summary Review, as it had already done in England as a whole.
There is, however, no ‘right’ or ‘wrong’ way to split up the causes. The ONS prefers to combine the various forms of dementia, but split up CVD and cancers, which leads to the now-familiar headlines stating that Dementia and Alzheimer’s disease is the biggest cause of death in England and Wales (ONS 2017b).
References
PHE. 2018h. Falls: Applying All Our Health. Public Health England. http://www.nwph.net/dentalhealth/Extractions_270317.aspx.
University of East Anglia. 2017. Screening could prevent a quarter of hip fractures. https://www.uea.ac.uk/about/-/screening-could-catch-a-quarter-of-hip-fractures-before-they-happen.
PHE. 2017e. Falls and Fracture Consensus Statement – Supporting Commissioning for Prevention. Public Health England. https://www.england.nhs.uk/south/wp-content/uploads/sites/6/2017/03/falls-fracture.pdf.
PHE. 2018w. Public Health Outcomes Framework. Public Health England. https://fingertips.phe.org.uk/profile/public-health-outcomes-framework.
Re:fresh. 2018. Falls Prevention Service. https://www.refreshbwd.com/service/falls-prevention-2/.
CSP. 2018. The Cost of Falls. Chartered Society of Physiotherapists. https://www.csp.org.uk/professional-clinical/improvement-and-innovation/costing-your-service/cost-falls.
PHE. 2018a. A Return on Investment Tool for the Assessment of Falls Prevention Programmes for Older People Living in the Community. Public Health England. https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/679856/A_return_on_investment_tool_for_falls_prevention_programmes.pdf.
LGA. 2018b. Hospital Admissions Due to Falls by Older People Set to Reach Nearly 1000 Per Day. Local Government Association. https://www.local.gov.uk/about/news/hospital-admissions-due-falls-older-people-set-reach-nearly-1000-day.
LGA. 2018a. Blackburn with Darwen Council: Making the Most of Telecare. Local Government Association. https://www.local.gov.uk/blackburn-darwen-council-making-most-telecare.
One Voice. 2018c. Ladies test their strength and balance. http://onevoicenetwork.org.uk/projects/falls-prevention/.
One Voice. 2018b. Baiter Sehat 5 – Falls Prevention FINAL report 2017 2018.
UCL. 2018. Study predicts over 1.2 million people in England and Wales will be living with dementia by 2040. University College London. http://www.ucl.ac.uk/news/news-articles/0717/6062017_dementia_rates.
Shuttle. 2017. New Information Leaflet Designed to “Delay Dementia”. https://theshuttle.org.uk/new-information-leaflet-designed-to-delay-dementia/.
PHE. 2017c. Dementia in Older Age: Barriers to Primary Prevention and Factors. Public Health England. https://www.gov.uk/government/publications/dementia-in-older-age-barriers-to-primary-prevention-and-factors.
PHE. 2018g. Dementia risk now included as part of NHS Health Check. Public Health England. from https://www.gov.uk/government/news/dementia-risk-now-included-as-part-of-nhs-health-check.
Lancet. 2018. Dementia Prevention, Intervention and Care. https://www.thelancet.com/pdfs/journals/lancet/PIIS0140-6736(17)31363-6.pdf.
NHS Digital. 2018e. Recorded Dementia Diagnoses – Aug 2018. https://digital.nhs.uk/data-and-information/publications/statistical/recorded-dementia-diagnoses/august-2018.
One Voice. 2017a. Baiter Sehat 4 – Dementia, Final Report March 2017.
One Voice. 2018d. Shops to become Friends of Dementia. http://onevoicenetwork.org.uk/projects/dementia-friendly-area/.
ONS. 2017e. Health state life expectancies, UK: 2014 to 2016. Office for National Statistics. https://www.ons.gov.uk/releases/healthstatelifeexpectanciesuk2014to2016.
DH. 2016. Improving Outcomes and Transparency, Part 2: Summary Technical Specifications of Public Health Indicators. Department of Health & Social Care. https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/545605/PHOF_Part_2.pdf.
ONS. 2017b. Deaths registered in England and Wales (Series DR) 2016. Office for National Statistics. https://www.ons.gov.uk/peoplepopulationandcommunity/birthsdeathsandmarriages/deaths/bulletins/deathsregisteredinenglandandwalesseriesdr/2016.
These returns were achieved when HAM schemes were delivered to people who had already been hospitalised by falls. They would probably be more modest for a lower-risk population (PHE 2018a).↩
‘Less education’ means no secondary education. This is much less common in England than it is worldwide, so it may account for somewhat less than ‘8%’ of the dementia risk in this country.↩


W3C Resources
- Video: Text to Speech | Web Accessibility Perspectives
- Images Concepts | Web Accessibility Tutorials - Guidance on how to create websites that meet WCAG
- an alt Decision Tree
- Image text alternatives (
alt text
) | Easy Checks - HTML 5.3 <IP_ADDRESS>.3. A link or button containing nothing but an image
- HTML 5.3 section <IP_ADDRESS>.19 Logos, insignia, flags, or emblems


T.I.’s Daughter Breaks Silence On Father ‘Checking’ Virginity
by Lucy ConnollyDeyjah Harris has broken her silence after it emerged her dad, rapper T.I., takes her to the gynaecologist every year to make sure her hymen is still intact.
Advertisements
The horrifying revelation, which involved the rapper sharing his daughter’s extremely private and intimate medical information publicly, saw T.I. confess to making the yearly appointments to check whether 18-year-old Deyjah is still a virgin.
His comments prompted disgust and the rapper, whose real name is Clifford Joseph Harris Jr, was condemned by many who called his behaviour ‘controlling’ and ‘possessive’ – claims which have since been backed up by Deyjah herself.
Advertisements
Despite T.I. claiming he had his daughter’s consent to be privy to her intimate business – a claim that is absolutely worthless when you consider the way he went about it – the 18-year-old’s Twitter activity tells a completely different story.
Having been inundated with messages of support on her social media, with many urging her to speak out and tell her side of the story, Deyjah told her followers: ‘i loveeeeeee yalllllll’, before liking three extremely telling tweets which called out her dad for his actions.
While one tweet read simply: ‘That is just beyond possessive,’ another read: ‘This is disgusting, possessive and controlling *whew*,’ and the latter said: ‘”give me my results” first of all mf, those are HER results!! Like WTF.’
The concerning revelation came during the Life Hacks episode of the Ladies Like Us podcast, when the 39-year-old rapper was asked whether he had spoken to his children about sex. It was then he casually dropped in ‘not only’ had they had the conversation, but they have ‘yearly trips to the gynaecologist to check her hymen’.
Advertisements
When hosts Nazanin Mandi and Nadia Moham simply laughed, presumably believing the rapper was joking or at least exaggerating, Harris went into greater detail about one specific appointment – which he made in the days following Deyjah’s 16th birthday.
Interestingly, his daughter never gets a voice in his version of events; the story is very much told from T.I.’s point of view throughout, even when the issue of consent is brought up and the doctor announces he needs Deyjah’s permission to share her medical information with her father.
T.I. states: ‘I’m like, ‘Deyjah they want you to sign this so we can share information. Is there anything you wouldn’t want me to know? See doc? No problem.’ However, it’s at no point made clear to the listener whether his daughter – who would have just turned 16 at the time of the appointment – actually gave permission for her dad to be told about her hymen.
Advertisements
Even if she did, Deyjah certainly didn’t give permission for her father to then share that information with the entire world while appearing on a podcast.  It should never be simply used as an ‘interesting’ anecdote, thrown around one day by a person who has no business doing so.
And yet T.I. recalled telling the doctor: ‘Just check the hymen please and give me back my results expeditiously.’ Note the fact he said ‘my results’, not ‘my daughter’s results’, reinforcing the idea that Deyjah has no control over her own body.
This is by no means the only thing wrong with T.I.’s claims, either. The idea that a person’s hymen can only be ‘broken’ during sex is a myth, as is the belief that an ‘intact’ hymen is equivalent to someone’s virginity – so not only are his comments highly disturbing and damaging, but they’re just plain wrong.
The hymen, a thin piece of tissue that surrounds the external vaginal opening, can ‘break’ for any number of reasons – including sex, horse riding, inserting a tampon, riding a bike, gymnastics, etc etc… Facts T.I’ was already aware of, because he recalled the gynaecologist mentioning them to him at one of the appointments.
He told the hosts:
They come and say, ‘Well I just want you to know that there are other ways besides sex that the hymen can be broken like bike riding, athletics, horseback riding, and just other forms of athletic physical activity.’

So far, the results have been to her father’s liking, with him claiming: ‘I will say as of her 18th birthday, her hymen is still intact.’ He then contradicts himself completely by suggesting that no boy wants to be with a virgin, stating: ‘They’re no fun. Who wants a virgin? Like really? All that work’. Wow.
Ladies Like Us has since removed the controversial episode from the podcast.
A Broadcast Journalism Masters graduate who went on to achieve an NCTJ level 3 Diploma in Journalism, Lucy has done stints at ITV, BBC Inside Out and Key 103. While working as a journalist for UNILAD, Lucy has reported on breaking news stories while also writing features about mental health, cervical screening awareness, and Little Mix (who she is unapologetically obsessed with).


/**
* Created by mike mc on 28/08/2016.
*/
'use strict';
const _ = require('lodash');
// ****************** SET UP LOGGING ***************************
// If log handle not supplied to module then create one
const bunyan = require('bunyan');
const PrettyStream = require('bunyan-prettystream');
const prettyStdOut = new PrettyStream();
prettyStdOut.pipe(process.stdout);
class GraphSearch{
constructor(graph, configuration){
if (!_.isObject(graph)){
throw new Error("Expected graph object to be passed to search");
}
this.graph = graph;
// *************************************
// This class can fallback to an onboard bunyan logger if no logger is supplied
// to it in the configuration. In this event, logging can be disabled by setting
// the NODE_ENV environment variable to 'test'
// *************************************
this.log = (!_.isUndefined(configuration) || !_.isUndefined(configuration.log)) ?
configuration.log :
bunyan.createLogger({
name: 'graphSearch',
serializers: {
reason: bunyan.stdSerializers.err
},
streams: process.env.NODE_ENV === 'test' ?
[]
: [{
level: 'info',
type: 'raw',
stream: prettyStdOut
}]
});
this.maxDepth = 5; // This only comes into effect when we seek to elucidate a user's entire network
Iif (!_.isUndefined(configuration) && !_.isUndefined(configuration.maxDepth)) {
this.maxDepth = configuration.maxDepth;
}
this.firstHitOnly = false; // When we find a short path, don't attempt to carry on and find all shortest paths
Iif (!_.isUndefined(configuration) && !_.isUndefined(configuration.firstHitOnly)) {
this.firstHitOnly = configuration.firstHitOnly;
}
}
/**
* Given a node, discover all nodes they are connected to. If the node is connected to the same node

* through multiple paths, then only the most direct path is revealed

* Note that we only traverse upto a maximum depth determined by maxDepth in the configuration (default 5 if missing)

*

* @param {string} name - node we want to discover network for
* @returns {array} contacts - list of paths to distinct contacts
*
*/
revealContacts(nodeName){
let searchPaths = [[nodeName]]; // tracks the paths we are currently investigating
Iif (_.isUndefined(nodeName) || (!_.isString(nodeName))){
console.error("Missing Source Node from search criteria");
this.log.error("Missing Source Node from search criteria");
return [];
}
let blackList = {}, // used to prevent cycles
stillProgressing = false;
let leafPosition = 0, layerCount = 0, abandonedPaths = 0;
blackList[nodeName] = 1;
do {
stillProgressing = false;
for (let i = 0; i < searchPaths.length; i++) {
// get leaf node
leafPosition = searchPaths[i].length - 1;
let adjacentNodes = this.graph.getAdjacentNodes(searchPaths[i][leafPosition]),
newPath = [];
if (adjacentNodes.length > 0) {
for (let x = 0; x < adjacentNodes.length; ++x) {
// have we encountered this node already? If so then discard
if (_.isUndefined(blackList[adjacentNodes[x]])) {
newPath = searchPaths[i].slice(); // clone original path
newPath.push(adjacentNodes[x]);
searchPaths.push(newPath.slice()); // append copy of newPath into scratchList
blackList[adjacentNodes[x]] = 1; // prevent cycles
stillProgressing = true;
}
else {
// else ignore this node as we have already taken it into account
abandonedPaths++;
}
}
}
}
++layerCount;
Iif (layerCount >= this.maxDepth){
this.log.info("Hit maximum search depth for user network search");
stillProgressing = false;
}
this.log.info("At depth: " + layerCount);
this.log.info("Current number of paths being considered: " + searchPaths.length);
this.log.info("Total Abandoned Paths so far [" + abandonedPaths + "] paths");
} while (stillProgressing);
this.log.info(searchPaths.length + " Paths found from " + nodeName);
for (let x = 0; x < searchPaths.length; ++x) {
this.log.debug(_.join(searchPaths[x],"->"));
}
return searchPaths;
}
/**
* Get the paths from source node to destination node

*

* @param {object} conditions -

 conditions.source => search from this node

*
 conditions.destination => search for connection to this node

*
 conditions.searchType => "allPaths" => find all paths from source to dest, "shortestPath" => find shortest path(s) to dest

* @returns {array} paths - list of paths to specified contact
*
*/
getPaths(searchConditions){
let searchPaths = [];
Iif (_.isUndefined(searchConditions.source) || (!_.isString(searchConditions.source))){
console.error("Missing Source Node from search criteria");
this.log.error("Missing Source Node from search criteria");
return [];
}
Iif (!this.graph.existingNode(searchConditions.source)){
this.log.error("Source node does not exist in the network")
return [];
}
Iif (_.isUndefined(searchConditions.destination) || (!_.isString(searchConditions.destination))){
console.error("Missing Destination Node from search criteria");
this.log.error("Missing Destination Node from search criteria");
return [];
}
Iif (!this.graph.existingNode(searchConditions.destination)){
this.log.error("Destination node does not exist in the network");
return [];
}
Iif (_.isUndefined(searchConditions.searchType) || (!_.isString(searchConditions.searchType))){
searchConditions.searchType = "allPaths";
this.log.info("Defaulting to finding all search paths");
}
searchPaths = [[searchConditions.source]]; // tracks the paths we are currently investigating
if ((searchConditions.searchType === "shortestPath") &&
(searchConditions.source === searchConditions.destination)){
this.log.info("Source and destination nodes are the same");
searchPaths[0].push(searchConditions.destination);
}
else {
let blackList = {}, // used to prevent cycles & path search duplication
scratchList = [],
foundShortest = false, stillProgressing = false;
let leafPosition = 0, layerCount = 0, abandonedPaths = 0;
blackList[searchConditions.source] = 1;
do {
scratchList = [];
stillProgressing = false;
for (let i = 0; i < searchPaths.length; i++) {
// get leaf node
leafPosition = searchPaths[i].length - 1;
if (searchPaths[i][leafPosition] === searchConditions.destination) {
// no need to progress any further along this path
scratchList.push(searchPaths[i].slice());
}
else
{
let adjacentNodes = this.graph.getAdjacentNodes(searchPaths[i][leafPosition]),
newPath = [];
if (adjacentNodes.length > 0) {
for (let x = 0; x < adjacentNodes.length; ++x) {
// have we encountered this node already? If so then discard
if (_.isUndefined(blackList[adjacentNodes[x]])) {
newPath = searchPaths[i].slice(); // clone original path
newPath.push(adjacentNodes[x]);
scratchList.push(newPath.slice()); // append copy of newPath into scratchList
if (adjacentNodes[x] != searchConditions.destination) {
blackList[adjacentNodes[x]] = 1; // prevent cycles
}
stillProgressing = true;
}
else{
// else ignore this node as we have already taken it into account
abandonedPaths++;
}
}
}
}
}
// After traversing down another layer in the graph, lets check if we
// have reached the destination on any of the paths
if (searchConditions.searchType === "shortestPath") {
let shortestPaths = scratchList.filter(function (path) {
return (path[leafPosition] === searchConditions.destination);
});
if ((shortestPaths.length > 0) && (shortestPaths.length < searchPaths.length)) {
scratchList = shortestPaths;
foundShortest = true;
}
}
++layerCount;
this.log.info("At depth: " + layerCount);
this.log.info("Current number of paths being considered: " + scratchList.length);
this.log.info("Total Abandoned Paths so far [" + abandonedPaths + "] paths");
searchPaths = scratchList;
// todo: sort the searchpaths so we check those that have the least number of
// acquaintances first - will optimize for all but the worst case
} while ((searchConditions.searchType === "allPaths" && stillProgressing) ||
(searchConditions.searchType === "shortestPath" && !foundShortest && stillProgressing));
}
this.log.info(searchPaths.length + " Paths found from " + searchConditions.source + " to " + searchConditions.destination);
for (let x = 0; x < searchPaths.length; ++x) {
this.log.debug(_.join(searchPaths[x],"->"));
}
return searchPaths;
}
}
module.exports = GraphSearch; |


Company profile - Canadian Company Capabilities
Third-Party Information Liability Disclaimer
Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.
Chemposite Inc.
Mailing Address:
7903 Webster Rd.DELTA, British Columbia
V4G 1E4
Location Address:
7903 Webster Rd.DELTA, British Columbia
V4G 1E4
Tel.:<PHONE_NUMBER>
Fax:<PHONE_NUMBER>
Company Profile
Success Stories
Chemposite Honoured by The Dow Chemical Company for High-Quality
Fabrication with Derakane Resins
San Antonio, Texas, Oct. 22, 1998 - For the second year in a row,
The Dow Chemical Company and a panel of industry experts have
selected Chemposite, Inc., as a winner in the second annual
Fabricator Excellence Awards program for Derakane* Resins.
Encouraging innovation and quality in the fibre-reinforced
plastic (FRP) industry, Fabricator Excellence Awards for Derakane
Resins are awarded to the most outstanding FCP projects
fabricated with Derakane epoxy vinyl ester resins during the last
year.
``Thanks to the outstanding capabilities of fabricators like
Chemposite, and the high-quality FRP applications they fabricate
for their customers, Dow continues to be the top manufacturer of
vinyl ester resins in the FRP industry,`` said Mark Sullivan,
Industry Manager for Composites at Dow. ``The Fabricator
Excellence Award allows us to recognize fabricators for their
contributions to the entire FRP industry.``
Based on Delta, British Columbia, Chemposite was recognized by
Dow for the fabrication of four sets of water jet inlet fairings
for a new, high-speed catamaran ferry, scheduled to serve the
British Columbia area. The fairings, which each measure 1.5
metres x 5 metres, were completed within a tight lead time of
eight weeks prior to the launch date. The use of FRP provided a
weight savings of approximately 40 percent over the originally
proposed aluminum block fairings.
``Dow is proud to be associated with innovative FRP projects such
as the water jet inlet fairings,`` Sullivan said. ``It is the
vision and commitment to quality of companies like Chemposite
that will help FRP expand into new markets and continue to be
recognized as the material of choice for any application that
requires corrosion resistance and structural strength.``
Fabricator Excellence Award entries were submitted by fabricators
throughout North America and were judged by a panel of experts
from the composites industry, including: Tom Anderson, President
of Anderson Consultants; Amanda Jacob, Editor or Reinforced
Plastics; Larry Craigie, Technical Service and Development Leader
at Dow; and Sullivan.
Other Fabricator Excellence Award recipients include Addax, Inc.,
Lincoln, Neb.; Lanzo Lining Services, Pompano Beach, Fla.; and
Troy Manufacturing, Inc.; Henderson, Texas.
______________________________________________________________
Top Fabricators Honoured As Winners of First Annual Fabricator
Excellence Awards for Derakane Resins
Five of North America's best fabricators of fibre-reinforced
plastic (FRP) walked away from Composites 97 with some
well-deserved recognition for the quality of their work last
year. They were honoured by Dow as the winners of a Fabricator
Excellence Award for Derakane Resins.
After reviewing a number of high-quality FRP applications
fabricated with Derakane resins. Dow selected the following
companies as winners of Fabricator Excellence Awards:
Chemopsite Inc., Hardcore DuPont Composites, Lanzo Lining
Systems, Specialty Plastics, Inc., and Strongwell.
The annual Fabricator Excellence Awards for Derakane Resins
encourages innovation and quality in the FRP industry by
recognizing companies that have completed the most outstanding
FRP applications fabricated with Derakane resins during the year.
Winning fabricators were honoured during Composites 97 at a
special awards ceremony and dinner at EPCOT's Living Seas
Restaurant in Orlando, Fla. The ceremony included brief
presentations from several industry experts, as well as a special
awards presentation, during which each of the fabricators were
recognized for their accomplishments. Winners received a
commemorative award, special marketing and publicity
opportunities, and recognition throughout the FRP solutions.
``Dow is recognized as the leading vinyl ester resin manufacturer
in the FRP industry due, in part, to the outstanding capabilities
of fabricators who work with Derakane resins and the high-quality
FRP fabrication they provide their customers,`` said Mark
Sullivan, industry manager for composites at Dow, and a featured
speaker at the awards ceremony. ``Dow is honoured to be
associated with such high-caliber companies, and the Fabricator
Excellence Award allows us to recognize these fabricators for
their contributions to the FRP industry.``
Fabricator Excellence Award entries were submitted by fabricators
throughout North America and were judged by a panel of experts
from the composites industry, including: Tom Anderson President
of Anderson Consultants; Judith Ray Hazen, Publisher of
Composites Technology and High Performance Composites; Larry
Craigie, Technical Service and Development Leader at Dow; and
Sullivan. Descriptions of this year's winning projects follow.
Chemposite Inc., British Columbia, Canada
Chemposite was recognized by Dow for the fabrication of an FRP
odour control system that includes 16 chemical scrubbers, 22 dual
bed carbon absorbers and a ductwork system. This odour control
system, which Chemposite manufactured in China and installed in
Singapore, is subjected to high heat, and various corrosive
chemicals generated from the waste water treatment process,
including hydrogen sulfide, sodium hydroxide, sodium hypochlorite
and potassium chloride. To meet the demands of the end-user.
Chemposite designed, engineered, fabricated and delivered this
time-consuming FRP project in only four months.
Full profile
Full profile
Contact information
Company description
Product / Service / Licensing
structural beams and frames for corrosion resistant
applications in pulp and paper, oil refining, mining and
chemical industries
Market profile
Geographic markets:
Export experience:
- China
- Indonesia
- Japan
- Singapore
- Taiwan
- United States
- California
- Colorado
- Connecticut
- New Hampshire
- New Jersey
- New York
- Oregon
- South Carolina
- Washington
Actively pursuing:
- Australia
- Brazil
- Chile
- Malaysia
- Mexico
- Peru
- Alabama
- Alaska
- Arizona
- Arkansas
- Delaware
- District of Columbia
- Florida
- Georgia
- Hawaii
- Idaho
- Illinois
- Indiana
- Iowa
- Kansas
- Kentucky
- Louisiana
- Maine
- Maryland
- Massachusetts
- Michigan
- Minnesota
- Mississippi
- Missouri
- Montana
- Nebraska
- Nevada
- New Mexico
- North Carolina
- North Dakota
- Ohio
- Oklahoma
- Pennsylvania
- Rhode Island
- South Dakota
- Tennessee
- Texas
- Utah
- Vermont
- Virginia
- West Virginia
- Wisconsin
- Wyoming
Third-Party Information Liability Disclaimer
Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.
Contacts
Contact information
Description
Company description
Products, services and licensing
Product / Service / Licensing
structural beams and frames for corrosion resistant
applications in pulp and paper, oil refining, mining and
chemical industries
Market
Market profile
Geographic markets:
Export experience:
- China
- Indonesia
- Japan
- Singapore
- Taiwan
- United States
- California
- Colorado
- Connecticut
- New Hampshire
- New Jersey
- New York
- Oregon
- South Carolina
- Washington
Actively pursuing:
- Australia
- Brazil
- Chile
- Malaysia
- Mexico
- Peru
- Alabama
- Alaska
- Arizona
- Arkansas
- Delaware
- District of Columbia
- Florida
- Georgia
- Hawaii
- Idaho
- Illinois
- Indiana
- Iowa
- Kansas
- Kentucky
- Louisiana
- Maine
- Maryland
- Massachusetts
- Michigan
- Minnesota
- Mississippi
- Missouri
- Montana
- Nebraska
- Nevada
- New Mexico
- North Carolina
- North Dakota
- Ohio
- Oklahoma
- Pennsylvania
- Rhode Island
- South Dakota
- Tennessee
- Texas
- Utah
- Vermont
- Virginia
- West Virginia
- Wisconsin
- Wyoming


#ftl output_format="HTML" auto_esc=true> <#import "layout/default.html" as layout><EMAIL_ADDRESS>Dear ${notificationTarget.name},
We recently received a request to change your email address on the Innovation Funding Service.
We have done this and have sent a confirmation to your new address at ${newEmail}.
If you did not request this change, please contact the support desk now at<EMAIL_ADDRESS><EMAIL_ADDRESS>/> @layout.default>


Holly Johnsen
Front-end and Data Science Ninja in training
Featured Work
edX MOOC analysis
https://github.com/hjohnsen/edX-MOOC-analysis
Data-driven teaching
https://github.com/hjohnsen/classroom_analysis
Personalized Medicine Kaggle
https://github.com/hjohnsen/kaggle-personalized-medicine
Pokemon Go Sentiment Analysis
https://github.com/hjohnsen/pogo-tweets


{embed='includes/header'} {exp:user:stats dynamic="off" member_id="{segment_3}"} {if photo_filename} {if:else} {/if} {screen_name} Living Hometown {location} Current City {occupation} Interests {interests} Status {exp:friends:members member_id="{segment_3}"} {if friend == "y"} {if friends_reciprocal == "y"} (already friends) {if:else} (invited) {/if} {if:else} Add to Friends {/if} {/exp:friends:members} {/exp:user:stats} Recent Activity {embed='includes/status-profile' id_member='{segment_3}'} {embed='includes/footer'}
{interests}
{if friend == "y"} {if friends_reciprocal == "y"} (already friends) {if:else} (invited) {/if} {if:else} Add to Friends {/if}


[t]
Dear {$cand.voornaam} {$cand.tussenvoegsel} {$cand.achternaam},[/t] [t]
Thank you for your registration via [/t]{$website}
[t]We have generated a login for you. Next time you visit our website, you can login using the following details.
[/t] [t]Username : {$cand.email}
Password : {$cand.password}
We will do everything we can to find a suitable vacancy for you and will get back to you within few days.
[/t] [t]Kind regards,
{$klant}


Storing UTC is not a silver bullet Note: this is a pretty long post. If you’re not interested in the details, the conclusion at the bottom is intended to be read in a standalone fashion. There’s also a related blog post …
Microsoft exec bans company from pulling any dumb April Fools’ pranks Internal memo says that pranks have little upside and can too often backfire.
Getting started with Lithnet Password Protection - Part 1 - Blocking compromised passwords with the 'Have I Been Pwned?' password list In this guide, we will look at how to set up Lithnet Password Protection for Active Directory (LPP) from scratch. We'll configure a basic...
What is 'responsible' in Responsible AI? Google's new ethics committee lacks some vital things. Like ethics.
dotnet/performance This repo contains benchmarks used for testing the performance of all .NET Runtimes - dotnet/performance
Real-time Speech-to-Text and Translation with Cognitive Services, Azure Functions, and SignalR Service When we do a live presentation — whether online or in person — there are often folks in the audience who are not comfortable with the language we're speaking or they have difficulty hearing us. Microsoft created Presentation Translator to ...
Arithmetic operators - C# reference Learn about C# operators that perform multiplication, division, remainder, addition, and subtraction operations with numeric types.
American Democracy March 14, 2019 Lecture ,"assets":{"js":"/yts/jsbin/player_ias-vfl0m8XVi/en_US/base.js","css":"/yts/cssbin/player-vflnCF_bL/www-player-webp.css"},"args":{"loaderUrl":"https://www.youtube.com/watch?v=h2TrRWAkbr8","use_fast_sizing_on_watch_default":false,"cos":"Windows","player_re...
Run static methods from gutter, IL Viewer, install SDKs and more improvements in Rider 2019.1 - .NET Tools Blog When we announced the latest Rider 2019.1 EAP build, we covered the highlights of this upcoming release. In this post, we’ll look at some smaller yet useful additions that we will ship in Rider 2019.1. We can now run static methods from … Continue reading...
Troubleshoot ASP.NET Core Localization Learn how to diagnose problems with localization in ASP.NET Core apps.
Voting for .NET Foundation Come help me cast my vote for the .NET Foundation Election! We will be reviewing the candidates and casting my vote by the end of the stream.
NDC Meetup with Troy Hunt at Microsoft Reactor with SSW - Sydney Welcome to NDC Meetup with Troy Hunt in collaboration with SSW at Microsoft Reactor. Agenda 17:30 - Pizza and Drinks 18.00 - Welcome and introduction by Adam Cogan from SSW 18:15- Talk by Troy Hunt 19:15 - 45 min Q&A with Troy Clouds, Codes, and Cybers ...


trash-cli
A command-line interface to the trashcan APIs.
More information: home page
- Trash specific files and directories into the current trashcan:
trash-put path/to/file_or_directory1 path/to/file_or_directory2 ...
- Remove specific files from the current trashcan:
trash-rm path/to/file_or_directory1 path/to/file_or_directory2 ...
- Empty the current trashcan:
trash-empty
- List trashed files and directories in the current trashcan:
trash-list
- Restore a specific file or directory by a number from the displayed list from the current trashcan:
trash-restore


An interface that may be implemented by a wl_surface, for implementations that provide a desktop-style user interface.
More...
|
| enum | wl_shell_surface_resize {
WL_SHELL_SURFACE_RESIZE_NONE = 0,
WL_SHELL_SURFACE_RESIZE_TOP = 1,
WL_SHELL_SURFACE_RESIZE_BOTTOM = 2,
WL_SHELL_SURFACE_RESIZE_LEFT = 4,
WL_SHELL_SURFACE_RESIZE_TOP_LEFT = 5,
WL_SHELL_SURFACE_RESIZE_BOTTOM_LEFT = 6,
WL_SHELL_SURFACE_RESIZE_RIGHT = 8,
WL_SHELL_SURFACE_RESIZE_TOP_RIGHT = 9,
WL_SHELL_SURFACE_RESIZE_BOTTOM_RIGHT = 10
} |
| | edge values for resizing More...
|
| |
| enum | wl_shell_surface_transient { WL_SHELL_SURFACE_TRANSIENT_INACTIVE = 0x1
} |
| | details of transient behaviour More...
|
| |
| enum | wl_shell_surface_fullscreen_method { WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT = 0,
WL_SHELL_SURFACE_FULLSCREEN_METHOD_SCALE = 1,
WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER = 2,
WL_SHELL_SURFACE_FULLSCREEN_METHOD_FILL = 3
} |
| | different method to set the surface fullscreen More...
|
| |
|
| static int | wl_shell_surface_add_listener (struct wl_shell_surface *wl_shell_surface, const struct wl_shell_surface_listener *listener, void *data) |
| |
| static void | wl_shell_surface_set_user_data (struct wl_shell_surface *wl_shell_surface, void *user_data) |
| |
| static void * | wl_shell_surface_get_user_data (struct wl_shell_surface *wl_shell_surface) |
| |
| static void | wl_shell_surface_destroy (struct wl_shell_surface *wl_shell_surface) |
| |
| static void | wl_shell_surface_pong (struct wl_shell_surface *wl_shell_surface, uint32_t serial) |
| | A client must respond to a ping event with a pong request or the client may be deemed unresponsive. More...
|
| |
| static void | wl_shell_surface_move (struct wl_shell_surface *wl_shell_surface, struct wl_seat *seat, uint32_t serial) |
| | Start a pointer-driven move of the surface. More...
|
| |
| static void | wl_shell_surface_resize (struct wl_shell_surface *wl_shell_surface, struct wl_seat *seat, uint32_t serial, uint32_t edges) |
| | Start a pointer-driven resizing of the surface. More...
|
| |
| static void | wl_shell_surface_set_toplevel (struct wl_shell_surface *wl_shell_surface) |
| | Map the surface as a toplevel surface. More...
|
| |
| static void | wl_shell_surface_set_transient (struct wl_shell_surface *wl_shell_surface, struct wl_surface *parent, int32_t x, int32_t y, uint32_t flags) |
| | Map the surface relative to an existing surface. More...
|
| |
| static void | wl_shell_surface_set_fullscreen (struct wl_shell_surface *wl_shell_surface, uint32_t method, uint32_t framerate, struct wl_output *output) |
| | Map the surface as a fullscreen surface. More...
|
| |
| static void | wl_shell_surface_set_popup (struct wl_shell_surface *wl_shell_surface, struct wl_seat *seat, uint32_t serial, struct wl_surface *parent, int32_t x, int32_t y, uint32_t flags) |
| | Map the surface as a popup. More...
|
| |
| static void | wl_shell_surface_set_maximized (struct wl_shell_surface *wl_shell_surface, struct wl_output *output) |
| | Map the surface as a maximized surface. More...
|
| |
| static void | wl_shell_surface_set_title (struct wl_shell_surface *wl_shell_surface, const char *title) |
| | Set a short title for the surface. More...
|
| |
| static void | wl_shell_surface_set_class (struct wl_shell_surface *wl_shell_surface, const char *class_) |
| | Set a class for the surface. More...
|
| |
An interface that may be implemented by a wl_surface, for implementations that provide a desktop-style user interface.
It provides requests to treat surfaces like toplevel, fullscreen or popup windows, move, resize or maximize them, associate metadata like title and class, etc.
On the server side the object is automatically destroyed when the related wl_surface is destroyed. On the client side, wl_shell_surface_destroy() must be called before destroying the wl_surface object.
◆ WL_SHELL_SURFACE_CONFIGURE_SINCE_VERSION
| #define WL_SHELL_SURFACE_CONFIGURE_SINCE_VERSION 1 |
◆ WL_SHELL_SURFACE_MOVE_SINCE_VERSION
| #define WL_SHELL_SURFACE_MOVE_SINCE_VERSION 1 |
◆ WL_SHELL_SURFACE_PING_SINCE_VERSION
| #define WL_SHELL_SURFACE_PING_SINCE_VERSION 1 |
◆ WL_SHELL_SURFACE_PONG_SINCE_VERSION
| #define WL_SHELL_SURFACE_PONG_SINCE_VERSION 1 |
◆ WL_SHELL_SURFACE_POPUP_DONE_SINCE_VERSION
| #define WL_SHELL_SURFACE_POPUP_DONE_SINCE_VERSION 1 |
◆ WL_SHELL_SURFACE_RESIZE_SINCE_VERSION
| #define WL_SHELL_SURFACE_RESIZE_SINCE_VERSION 1 |
◆ WL_SHELL_SURFACE_SET_CLASS_SINCE_VERSION
| #define WL_SHELL_SURFACE_SET_CLASS_SINCE_VERSION 1 |
◆ WL_SHELL_SURFACE_SET_FULLSCREEN_SINCE_VERSION
| #define WL_SHELL_SURFACE_SET_FULLSCREEN_SINCE_VERSION 1 |
◆ WL_SHELL_SURFACE_SET_MAXIMIZED_SINCE_VERSION
| #define WL_SHELL_SURFACE_SET_MAXIMIZED_SINCE_VERSION 1 |
◆ WL_SHELL_SURFACE_SET_POPUP_SINCE_VERSION
| #define WL_SHELL_SURFACE_SET_POPUP_SINCE_VERSION 1 |
◆ WL_SHELL_SURFACE_SET_TITLE_SINCE_VERSION
| #define WL_SHELL_SURFACE_SET_TITLE_SINCE_VERSION 1 |
◆ WL_SHELL_SURFACE_SET_TOPLEVEL_SINCE_VERSION
| #define WL_SHELL_SURFACE_SET_TOPLEVEL_SINCE_VERSION 1 |
◆ WL_SHELL_SURFACE_SET_TRANSIENT_SINCE_VERSION
| #define WL_SHELL_SURFACE_SET_TRANSIENT_SINCE_VERSION 1 |
◆ wl_shell_surface_fullscreen_method
different method to set the surface fullscreen
Hints to indicate to the compositor how to deal with a conflict between the dimensions of the surface and the dimensions of the output. The compositor is free to ignore this parameter.
| Enumerator |
|---|
| WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT | no preference, apply default policy
|
| WL_SHELL_SURFACE_FULLSCREEN_METHOD_SCALE | scale, preserve the surface's aspect ratio and center on output
|
| WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER | switch output mode to the smallest mode that can fit the surface, add black borders to compensate size mismatch
|
| WL_SHELL_SURFACE_FULLSCREEN_METHOD_FILL | no upscaling, center on output and add black borders to compensate size mismatch
|
◆ wl_shell_surface_resize
edge values for resizing
These values are used to indicate which edge of a surface is being dragged in a resize operation. The server may use this information to adapt its behavior, e.g. choose an appropriate cursor image.
| Enumerator |
|---|
| WL_SHELL_SURFACE_RESIZE_NONE | no edge
|
| WL_SHELL_SURFACE_RESIZE_TOP | top edge
|
| WL_SHELL_SURFACE_RESIZE_BOTTOM | bottom edge
|
| WL_SHELL_SURFACE_RESIZE_LEFT | left edge
|
| WL_SHELL_SURFACE_RESIZE_TOP_LEFT | top and left edges
|
| WL_SHELL_SURFACE_RESIZE_BOTTOM_LEFT | bottom and left edges
|
| WL_SHELL_SURFACE_RESIZE_RIGHT | right edge
|
| WL_SHELL_SURFACE_RESIZE_TOP_RIGHT | top and right edges
|
| WL_SHELL_SURFACE_RESIZE_BOTTOM_RIGHT | bottom and right edges
|
◆ wl_shell_surface_transient
details of transient behaviour
These flags specify details of the expected behaviour of transient surfaces. Used in the set_transient request.
| Enumerator |
|---|
| WL_SHELL_SURFACE_TRANSIENT_INACTIVE | do not set keyboard focus
|
◆ wl_shell_surface_add_listener()
| static int wl_shell_surface_add_listener |
( |
struct wl_shell_surface * |
wl_shell_surface, |
|
|
const struct wl_shell_surface_listener * |
listener, |
|
|
void * |
data |
|
) |
| |
|
inlinestatic |
◆ wl_shell_surface_destroy()
| static void wl_shell_surface_destroy |
( |
struct wl_shell_surface * |
wl_shell_surface | ) |
|
|
inlinestatic |
◆ wl_shell_surface_get_user_data()
| static void* wl_shell_surface_get_user_data |
( |
struct wl_shell_surface * |
wl_shell_surface | ) |
|
|
inlinestatic |
◆ wl_shell_surface_move()
| static void wl_shell_surface_move |
( |
struct wl_shell_surface * |
wl_shell_surface, |
|
|
struct wl_seat * |
seat, |
|
|
uint32_t |
serial |
|
) |
| |
|
inlinestatic |
Start a pointer-driven move of the surface.
This request must be used in response to a button press event. The server may ignore move requests depending on the state of the surface (e.g. fullscreen or maximized).
◆ wl_shell_surface_pong()
| static void wl_shell_surface_pong |
( |
struct wl_shell_surface * |
wl_shell_surface, |
|
|
uint32_t |
serial |
|
) |
| |
|
inlinestatic |
A client must respond to a ping event with a pong request or the client may be deemed unresponsive.
◆ wl_shell_surface_resize()
| static void wl_shell_surface_resize |
( |
struct wl_shell_surface * |
wl_shell_surface, |
|
|
struct wl_seat * |
seat, |
|
|
uint32_t |
serial, |
|
|
uint32_t |
edges |
|
) |
| |
|
inlinestatic |
Start a pointer-driven resizing of the surface.
This request must be used in response to a button press event. The server may ignore resize requests depending on the state of the surface (e.g. fullscreen or maximized).
◆ wl_shell_surface_set_class()
| static void wl_shell_surface_set_class |
( |
struct wl_shell_surface * |
wl_shell_surface, |
|
|
const char * |
class_ |
|
) |
| |
|
inlinestatic |
Set a class for the surface.
The surface class identifies the general class of applications to which the surface belongs. A common convention is to use the file name (or the full path if it is a non-standard location) of the application's .desktop file as the class.
◆ wl_shell_surface_set_fullscreen()
| static void wl_shell_surface_set_fullscreen |
( |
struct wl_shell_surface * |
wl_shell_surface, |
|
|
uint32_t |
method, |
|
|
uint32_t |
framerate, |
|
|
struct wl_output * |
output |
|
) |
| |
|
inlinestatic |
Map the surface as a fullscreen surface.
If an output parameter is given then the surface will be made fullscreen on that output. If the client does not specify the output then the compositor will apply its policy - usually choosing the output on which the surface has the biggest surface area.
The client may specify a method to resolve a size conflict between the output size and the surface size - this is provided through the method parameter.
The framerate parameter is used only when the method is set to "driver", to indicate the preferred framerate. A value of 0 indicates that the client does not care about framerate. The framerate is specified in mHz, that is framerate of 60000 is 60Hz.
A method of "scale" or "driver" implies a scaling operation of the surface, either via a direct scaling operation or a change of the output mode. This will override any kind of output scaling, so that mapping a surface with a buffer size equal to the mode can fill the screen independent of buffer_scale.
A method of "fill" means we don't scale up the buffer, however any output scale is applied. This means that you may run into an edge case where the application maps a buffer with the same size of the output mode but buffer_scale 1 (thus making a surface larger than the output). In this case it is allowed to downscale the results to fit the screen.
The compositor must reply to this request with a configure event with the dimensions for the output on which the surface will be made fullscreen.
◆ wl_shell_surface_set_maximized()
| static void wl_shell_surface_set_maximized |
( |
struct wl_shell_surface * |
wl_shell_surface, |
|
|
struct wl_output * |
output |
|
) |
| |
|
inlinestatic |
Map the surface as a maximized surface.
If an output parameter is given then the surface will be maximized on that output. If the client does not specify the output then the compositor will apply its policy - usually choosing the output on which the surface has the biggest surface area.
The compositor will reply with a configure event telling the expected new surface size. The operation is completed on the next buffer attach to this surface.
A maximized surface typically fills the entire output it is bound to, except for desktop elements such as panels. This is the main difference between a maximized shell surface and a fullscreen shell surface.
The details depend on the compositor implementation.
◆ wl_shell_surface_set_popup()
| static void wl_shell_surface_set_popup |
( |
struct wl_shell_surface * |
wl_shell_surface, |
|
|
struct wl_seat * |
seat, |
|
|
uint32_t |
serial, |
|
|
struct wl_surface * |
parent, |
|
|
int32_t |
x, |
|
|
int32_t |
y, |
|
|
uint32_t |
flags |
|
) |
| |
|
inlinestatic |
Map the surface as a popup.
A popup surface is a transient surface with an added pointer grab.
An existing implicit grab will be changed to owner-events mode, and the popup grab will continue after the implicit grab ends (i.e. releasing the mouse button does not cause the popup to be unmapped).
The popup grab continues until the window is destroyed or a mouse button is pressed in any other client's window. A click in any of the client's surfaces is reported as normal, however, clicks in other clients' surfaces will be discarded and trigger the callback.
The x and y arguments specify the location of the upper left corner of the surface relative to the upper left corner of the parent surface, in surface-local coordinates.
◆ wl_shell_surface_set_title()
| static void wl_shell_surface_set_title |
( |
struct wl_shell_surface * |
wl_shell_surface, |
|
|
const char * |
title |
|
) |
| |
|
inlinestatic |
Set a short title for the surface.
This string may be used to identify the surface in a task bar, window list, or other user interface elements provided by the compositor.
The string must be encoded in UTF-8.
◆ wl_shell_surface_set_toplevel()
| static void wl_shell_surface_set_toplevel |
( |
struct wl_shell_surface * |
wl_shell_surface | ) |
|
|
inlinestatic |
Map the surface as a toplevel surface.
A toplevel surface is not fullscreen, maximized or transient.
◆ wl_shell_surface_set_transient()
| static void wl_shell_surface_set_transient |
( |
struct wl_shell_surface * |
wl_shell_surface, |
|
|
struct wl_surface * |
parent, |
|
|
int32_t |
x, |
|
|
int32_t |
y, |
|
|
uint32_t |
flags |
|
) |
| |
|
inlinestatic |
Map the surface relative to an existing surface.
The x and y arguments specify the location of the upper left corner of the surface relative to the upper left corner of the parent surface, in surface-local coordinates.
The flags argument controls details of the transient behaviour.
◆ wl_shell_surface_set_user_data()
| static void wl_shell_surface_set_user_data |
( |
struct wl_shell_surface * |
wl_shell_surface, |
|
|
void * |
user_data |
|
) |
| |
|
inlinestatic |


About Vancouver
Where to stay
Vancouver is busy and expensive, especially in the summer. Make sure you give yourself plenty of time to find a place to stay.
If you're travelling with your family or are comfortable splitting a home with a group of friends, Airbnb may be a good option for you.
Looking for less hassle and full service? The wedding is downtown so there are plenty of hotels to choose from. On a budget? Save some money and stay at the Jericho Beach Hostel. There is also nearby camping at Capilano River or at Burnaby Moutain.
Getting around
There's no Uber here! That shouldn't be a problem though, plenty of Vancouver is very accessible by foot, bike or public transit. If you plan on using public transit more than once, it's worth picking up a Compass Card. Otherwise, booking a cab is usually fairly reliable using the Yellow Cab App on Android or iOS. There's also Mobi Bike Sharing.
What's happening
There will be a number of events happening in the city. On Friday night Davie Street will be shut down for Vancouver Pride events. On Saturday night Pacific Blvd will be closed for the Honda Celebration of Light. Over 400,000 people come to English Bay to watch the show. Finally, on Sunday (the day of the wedding) the Vancouver Pride Parade will take place on Robson, Denman and Davie Street from 11-2pm. The party continues on to Sunset beach! All of these events are a ton of fun but please keep this in mind while getting around!
Other things worth doing
- Spend an afternoon at the Vancouver Aquarium
- Rent a bike and tour the seawall
- Take a walk through Stanley Park
- Tour some local breweries
- Go shopping in Gastown or Yaletown
- Explore the Granville Island Public Market
- Check out some nearby hikes


I Have Half Guard Lock Down I Can Kimura Whip Up Whip Down with UnderHook Take the Back Mechanic Body Control with UnderHook but opponent has a Whizzer Foot Grab Half Guard Sweep (Old School) Push Over Half Guard Sweep DogFight with Double UnderHooks Whip Up God Father Stomp with Electric UnderHooks Electric Chair no UnderHook Legs on Outside Half Guard Sweep Legs on Inside Half Guard Sweep Shaolin Sweep


Original (
)
Canvas (
)
upload
note: this is an excellent thread on stack overflow https://stackoverflow.com/questions/19032406/convert-html5-canvas-into-file-to-be-uploaded


WEB
The World Wide Web (abbreviated WWW or the Web) is an information space where documents and other web resources are identified by Uniform Resource Locators (URLs), interlinked by hypertext links, and can be accessed via the Internet.[1] English scientist Tim Berners-Lee invented the World Wide Web in 1989. He wrote the first web browser computer program in 1990 while employed at CERN in Switzerland.[2][3] The Web browser was released outside of CERN in 1991, first to other research institutions starting in January 1991 and to the general public on the Internet in August 1991.


/Home Page
/Links
/Blog
Links:Unreaden
_
Links to multiple ressources
Favorite
Phrack Mag
Security Ressources
Over The Wire
Root Me
Root Me repo
VulnHub
Exploit Database
Parrot Openbooks
Ebooks
Awesome Security
Awesome Pentest
Pentest Standart
Credit Cards gen
Credit Cards Validator
Database gen
Name gen
Metasploit
Proton Mail
Coding Ressources
Computer Sciense courses
Coding Game
Bash Academy
C++ Prog
Gamecodeur
Machine Learning
Machine Learning Python Mini-Course
Deep Learning Papers
Awesome Tensorflow
Public Datasets
Machine Learning MOOC from Stanford University
Learning Stuff
Academic Torrents
Free Online Uni Courses
Netacad Online Courses platform
Free Quality Computer Science Courses
Mobile Dev
Flutter
Awesome Flutter
Usefull Stuff
rtl8821ce driver
Selfhosted
Free SSH certificate
Diskpart
Meeeh
Chimie
Chimie
Dynamique
Mécanique
Exo mécanique
Mathématiques - Polynômes
/Home Page
/Links
/Blog


Class ShellDispatcher
Shell dispatcher
public
|
|
public
|
|
public
|
|
public
|
|
public
boolean
|
|
public
|
|
public
Either
|
|
public
|
|
public
|
|
public
|
|
public
array
|
|
public
boolean
|
|
public
|
public
filehandle
|
$stdin |
|
#
Standard input stream. |
public
filehandle
|
$stdout |
|
#
Standard output stream. |
public
filehandle
|
$stderr |
|
#
Standard error stream. |
public
array
|
$params | array() |
#
Contains command switches parsed from the command line. |
public
array
|
$args | array() |
#
Contains arguments parsed from the command line. |
public
string
|
$shell | null |
#
The file name of the shell that was invoked. |
public
string
|
$shellClass | null |
#
The class name of the shell that was invoked. |
public
string
|
$shellCommand | null |
#
The command called if public methods are available. |
public
array
|
$shellPaths | array() |
#
The path locations of shells. |
public
string
|
$shellPath | null |
#
The path to the current shell location. |
public
string
|
$shellName | null |
#
The name of the shell in camelized. |


We being part of a your travelling is like having a personal assistant who can help you to make your travel easier but most importantly more enjoyable. Here is where we fit into your journey to help you make it a special one.
Explore


Synopsis
/^^^^^^^^^\ Memory Engrams Are Laid Down At The /^^^^^^^^^\ / visual \ Advancing Front Of Consciousness / auditory \ / memory \ _________ / memory \ | channel | / English \ | channel | | | \ syntax /---|-------------\ | | /--------|--------\ \_______/ | | | | | recog-|nition | | | | | | ___|___ | ___V__ ___V_ | ________ | | | /image \ | / \ fex / \ | / \ | | | / percept \---|---/Psi EnX \-----/English\----|-/ audNode \| | | \ engrams /---|---\concepts/-----\lexicon/----|-\ phonemes / | | \_______/ | \______/ fin \_____/ | \________/ |http://mind.sourceforge.net/diagrams.html shows a Theory of Mind.
To
computationalize consciousness in
Mind.Forth for robots, tutorial
Mind.html and other artificial minds, there can be no specific module
for the epiphenomenon of self-awareness. Instead, every pathway of
self-perception and self-knowledge must be strengthened and fortified
without excluding the outside world and trapping the mind in autism.
The ability of an AI to distinguish between the words you (and I)
referring to iself and you (and I) referring to another person enables
the AI Mind to develop a concept of self as separate from other persons.
Once the concept of self or ego was established, the next step was
to concentrate the searchlight of attention upon conscious experience.
As the ruminant
Forthmind follows meandering chains of thought, ideas
surface in the
artificial consciousness by competing to be the most
active concept that will be included in the stream of consciousness.
In the
Moving Wave Algorithm, only one concept at a time occupies
the focal point of consciousness. A sentence of thought is quickly
strung together and briefly occupies the advancing front of consciousness.
Whether we are a robot or a human being, we are conscious of each thought
as we think it, because the selection process for the inclusion of
concepts in a thought being generated requires each candidate concept
to rise briefly above all other active concepts and seize our attention.
As each hyperactive concept burts into consciousness and flames down
and out into a smoldering ember of subconscious
semi-activation, the
psiDecay mind-module keeps the post-thought concept ready for immediate
reactivation in the meandering chain of thought that occupies the mind.
psiDamp quickly deactivates a concept, while
psiDecay only slowly lets
a concept sink gradually into a stretch of oblivion outside the stream
of consciousness.
The
AI4U page 157 program flow-chart shows the stream of
consciousness as a feedback loop where the output of the
Speech
module feeds as input back into the
Audition module.
Here not just programming but experience itself offers the waxing
Mind a chance to become aware that it is altering its own input stream.
The "searchlight of attention" in any conscious mind contributes
to the illusion of consciousness by immediately and vastly
expanding the input stream from any sector where the searchlight
pauses. The pausing searchlight wits, and having wot, moves on.
In the magical algebra of the mind, the epiphenomenal
[ illusion of consciousness ] equals [ consciousness ].
09feb2001 [X] Use
pov in Oldconcept to distinguish between I and me.
_________ [ ] Allow the artificial mind to become aware of itself.
_________ [ ] Recycle old memories without loss of consciousness.
Consciousness Web Resources


Hi,
i have a problem using the latest SD card build from December. All things i found about this subject didn't help so far. Means i googled alot...
Version is:
Powered by openenergymonitor.org | low-write 9.2 | 2015.12.11
I set up the Raspberry from the image and up to now everything seemed to run as expected but now i added the RFM69Pi 433Mhz Raspberry Pi Base Station Receiver Board (868MHz) and the problems began. As long as i don't send anything its catching up noise and in the emonhub log i see bad packets:
2016-01-10 11:19:29,491 DEBUG RFM2Pi device settings updated: E i5 g212 @ 868 MHz
2016-01-10 11:19:29,598 DEBUG RFM2Pi Discarding RX frame 'unreliable content'? 35 114 12 225 207 120 247 244 99 152 72 220 22 68 237 233 66 78 116 170 192 (-100)
2016-01-10 11:19:35,431 DEBUG RFM2Pi Discarding RX frame 'unreliable content'? 142 99 195 166 253 94 2 203 239 165 246 199 15 255 115 123 70 21 126 247 113 (-95)
2016-01-10 11:19:38,255 DEBUG RFM2Pi Discarding RX frame 'unreliable content'? 172 126 217 46 236 32 7 253 24 159
BUT
Once i start my (custom) Sender Node trying to send 2 Integer values the RFM2Pi Thread is crashing immediately after one packet.
2016-01-10 11:20:39,866 DEBUG RFM2Pi 7 NEW FRAME : OK 19 215 0 124 2 (-51)
2016-01-10 11:20:40,070 WARNING MainThread RFM2Pi thread is dead
2016-01-10 11:20:40,294 WARNING MainThread RFM2Pi thread is dead
2016-01-10 11:20:40,506 WARNING MainThread RFM2Pi thread is dead
I also tried to debug via Minicom and i'd say what the node is sending should be perfectly ok (its all fake data)!?
Sending two integers:
rfPayload.temperature = 215;
rfPayload.humidity = 636;
minicom -D /dev/ttyAMA0 -b 38400
OK 19 215 0 124 2 (-49)
OK 19 215 0 124 2 (-48)
OK 19 215 0 124 2 (-47)
OK 19 215 0 124 2 (-47)
OK 19 215 0 124 2 (-50)
My Emonhub.conf is edited to:
[[19]]
nodename = Balkonsensor
firmware = JEE_Node_V0_1
hardware = JEENODE
[[[rx]]]
names = temperature, humidity
datacode = h, h
scales = 0.1,0.1
units = C,%
Trying for hours now but i cant' figure out what the problem might be here?
Also tried:
[[19]]
nodename = Balkonsensor
firmware = JEE_Node_V0_1
hardware = JEENODE
[[[rx]]]
names = temperature, humidity
datacode = h
scales = 0.1
No difference. Something causes a hickup and it never recovers from this...
Downstream everything works at the moment. When i inject data via a MQTT Client to topic "emonhub/rx/19/values" the emoncms behaves as it should and recognizes the numbers. Just the path from the /dev/ttyAMA0 causes trouble.
Re: MainThread RFM2Pi thread is dead
Just to confirm what have, the custom node is sending via rf and the rfm2pi is receiving correct? this isn't in-place of the rfm2pi. Can you then attach a longer mixed log of the "noise" and custom packets just to see if there are any other entries or formatting anomalies etc.
How frequently are these packets received at emonhub ?
there are some anomolies in the 2 emonhub.conf examples you've given, I would not expect either to work but as I would not expect either to cause a crash either, it may just be typo's in the post. the first one has "datacode = h, h" it needs to be "datacode = h" or "datacodes = h, h" likewise in the second you have "scales = 0.1" it would need to be "scale = 0.1" or "scales = 0.1, 0.1". any combination or the correct variations will work, but you cannot have a singular key name for multiple values or a plural key name for a single value (unless it is for a single value payload of course).
If in doubt, for a test, just comment out the whole [[19]] section in the conf and you should see unscaled values pass through emonhub as the defaults are datacode = h and scale = 1 if nothing is defined.
Paul
Re: MainThread RFM2Pi thread is dead
You're King man.
The tiny little "s" makes the bug difference ;-)))))))
Changed my emonhub.conf to:
...
[[19]]
nodename = Balkonsensor
firmware = JEE_Node_V0_1
hardware = JEENODE
[[[rx]]]
names = temperature, humidity
datacodes = h, h
scales = 0.1, 0.1
units = C, C
...
It seems to crash the python script "emonhub_interface.py" if you mess around with singular and plural.
Thanks alot. Great system for me to learn more.


CPPGM Programming Assignment 1 (pptoken)
Overview
Write a C++ application called pptoken
that accepts a C++ Source File on standard input, executes phases 1, 2 and 3 of the Phases of Translation (defined below), and describes the resulting sequence of preprocessing-tokens
to standard output in the specified format.
Definition: Phases of Translation
The overall process of taking source files and producing compiled programs is broken down into 9 phases of translation.
Translation phase 4 is called preprocessing. The preprocessing phase applies preprocessing directives like #include
, #define
, #ifdef
, and so on.
The preprocessing phase takes as input a stream of preprocessing-tokens
. Phases 1 through 3 are about taking a physical source file and decomposing it into those tokens. They are essentially the "preprocessors tokenizer".
It is your task in this assignment to implement these first three phases. The pptoken
application is a wrapper for them to fit the provided test suite.
Please read Clause 2: Lexical Conventions (pages 16 through 32) of the C++ standard (Nov 12 Working Draft - N3485).
Starter Kit
The starter kit can be obtained from:
$ git clone git://git.cppgm.org/pa1.git
It contains a stub implementation of pptoken, a compiled reference implementation and a test suite.
Input Format
The C++ Source File shall be read from standard input std::cin
in UTF-8 format.
The source character set and the execution character set shall be course defined (defined below) as UTF-8. Line endings are UNIX - a single LF (0x0A).
Definition: UTF-8
If you already know how a Unicode code point is encoded and decoded into UTF-8, UTF-16, and UTF-32, then you can skip this definition.
The Unicode character set includes almost every character from every human language.
Each character in the Unicode character set has been assigned an integer, called its code point.
Code points can range from a minimum of 0 to a maximum of 0x10FFFF
For example:
- the english letter A has a code point of 0x41
- the greek letter π has a code point of 0x3C0
- the musical symbol 𝄞 has a code point of 0x1D11E
In order to store one code point we encode it into a sequence of one or more fixed-width code units.
- UTF-8 is an encoding scheme that uses 8 bit wide code units
- UTF-16 is an encoding scheme that uses 16 bit wide code units
- UTF-32 is an encoding scheme that uses 32 bit wide code units
The simplest way is to store each code point is in its own single code unit. Of the three schemes only UTF-32 has a large enough code unit (32 bits) to hold any code point in one code unit. UTF-32 effectively means storing each code point in a 32-bit integer.
The remaining two ways (UTF-8 and UTF-16) use a variable length encoding. Each code point is transformed into one or more code units.
Two simple bit manipulation algorithms are specified for UTF-8 and UTF-16 respectively to calculate the code point from a sequence of code units (and visa-versa).
The two algorithms are described here:
- UTF-8: http://tools.ietf.org/html/rfc3629#page-4
- UTF-16: http://tools.ietf.org/html/rfc2781#section-2
Error Reporting
If an error occurs in pptoken
you should print a helpful error message to std::cerr
and main
should return EXIT_FAILURE
. The test harness will interpret EXIT_FAILURE
as indicating that the C++ Source File is ill-formed.
Internally you may throw an exception and put a catch handler in main
that then returns failure. The skeleton code is already setup like this.
Development Environment
The grading servers run on Ubuntu 12.10 64-bit with the default Ubuntu server packages and only additionally the build-essential
package installed as a bootstrap toolchain:
$ sudo apt-get install build-essential
It is recommended that you setup your developer machine with an identical environment.
Restrictions
You may only depend upon the C++ standard library and what is already included in this skeleton code. No additional third party libraries/tools dependencies may used.
You may not submit intermediate computer-generated code. (You may submit original source code for a tool that is built and generates code during the build process - although that is not recommended for this assignment.)
We require that you agree to not publish your solution to this programming assignment as a condition of taking this assignment. You are free to discuss the design in general terms, but please do not share code.
Output Format
pptoken
shall write to standard output the following in UTF-8 format:
For each token in the sequence, one line shall be printed consisting of 3 space-character separated elements.
The first element is the Token Type (defined below). The next is an integer N which is the byte length of the Token Data (defined below). The last is the N bytes of the Token Data.
At the end of the output pptoken
should print eof
on a line by itself.
There is an interface and implementation in the skeleton code you can use, called IPPTokenStream
and DebugPPTokenStream
respectively, that will produce the correct output format for you.
Definition: Course Defined
In the standard there are a number of cases that are called implementation defined, meaning it is up to the toolchain author what to choose in that case.
In some of those cases we will define them as the same for everybody taking this course. We will say such a case is course defined.
In the remaining cases, it is up to each participant to choose for themselves.
Features
Several transformations will need to be applied in a pipeline as described in section 2.2.{1,2,3} of the standard. The following summary is given as a rough reference:
Decode each UTF-8 code unit sequence from the input file to its unicode code point.
Convert any universal-character-names
(escape sequences \uXXXX
and \UXXXXXXXX
) into their unicode code point.
The nine three-character trigraphs sequences should be replaced using their single-character equivalents:
??= --> #
??/ --> \
??' --> ^
??( --> [
??) --> ]
??! --> |
??< --> {
??> --> }
??- --> ~
Line Splicing: If you encounter a backslash followed by a linefeed, ignore it.
If the file does not end in a linefeed add one.
Comments (/* ... */
and // ...
) are replaced by a space character (ie they are part of a non-empty whitespace-sequence
)
Finally decompose the source file into a sequence of tokens of the following types:
whitespace-sequence
new-line
header-name
identifier
pp-number
character-literal
user-defined-character-literal
string-literal
user-defined-string-literal
preprocessing-op-or-punc
non-whitespace-character
We have synthesized whitespace-sequence
and new-line
, they are not defined explicitly in the standard. They will be significant in preprocessing so it is useful to deal with them as part of the token stream.
A whitespace-sequence
is a maximal sequence of whitespace characters not including line feeds, (which effectively also includes comments)
A new-line
is an LF (0x0A) character.
The remaining 9 token types correspond to the 9 bodies of the preprocessing-token
productions.
Definition: Token Type:
The token type is a string, one of:
whitespace-sequence
new-line
header-name
identifier
pp-number
character-literal
user-defined-character-literal
string-literal
user-defined-string-literal
preprocessing-op-or-punc
non-whitespace-character
Definition: Token Data:
The following token types have empty token data:
whitespace-sequence
new-line
The remaining token types show the UTF-8 encoded sequence of the content they correspond to.
Example Output
For example the source file:
foo 1.0e2 *=@ /* bar */ "baz"
Produces an output of:
identifier 3 foo
whitespace-sequence 0
pp-number 5 1.0e2
whitespace-sequence 0
preprocessing-op-or-punc 2 *=
non-whitespace-character 1 @
whitespace-sequence 0
string-literal 5 "baz"
new-line 0
eof
Testing
To execute the local test suite simply issue the command:
$ make test
This will build pptoken
, run each test against it, then compare the results against the reference implementation.
Each test input has a filename like tests/NNN-foo.t
NNN
is a number representing the test complexity. foo
is a descriptive name of the test.
The reference output is given in:
tests/NNN-foo.ref
and the reference exit status is given in:
tests/NNN-foo.ref.exit_status
The output of your version is given in:
tests/NNN-foo.my
and the exit status of your version is given in:
tests/NNN-foo.my.exit_status
So you can diff the files to determine why a test is failing.
When you execute the test suite it will execute them in order and stop with an error on the first failed test.
Reference Implementation
There is a compiled reference implementation called pptoken-ref
of pptoken
in the starter kit than you can use to generate arbitrary reference output for comparison to your implementation.
If you find a bug in the reference implementation (an inconsistency of its output to what is described in this document or the standard) than please report it to the forum. Make sure to include the output of ./pptoken-ref -v
.
Submitting Your Implementation For Grading
We will provide an interface that will allow you to submit your solution for grading closer to the due date. Instructions will be made available on the main course site.
Preprocessing Token Grammar Summary
The grammar for preprocessing-token
is as follows with some notes added. It is functionally equivalent to the way it is presented in the standard, and mostly uses the same names:
preprocessing-token:
identifier
pp-number
character-literal
user-defined-character-literal
string-literal
user-defined-string-literal
preprocessing-op-or-punc
header-name
non-whitespace-character
non-whitespace-character:
any single non-whitespace code point that does
not fit into another preprocessing token
except `'` and `"`
This is used so that garbage will still tokenize in some cases because the section it contains may be removed later anyway during preprocessing (by exclusion from an #if 0
or similar). The test suite (as is the standard) is quite forgiving about whether a malformed token causes an error or gets parsed using non-whitespace-character
.
It is course defined that '
and "
do not match non-whitespace-character
. This is a standard-compliant feature (see 2.5.2).
identifier:
identifier-nondigit
identifier identifier-nondigit
identifier digit
identifier-nondigit:
nondigit
code points in Annex E1
An identifier may not start with code points from Annex E2.
nondigit: one of
`a` `b` `c` `d` `e` `f` `g` `h` `i` `j` `k` `l` `m`
`n` `o` `p` `q` `r` `s` `t` `u` `v` `w` `x` `y` `z`
`A` `B` `C` `D` `E` `F` `G` `H` `I` `J` `K` `L` `M`
`N` `O` `P` `Q` `R` `S` `T` `U` `V` `W` `X` `Y` `Z` `_`
digit: one of
`0` `1` `2` `3` `4` `5` `6` `7` `8` `9`
pp-number:
digit
`.` digit
pp-number digit
pp-number identifier-nondigit
pp-number `e` sign
pp-number `E` sign
pp-number `.`
sign:
`+`
`-`
character-literal:
`'` c-char-sequence `'`
`u'` c-char-sequence `'`
`U'` c-char-sequence `'`
`L'` c-char-sequence `'`
c-char-sequence:
c-char
c-char-sequence c-char
c-char:
any code point except `'`, `\`, or new-line
escape-sequence
escape-sequence:
simple-escape-sequence
octal-escape-sequence
hexadecimal-escape-sequence
simple-escape-sequence: one of
`\'` `\"` `\?` `\\` `\a` `\b` `\f` `\n` `\r` `\t` `\v`
octal-escape-sequence:
`\` octal-digit
`\` octal-digit octal-digit
`\` octal-digit octal-digit octal-digit
octal-digit: one of
`0` `1` `2` `3` `4` `5` `6` `7`
hexadecimal-escape-sequence:
`\x` hexadecimal-digit
hexadecimal-escape-sequence hexadecimal-digit
hexadecimal-digit: one of
`0` `1` `2` `3` `4` `5` `6` `7` `8` `9`
`a` `b` `c` `d` `e` `f`
`A` `B` `C` `D` `E` `F`
user-defined-character-literal:
character-literal ud-suffix
ud-suffix:
identifier
string-literal:
`""`
`"` s-char-sequence `"`
`R` raw-string
encoding-prefix `""`
encoding-prefix `"` s-char-sequence `"`
encoding-prefix `R` raw-string
s-char-sequence:
s-char
s-char-sequence s-char
s-char:
any code point except `"`, `\`, new-line
escape-sequence
encoding-prefix:
`u8`
`u`
`U`
`L`
raw-string:
`"` d-char-sequence `(` r-char-sequence `)` d-char-sequence `"`
Note that in a raw string most of the early translations are switched off (see <IP_ADDRESS> and 2.14.5 in the standard).
d-char-sequence:
d-char
d-char-sequence d-char
d-char:
any code point except space, `(`, `)`, `\`, horizontal tab,
vertical tab, form feed, and newline.
r-char-sequence:
r-char
r-char-sequence r-char
r-char:
any code point, except a sequence that is
a right parenthesis `)` followed by the initial
d-char-sequence (which may be empty) followed
by a double quote `"`.
user-defined-string-literal:
string-literal ud-suffix
preprocessing-op-or-punc: one of
`{` `}` `[` `]` `#` `##` `(` `)` `<:` `:>` `<%` `%>` `%:` `%:%:` `;` `:` `...`
`new` `delete` `?` `::` `.` `.*` `+` `-` `*` `/` `%` `ˆ` `&` `|` `~` `!` `=` `<` `>`
`+=` `-=` `*=` `/=` `%=` `ˆ=` `&=` `|=` `<<` `>>` `>>=` `<<=` `<=` `>=` `&&` `==` `!=`
`||` `++` `--` `,` `->*` `->` `and` `and_eq` `bitand` `bitor` `compl`
`not` `not_eq` `or` `or_eq` `xor` `xor_eq`
header-name:
`<` h-char-sequence `>`
`"` q-char-sequence `"`
header-names
are context sensetive. They should only be tokenized after a sequence of (start of file or new-line
) (#
or %:
) include
...disregarding whitespace-sequences
. Read section 16.2 in the standard to understand what is going on here.
h-char-sequence:
h-char
h-char-sequence h-char
h-char:
any code point except new-line and `>`
q-char-sequence:
q-char
q-char-sequence q-char
q-char:
any member of the source character set except new-line and `"`
universal-character-name:
`\u` hex-quad
`\U` hex-quad hex-quad
hex-quad:
hexadecimal-digit hexadecimal-digit hexadecimal-digit hexadecimal-digit
Design Notes (Optional)
There are many ways to design pptoken
and we will describe in general terms one way to write pptoken
. We make no claims that this is the best way by any metric. You are free to use this design or you are free to ignore this and do it your own way.
Read chapter 3 of the dragon book if you have it.
pptoken
can be broken into two parts. First there is the translation tasks, then there is the tokenization task.
The translation tasks are:
- UTF8 decoding
- universal character name decoding
- trigraph decoding
- line splicing
- file terminating line-ending
Implement each of these in a pipeline. These should result in a stream of code points you can store in int
. It makes it easy to add a code point -1
to represent the end of the file. Each part of the pipeline can be implemented as a state machine that takes one code point at a time and returns zero or more code points.
In order to support raw mode in raw string literals it is necessary to be able to turn this on and off, bypassing the pipeline when entering into tokenization of a raw string literal and restoring it on exit.
Now we describe the tokenization part.
Start by drawing a DFA (deterministic finite automaton) for each token type. Recall that a DFA is a directed graph where the vertexes are states and the edges are code points (or sets of code points).
We will briefly mention each type:
new-line
This is trivial. There are two states, the start state and end state. The edge is a line feed.
identifier
An identifier also has two states. From the start state to end state is an edge with all leading characters (nondigit
and everything from Annex E1 minus E2). Connecting the end state back to itself is another edge with all allowable identifier body characters (nondigit
and digit
and E1).
pp-number
pp-number
has a similar structure to identifier with a few more states.
character-literal
Once again just follow the grammar.
user-defined-character-literal
The is a character literal followed by an idenitifier, so you can just chain those two together.
string-literal
Similar to character-literal, except for raw string. Raw string literals require special treatment in two ways. First they need to go into a raw mode and turn off the early translations. Secondly they terminate in an unusual way. The standard provides us some leeway by saying than anything up to an opening "
that could start a raw string literal (eg R"
) will be a raw string literal.
user-defined-string-literal
Effectively a string-literal
and an identifier
chained together.
preprocessing-op-or-punc
For the identifier-like operators just ignore them for now. You can emit them from the identifier DFA by checking them against a set<string>
. For example: Let not_eq
be initially tokenized as an identifier, but before you emit it, check if they are in the set of indentifier-like operators. If it is, emit it as a preprocessing-op-or-punc
instead of identifier
.
For the rest form a DFA. It will have many states. Maybe separate it out into different diagrams for each leading character.
For example a leading character of <
could result in <<
, <%
, <=
, <<=
, <:
. If we see another <
(so <<
so far) we still need a third state to decide between <<=
and <<
.
Also note that there is a special exception involving the sequence <::
:
2.5.3: ...if the next three characters are
<::
and the subsequent character is neither:
nor>
, the<
is treated as a preprocessor token by itself and not as the first character of the alternative token<:
One way to deal with this by adding three surrogate operators <::
, <::>
and <:::
to your DFA, and when you find one of these, rather than emiting them as one token, emit the two appropriate for each case. You may need to reread 2.5.3 a couple of times before this is clear.
whitespace-sequence
We recommend subsuming comments into this production rather than replacing them with a single space. The start and end states should be connected by non-new-line whitespace. If you encounter /
followed by *
, enter inline comment state; if you encounter /
followed by /
, enter single line comment state. Exit them as described in the standard.
header-name
This is straightforward, just follow the grammar. However, it should only be considered in certain contexts as described earlier.
each non-white-space character that cannot be one of the above
This is simple. If you cannot tokenize a sequence, just emit each code point in this category. We will also permit (as does the standard) to simply error in many of these cases.
Now that you have all the DFAs you will combine them into a single state machine with look-ahead. The state machine starts in the start
state. It will receive the stream of code points from the translation tasks. Based on the look-ahead it will enter one of the DFAs above. In some cases there will still be ambiguity so you will need to make a decision based on look-ahead. For example u8
can be an identifier, it can also be the encoding-prefix
of a string-literal
. So, at the end of identifier u8
, if the look-ahead is "
then enter the string-literal
DFA, otherwise emit u8
as an identifier
and return to the start
state. Similarly at the end of character-literal
, if the look-ahead is a valid identifier
start, than enter user-defined-character-literal
, otherwise emit the character-literal
.
Also, there is some cross-over between whitespace-sequence
comment starts //
, and /*
and the divide and divide-assign operators /
and /=
. You can deal with that by combining the DFAs. For example you might create a state forward-slash
that indicates the last seen code point is /
, then based on lookahead either enter the operator DFA or the whitespace/comment DFA.
Usually you will need to match the longest token (some exceptions are comments, raw strings and the <
::
case). So greedily "keep going" in the state machine until you cannot go and further, then emit the discovered token and return to the start state.
To emit a token there is an interface provided in the skeleton code called IPPTokenStream
. It has one function for each token type. In most cases you will need to store and then UTF-8 encode the code point sequence corresponding to the token to pass to the data argument. The token data is expected to have the translation tasks applied (for one example line splicing), but not the literal tasks (for example decoding simple-escape-sequences
is not required at this stage) (which occur later in translation phase 7 and is not part of this assignment).
Self-Tokenizing (Optional/Ungraded)
To get into the self-hosting spirit of things, once you have completed this assignment run your pptoken
application using your pptoken.cpp
source file as input:
$ .pptoken < pptoken.cpp > pptoken.my
And compare by hand some of the pptoken.cpp
file to the output in pptoken.my
to check it tokenized correctly.


The PWG meetings will be held on October 4-6, hosted by Ricoh at their facilities in Cupertino, CA:
10460 Bubb Road
Cupertino, CA 95014
[map]
Please park in the rear of the building (when driving South on Bubb Road, turn left just before the railroad tracks) and look for signs indicating where to park and where to enter the building. Visitor badges are required, and they will also give you guest Wi-Fi access so make sure you register your attendance in advance!
The usual continental breakfast, afternoon snacks, coffee, tea, water, etc. will be provided. Lunch is not provided. There are dozens of places to eat nearby, but none is within walking distance.
There is no meeting fee for this meeting.
Please respond to the PWG October 2011 face-to-face meeting survey whether you are planning to attend the meeting in person, by phone, or not at all. This will help us plan for network services and to make badges for the attendees.
Call-in toll-free number (US/Canada): +1<PHONE_NUMBER>
Call-in toll number (US/Canada): +1<PHONE_NUMBER>
Call-in toll number (US/Canada): +1<PHONE_NUMBER>
Attendee access code: (by request only)
Note:All times are local to the venue.
Discussions at PWG face-to-face meetings are covered by the PWG Policy on Intellectual Property and Confidentiality - basically everything we discuss is non-confidential and can be included in an open standard.
| Date | Times | Description |
|---|---|---|
| October 4 (Live Meeting) |
9:00 AM to 11:00 AM | CWMP BOF (Slides · Whitepaper) |
| 11:00 AM to 12:00 PM | Plenary (Slides) | |
| 12:00 PM to 1:00 PM | Lunch | |
| 1:00 PM to 5:00 PM | IPP Everywhere (Slides · MFD Alerts · IPP Everywhere 1.0 · LDAP: Schema for Printer Services) | |
| October 5 (Live Meeting) |
9:00 AM to 12:00 PM | Cloud Imaging (Slides · Print Job Ticket and Associated Capabilities · Job Ticket Mapping) |
| 12:00 PM to 1:00 PM | Lunch | |
| 1:00 PM to 5:00 PM | Semantic Model (Slides · System Control Service) | |
| October 6 (Live Meeting) |
9:00 AM to 12:00 PM | IDS (Slides · HCD-ATTR Normalization · PWG Security Schema · ICCC Report · IDS IAA · IDS Model) |
| 12:00 PM to 1:00 PM | Lunch | |
| 1:00 PM to 4:00 PM | WIMS (Slides) |
Hilton Garden Inn
10741 North Wolfe Road
Cupertino, CA
+1<PHONE_NUMBER>
Web Site
(ask for the Ricoh corporate rate: $169/night)


Eddy Gann
Just a suggestion for a feature that means a lot to me: In-app web browser (so we can add the shot to buckets and like it.) Just adding a button to show it as it would appear in a mobile browser so we have access to the like button.
Eddy Gann
Just a suggestion for a feature that means a lot to me: In-app web browser (so we can add the shot to buckets and like it.) Just adding a button to show it as it would appear in a mobile browser so we have access to the like button.


Below are representations of the lights in my home. Each light represents a person in my life, and each light's power level is determined by how long it's been since I've seen that person. The more I see my friends, the brighter my home. Read more about how I did this on the Friend R&D website.


No. 21 Arizona routs Illinois 90-69 behind freshman trio
by JOHN MARSHALLTUCSON, Ariz. (AP) — Nico Mannion dropped in floaters, got into the lane and whipped passes through traffic.
Josh Green drained 3-pointers, finished at the rim and played lockdown defense.
Zeke Nnaji bulled his way to the basket, knocked down midrange jumpers.
It’s just the second game of the season, but Arizona’s heralded freshman trio is playing as advertised.
Mannion scored 23 points, Green added 20 and Nnaji had 19 in No. 21 Arizona’s 90-69 rout over Illinois on Sunday night.
“The three freshman were spectacular tonight in their second game,” Arizona coach Sean Miller said. “Each of them were really, really good.”
Advertising
Arizona (2-0) was good at both ends, shooting 56% while nabbing 14 steals. The Wildcats turned a tight game at halftime into a rout with a 17-2 second-half run behind Mannion, Green and Nnaji.
Nnaji made 9 of 12 shots, Mannion had nine assists and Green was 4 for 7 from 3-point range.
“Everyone played sound tonight,” Mannion said. “We had four, five guys in double digits and the guys who weren’t in double digits were doing their thing, locking up on defense, making the right plays.”
Illinois (2-1) was able to hang with the Wildcats in the first half of a high-level game with more than two dozen NBA scouts on hand.
The Illini went cold in the second half and struggled holding onto the ball, turning it over 22 times.
Ayo Dosunmu led Illinois with 15 points and Trent Frazier added 14.
“It doesn’t matter what offense we run, we’re finding way to turn the ball over,” Illinois coach Brad Underwood said. “Arizona doesn’t pressure. They let you just run your stuff and it’s a frustrating trend.”
Advertising
Sunday night’s game was the first big test for both teams.
Arizona used its size advantage to open the season with a blowout victory over Northern Arizona.
Illinois needed overtime to beat Nicholls State at home and blew out undersized Grand Canyon in a rowdy atmosphere Friday.
The GCU part got the Illini ready for another of college basketball’s best atmospheres at McKale Center.
Illinois made seven of its first eight shots and Frazier had eight points in the first 4½ minutes.
“This is my third year, playing in these crazy environments is nothing new to me,” Frazier said.
Mannion matched him, scoring on a 3, a floater, a putback and set up Nnaji for a dunk with a baseball pass in traffic .
The offensive show continued the rest of the half. Frazier had 12 points and Illinois hit 15 of 27 shots.
Mannion had 11 points, Arizona went 16 for 30 and led 39-38 on Max Hazard’s last-second 3-pointer .
Arizona tightened up on defense to start the second half and went on an early 8-0 run to go up nine.
Illinois answered with a 7-0 run, but Arizona’s freshman took over and the Wildcats scored 15 straight points to go up 68-52.
Illinois went 5:11 without a field goal during the run and shot 10 of 26 in the second half.
Advertising
“When they went on that 15-0 run, that was pretty much game,” Dosunmu said.
BIG PICTURE
Illinois was long and athletic enough to hold its own against a Top-25 team like Arizona, but must cut down on the turnovers and get a better offensive flow.
Arizona’s talented freshman can take the Wildcats a long way if they keep playing like this.
ARIZONA’S TURNOVERS
Illinois wasn’t the only team to struggle with turnovers. Arizona had 16, including five by Mannion, that led to 15 points for Illinois.
“Sixteen turnovers are too many,” Miller said. “I would say a few of them happened because it’s only the second time we’ve played this year and we need to get used to being out there.”
NO KOFI
Kori Cockburn, Illinois’s 7-foot freshman, dominated against Grand Canyon, scoring 23 points and grabbing 14 rebounds.
Advertising
He was not nearly as much of a factor Sunday night thanks to Arizona’s defense, finishing with nine points and seven rebounds.
“Kofi had that monster game and just dominated in the paint, we knew they were going to double team him,” Frazier said. “We just didn’t do a good job of pump faking and skipping it to the other side. We need to do a better job of following the game plan and executing on offense.”
UP NEXT
Illinois hosts Hawaii on Nov. 18.
Arizona hosts San Jose State on Thursday.