Project Proposal - Assignment 4
The Group members
- 751347 Nicolas Almagro Tonne
- 745848 Kasper Rynning-Tønnesen
- 742359 Marius Meland Bang
- 751391 Sondre Johan Vidmark
The project
About the project
Our project is a website which aims to give the user a statistical overview of their alcohol consumption over the course of a night.
The user registers each alcoholic bevarage he or she consumes and some personal attributes (such as height and weight) which affect the blood alcohol level, and in return receives his or her current estimated blood alcohol content (BAC), a prediction of future levels and a suggestion on whether or not to drink more.
Potential users and special requirements
Potential users are smart phone owners who like drinking responsibly. The site will have a responsive design, with simple interaction and an optimal viewing experience for both smart phone users and users of other devices. However, the main focus will be on smart phone users, seeing as most people do not have access to any other web browsing capable devices while they are out drinking. This means that we don't have to be concerned with older browsers. It also means that we have to implement a design that works with different resolutions.
Pages
Interaction and dynamic functions:
The layout of the site will change depending on whether you're logged in or not. We plan to have a default page that anyone can use without having to log in. First time users will have the option to sign up after filling out their attributes, so that these attributes can be stored for succeeding uses. Signing up should be a simple process, preferably only demanding a unique user name and an optional password.
Since most users will be using a smart phone to browse the site, it is essential that the graphical user interface we implement is designed for readability and interaction on small screens with different resolutions. We must take into account that the user only has access to a touch screen and a small keyboard. The keyboard often covers up a significant part of the screen and we will therefore attempt to avoid having too many keyboard interactions. Designs such as drop down menus, thumb-sized buttons, and sliders will be considered in the final design.
After logging in or entering their personal attributes for the first time, user will have access to the main page. This is where the user will be able to add the alcoholic beverages he or she drinks during the night. This will be done either by clicking on some preset values that we believe will be used most frequently (e.g. Beer 4.7% 0.5L, Wine 12% 175mL, Shot 40% 2cL) or by entering a custom beverage.
The data entered by the user will then be processed, and the user will see some relevant stats, graphs, warnings, encouraging messages etc. related to his or her alcohol consumption.
What we've learned from watching other pages:
From watching other webpages we learned that the sitemap and menu has to be relevant to the page, and avoid having too many ads. Since we do not initially seek to profit from this, we may drop ads altogether. It has to be simple usage, also you have to be ablo to navigate easily using just your keyboard. The forms also has to be easy filled.
Multimedia files
Our site will not require a large amount of multimedia. Most of our design will be done in CSS and needs for multi-media content is mostly limited to simple pictures. We will have a simple colorful design with images beeing graphically designed drawings. The pictures we do need we will draw ourselves.
Bad page
http://rupissed.com/
- Page title: It has some irrelevant titling, as of "R U Pissed? - Online Breathalyzer Test and Blood Alcohol Content (BAC) Level Calculator - Hangover Cures" there is nothing implying Hangover cures being present on the frontpage.
- Image text alternatives ("alt text") (pictures, illustrations, charts, etc.): They got alot of errors, regarding missing alt text on the images
- Text:
- Headings: Yes they have headings
- Contrast ratio ("color contrast"): Its alot of colors, because of the "hardcoded" ads on the webpage, but the contrast is acceptable
- Resize Text: No overlapping text when you're resizing.
- Interaction:
- Keyboard access and visual focus: Bad Keyboard access, when thinking about working with the page using only TAB. Takes some time untill you get to the inputfields. Image links are badly outlined when they are tabbed to
- Forms, labels, and errors (including Search fields): They have JS alert when something is submitted wrong, but doesn't say which inputfields that are wrong.
- General:
- Multimedia (video, audio) alternatives: Way to much ads
- Basic Structure Check: Bad sitestructure. Way to much on the site seems irrelevant except the index.html.
Good page
http://www.autoevolution.com/bac/
- Page title: precise and concise
- Image text alternatives ("alt text"): yes, long alts
- Text:
- Headings: Good use of headings with different sizes
- Contrast ratio: high contrast (black/white), some white on gray (bad)
- Resize Text: text inside elements resizes properly, but top bar becomes too big on zoom
- Interaction:
- Keyboard access and visual focus: good. tabs follow a logical order and you have access to everything.
- Forms, labels, and errors: clearly labelled forms, some have a bit strange name attr.
- General:
- Multimedia (video, audio) alternatives: has no multimedia
- Basic Structure Check: nice structure, but dosnt change on small screens


Bluefoot Seedprint Tree Console
You are not logged in.
You are logged in as .
:
| name | role | media | size | modified |
|---|
You are not logged in.
You are logged in as .
| name | role | media | size | modified |
|---|


AFTER LIFE
Reviewed by Harvey Karten, Ph.D. Artistic License Films Director: Kore-Eda Hirokazu Writer: Kore-Eda Hirokazu Cast: Sadao Abe, Natsuo Ishido, Erika Oda, Kazuko Shirakawa, Susumu Terajima, Sayaka Yoshino
Much as we like to push such questions to the fringes of our minds, we can't help thinking about what happens to us after we die. Is there a heaven and is there a hell? If so, would the latter be a more interesting place to spend eternity, as some revisionists half-jokingly claim? No one put the inquiry in better literary form than Shakespeare, whose suicidal Hamlet chose to live after fearing what would happen "when we have shuffled our this mortal coil." No wonder, then, that directors and screenwriters have let their imaginations run freely as they've conjured up comedies and dramas about life after death, the splashy American entry, "What Dreams May Come" being the latest commercial venture into that crowded field.
Films about the afterlife are a natural for the cinema, the most visually kinetic of the art forms and so well suited to flights of fancy. What, then, got into the head of Kore-Eda Hirokazu in his second directorial feature, "After Life," which has to be about the most static film ever made about the subject? What a rejection of the most basic concept of film, the principal factor that separates it from books. Film is a visual medium. Don't tell me; show me. Talking heads are more suited to the stage and even in the legitimate theater, directors typically exploit technology to bring the page to life. Hirokazu makes the same mistake as had Mike Nichols in choosing the inert "The Designated Mourner" as his first acting vehicle.
What is particularly surprising is the near-hysteria that greeted the introduction of the film at various festivals, evoking sell-out crowds and rave reviews online critics like David Dalgleish, who called this "a masterpiece...warm, intimate, direct" and Richard Scheib, who decided at the Vancouver International Film Festival last year that this is a "marvelous little Japanese film...that kind of creeps up on you." De gustibus non disputandem est, as they say, or in other words, thank goodness critics' opinions on any given movie run the gamut of else a lot of writers would have to look for jobs.
Director Kore-Eda Hirokazu was induced to make this film by his grandfather's senility. As he states in the production notes, the poor old man suffered from Alzheimer's disease, gradually forgetting even that he had eaten (he requested a dinner just after completing a meal), could not find his way home, and failed to recognize the people of his family or even himself. "I now understand," thought Hirokazu, "How critical memories are to our identity."
"After Life" focuses on the importance of memory by presenting an allegory about people who have just died and are at a half-way house between earth and heaven. There is nothing elaborate about the space: a dilapidated building that resembles a New York City public high school houses a mostly young staff who interview a barrage of the newly deceased each Monday, giving them three days to make a decision. They are told that heaven does not exist as any of them now believe the place to be, but that a substitute is currently available. Each of the clients is to think of his or her single fondest memory. That is the recollection that will be filmed, and then the subject could repeat the episode for eternity. There's more. All the client's other remembrances will be deleted as easily as this computer can expunge this entire review, as though Alzheimer's has claimed all the bad memories and guilt trips. Sound good? Not to the Western mind, perhaps. We--at least in America--believe that variety is the spice of life and that anything, even the most enjoyable experience, can become like a hell woven from Jean-Paul Sartre's "No Exit" if reproduced day in, day out. Think of the Malcolm McDowell's character in "Clockwork Orange" having to listen to the glory of Beethoven's Ninth once, twice, thrice, ad infinitum.
Those who are enamored of this film will probably point to the humor and poignancy of the newly dead who are being interviewed by the staff. One old lady, asked to conjure up her favorite memory, simply stares out of the window or lines up figurines on the table. A young punk who died at the age of 21 defiantly refuses to make a choice. A girl of about the same age recalls her trip to Disneyland and the kindness of a friend who gave her a couple of pancakes when she did not have the money to buy her own breakfast. A disreputable- looking man of late-middle age talks only about sex, confirming what so women believe that this is the only thing that men think about. Of all the patrons, the most involving is one 70-year-old fellow who, like several others, has had a life so banal that he can barely think of a single memory he'd like to preserve for all time. He has to go through quite a few videotapes which had recorded his life, one tape to a year, and even then has difficulty eliciting a single, truly pleasurable moment in three-score and ten years.
Online critic David Dalgleish reports that he was immeasurably moved by an interview with an elderly woman who recalls a dance she attended to a song called "The Red Shoes." A young girl stands in for her and performed a brief recital which, Dalgleish insists, "move me, inexplicably, to tears." Did we see the same film?
Hirokazu's principal claim to imaginative fame is that he interweaves a film with the looks of a documentary into a fictionalized, allegorical drama, using real people he recruited from such places as nursing homes along with professional actors. The film does possess tenderness and gentle humor, but while the fable would make for a fine piece of literature, on the screen it lacks the very life claimed by its title.
Not Rated. Running Time: 118 minutes. (C) 1999 Harvey Karten
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Prices
Pages :
$25/Per Page (One time payment)
Edits :
$10 (Covers all Page edits)
Server Hosting + Custom URL :
$10 Monthly ($120 yearly) *
Custom Logo :
$10
Custom Animated Logo (.GIF) :
$30
$25/Per Page (One time payment)
$10 (Covers all Page edits)
$10 Monthly ($120 yearly) *
$10
$30
* Website does not require my server hosting and Custom URL to be accessed. Websites can be hosted through other services or free through my GitHub Pages. Email me for more info.


---
layout: post
title: concept Illustration
date: '2018-01-30T11:30:21+01:00'
categories:
- Concept Art
picture_url: https://film-Storyboards.tumblr.com/post/170310103790/concept-Illustration
---
Visual development, Dragone show for Da Nang Naman Resort, Vietnam.


Magister Dieter:
What did the astrologer say? Is this letter from him? Let me see...
Hmm... the guy seems to have real powers...
Creta... Is that a real name? I didn't realize he would be so helpful! Let me read it to you.
Read Creta's letter


Keyword: type
One of the primitive judgments.
Introduces a new type.
Types may be interpreted or uninterpreted.
An uninterpreted type is treated as a set with at least one element, but no specific elements.
An interpreted type has specific elements, defined either through theory instantiation or by enumerating the elements of the type "in extension".
Examples:
Example: uninterpreted type
type t
This judgment can be read as "let t
be a type". It is admissible provided t
is a new symbol that has not been used up to this point in the development.
Example: interpreted type defined by enumeration
type color = {red,green,blue}
This declares a type with exactly three distinct values, and also declares individuals red
, green
and blue
as its elements.
Example: interpreted type defined by theory instantiation
type foo
interpret foo -> int
This declares a type foo
with an interpretation that is a separate copy of the theory of integers (including overloaded symbols for most integer operators such as +
and <
)


One day I'll have stuff to show here.
“The things you own end up owning you.” - Tyler Durden, Fight Club


Merchandise
Please feel free to browse our various non-cookie goods!
Events
Learn more about salmon events in your area.
Locations
- Alki
955 White Oak Drive
Open: 6a-8p
- Capitol Hill
2103 Palmer Road
Open: 6a-8p
- 1st & Pike
3045 Bluff Street
Open: 6a-8p
- SeaTac
502 Glenview Drive
Open: 6a-8p
- Seattle Center
4871 Reynolds Alley
Open: 6a-8p


In your IDE, look at the folder /rocking-form/src/ui/app/services/products-services. This is what we generated before when we said we wanted a service called products. It became ProductsService for convention. Open up the products-service.fixture.js.
Scaffi uses fixtures to inject mock data into the UI that you can then modify and change so that testing code without a server is feasible. Replace the COLLECTIONS array with this:
Think of this as a table record converted to JSON. If you made an actual request to a server, because we work in mostly all JSON, you’d get a structure that looks exactly like this if your table had four columns (id, Name, Description, IsComplete). Once you save that, your page should refresh and look like so:
If you look at the object structure we put in the fixture.js file and the products-index.html file, you should be able to see the direct correlation between the two files.
To explain what’s happening here: when the app loads, if it’s in prototype mode, it loads any fixture collections into memory. Then, when it sees certain requests made by a service, it filters the service’s fixtures for what data it can pull and returns it to the page controller as if it were making a server request.
If we add another fixture:
The page should now look like so:
Super cool right?
As you build pages and forms, be sure to maintain at least one test fixture structure per service. Doing so has the following benefits and in fact, this will be a coding practice we need to follow:
!!! When you’re going through the prototype stage and building out your data structures, make sure to use good clear names so that you don’t have to clean them up later. If you're working with a DBA that's dictating the schema structure, make sure you agree on naming conventions and data points before you start coding, otherwise you'll be redoing stuff. !!!
Maintaining fixture examples will make everyone on the project happy, so when you change a form or a display stub, remember to update your fixture as well.
We don’t just display data though, right? We do lots of forms and edit lots of data structures, so let’s see how that works in prototype mode without a server.


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
public interface ValidatingSessionManager
A ValidatingSessionManager is a SessionManager that can proactively validate any or all sessions that may be expired.
| Method Summary | |
|---|---|
void |
validateSessions()
Performs session validation for all open/active sessions in the system (those that have not been stopped or expired), and validates each one. |
| Methods inherited from interface org.apache.shiro.session.mgt.SessionManager |
|---|
getSession, start |
| Method Detail |
|---|
void validateSessions()
getSession(SessionKey)
method on any
ValidatingSessionManager
instance as that method is expected to
validate the session before retrieving it. Note that even with proactive calls to getSession
,
this validateSessions()
method should be invoked regularly anyway to guarantee no
orphans exist.
Note: Shiro supports automatic execution of this method at a regular interval
by using SessionValidationScheduler
s. The Shiro default SecurityManager implementations
needing session validation will create and use one by default if one is not provided by the
application configuration.
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


Error 404
Page not found
Home
Vita Guide
A complete PS Vita hacking guide, from stock to Ensō.
Home
Guide
Adrenaline
SD2Vita
USBMC
FAQ
Help
Wii U Guide
A Wii U hacking guide, from stock to CBHC.
Home
Guide
Blocking Updates
Help
Nintendo Switch
Homebrew & Downgrading Information
Home
Blocking Updates


Time-travel can be an exciting arena for the cinema because it defies all logic and pretense. After all, it does not seem feasible that we can travel backwards in time, but the very notion does bring up all kinds of strange paradoxes, as does traveling forward into the future. But then you have a film like "Frequency" which asks not so much to defy logic but to defy reason.
Consider the premise of the film. You have a sullen cop named John Sullivan (Jim Caveziel) who removes an old ham radio from his closet. He plays with it and discovers one night that he can communicate with his father (Dennis Quaid). Here is the catch: John's father, a dedicated firefighter, died in a horrific blazing fire while in the line of duty. So it is John in 1999 having conversations with his dad who is alive and well in 1969! How can this be? Can it be the strange forms of lights in the night sky that are causing a break in the space-time continuum? Or, to be more radical, could it be that it is all in John's mind? Nevertheless, we are left with suspending logic temporarily since John realizes his father will die in that fire within a few days in 1969, just before the Mets play their first game in the World Series! Can John prevent his father from dying in the past? And wouldn't that rupture the space-time continuum?
I am willing to suspend disbelief at the cinemas as much as everyone else, but there is something horribly wrong from the get-go. Though the story is not possible by any stretch of the imagination, in terms of just pure scientific reasoning, how could John be talking to his father from the past? Would that not be changing the future at all just based solely on that premise alone? And how can John only feel that the future has changed until his father changes the past at the approximate time that coincides with the time in the future? Why should that matter? And if everything can be erased as it is with (*SPOILER*) John's father surviving the fire, then how can John feel an alternate time line existing when no one else can? Just a matter of logic and reasoning based on the filmmaker's rules. Stephen Hawking would have a field day with all this.
All paradoxes aside, the basic problem with "Frequency" is that I never believed the relationship between John and his father. Simply put, there is no chemistry between Dennis Quaid and Jim Caveziel - they do not make a fitting father-son combo. And frankly all the time paradoxes, and an implausible serial-killer plot to boot, distracts from the emotional connection to the story, which is simply about a father and son trying to communicate. Added to that is the lack of an explanation about Jim's girlfriend, who leaves him at the beginning, and then does not recognize him later after the past had been changed. A little nod to "It's A Wonderful Life" to be sure, but the subplot is left dangling like an unexposed wire in a time machine, and thus she is never seen or heard from again.
If nothing else, it is a pleasure seeing Dennis Quaid back to his clever, sly, cocky self - sort of a grown-up version of his character in "Dreamscape." He is often like a live wire, ready to explode at any moment (the opening sequence where he survives a fire is followed by Martha Reeves' "Heatwave.") "Frequency" is too just too low on the voltage meter to follow Quaid's live-wire act.
For more reviews, check out JERRY AT THE MOVIES at http://buffs.moviething.com/buffs/faust/
E-mail me with any questions, comments or general complaints at<EMAIL_ADDRESS>or at<EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Extract river discharges from the supplied river positions for the FVCOM grid in Mobj. get_EHYPE_rivers(Mobj, dist_thresh) DESCRIPTION: For the positions in Mobj.rivers.positions, find the nearest unstructured grid node and extract the river discharge from Mobj.rivers.river_flux. The river positions must fall within the specified distance (dist_thresh). If multiple rivers are assigned to the same node, the river with the larger of the set of discharges is used. INPUT: Mobj - MATLAB mesh object containing: * have_lonlat - boolean to check for spherical coordinates. * lon, lat - positions for the unstructured grid. * tri - triangulation table for the unstructured grid. * nVerts - number of nodes in the grid. * read_obc_nodes - open boundary node IDs. * rivers - river data struct with the following fields: - positions - river positions in lon, lat. - names - list of river names - river_flux - path to the EHYPE ASCII file data directory. dist_thresh - maximum distance away from a river node beyond which the search for an FVCOM node is abandoned. Units in degrees. model_year - [optional] when giving climatology, a year must be specified so that the time series can be anchored in time. The returned time series will be 3 years long centred on the specified year. Discharges will be repeated for the two additional years. exclude - [optional] give an array of river numbers to exclude (for example if they are particularly bad quality data or are within the threshold but otherwise should be excluded from the model). Note, these must be numbers (not strings). ceh - [optional] if set as true, then the format of the discharge data is assumed to be "time,flux" which is valid if using non-EHYPE derived flux data (e.g. CEH-derived climatology). OUTPUT: Mobj.river_flux - volume flux at the nodes within the model domain. Mobj.river_nodes - node IDs for the rivers. At the moment, these are point sources only. Eventually, some rivers may have to be split over several nodes. Mobj.river_names - river names which fall within the model domain. For rivers where the discharge has been summed, the name is compoud, with each contributing name separated by a hyphen (-). Mobj.river_time - time series for the river discharge data EXAMPLE USAGE: Mobj = get_EHYPE_rivers(Mobj, 0.15) Author(s): Pierre Cazenave (Plymouth Marine Laboratory) Revision history: 2013-10-15 - First version based on get_FVCOM_rivers.m. 2013-11-14 - Update the help to reflect the functionality. 2013-11-15 - Add support for using a river climatology from the E-HYPE time series data (must be precomputed) instead of a specified section of the E-HYPE model output. 2013-12-12 - Remove some redundant variables. 2013-12-13 - Remove the loop through the time at the end and instead use greg2mjulian to work on the whole time vector array. 2014-01-22 - For nodes with mulitple rivers assigned, use the largest of the rivers rather than summing their fluxes. Also eliminate having two adjacent river nodes (instead use the average of their flux and assign the position to the first river node). 2014-05-15 - Add option to exclude rivers by name. 2014-05-19 - Add new option to use an alternatively formatted input climatology (two columns instead of the number in the EHYPE data). 2014-05-20 - Set boolean flag to true to indicate rivers and add number of rivers to the relevant field. 2014-05-29 - Fix issues with the climatology vs. timeseries allocation of the output arrays. 2015-09-24 - Add check for whether we actually have any rivers to process. 2016-01-15 - Fix exclude behaviour for more than a single river to exclude. Also summarised the number of included/skipped/ignored rivers instead of printing a new line for each river that's skipped. ==========================================================================
0001 function Mobj = get_EHYPE_rivers(Mobj, dist_thresh, varargin) 0002 % Extract river discharges from the supplied river positions for the FVCOM 0003 % grid in Mobj. 0004 % 0005 % get_EHYPE_rivers(Mobj, dist_thresh) 0006 % 0007 % DESCRIPTION: 0008 % For the positions in Mobj.rivers.positions, find the nearest 0009 % unstructured grid node and extract the river discharge from 0010 % Mobj.rivers.river_flux. The river positions must fall within the 0011 % specified distance (dist_thresh). If multiple rivers are assigned to 0012 % the same node, the river with the larger of the set of discharges is 0013 % used. 0014 % 0015 % INPUT: 0016 % Mobj - MATLAB mesh object containing: 0017 % * have_lonlat - boolean to check for spherical coordinates. 0018 % * lon, lat - positions for the unstructured grid. 0019 % * tri - triangulation table for the unstructured grid. 0020 % * nVerts - number of nodes in the grid. 0021 % * read_obc_nodes - open boundary node IDs. 0022 % * rivers - river data struct with the following fields: 0023 % - positions - river positions in lon, lat. 0024 % - names - list of river names 0025 % - river_flux - path to the EHYPE ASCII file data directory. 0026 % dist_thresh - maximum distance away from a river node beyond 0027 % which the search for an FVCOM node is abandoned. Units in degrees. 0028 % model_year - [optional] when giving climatology, a year must be 0029 % specified so that the time series can be anchored in time. The 0030 % returned time series will be 3 years long centred on the specified 0031 % year. Discharges will be repeated for the two additional years. 0032 % exclude - [optional] give an array of river numbers to exclude (for 0033 % example if they are particularly bad quality data or are within the 0034 % threshold but otherwise should be excluded from the model). Note, 0035 % these must be numbers (not strings). 0036 % ceh - [optional] if set as true, then the format of the discharge data 0037 % is assumed to be "time,flux" which is valid if using non-EHYPE 0038 % derived flux data (e.g. CEH-derived climatology). 0039 % 0040 % OUTPUT: 0041 % Mobj.river_flux - volume flux at the nodes within the model domain. 0042 % Mobj.river_nodes - node IDs for the rivers. At the moment, these are 0043 % point sources only. Eventually, some rivers may have to be split 0044 % over several nodes. 0045 % Mobj.river_names - river names which fall within the model domain. For 0046 % rivers where the discharge has been summed, the name is compoud, 0047 % with each contributing name separated by a hyphen (-). 0048 % Mobj.river_time - time series for the river discharge data 0049 % 0050 % EXAMPLE USAGE: 0051 % Mobj = get_EHYPE_rivers(Mobj, 0.15) 0052 % 0053 % Author(s): 0054 % Pierre Cazenave (Plymouth Marine Laboratory) 0055 % 0056 % Revision history: 0057 % 2013-10-15 - First version based on get_FVCOM_rivers.m. 0058 % 2013-11-14 - Update the help to reflect the functionality. 0059 % 2013-11-15 - Add support for using a river climatology from the E-HYPE 0060 % time series data (must be precomputed) instead of a specified section 0061 % of the E-HYPE model output. 0062 % 2013-12-12 - Remove some redundant variables. 0063 % 2013-12-13 - Remove the loop through the time at the end and instead 0064 % use greg2mjulian to work on the whole time vector array. 0065 % 2014-01-22 - For nodes with mulitple rivers assigned, use the largest 0066 % of the rivers rather than summing their fluxes. Also eliminate having 0067 % two adjacent river nodes (instead use the average of their flux and 0068 % assign the position to the first river node). 0069 % 2014-05-15 - Add option to exclude rivers by name. 0070 % 2014-05-19 - Add new option to use an alternatively formatted input 0071 % climatology (two columns instead of the number in the EHYPE data). 0072 % 2014-05-20 - Set boolean flag to true to indicate rivers and add number 0073 % of rivers to the relevant field. 0074 % 2014-05-29 - Fix issues with the climatology vs. timeseries allocation 0075 % of the output arrays. 0076 % 2015-09-24 - Add check for whether we actually have any rivers to 0077 % process. 0078 % 2016-01-15 - Fix exclude behaviour for more than a single river to 0079 % exclude. Also summarised the number of included/skipped/ignored rivers 0080 % instead of printing a new line for each river that's skipped. 0081 % 0082 %========================================================================== 0083 0084 subname = 'get_EHYPE_rivers'; 0085 0086 global ftbverbose; 0087 if ftbverbose 0088 fprintf(['\nbegin : ' subname '\n']) 0089 end 0090 0091 % Check inputs 0092 if ~Mobj.have_lonlat 0093 error('Require unstructured grid positions in lon/lat format to compare against supplied river positions.') 0094 end 0095 0096 % Default to standard EHYPE formatted data and no ignored rivers. 0097 yr = []; 0098 ignore_list = []; 0099 ceh = false; 0100 0101 % If we have only three arguments, we have to assume we've been given a 0102 % year for the climatology. Otherwise, we need to read the arguments based 0103 % on keyword-value pairs. Really, we want keyword-value pairs all the time, 0104 % so silently work when given three arguments and don't mention it in the 0105 % help. This is going to bite me at some point in the future, I'm sure. 0106 if nargin == 3 0107 yr = varargin{1}; 0108 elseif nargin > 3 0109 for aa = 1:2:length(varargin) 0110 switch varargin{aa} 0111 case 'model_year' 0112 yr = varargin{aa + 1}; 0113 case 'exclude' 0114 ignore_list = varargin{aa + 1}; 0115 case 'ceh' 0116 ceh = varargin{aa + 1}; 0117 end 0118 end 0119 end 0120 0121 if (isempty(yr) && ceh) || (~isempty(yr) && ~isnumeric(yr)) 0122 error('Trying to do climatology, but don''t have an anchor year. Supply one via the ''model_year'' keyword-value pair.') 0123 end 0124 0125 % Separate the inputs into separate arrays. 0126 ehype_name = Mobj.rivers.names; 0127 ehype_xy = Mobj.rivers.positions; 0128 ehype_flow = Mobj.rivers.river_flux; 0129 0130 % If we've been given rivers to ignore, remove them now. 0131 if ~isempty(ignore_list) 0132 ignore_mask = true(length(ehype_name), 1); 0133 for ig = 1:length(ignore_list) 0134 ignore_mask = ignore_mask .* (ehype_name ~= ignore_list(ig)); 0135 end 0136 ignore_mask = logical(ignore_mask); 0137 0138 ehype_name = ehype_name(ignore_mask); 0139 ehype_xy = ehype_xy(ignore_mask, :); 0140 end 0141 0142 fv_nr = length(ehype_name); 0143 0144 % Check each location in the EHYPE positions against the grid in Mobj and 0145 % for the indices within the dist_thresh, load and extract the relevant 0146 % time series data. 0147 0148 vc = 0; % valid FVCOM boundary node counter 0149 0150 % We need to find the unstructured grid boundary nodes and exclude the open 0151 % boundary nodes from them. This will be our list of potential candidates 0152 % for the river nodes (i.e. the land coastline). 0153 [~, ~, ~, bnd] = connectivity([Mobj.lon, Mobj.lat], Mobj.tri); 0154 boundary_nodes = 1:Mobj.nVerts; 0155 boundary_nodes = boundary_nodes(bnd); 0156 coast_nodes = boundary_nodes(~ismember(boundary_nodes, [Mobj.read_obc_nodes{:}])); 0157 tlon = Mobj.lon(coast_nodes); 0158 tlat = Mobj.lat(coast_nodes); 0159 0160 fv_obc = nan; 0161 fvcom_names = cell(0); 0162 0163 % Initialise the flow array with a 366 day long time series of nans. This 0164 % array will be appended to (unless all rivers are outside the domain). 0165 % Only do this if we're doing climatology (signified by a non-empty year). 0166 skipped = 0; 0167 if ~isempty(yr) 0168 fv_flow = nan(366, 1); 0169 end 0170 for ff = 1:fv_nr 0171 % Find the coastline node closest to this river. 0172 fv_dist = sqrt( ... 0173 (ehype_xy(ff, 1) - tlon).^2 + ... 0174 (ehype_xy(ff, 2) - tlat).^2); 0175 [c, idx] = min(fv_dist); 0176 if c > dist_thresh 0177 skipped = skipped + 1; 0178 continue 0179 else 0180 if ftbverbose 0181 fprintf('candidate river %07d found (%f, %f)... ', ehype_name(ff), ehype_xy(ff, 1), ehype_xy(ff, 2)) 0182 end 0183 end 0184 0185 vc = vc + 1; 0186 0187 % We need to make sure the element in which this node occurs does not 0188 % have two land boundaries (otherwise the model sometimes just fills up 0189 % that element without releasing the water into the adjacent element). 0190 0191 % Find the other nodes which are joined to the node we've just found. 0192 % We don't need the column to get the other nodes in the element, only 0193 % the row is required. 0194 [row, ~] = find(Mobj.tri == coast_nodes(idx)); 0195 0196 if length(row) == 1 0197 % This is a bad node because it is a part of only one element. The 0198 % rivers need two adjacent elements to work reliably (?). So, we 0199 % need to repeat the process above until we find a node that's 0200 % connected to two elements. We'll try the other nodes in the 0201 % current element before searching the rest of the coastline (which 0202 % is computationally expensive). 0203 0204 % Remove the current node index from the list of candidates (i.e. 0205 % leave only the two other nodes in the element). 0206 mask = Mobj.tri(row, :) ~= coast_nodes(idx); 0207 n_tri = Mobj.tri(row, mask); 0208 0209 % Remove values which aren't coastline values (we don't want to set 0210 % the river node to an open water node). 0211 n_tri = intersect(n_tri, coast_nodes); 0212 0213 % Of the remaining nodes in the element, find the closest one to 0214 % the original river location (in fvcom_xy). 0215 [~, n_idx] = sort(sqrt( ... 0216 (ehype_xy(ff, 1) - Mobj.lon(n_tri)).^2 ... 0217 + (ehype_xy(ff, 2) - Mobj.lon(n_tri)).^2)); 0218 0219 [row_2, ~] = find(Mobj.tri == n_tri(n_idx(1))); 0220 if length(n_idx) > 1 0221 [row_3, ~] = find(Mobj.tri == n_tri(n_idx(2))); 0222 end 0223 % Closest first 0224 if length(row_2) > 1 0225 idx = find(coast_nodes == n_tri(n_idx(1))); 0226 % The other one (only if we have more than one node to consider). 0227 elseif length(n_idx) > 1 && length(row_3) > 1 0228 idx = find(coast_nodes == n_tri(n_idx(2))); 0229 % OK, we need to search across all the other coastline nodes. 0230 else 0231 % TODO: Implement a search of all the other coastline nodes. 0232 % My testing indicates that we never get here (at least for the 0233 % grids I've tested). I'd be interested to see the mesh which 0234 % does get here... 0235 continue 0236 end 0237 if ftbverbose 0238 fprintf('alternate node ') 0239 end 0240 end 0241 0242 % Add it to the list of valid rivers 0243 fv_obc(vc) = coast_nodes(idx); 0244 0245 % We are assuming that the river discharge data array y-dimension is 0246 % ordered the same as the positions in fvcom_xy. If they are not, then 0247 % the discharges for the rivers will be incorrect (i.e. you might put 0248 % the Severn discharge somewhere in the Baltic). 0249 fvcom_names{vc} = sprintf('%07d', ehype_name(ff)); 0250 fid = fopen(fullfile(ehype_flow, [fvcom_names{vc}, '.txt'])); 0251 assert(fid >= 0, 'Failed to open E-HYPE river flow data.') 0252 if isempty(yr) && ~ceh 0253 % Time series have a 2 line header. 0254 eflow = textscan(fid, '%s %f %f %f %f %f %f %f %f %f', 'delimiter', '\t', 'HeaderLines', 2, 'MultipleDelimsAsOne', 1); 0255 elseif ~isempty(yr) && ceh 0256 eflow = textscan(fid, '%s %f', 'delimiter', ' ', 'MultipleDelimsAsOne', 1); 0257 elseif ~isempty(yr) 0258 % Climatology, so we have no header. Are we using the original 0259 % EHYPE data or some other "time,flux" data? 0260 eflow = textscan(fid, '%s %f %f %f %f %f %f %f %f %f', 'delimiter', '\t', 'MultipleDelimsAsOne', 1); 0261 else 0262 error('Incorrect time set up. Check the ''ceh'' or ''model_time'' keyword-value pairs.') 0263 end 0264 fclose(fid); 0265 % Make sure we always have the right number of time steps. Truncate the 0266 % new data to fit the existing array or wrap the start of the time 0267 % series back to the end. 0268 new_t = length(eflow{2}); 0269 % Check if we're doing climatology in which case we can have different 0270 % length time series (for CEH vs. EHYPE derived climatologies, for 0271 % example). If we're not doing climatology, we have to assume the 0272 % modelled time series are all the same length, in which case just use 0273 % the values in new_t. 0274 if ~isempty(yr) 0275 old_t = length(fv_flow(:, 1)); 0276 else 0277 old_t = new_t; 0278 end 0279 diff_t = old_t - new_t; 0280 if new_t > old_t 0281 fv_flow(:, vc) = eflow{2}(1:old_t); 0282 elseif new_t < old_t 0283 fv_flow((1:new_t), vc) = eflow{2}; 0284 fv_flow(end - diff_t + 1:end, vc) = eflow{2}(1:diff_t); 0285 else 0286 fv_flow(:, vc) = eflow{2}; 0287 end 0288 if ftbverbose 0289 fprintf('added (%f, %f)\n', Mobj.lon(fv_obc(vc)), Mobj.lat(fv_obc(vc))) 0290 end 0291 0292 end 0293 0294 % Get the length of the EHYPE time series. 0295 ehype_nt = size(fv_flow, 1); 0296 0297 % Now we've got a list and some of the nodes will be duplicates. Use the 0298 % larger of the two discharge values assigned to those nodes and ditch the 0299 % smaller one. The output is stored in a new fv_uniq_flow array (names and 0300 % nodes are similarly stored in their unique format). 0301 if any(isnan(fv_obc)) 0302 % We don't actually have any rivers, so return all the relevant fields 0303 % in Mobj as empty arrays. 0304 Mobj.river_flux = []; 0305 Mobj.river_nodes = []; 0306 Mobj.river_names = []; 0307 Mobj.have_rivers = false; 0308 Mobj.nRivers = 0; 0309 0310 if ftbverbose 0311 fprintf('end : %s \n', subname) 0312 end 0313 0314 return 0315 end 0316 0317 fv_uniq_obc = unique(fv_obc); 0318 fv_uniq_flow = nan(ehype_nt, length(fv_uniq_obc)); 0319 fv_uniq_names = cell(length(fv_uniq_obc), 1); 0320 0321 fv_idx = 1:length(fvcom_names); 0322 for nn = 1:length(fv_uniq_obc) 0323 0324 dn = fv_idx(fv_obc == fv_uniq_obc(nn)); 0325 0326 % Instead of summing the values (which causes very large discharges 0327 % because of the way the E-HYPE river mouths are determined), use the 0328 % river flux with the largest mean over the entire time series (~20 0329 % years). 0330 flow_bar = mean(fv_flow(:, dn), 1); % get a mean for each time series 0331 [~, max_idx] = max(flow_bar, [], 2); 0332 fv_uniq_flow(:, nn) = fv_flow(:, dn(max_idx)); 0333 fv_uniq_names{nn} = fvcom_names{dn(max_idx)}; 0334 0335 % % This is the old way where nodes which are grouped together are 0336 % % summed. This yielded unrealistically high discharges, particularly at 0337 % % the Fowey near Plymouth. It probably did elsewhere too. 0338 %fv_uniq_flow(:, nn) = sum(fv_flow(:, dn), 2); 0339 % % Concatenate the river names so we know at least which rivers' 0340 % % discharges have been summed. 0341 %s = fvcom_names(dn); 0342 %s = [sprintf('%s-', s{1:end-1}, s{end})]; 0343 %fv_uniq_names{nn} = s(1:end-1); % lose the trailing -. 0344 0345 end 0346 0347 % Some of the river fluxes are being assigned to adjacent coastal nodes. 0348 % This is no good because we end up putting too much water in (similar 0349 % problem to the multiple river inputs on a single node which is fixed in 0350 % the loop above). So, we need to check each node and check its neighbours 0351 % aren't also rivers. If one (or more?) is, then we need to pick the larger 0352 % discharge (as defined by the mean over the entire time series) and use 0353 % that, removing the other node from the list. 0354 0355 % Finding the neighbouring nodes is not as straightforward as it might seem 0356 % at first. Simply using poly2cw is no good because our coastline is too 0357 % complicated for that (poly2cw assumes a convex hull). So, we'll find the 0358 % 2 nearest coastline nodes to each river node. If any of those 2 is also a 0359 % river, then merge the two rivers together (use the mean discharge). 0360 0361 % This breaks down a bit when three rivers are adjacent to one another, but 0362 % most of the time that shouldn't happen... 0363 0364 % Build a list of the nodes we're considering as neighbouring in 0365 % fv_dups_idx and fv_keep_idx. Store the meaned flow in fv_dups_flow (we'll 0366 % remove the original un-meaned flows at the end). Also store the 0367 % duplicated names in fv_dups_names. All these duplicate arrays will be 0368 % sorted out after the loop to find the adjacent nodes has finished. This 0369 % is less horrible than looping through and adjusting the values in the 0370 % original arrays because the mean of a meaned value and a new value is not 0371 % the same as the mean of the three original values, that is: 0372 % mean([mean([2, 5]), 10]) ~= mean([2, 5, 10]). 0373 0374 fv_dups_obc = cell(0); 0375 fv_dups_idx = []; 0376 fv_dups_flow = fv_uniq_flow; 0377 fv_dups_names = cell(0); 0378 fv_uniq_obc_orig = fv_uniq_obc; 0379 c = 0; 0380 for nn = 1:length(fv_uniq_obc) 0381 if isnan(fv_uniq_obc(nn)) 0382 % This was already flagged as a pair, so just skip it as we've 0383 % already saved its index. 0384 continue 0385 end 0386 [~, idx] = sort(sqrt(... 0387 (Mobj.x(coast_nodes) - Mobj.x(fv_uniq_obc(nn))).^2 + ... 0388 (Mobj.y(coast_nodes) - Mobj.y(fv_uniq_obc(nn))).^2)); 0389 if any(ismember(fv_uniq_obc, coast_nodes(idx(2:3)))) 0390 % Build a list of the indices which we want to merge. 0391 fv_dups_idx = [fv_dups_idx, nn]; 0392 0393 c = c + 1; 0394 % Remove the current nodes from the list of river nodes. 0395 fv_dups_obc{c, 1} = fv_uniq_obc(nn); 0396 fv_dups_obc{c, 2} = fv_uniq_obc(ismember(fv_uniq_obc, coast_nodes(idx(2:3)))); 0397 fv_uniq_obc(nn) = nan; 0398 fv_uniq_obc(ismember(fv_uniq_obc, coast_nodes(idx(2:3)))) = nan; 0399 0400 % We can sort out the names and discharges here too. We'll store 0401 % the modified fluxes in a copy of the flux array so we can append 0402 % them once we've cleaned out the duplicate IDs. This way we can 0403 % still get accurate means if we need to reuse a particular node's 0404 % flux. Similarly, merge river names into a separate array. 0405 fv_dups_flow(:, fv_uniq_obc_orig == fv_dups_obc{c, 1}) = ... 0406 mean([fv_uniq_flow(:, fv_uniq_obc_orig == fv_dups_obc{c, 1}), ... 0407 fv_uniq_flow(:, fv_uniq_obc_orig == fv_dups_obc{c, 2})], 2); 0408 fv_dups_names{c} = sprintf('%s-%s', fv_uniq_names{fv_uniq_obc_orig == fv_dups_obc{c, 1}}, ... 0409 fv_uniq_names{fv_uniq_obc_orig == fv_dups_obc{c, 2}}); 0410 end 0411 end 0412 0413 clear c idx 0414 0415 % Now we can remove the duplicate data from the names, nodes and fluxes. 0416 fv_uniq_obc(fv_dups_idx) = []; 0417 fv_uniq_flow(:, fv_dups_idx) = []; 0418 fv_uniq_names(fv_dups_idx) = []; 0419 fv_uniq_flow(:, isnan(fv_uniq_obc)) = []; 0420 fv_uniq_names(isnan(fv_uniq_obc)) = []; 0421 fv_uniq_obc(isnan(fv_uniq_obc)) = []; 0422 0423 % And append the averaged flow, names and nodes to the relevant arrays. 0424 fv_uniq_flow = cat(2, fv_uniq_flow, fv_dups_flow(:, fv_dups_idx)); 0425 fv_uniq_obc = [fv_uniq_obc, [fv_dups_obc{:, 1}]]; 0426 fv_uniq_names = [fv_uniq_names; fv_dups_names']; 0427 0428 % % Merge the river discharges for the rivers we've identified as adjacent to 0429 % % one another on the coastline. 0430 % assert(mod(numel(fv_dups_obc), 2) ~= 1, 'Odd number of river pairs.') 0431 % assert(mod(length(unique(fv_dups_obc)), 2) ~= 1, 'Duplicate river node in being removed for two separate rivers.') 0432 % nr = length(fv_dups_obc); 0433 % for nn = 1:nr 0434 % % Find the indices for the flow data for the node to keep and remove. 0435 % [~, idx1] = find(fv_uniq_obc_orig == fv_dups_obc{nn, 1}); % keep 0436 % [~, idx2] = find(fv_uniq_obc_orig == fv_dups_obc{nn, 2}); % remove 0437 % idx = [idx1, idx2]; clear idx1 idx2 0438 % % Set the first column to the mean of the two rivers and set the other 0439 % % one to NaN. We'll clear out the NaNs afterwards. 0440 % fv_uniq_flow(:, idx(1)) = mean(fv_uniq_flow(:, idx), 2); 0441 % fv_uniq_flow(:, idx(2)) = nan; 0442 % 0443 % fv_uniq_names{idx(1)} = sprintf('%s-%s', fv_uniq_names{idx(1)}, ... 0444 % fv_uniq_names{idx(2)}); 0445 % fv_uniq_names{idx(2)} = ''; 0446 % end 0447 % 0448 % % Collapse the NaNs out of the flow data; rename the rivers to be 0449 % % hyphenated based on the two source rivers that have been merged. 0450 % nanidx = 1:size(fv_uniq_flow, 2); 0451 % nanidx = nanidx(~isnan(fv_uniq_flow(1, :))); 0452 % fv_uniq_flow = fv_uniq_flow(:, nanidx); 0453 % % Clear out the empty names too. 0454 % c = 0; 0455 % names = cell(0); 0456 % for i = 1:length(fv_uniq_names) 0457 % if ~isempty(fv_uniq_names{i}) 0458 % c = c + 1; 0459 % names{c, 1} = fv_uniq_names{i}; 0460 % end 0461 % end 0462 % fv_uniq_names = names; 0463 % clear names 0464 0465 0466 % Assign the relevant arrays to the Mobj. Flux is added in the section 0467 % dealing with either climatology or time series data. 0468 Mobj.river_nodes = fv_uniq_obc; 0469 Mobj.river_names = fv_uniq_names; 0470 Mobj.have_rivers = true; 0471 Mobj.nRivers = length(fv_uniq_obc); 0472 0473 % Create a Modified Julian Day time series of the EHYPE river data. Assume 0474 % all the EHYPE model outputs are for the same period and have the same 0475 % sampling interval. If the eflow{1} data is a number below 367, assume 0476 % we've been given a climatology. In that case, find the model year we're 0477 % using and generate the time string for a year each side of that year (to 0478 % cover the period at each end of a year). For that to work, we need to be 0479 % given the model year as an optional argument to the function. 0480 checkdate = cellfun(@str2num, eflow{1}); 0481 if max(checkdate) < 367 0482 % Climatology. 0483 if isempty(yr) && ~isnumeric(yr) 0484 error('For climatology, a year must be specified for the time series to be generated.') 0485 elseif ~isempty(yr) && isnumeric(yr) 0486 % Get to Gregorian first. 0487 0488 % Make three years of data starting from the year before the 0489 % current one. Do so accounting for leap years. 0490 daysinyr = [sum(eomday(yr - 1, 1:12)), ... 0491 sum(eomday(yr, 1:12)), ... 0492 sum(eomday(yr + 1, 1:12))]; 0493 % Offset the checkdate by one to add zero for the first day. 0494 % Alternative would be to specify the day as the end of the 0495 % previous month (or a day value of zero?). 0496 offsetdays = (1:sum(daysinyr)) - 1; 0497 mtime = datevec(datenum(yr - 1, 1, 1, 0, 0, 0) + offsetdays); 0498 Mobj.river_time = greg2mjulian(mtime(:, 1), mtime(:, 2), ... 0499 mtime(:, 3), mtime(:, 4), mtime(:, 5), mtime(:, 6)); 0500 0501 % Repeat the river flux for the climatology before adding to the 0502 % Mobj. 0503 Mobj.river_flux = [... 0504 fv_uniq_flow(1:daysinyr(1), :); ... 0505 fv_uniq_flow(1:daysinyr(2), :); ... 0506 fv_uniq_flow(1:daysinyr(3), :)]; 0507 else 0508 error('Non-numeric format for the climatology anchor year.') 0509 end 0510 else 0511 % Time series. 0512 rtimes = datevec(eflow{1}); 0513 Mobj.river_time = greg2mjulian(... 0514 rtimes(:, 1), rtimes(:, 2), rtimes(:, 3), ... 0515 rtimes(:, 4), rtimes(:, 5), rtimes(:, 6) ... 0516 ); 0517 0518 % Add the river flux to the Mobj for the time series data. 0519 Mobj.river_flux = fv_uniq_flow; 0520 0521 end 0522 0523 if ftbverbose 0524 fprintf('included %d of %d rivers (skipped %d, ignored %d)\n', ... 0525 fv_nr - skipped, fv_nr, skipped, sum(~ignore_mask)) 0526 fprintf('end : %s \n', subname) 0527 end 0528 0529 % Figure to check what's going on with identifying river nodes 0530 % figure 0531 % plot(ehype_xy(:, 1), ehype_xy(:, 2), '.', 'MarkerFaceColor', 'b') 0532 % hold on 0533 % plot(Mobj.lon(bnd), Mobj.lat(bnd), 'g.', 'MarkerFaceColor', 'g') 0534 % axis('square', 'tight') 0535 % plot(Mobj.lon(coast_nodes), Mobj.lat(coast_nodes), 'r.') 0536 % plot(Mobj.lon(Mobj.river_nodes), Mobj.lat(Mobj.river_nodes), 'k.', 'MarkerFaceColor', 'k') 0537 % % text(Mobj.lon(Mobj.river_nodes) + 0.025, Mobj.lat(Mobj.river_nodes) + 0.025, Mobj.river_names) 0538 % axis([min(Mobj.lon), max(Mobj.lon), min(Mobj.lat), max(Mobj.lat)]) 0539 % legend('EHYPE nodes', 'Grid boundary', 'Land nodes', 'Selected nodes', 'Location', 'NorthOutside', 'Orientation', 'Horizontal') 0540 % legend('BoxOff')


| Interface | Description |
|---|---|
| BundleFactory |
A factory that creates
UncommittedBundles . |
| Clock |
Access to the current time.
|
| ExecutorServiceFactory |
A factory that creates
ExecutorServices . |
| InProcessPipelineOptions |
Options that can be used to configure the
InProcessPipelineRunner . |
| InProcessPipelineRunner.CommittedBundle<T> |
Part of a
PCollection . |
| InProcessPipelineRunner.PCollectionViewWriter<ElemT,ViewT> |
A
InProcessPipelineRunner.PCollectionViewWriter is responsible for writing contents of a PCollection to
a storage mechanism that can be read from while constructing a PCollectionView . |
| InProcessPipelineRunner.UncommittedBundle<T> |
Part of a
PCollection . |
| InProcessTransformResult |
The result of evaluating an
AppliedPTransform with a TransformEvaluator . |
| ModelEnforcement<T> |
Enforcement tools that verify that executing code conforms to the model.
|
| ModelEnforcementFactory | |
| TransformEvaluator<InputT> |
An evaluator of a specific application of a transform.
|
| TransformEvaluatorFactory |
A factory for creating instances of
TransformEvaluator for the application of a
PTransform . |
| Class | Description |
|---|---|
| ConsumerTrackingPipelineVisitor | |
| ForwardingPTransform<InputT extends PInput,OutputT extends POutput> |
A base class for implementing
PTransform overrides, which behave identically to the
delegate transform but with overridden methods. |
| InMemoryWatermarkManager |
Manages watermarks of
PCollections and input and output watermarks of
AppliedPTransforms to provide event-time and completion tracking for
in-memory execution. |
| InMemoryWatermarkManager.FiredTimers |
A pair of
TimerInternals.TimerData and key which can be delivered to the appropriate
AppliedPTransform . |
| InMemoryWatermarkManager.TimerUpdate |
A collection of newly set, deleted, and completed timers.
|
| InMemoryWatermarkManager.TimerUpdate.TimerUpdateBuilder |
A
InMemoryWatermarkManager.TimerUpdate builder that needs to be provided with set timers and deleted timers. |
| InProcessBundleOutputManager | |
| InProcessPipelineRunner |
An In-Memory implementation of the Dataflow Programming Model.
|
| InProcessPipelineRunner.InProcessPipelineResult |
The result of running a
Pipeline with the InProcessPipelineRunner . |
| InProcessRegistrar | |
| InProcessRegistrar.InProcessOptions |
Registers the
InProcessPipelineOptions . |
| InProcessRegistrar.InProcessRunner |
Registers the
InProcessPipelineRunner . |
| InProcessTimerInternals |
An implementation of
TimerInternals where all relevant data exists in memory. |
| NanosOffsetClock |
A
Clock that uses System.nanoTime() to track the progress of time. |
| NanosOffsetClock.Factory |
Creates instances of
NanosOffsetClock . |
| StepTransformResult |
An immutable
InProcessTransformResult . |
| StepTransformResult.Builder |
A builder for creating instances of
StepTransformResult . |
Copyright © 2016 The Apache Software Foundation. All rights reserved.


Portfolio - Gaynor Landmark
A Bend in the River
Life is like a river - constantly flowing - sometimes a gentle meander, and sometimes rushing headlong towards rapids.
No one knows what lies around the next bend in the river.
The river brought me here.
About Me
I'm an experienced developer, who is comfortable working in a Agile development environment. I have used a variety of technologies over the years; more recently moving into the world of web development. I have a particular interest in UX and creating easy-to-use software. I love interesting colour combinations and clear simple design.
Projects
Simple & Silly Javascript Games


|
||||||||||
| PREV NEXT | FRAMES NO FRAMES |
| Packages that use AxesWalker | |
|---|---|
| org.apache.xpath.axes | Implementation of XPath LocationPath support -- primary classes are LocPathIterator and UnionPathIterator. |
| Uses of AxesWalker in org.apache.xpath.axes |
|---|
| Subclasses of AxesWalker in org.apache.xpath.axes | |
|---|---|
class |
FilterExprWalker
Walker for the OP_VARIABLE, or OP_EXTFUNCTION, or OP_FUNCTION, or OP_GROUP, op codes. |
class |
ReverseAxesWalker
Walker for a reverse axes. |
| Fields in org.apache.xpath.axes declared as AxesWalker | |
|---|---|
protected AxesWalker |
WalkingIterator.m_firstWalker
The head of the step walker list. |
protected AxesWalker |
WalkingIterator.m_lastUsedWalker
The last used step walker in the walker list. |
protected AxesWalker |
AxesWalker.m_nextWalker
The next walker in the location step chain. |
(package private) AxesWalker |
AxesWalker.m_prevWalker
The previous walker in the location step chain, or null. |
| Methods in org.apache.xpath.axes that return AxesWalker | |
|---|---|
(package private) AxesWalker |
AxesWalker.cloneDeep(WalkingIterator cloneOwner,
java.util.Vector cloneList)
Do a deep clone of this walker, including next and previous walkers. |
private static AxesWalker |
WalkerFactory.createDefaultWalker(Compiler compiler,
int opPos,
WalkingIterator lpi,
int analysis)
Create the proper Walker from the axes type. |
(package private) static AxesWalker |
AxesWalker.findClone(AxesWalker key,
java.util.Vector cloneList)
Find a clone that corresponds to the key argument. |
AxesWalker |
WalkingIterator.getFirstWalker()
Get the head of the walker list. |
AxesWalker |
WalkingIterator.getLastUsedWalker()
Get the last used walker. |
AxesWalker |
AxesWalker.getNextWalker()
Get the next walker in the location step chain. |
AxesWalker |
AxesWalker.getPrevWalker()
Get the previous walker reference in the location step chain. |
(package private) static AxesWalker |
WalkerFactory.loadOneWalker(WalkingIterator lpi,
Compiler compiler,
int stepOpCodePos)
This method is for building an array of possible levels where the target element(s) could be found for a match. |
(package private) static AxesWalker |
WalkerFactory.loadWalkers(WalkingIterator lpi,
Compiler compiler,
int stepOpCodePos,
int stepIndex)
This method is for building an array of possible levels where the target element(s) could be found for a match. |
| Methods in org.apache.xpath.axes with parameters of type AxesWalker | |
|---|---|
(package private) static AxesWalker |
AxesWalker.findClone(AxesWalker key,
java.util.Vector cloneList)
Find a clone that corresponds to the key argument. |
void |
WalkingIterator.setFirstWalker(AxesWalker walker)
Set the head of the walker list. |
void |
WalkingIterator.setLastUsedWalker(AxesWalker walker)
Set the last used walker. |
void |
AxesWalker.setNextWalker(AxesWalker walker)
Set the next walker in the location step chain. |
void |
AxesWalker.setPrevWalker(AxesWalker walker)
Set or clear the previous walker reference in the location step chain. |
|
||||||||||
| PREV NEXT | FRAMES NO FRAMES |


Sharing the Truth
Verify.net is an online service that verifies news spread through social media like Facebook, WhatsApp, Instagram, Telegram etc. Our organization was formed to combat the intense spread of misinformation through these mainstream pages, thus reducing the issues caused due to these fake statements. Users can enter their doubts or the facts they recieved in their social media accounts, upon which vour staff will sweep through the database to match this to a previous entry or create a new one. We will then forward this information to the expert in the field of enquiry and get their opinion, which will be sent to the email you used to create your account in Verify.net. The enquiry will also be made public if more than 40% of that day's user enquires were the same as the one you sent us so that the truth can be revealed to all.
Rumours were abuzz that the Rs 2,000 note would be banned, and that Rs 1,000 denomination notes would be reissued. "After December 31, 2019 you cannot change your Rs 2,000 notes," a viral WhatsApp post read. That, however, is completely untrue, as the Press Information Bureau (PIB) clarified later.
WhatsApp has been criticised for its inability to keep a check on the circulation of fake news on its platform. But the company itself became a victim of fake news after messages claiming that WhatsApp use is going to be restricted in India during night as a part of new policy by Narendra Modi government began doing the rounds. These messages were in fact triggered after WhatsApp suffered downtime on the night of July 3.
After the rape and murder of a veterinary doctor in Hyderabad sparked outrage across India, messages on WhatsApp began doing the rounds saying the Modi government has passed a new law— Section 233 of Indian Penal Code— to tackle crimes against women. That, however, was fake, since the government hadn't done anything of the sort and Section 233 already exists, but it pertains to punishment for counterfeit coins.


Question 9: Get dropdown selected value on onchanage event and append in div container
Select City
Android
iOS
Java
Feen
Bigdata
Selected fileds are:


Event Location:
Reykjavik University
Menntavegur 1
Reykjavik, Gullbringusysla, Iceland
Abstract:
SQL Server 2016 introduces support for system-versioned temporal tables as a database feature that brings built-in support for providing information about data stored in the table at any point in time rather than only the data that is correct at the current moment in time. This session takes you behind the basics of Temporal Tables and answers - after a short introduction - the following questions: - How to handle the change of NULL constraints? - Can Temporal Tables be renamed and what happens to the System Versioned table? - What will happen if you change meta data (data length, data type, ...)? - What happens if you drop a column or add another column to the Temporal Table? - what about security for the system versioned table? - what about calculated columns in the temporal table? - ... You are interested in the answers to all the above questions (and more). This session will answer EVERY question about Temporal Tables.
Speaker(s): Uwe Ricken,
Abstract:
DML operations mean lot of work for the database engine of Microsoft SQL Server. Understanding the details of a DML transaction may give you great benefits when planning workloads for INSERT, UPDATE and DELETE operations. Come and learn the differences of space allocation/deallocation between Clustered Indexes and Heaps in this demo oriented session. It will answer these questions: What is the difference of data page allocation for heaps and clustered indexes? What is the amount of transaction log when you update data in a heap and/or in a clustered index? What are the differences when data are delete from a heap and clustered index? Can ETL processes be improved by usage of the right strategy for INSERTS and DELETES? What performance drawbacks have Page Splits and Forwarded Records for my application design?
Speaker(s): Uwe Ricken,
Abstract:
Cloud is everywhere and the database administrator is caught in the middle. How do you know where to start and what to migrate first? How do you perform consolidation planning and ensure data security? This session builds on a full demonstration, along with tips and tricks to show how the DBA can secure their environment to allow a self-service option so they no longer are the constraints to projects! The attendee will leave with a clear understanding of: * Principles of virtualization and why it’s the answer to so many challenges we face today. * How easy it is to secure data in the cloud using data masking features. * The ease of connecting to the cloud and migrating environments. * How to troubleshoot when issues arise and the tools available to diagnose issues.
Speaker(s): Kellyn Pot'Vin-Gorman,
Abstract:
With the introduction of Microsoft Solution Templates, you can create an amazing Power BI Brand and Campaign Management solution leveraging Twitter data in just minutes. The solution includes several components, including a pre-built impressive Power BI Dashboard, backed by Azure Cognitive Services, Azure Logic Apps, App Service Plan, Azure Functions running C# code, and several other components. In this talk, we'll explore the Power BI Dashboard, getting started with the setup, and a deep dive into the technical components that power this solution. We'll also cover the pricing model and suggestions for right-sizing the components that I've used to help several customers with this amazing solution. Solution details can be found here: https://powerbi.microsoft.com/en-us/solution-templates/brand-management-twitter/
Speaker(s): Sam Lester,
Abstract:
This session aims to give attendees an introduction into containers running SQL Server on Windows Server 2016. Attendees will be taken through the following: - Defining what containers are (benefits and limitations) Configuring Windows Server 2016 to run containers Installing the docker engine Pulling SQL images from the docker respository Running SQL Server containers Committing new SQL Server images Exploring 3rd party options to run containers on previous versions of Windows Server (real world example) This sessions assumes that attendees have a good background in SQL Server administration and a basic knowledge of Windows Server administration
Speaker(s): Andrew Pruski,
Abstract:
During this session we will be having a tombola which contain several SQL Server issues you might face. After a volunteer has picked a problem, we will continue by handling this issue. We will show you how it appears, what impact is has on your performance and the way you are able to solve the issue. The issues inside the tombola will consist out of the top 10 most found issues on SQL Server.
Speaker(s): Stijn Wynants,
Abstract:
How easy is it to hack a SQL Server? In this session we'll see a few examples on how to exploit SQL Server, modify data and take control, while at the same time not leaving a trace. We'll start by gaining access to a SQL Server (using some "creative" ways of making man-in-the-middle attacks), escalating privileges and tampering with data at the TDS protocol level (e.g. changing your income level and reverting without a trace after payment), and more. Most importantly, we'll also cover recommendations on how to avoid these attacks, and take a look at the pros and cons of new security features in SQL Server 2016. This is a demo-driven session, suited for DBAs, developers and security consultants (Jedi level). Disclaimer: No actual state secrets will be revealed. Please do not send agents to my house again.
Speaker(s): André Melancia,
Abstract:
You are ahead of the curve. You’ve learned that you need to put your database in source control and you’ve set up some sort of automated build and regression testing process. (Or you’ve been to my continuous integration session.) However, your deployments are still expensive and risky. You find it hard to keep track of what has been deployed to each environment. You don’t have a great deal of confidence that the production database is still in line with source control. You may have heard of the automated deployment functionality in VSTS or Octopus Deploy but you haven’t tried it yet… at least not for SQL Server. In this session I’ll automate a deployment pipeline in a couple of different ways. I’ll discuss the importance of your database model as well as repeatable upgrade scripts and discuss the pros and cons of different approaches to automation. I’ll also discuss how to monitor for and protect yourself from database drift.
Speaker(s): Alex Yates,
Abstract:
Introducing the new scripting language for tabular models. Before SQL Server 2016 tabular models was wrapped into a multidimensional constructs. TMSL is the new native language for tabular which is build on JSON - this makes it easy to understand, modify and deploy. During this session I will go through and explain some examples on generating a SSAS tabular model by using the new TSML. I will spend some time showing and about explaining a real world example on pushing measure creation to the key business stakeholders to ensure quick time to market. The last thing i will show is how you speed up your development free up up to 50% of the time you spend building tabular models with the simple an advanced features of Tabular Editor 2.0
Speaker(s): Bent Pedersen,
Abstract:
In this session we will talk about the Operational analytics possibilities using ColumnStore indexes with SQL Server 2016. This will be a deep-dive on how this works, and will give you an explanation on the new Columnstore features. We will also talk about the difference between hot warm data, and how to make this fit for your environment.
Speaker(s): Stijn Wynants,
Abstract:
With Azure Analysis Services (Azure AS) we have full set of PAAS and SAAS services like Azure SQL DWH, Azure AS and Power BI for creating our BI solutions in the cloud. In this session I will introduce Azure AS and how we can use it together with other Azure services for creating complete BI solution in the cloud.
Speaker(s): Sergiy Lunyakin,
Abstract:
Query Store is an exciting new feature in SQL Server 2016. It can automatically capture and store a history of queries, query execution plans and execution statistics that makes troubleshooting performance problems caused by query plan changes much easier. In this session we will examine Query Store, it's architecture, configuration and how it can be used to solve performance problems.
Speaker(s): David Postlethwaite,
Abstract:
Hell frezes over... Microsoft released SQL Server on Linux in 2016. In his talk German Data Platform MVP Frank Geisler will give an overview on SQL Server on Linux. He will show how to install SQL Server on Ubuntu and give advice on how to use it. Besides this he will explain which Non-Windows based tools can be used. At the end he will show a scenario where a SQL Server is operated in a Docker Container completely without Windows Operating System on the server and on the client.
Speaker(s): Frank Geisler,
Abstract:
Anyone who has already gained experience with Azure ML knows how hard it is to find a suitable algorithm that fits the task. Cognitive services are becoming increasingly powerful and easy to address. With the focus on suggestions (Customers who bought this product also bought ...) I compare Azure ML and Cognitive Servies Recommendations. The result is the same for both, a proposal which could also be interesting. Only the how is for the developer significantly different.
Speaker(s): Alexander Klein,
Abstract:
In order to ascertain the abilities of cloud computing platform, let us overview what is available offered on Microsoft Azure. Microsoft Azure has the ability to move, store and analyze data within the cloud. It is essential to evaluate multiple opportunities and options with Microsoft Azure data insights. In this session let us talk about strategies on data storage, data partitioning and availability options with Azure. A tour on how best these Azure components can help you achieve success for your Big Data platform.
Speaker(s): Satya Jayanty,
Abstract:
Recently Microsoft released PowerApps and Flow. Together with Power BI these tools can be used to build data centric Apps for desktop and mobile. In his demo packed session German Dataplatform MVP Frank Geisler will show how to build a simple App for iPhone that can be used to store data in a SQL Server. There will be some automation with Microsoft Flow. The data that is entered through the App will be analyzed with Power BI.
Speaker(s): Frank Geisler,
Abstract:
If people think about big data, they always think about Twitter or Facebook. But there are other areas where much more data amounts incurred and the analyzes are more complex. In this talk, we talk about a real example from bioinformatics. We will explain the actual scenario and how the various Microsoft platforms from SQL Server to Azure Data Lake and Power BI could help us – or not.
Speaker(s): Tillmann Eitelberg,
Abstract:
T-SQL can help solve many problems you are faced with at your job. Each problem can have many solutions, but not every solution is simple to write, understand and maintain, and not every solution is good in terms of performance. In this session, we will look at real world problems and solve them using T-SQL. We won’t settle for just A solution, but show elegant, simple solutions that will yield optimal performance.
Speaker(s): Matan Yungman,
Abstract:
At times, T-SQL can exhibit unexpected and even nasty behavior. There are hidden pitfalls in which you might fall into if you are not aware. This session will provide you with the necessary warning signs to help you avoid them. Among other things, you will encounter the implicit conversion surprise, the parameter sniffing ambush, the cardinality estimate attack, … Expect baffling demos!
Speaker(s): Rudi Bruchez,
Abstract:
Are you a DBA or Developer and would like to get started with AzureML the EASY WAY? AzureML isn't just for "data scientists"... Anyone can use it! And after this session you'll be using it too... Disclaimer: Sadly, AzureML still can't predict what's on your girlfriend's mind. Nothing ever will.
Speaker(s): André Melancia,
This is a list of speakers from the XML Guidebook records. The details and URLs were valid at the time of the event.
LinkedIn: http://LinkedIn.COM/in/AndreMelancia
Contact: http://Andy.PT
Owner / Principal Consultant at LunarCat.PT Microsoft Certified Trainer (MCT) focusing on SQL Server, Azure, IoT and Security. 19+ years' fun developing information and multimedia systems, DBA, project and IT management. Data Community Portugal, IT Pro Portugal and PowerShell Portugal communities organiser. IPv6 Portugal, DNSSec Portugal and Windows Development Portugal online communities moderator. Actively volunteering, organising, speaking or just participating at community meetings and events around the world. Proud uncle and food devouring expert, with dangerous рuϧϧy cat as companion. Go to http://Andy.PT and you'll know the same as the NSA...
LinkedIn: http://www.linkedin.com/profile/view?id=270775013amp;trk=tab_pro
Contact: http://www.sqlmaster.de
Uwe Ricken is working with IT systems since the 90’s. The primary passion for developments with Microsoft SQL Server expanded in 2007 with his engagement as a DBA for Deutsche Bank AG in Frankfurt am Main. After 6 years of operational experiences as a DBA and over 14 years as a developer of complex database models he achieved the “Microsoft Certified Master – SQL Server 2008” certification which “was” the highest technical certification. In the same year he earned his first award as a Data Platform MVP for his support to the Microsoft SQL Server community in Germany and Europe. Uwe Ricken is a speaker on many international conferences and events and preferred topics are “Database Internals”, “Indexing” and “Development”.
LinkedIn: https://uk.linkedin.com/sqlmaster
Contact: http://www.sqlserver-qa.net
My experience surrounded with high focus on the data platform with a track record of defining strategy, designing and delivering digital transformation migrations with major enhancements to current working methods. Worked in a capacity of Head of Data Engineering, Enterprise Data Architect and Solutions Key career accomplishment recognition as an industry expert technical excellence from the Microsoft as Data Platform Most Valuable Professional (MVP) recognition since the year 2006 (13 years as MVP and counting), which recognizes exceptional technical community leaders worldwide who actively deliver, present share their extraordinary contributions, high quality, and real-world expertise. Twitter pod (http://twitter.com/sqlmast
LinkedIn: https://www.linkedin.com/in/andrewpruski
Contact: https://dbafromthecold.com/
SQL Server DBA with over 10 year's experience. Originally from Wales but now living in Ireland
LinkedIn: https://www.linkedin.com/in/stijn-wynants-ba528660?trk=hp-identity-name
Contact: http://swyssql.wordpress.com
Stijn is a Microsoft Premier Field Engineer on Data AI and a DataMinds core member. He is also one of the organizers of the local user group sessions the yearly event called DataMinds Connect (SQL Server Days). He is a speaker at various international events (SQL Saturday,PASS Summit,Difinity,...). He spends his days tuning SQL Servers solving problems with the full data platform. His focus is primarily on sql server core, but has also done various BI ETL projects. He gets his kicks out of Columnstore indexes tuning queries but shivers at the sight of an SSAS cube. When Stijn is not working with SQL Server, you can probably find him enjoying the local cuisine local beers or enjoying time with his wife and his dog.
LinkedIn: https://www.linkedin.com/in/tillmanneitelberg
Contact: http://www.ssis-components.net
Tillmann Eitelberg is CEO and co-founder of oh22information services GmbH, which specializes in data integration and data management. Tillmann is an active blogger at www.ssis-components.net, writing regularly about data quality topics and his passion: spatial data. In addition, he has published several SSIS components on Codeplex and GitHub. Tillmann is a Data Platform MVP, a board member of PASS Germany e.V., a PASS CL for the Cologne/Bonn region, and a PASS RM.
LinkedIn: https://www.linkedin.com/in/stijn-wynants-ba528660?trk=hp-identity-name
Contact: http://swyssql.wordpress.com
Stijn is a Microsoft Premier Field Engineer on Data AI and a DataMinds core member. He is also one of the organizers of the local user group sessions the yearly event called DataMinds Connect (SQL Server Days). He is a speaker at various international events (SQL Saturday,PASS Summit,Difinity,...). He spends his days tuning SQL Servers solving problems with the full data platform. His focus is primarily on sql server core, but has also done various BI ETL projects. He gets his kicks out of Columnstore indexes tuning queries but shivers at the sight of an SSAS cube. When Stijn is not working with SQL Server, you can probably find him enjoying the local cuisine local beers or enjoying time with his wife and his dog.
LinkedIn: http://LinkedIn.COM/in/AndreMelancia
Contact: http://Andy.PT
Owner / Principal Consultant at LunarCat.PT Microsoft Certified Trainer (MCT) focusing on SQL Server, Azure, IoT and Security. 19+ years' fun developing information and multimedia systems, DBA, project and IT management. Data Community Portugal, IT Pro Portugal and PowerShell Portugal communities organiser. IPv6 Portugal, DNSSec Portugal and Windows Development Portugal online communities moderator. Actively volunteering, organising, speaking or just participating at community meetings and events around the world. Proud uncle and food devouring expert, with dangerous рuϧϧy cat as companion. Go to http://Andy.PT and you'll know the same as the NSA...
LinkedIn: http://www.linkedin.com/profile/view?id=270775013amp;trk=tab_pro
Contact: http://www.sqlmaster.de
Uwe Ricken is working with IT systems since the 90’s. The primary passion for developments with Microsoft SQL Server expanded in 2007 with his engagement as a DBA for Deutsche Bank AG in Frankfurt am Main. After 6 years of operational experiences as a DBA and over 14 years as a developer of complex database models he achieved the “Microsoft Certified Master – SQL Server 2008” certification which “was” the highest technical certification. In the same year he earned his first award as a Data Platform MVP for his support to the Microsoft SQL Server community in Germany and Europe. Uwe Ricken is a speaker on many international conferences and events and preferred topics are “Database Internals”, “Indexing” and “Development”.
LinkedIn: https://www.linkedin.com/in/sporri/
Contact: http://www.sporri.net
Dad, Database, Dork. Working bee at Miracle
LinkedIn: http://il.linkedin.com/in/matanyungman/
Matan Yungman is a Data Engineering Team Lead at Taboola
LinkedIn: https://www.linkedin.com/in/kellynpotvin
Contact: http://dbakevlar.com
Kellyn Pot’Vin-Gorman is a member of the Oak Table Network and an Idera ACE and Oracle ACE Director alumnus. She is a Data Platform Architect in Power BI with AI in the EdTech group at Microsoft. Kellyn is known for her extensive work with multi-database platforms, DevOps, cloud migrations, virtualization, visualizations, scripting, environment optimization tuning, automation, and architecture design. Kellyn has spoken at numerous technical conferences for Oracle, Big Data, DevOps, testing, and SQL Server. Her blog (http://dbakevlar.com) and social media activity under her handle, DBAKevlar, is well respected for her insight and content.
LinkedIn: https://dk.linkedin.com/in/bentnissenpedersen
Contact: http://www.biblog.eu
Bent is a Data Platform MVP and working as Senior Business Analytics Architect at Kapacity A/S, where he have been working with enterprise customers on solutions with SSAS Tabular, SQL Server and in general Azure Data Platform services for the last years. During the past years, he concentrated on working with architecturing, devOps, Automation, testing and simplifying development processes for the Azure Data Platform.
LinkedIn: http://www.linkedin.com/in/davidpostlethwaite
Contact: http://www.gethynellis.com/
David Postlethwaite has been a DBA for Liverpool Victoria in Bournemouth, England since 2008 He supports both Oracle and SQL Server from 2000 to 2017, DBMS, SSIS, SSAS and Reporting Services. In 2015 David built and deployed the company's first cloud solution using Microsoft Azure SQL Database and web services Before becoming a DBA David was a .NET developer and way back in history a Windows and Netware administrator. He is an occasional blogger on www.gethynellis.com David is a regular speaker for SQL Saturday. Most of his presentations can be found on his YouTube channel www.youtube.com/c/DavidPostlethwaiteSQL
LinkedIn: https://www.linkedin.com/profile/view?id=4839367
Contact: http://www.gdsbi.de
Frank Geisler is owner and CEO of GDS Business Intelligence GmbH. He is SQL Server MVP, MCT, MCSE – Business Intelligence, MCSE – Data Plattform and MCSE - Azure Solutions Architect. In his Job he is building Business Intelligence Systems based on Microsoft Technology, mainly on SQL Server and SharePoint.
LinkedIn: http://www.linkedin.com/in/alexander-klein-13a04b3a
Alexander Klein is a senior Business Intelligence consultant with more than 15 years of experience. He focuses on Business Intelligence and Data Warehouse projects with Microsoft technologies like SQL Server, Power BI, Azure ML or Cortana Intelligence. Since 2008, he has been a self-employed consultant in large and medium-sized projects in all sectors across Europe. He has been visiting SQL Saturdays and other Data Conference all over Europe since 2013. Speaker at national and international events since 2017.
Contact: http://blogs.msdn.com/b/samlester
Sam Lester has spent the past 14 years working for Microsoft in various SQL Server related roles. After nearly 12 years working in the SQL Server development team in Redmond, WA, he has recently made the switch to a consulting role to work hands-on with European customers. While in the product group, Sam worked on numerous features including setup, migration, SSMS/manageability, Utility Control Point, Data-Tier Application Component, SSDT, Intellisense, amp; TSQL Debugger.
LinkedIn: https://fr.linkedin.com/in/rudibruchez
Contact: http://www.babaluga.com/
(same as before)
LinkedIn: http://uk.linkedin.com/in/alexanderyates
Contact: http://www.workingwithdevs.com
Alex Yates has been helping organisations to apply DevOps principles to relational database development and deployment since 2010. He’s most proud of helping Skyscanner develop the ability to deploy 95 times a day. Originally for Redgate, later for DLM Consultants, Alex has worked with clients on every continent except Antarctica – so he’s keen to meet anyone who researches penguins. A keen community member, he co-organises SQL Relay, is the founder of www.SpeakingMentors.com and has been recognised as a Microsoft Data Platform MVP since 2017.
LinkedIn: https://www.linkedin.com/profile/view?id=4839367
Contact: http://www.gdsbi.de
Frank Geisler is owner and CEO of GDS Business Intelligence GmbH. He is SQL Server MVP, MCT, MCSE – Business Intelligence, MCSE – Data Plattform and MCSE - Azure Solutions Architect. In his Job he is building Business Intelligence Systems based on Microsoft Technology, mainly on SQL Server and SharePoint.
LinkedIn: https://www.linkedin.com/in/slunyakin
Contact: https://slunyakin.wordpress.com
Sergiy Lunyakin (MCSA, MCSE, MCTS) is a Big Data Architect at SoftServe, Inc. He has extensive experience in designing and developing Big Data Analytics, Data Warehouse, and BI solutions, using both on-premises and cloud products. In 2016, Sergiy became Microsoft Data Platform MVP and has since maintained his MVP status. Sharing knowledge is another one of his passions. He regularly speaks at international conferences such as SQLSaturday, SQLDay, SQLNexus, and SQLBits. He also runs the Lviv SQL Server User Group in Ukraine and organizes SQLSaturday Lviv.
The following is a list of sponsors that helped fund the event.


Important Label Heading
100%
This is an example of using d3.layout.partition to generate a zoomable sunburst tree derived from hierarchical data. A sunburst tree is a radial space-filling visualisation, analagous to an icicle tree.
The original colours appear to have been selected by the designer, as opposed to matching any standard colour name palettes. So I painstakingly copied the colours from the outermost (leaf) nodes of the tree to match the original.
The inner node colours are calculated automatically by taking the average of the two child nodes in HSL colour space.
The label colour of black or light grey is automatically chosen by calculating the colour brightness of each node. If a label has more than one word, it is split into two lines and placed equidistant to the centre of the segment.
The original coffee flavour wheel was created by the Specialty Coffee Association of America in poster form but it appears in various places on the Web. Rogers Gourmet Coffee & Tea Market seems to have the most information about its origin:
…a flavor wheel created in 1997 by the Specialty Coffee Association of America, the Colombian Coffee Federation, and Jean Lenoir. It's part of the poster called, "The Coffee Tasters' Flavor Wheel" that you can buy on the SCAA website.
Built with D3.js. Sunburst zooming based on an example by Mike Bostock.
Thanks to Bart Mesuere for suggesting a performance optimisation for Firefox.


We would love to hear from you so please get in touch with any questions. Please bear in mind that we are a small family operation so responses may not be immediate. We will try to get back to you as quickly as possible.
We will always try and answer the phone unless we are busy on a job


Welcome.
Your quest is to assign an emotion to the face.
Simply click on one of the listed emotions. There is no limit.
Thank you for making magic AI better.
Click here to start.
Warning!
Highly addictive. In case of brain ache share the link and get a coffee.
Joy
Neutral
Sadness
Surprise
O T H E R
Fear
Contempt
Anger
Disgust


5 January 2012 - The Ministry of Health of China has notified WHO of a human case of avian influenza A (H5N1) virus infection.
The case is a 39-year-old male from Shenzhen, Guangdong Province. He developed symptoms on 21 December 2011 and was admitted to hospital on 25 December 2011. He was in critical condition and died on 31 December 2011. The case was laboratory diagnosed by Guangdong CDC on 30 December 2011 and confirmed by China CDC on 31 December 2011. Investigation into the source of infection is ongoing. Close contacts of the case are being monitored and to date all remain well.
Of the 41 cases confirmed to date in China, 27 have been fatal.


This demo allows you to use your phone as a basic dual d-pad controller similar to those used with games consoles. It uses its own special values (see The Code below) for communicating with a micro:bit which must be running code which understands those values. It will not work with a standard games console!
This demo uses the Bluetooth Event Service. Specifically, it writes an event code/value to the Client Event characteristic whenever a pad is touched by the user and whenever the user removes their finger from a pad.
Your micro:bit needs the following code in main.cpp for this demo to work and the Event Service must be enabled.
/* mbed Microcontroller Library * Copyright (c) 2006-2015 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "MicroBit.h" #define MES_DPAD_CONTROLLER 1104 #define MES_DPAD_1_BUTTON_UP_ON 1 #define MES_DPAD_1_BUTTON_UP_OFF 2 #define MES_DPAD_1_BUTTON_DOWN_ON 3 #define MES_DPAD_1_BUTTON_DOWN_OFF 4 #define MES_DPAD_1_BUTTON_LEFT_ON 5 #define MES_DPAD_1_BUTTON_LEFT_OFF 6 #define MES_DPAD_1_BUTTON_RIGHT_ON 7 #define MES_DPAD_1_BUTTON_RIGHT_OFF 8 #define MES_DPAD_2_BUTTON_UP_ON 9 #define MES_DPAD_2_BUTTON_UP_OFF 10 #define MES_DPAD_2_BUTTON_DOWN_ON 11 #define MES_DPAD_2_BUTTON_DOWN_OFF 12 #define MES_DPAD_2_BUTTON_LEFT_ON 13 #define MES_DPAD_2_BUTTON_LEFT_OFF 14 #define MES_DPAD_2_BUTTON_RIGHT_ON 15 #define MES_DPAD_2_BUTTON_RIGHT_OFF 16 /* * Dual D-Pad Controller * Responds to events sent by the Dual D Controller demo application */ void onControllerEvent(MicroBitEvent e) { // ADD YOUR CODE HERE TO RESPOND TO THE VARIOUS VALUES OF e.value AND TAKE WHATEVER CONTROL ACTION YOU WANT } void app_main() { uBit.display.scrollAsync("CONTROLLER"); // Listen for any/all events of type MES_DPAD_CONTROLLER uBit.MessageBus.listen(MES_DPAD_CONTROLLER, 0, onControllerEvent); }
All the code for this demo can be found in ui.DualDPadControllerActivity.java except for the Bluetooth operations which are in bluetooth.BleAdapterService.


The Cake Shop Pte Ltd
Production House
8A Admiralty Street , #03-13
Food Xchange @ Admiralty
Singapore 757437
Retail Outlet
109 North Bridge Road, #05-K6
Funan Digitalife Mall (Next to Foodcourt)
Singapore 179097
Operating Hours: 10.00am – 8.30pm
Sales: (65) 9662 0303
Tel: (65) 6334 7768
Please kindly email us for any enquiry after operations hours.
Email us: admin@thecakeshop.com.sg


Default Title
Add Location
Remove Location
No Locations. Please input location information.
Location #
Location
add/remove items
Add/Remove Items


Download on GitHub
findRecordsURL(fileName, layoutName,[ requests, sort, max, skip])
Create a complex xml -findquery string from an array of javascript objects. These queries are then passed to the postQueryFMS() function which returns the results as an array of JavaScript Objects (JSON).
fileName
Type:
String
A String of the name of the hosted FileMaker file.
layoutName
Type:
String
A String of the name of the target layout in the specified file.
requests
Type:
Array of Objects
(Optional) An Array of Objects where each object represents a FileMaker Find Request. If this arguement is not passed then a -findall query will be generated.
sort
Type:
Object
(Optional) An Object of name value pairs specifying a sort order for the query. Supported properties are field1-fieldn and order1-ordern (see example 3 below).
max
Type:
Number
(Optional) A Number specifying the maximimum number of parent records to be returned from FileMaker Server. Simmilar to Fetch First in FileMaker's SQL syntax.
skip
Type:
Number
(Optional) A Number specifying the number of records to skip in the found set before starting to return them. Simmilar yo Offset in FileMaker's SQL Syntax.
example 1
Two request find query for the layout "Events" in the file "Events".
var requests = [
{ "DateStart" : "<=2/28/2014" , "DateEnd" : ">=2/1/2014" } ,
{ "DateStart" : "2/1/2014...2/28/2014" }
];
var query = fmxj.findRecordsURL("Events", "Events", requests) ;
example 2
Add additional criteria to requests object, so both requests have the Resource field equal to "Example C".
var requests = [
{ "DateStart" : "<=2/28/2014" , "DateEnd" : ">=2/1/2014" },
{ "DateStart" : "2/1/2014...2/28/2014" }
];
requests[0]["Resource"] = "Example C";
requests[1]["Resource"] = "Example C";
var query = fmxj.findRecordsURL("Events", "Events", requests);
example 3
Specify a sort order for the request by passing an object to the optional sort argument. Supprted order values are: ascend, descend and valuelist.
var requests = [
{ "DateStart" : "<=2/28/2014" , "DateEnd" : ">=2/1/2014" } ,
{ "DateStart" : "2/1/2014...2/28/2014" }
] ;
var sort = {
"field1" : "DateStart" ,
"order1" : "descend" ,
"field2" : "id" ,
"order2" : "ascend"
} ;
var query = fmxj.findRecordsURL("Events", "Events", requests, sort) ;
example 4
Specify an Omit Request by setting the -omit property to 1.
var requests = [
{ "DateStart" : "<=2/28/2014" , "DateEnd" : ">=2/1/2014" } ,
{ "DateStart" : "2/1/2014...2/28/2014" } ,
{ "Resource" : "Example B" , "-omit" : "1" }
] ;
var query = fmxj.findRecordsURL("Events" ,"Events" ,requests) ;


"Don't worry, Dad, I'm a big kid now!" exclaimed the lad, straining under the weight of a big box of this-and-that. His Father smiled knowingly to Himself. The more he changed, the more he seemed to stay the same. "But he is growing," He said to himself. "And becoming more like his Brother every day."
And then there was a crash and a cry from down the hall, and the Father rushed to clean up the newly-created mess of boy and bric-à-brac.


RegEx Game
Capital Words
Validate whether a given string starts with a capital letter
Back
/
/
Make all words turn green to complete the challenge
Should match
Erik
PC
Microsoft
Hack Reactor
London
Alabama
Should
not
match
table
computer
hello
hEllo
$Hello


UseHdl¶
Use Module for HDL
This file provides functions for TclHdl. It is assumed that :module:`FindHdl` has already been loaded. See :module:`FindHdl` for information on how to load Hdl into your CMake project.
Creating And Installing JARs¶
add_hdl(<target_name>
[SOURCES] <source1> [<source2>...] [<resource1>...]
[INCLUDE_JARS <jar1> [<jar2>...]]
[ENTRY_POINT <entry>]
[VERSION <version>]
[OUTPUT_NAME <name>]
[OUTPUT_DIR <dir>]
[GENERATE_NATIVE_HEADERS <target> [DESTINATION <dir>]]
)
This command creates a <target_name>.jar
. It compiles the given
<source>
files and adds the given <resource>
files to
the jar file. Source files can be java files or listing files
(prefixed by @
). If only resource files are given then just a jar file
is created. The list of INCLUDE_JARS
are added to the classpath when
compiling the java sources and also to the dependencies of the target.
INCLUDE_JARS
also accepts other target names created by add_jar()
.
For backwards compatibility, jar files listed as sources are ignored (as
they have been since the first version of this module).
The default OUTPUT_DIR
can also be changed by setting the variable
CMAKE_JAVA_TARGET_OUTPUT_DIR
.
Optionally, using option GENERATE_NATIVE_HEADERS
, native header files can
be generated for methods declared as native. These files provide the
connective glue that allow your Java and C code to interact. An INTERFACE
target will be created for an easy usage of generated files. Sub-option
DESTINATION
can be used to specify the output directory for generated
header files.
GENERATE_NATIVE_HEADERS
option requires, at least, version 1.8 of the JDK.
The add_jar()
function sets the following target properties on
<target_name>
:
INSTALL_FILES
The files which should be installed. This is used by
install_jar()
.JNI_SYMLINK
The JNI symlink which should be installed. This is used by
install_jni_symlink()
.JAR_FILE
The location of the jar file so that you can include it.
CLASSDIR
The directory where the class files can be found. For example to use them with
javah
.
Examples¶
To add compile flags to the target you can set these flags with the following variable:
set(CMAKE_JAVA_COMPILE_FLAGS -nowarn)
Finding Tools¶
find_hdl(<VAR>
<name> | NAMES <name1> [<name2>...]
[PATHS <path1> [<path2>... ENV <var>]]
[VERSIONS <version1> [<version2>]]
[DOC "cache documentation string"]
)
This command is used to find a full path to the named jar. A cache
entry named by <VAR>
is created to store the result of this command.
If the full path to a jar is found the result is stored in the
variable and the search will not repeated unless the variable is
cleared. If nothing is found, the result will be <VAR>-NOTFOUND
, and
the search will be attempted again next time find_jar()
is invoked with
the same variable. The name of the full path to a file that is
searched for is specified by the names listed after NAMES
argument.
Additional search locations can be specified after the PATHS
argument.
If you require special a version of a jar file you can specify it with
the VERSIONS
argument. The argument after DOC
will be used for the
documentation string in the cache.


{% extends 'base.html' %} {% block main_content %}
A content management system for human health assessments.
Regulatory agencies around the world conduct assessments to determine the potential for chemicals to pose a risk to human health. These assessments typically consist of a critical review of available studies, identification of adverse health effects from chemicals, and characterization of exposure-response relationships and uncertainties in the data. HAWC aims to facilitate team collaboration by scientists who develop these assessments and enhance transparency of the process by providing online access to the data and expert decisions used to evaluate the potential human health hazard and risk of chemical exposures.
HAWC is a modular, content management system designed to store, display, and synthesize multiple data sources for the purpose of producing human health assessments of chemicals. This online application documents the overall workflow of developing an assessment, from literature search and systematic review, to data extraction (human epidemiology, animal bioassay, and in vitro assay), dose-response analysis, and finally evidence synthesis and visualization.


JumpStart Georgia
We communicate data better!
Data literacy
Who is the intended audience?
What is the information being shared?
How would this make the audience feel?
What visual techniques does it use?
Are their any ethical or reliability issues with the presentation?


Under the hood
The idea behind Themis is simple: wrap complicated multi-step procedures with shared data (like end-to-end perfect forward secrecy messaging, with session control) into simple objects.
All cryptographic decisions are being made by library's authors, so there's barely a chance to get anything wrong.
Interoperability
Same generation versions of Themis across different platforms are guaranteed to be compatible. For different versions, check build flags in makefile. Although, different platforms may have different implementations of cryptographic primitives, our pluggable cryptographic stack will take care of all differences.


|
-
FREE giveaway prizes!! -
FREE newsletter!!


{% extends "base.html" %} {% block 'title' %} Team #{{ team.number }}: {{ team.name }} {% endblock %} {% block 'head' %} {% load staticfiles %} {% endblock %} {% block "body" %}
| Key | Data |
|---|---|
| Things Drive Team Can Do Well | {{ team.things_driveteam_can_do_well }} |
| Drive Team Personality Compatibility | {{ team.drive_team_personality_compatibility }} |
| Robot Height in Inches | {{ team.robot_height_in_inches }} |
| Average Alliance Score | {{ team.get_average_score }} |


This is Moustafa Mohammed, Software Developer.
Computer and Systems Engineering dep, Faculty of Engineering - Zagazig University, B. Eng., 2018
Big Data Science and Engineering, National Telecommunications institute, Diploma, 2019
Reading, Music & Movies.
Photographing.
Travelling.
Night Watcher.
"These violent delights have violent ends." - William Shakespeare.
"You can go a long way with a smile. You can go a lot farther with a smile and a gun." - Al Capone..
"The music is about the sounds themselves, not who or what made them." - Stephen Whittington.
"In C, there's no magic. If you want something to be somewhere in memory, you have to put it there yourself." - David J. Malan
"If the Human Brain Were So Simple That We Could Understand It, We Would Be So Simple That We Couldn't, !" - Emerson M. Pugh.
"You used to be one thing. Now, you're something else. We all have our own problems. Our own issues. Our own demons!" - Eddie Brock.


David Knight Show: Impeachment Show Trial – Have We Reached Peak Insanity?
Also, what’s happening while America’s eyes are focused on the witch-hunt?
by David KnightOn this Thursday transmission of The David Knight Show, you’ll learn what’s really going on while America’s eyes are on the Democrats’ impeachment witch-hunt.
Share this censored broadcast to join Infowars in the battle for free speech.
By the way, overhaul your body’s cellular engine with our fan-favorite DNA Force Plus!