Adds protection to or removes protection from the active sheet, macro sheet, chart, dialog sheet, module, or scenario. Use PROTECT.DOCUMENT to prevent yourself or others from changing cell contents, or objects in a workbook. To protect workbooks in Microsoft Excel version 5.0 or later, see WORKBOOK.PROTECT.
Syntax
PROTECT.DOCUMENT(contents, windows, password, objects, scenarios)
PROTECT.DOCUMENT?( contents, windows, password, objects, scenarios)
Contents is a logical value corresponding to the Contents check box in the Protect Sheet dialog box.
If contents is TRUE or omitted, Microsoft Excel selects the check box and protects cells and chart elements on the sheet or macro sheet.
If contents is FALSE, Microsoft Excel clears the check box (and removes protection if the correct password is supplied).
Windows is provided for compatibility with Microsoft Excel version 4.0. To protect the window placement and structure of workbooks in Microsoft Excel version 5.0 or later, see WORKBOOK.PROTECT.
If windows is TRUE, Microsoft Excel prevents a workbook's windows from being moved or sized.
If windows is FALSE or omitted, Microsoft Excel removes protection if the correct password is supplied.
Password is the password you specify in the form of text to protect or unprotect the file. Password is case-sensitive.
If password is omitted when you protect a sheet, then you will be able to remove protection without a password. This is useful if you want only to protect the sheet from accidental changes.
If password is omitted when you try to remove protection from a sheet that was protected with a password, the normal password dialog box is displayed.
Passwords are not recorded into the PROTECT.DOCUMENT function when you use the macro recorder.
Objects is a logical value. This argument applies only to charts, worksheets and macro sheets. Objects corresponds to the Objects check box in the Protect Sheet dialog box.
If objects is TRUE or omitted, Microsoft Excel selects the check box and protects all locked objects on the chart, worksheet or macro sheet.
If objects is FALSE, Microsoft Excel clears the check box.
Scenarios is a logical value that corresponds to the Scenarios check box on the Protect Sheet dialog box. If TRUE, Microsoft Excel protects all the scenarios. If FALSE, the scenarios are not protected.
Remarks
If contents and objects are FALSE, PROTECT.DOCUMENT carries out the Unprotect Sheet command. If contents, or objects is TRUE, it carries out the Protect Sheet command.
Make sure that you hide macro sheets that protect or unprotect worksheets. If you type a password directly into the function on an unhidden macro sheet, then someone could see the password needed to unprotect the worksheet. For example, PROTECT.DOCUMENT(TRUE, TRUE, "XD1411C", TRUE).
Warning If you forget the password of a workbook that was previously protected with a password, you cannot unprotect the workbook.
Related Functions
CELL.PROTECTION Controls protection for the selected cells
ENTER.DATA Turns Data Entry mode on and off
OBJECT.PROTECTION Controls how an object is protected
SAVE.AS Saves a workbook and allows you to specify the name, file type, password, backup file, and location of the workbook
WORKBOOK.PROTECT Protects a workbook
Return to index


It is the best price that you can find in the planet! Our idea is to open the world for everyone so none of your wallet will affect to your journey.
Afraid to go alone? Nothing to be worry. We have group journey so you won't be along anymore. Also our tour guide will help you.
We help you to explore as far as you can go. The farther your journey, the bigger discount that you will get.
Find your way to go to Japan. Discover places that you find in your favourite anime and taste many delicious food.
Want to feel extrem cold temperature? find your extra-ordinary experiences that you will never found before!
Attend concert, watch your favourite football club, or anything that you want to do in England!
"It's the best journey that I had in England, finally I can go to Old Trafford!"
"Going to madrid is of the moment that I will never be forgotten."
"I always want to go to Japan. There is a lot of places that I watch in anime. Now I'm here."
"Annyeong-haseo!"
It's a payday! Time to get some recover from your hard-working day with our 50% discount.
Ask your friends to use our service and get discount up-to 20% for our product!
Collect stars from your journey, and redeem it to get another journey!
reserve@mytrav.com


{{username}}
{{status}}
Followers :
{{followers}}
Following :
{{followings}}
Projects :
{{projects}}
Personal Infomation
There is no introduction for this user
{{key}} :
{{value}}
Projects
There is no projects for this user
{{item.projectName}}
All Followers
x
There is no follower for this user
{{f.nickname}}
All Followings
x
There is no following for this user
{{f.nickname}}


FROM: JOHN DUF BEN DAKAR, SENEGAL AFRICA<EMAIL_ADDRESS>Dear Beloved One. Thank you for giving me your time;Please be patient and read my email to you, this letter might come as a surprise to you,and you could be wondering where I got your contact.I got your address through a personal search on the internet for someone relaible and trustworthy,so i decided to contact you for an assistant, which I do hope you will take your time to consider. My name is John Duf Ben, the eldest son of Dr.ENAGUA BEN, from Zimbabwe.During the current war against the farmers in Zimbabwe from the supporters of our President Robert Mugabe to claim all the white-owned farms for his party members and his followers, he ordered all white farmers to surrender all their farms to his party members and his followers. My father was one of the biggest farmers in our country and because he strongly opposed Mugabe's ideas, Mugabe's supporters invaded my father's farm and burnt everything in the farm, killing my father in the incident and made away with a lot of items in my father's farm. Before my father's death,he had made deposite with a Security Company in Europe, the sum of US$6.5(Six Million Five Hundred Thousand United States Dollars).He intended to use the money in buying new machinery and to set up a new farm in Swaziland. After the death of my father,l decided to escape with my other siblings to another country because of continued harassment and threat from Mugabe and his supporters,we could only get as far as the republic of SENEGAL where we are now seeking political refuge.As the eldest man in the Family, i have been making contact with the company to see how i can make the claim without going there but to no avail,i was told that the claim can only be made by me or my father's representative in thier office.This is the reason why i decided to contact you to assist us since I am not able to travel outside this country particularly to Europe where the company is located. I am seeking for your assistance to help us go to the security company as our father's representative for the claims, For your role in this transaction,my family and i have agreed to offer you 30% of the total sum for your assistance, 5% will be set-aside for any expenses that maybe incurred in the course of this transaction and the remaining 65% will be for my family and i to invest in any lucrative investment.All I want you to do is to help me finish this transaction and at the sametime help me to invest some of our share of the money in a lucrative business in your country. Please get back to me if you can be of assistance via my private email address<EMAIL_ADDRESS>for better discussion or should incase you have any questions you would like to ask,please feel free to contact me any time via email.Thanks and God bless as i will be looking forward to your swift and positive response.Please do not fail to call on telephone: +221 4488469 Best regards, MR.John Duf Ben PLS CALL ME ON PHONE +221 4488469


| DOSE: T+ 35:30 |
1 bowl |
smoked |
Cannabis |
(plant material) |
Intro: To start, I am a 21 year old, heavy marijuana user. I usually smoke the best that I am able to find in my area. On top of my recreational drug use, I am also a chronic insomniac. The 4 days preceding the experience at hand, I hadn't smoked a thing due to being away from home and in a drug-less suburban hell. I also didn't sleep very much on my weekend adventure and I was extremely tired for my four hour ride back north.
T+0:00-T+12:00
When I returned home, I had to find some decent stuff, so I called my good friend and he hooked me up with a thick bag of some decent outdoor nuggets, very sticky and slow burners. I didn't smoke that night, though I should have considering the fact that I absolutely could not sleep. And this after driving for four hours on boring interstates.  Attempting to relax once I get home, I made an effort not to fall asleep until a time where I would get a normal amount of sleep and wake up in the morning.
T+12:00-T+24:00
I ended up actually not sleeping at all and went to work at 8am.
T+24:00-T+35:00
Following work, I attended 3 classes including an exam. I then drive home. I crash in my room, still unable to drop off to sleep.
T+35:30-T+36:30
I packed a nice sized bowl and ripped it on and off for about twenty minutes. My high came upon me gradually over the next half hour, and I knew that by the time all was said and done, I was going to be the highest I'd been in recent memory.
I began to realize that I was almost as high as I used to get when I first started to smoke as a freshman in high school (age 15). I began to see colored light flashes and faint hallucinations barely qualifiable as open eye visuals, but still unfamiliar and interesting. My body high is near numbing and my eyes slowly descend to half-mast.
T+36:50
I figured at this point that it was reasonable to assume I could fall off to sleep. I got in bed and closed my eyes. Immediately, I was aware of the closed eye visuals which included rotating color patterns and strange images. The first few times that I began to reach sleep semi-conscious, dank-bud induced night terrors that would rouse me. Eventually I fell into a strange sleep, waking rested and slightly disoriented about 8 hours later.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


You always try to plan board games nights, but something always block? Someone always forgot to bring his game? Or it's too hard to select the food?
Everything you need to know about using the framework.
Latest code, issue reports, feature requests and more.
Ping us on Twitter if you have questions. If you build something with this we'd love to see it (and send you a totally boss sticker).
If you're intersted, please subscribe to the newsletter:


{{ define "main" }} {{ partial "featurePhoto" (dict "photo" .Params.photo) }}
We really appreciate your time and will be intouch with you shortly.


Detected AngularJS version {{ csInfo.ngVersion.full}}({{ csInfo.ngVersion.codeName}})
ng-app = {{ csInfo.ngModule}}
Enable Performance analysis
Please enable performance analysis to see dashboard values and performance graphs.Check the "Performance Analysis" option in left navigator to enable/resume it. Uncheck to pause
analysis and got through details.


{{"DEVICE_DETAIL_SLAVE_SETTINGS_BASIC_INFORMATION"|translate}}
{{"DEVICE_DETAIL_SLAVE_SETTINGS_BASIC_INFORMATION_DESCRIPTION"|translate}}
{{"DEVICE_DETAIL_INFO_SETTINGS_SLAVE_DEVICE_FUNCTION"|translate}}
{{"DEVICE_DETAIL_INFO_SETTINGS_SLAVE_DEVICE_FUNCTION_DESCRIPTION"|translate}}
{{"DEVICE_DETAIL_SLAVE_SETTINGS_FUNCTION_ID"|translate}}
{{"DEVICE_DETAIL_SLAVE_SETTINGS_FUNCTION_GROUP_ID"|translate}}
{{"DEVICE_DETAIL_SLAVE"|translate}}
{{"DEVICE_DETAIL_SLAVE_DESCRIPTION"|translate}}
{{"UTIL_NAME"|translate}}
{{"UTIL_DESCRIPTION"|translate}}
{{"DEVICE_DETAIL_UNBIND"|translate}}
{{"DEVICE_DETAIL_UNBIND_DESCRIPTION"|translate}}


Please switch to console mode for more informations.
Theoretical
(a ln(N) + b): ~
Harmonic
(a H(N) + b): ~
Actual
number of arcs:


FAQ
Why do I get a different set of annotations when I look at the same gene/protein in AmiGO?
There are several ways in which AmiGO and QuickGO differ in display of annotations as follows:
- Update cycle; QuickGO updates with GO terms every day and with GO annotations every week, so for GO terms QuickGO should only be, at most, one day behind AmiGO and for GO annotations no more than one week. The dates on which the GO terms and annotations were last updated in QuickGO are displayed in the Dataset page of QuickGO;
- AmiGO only provides electronic (IEA-coded) annotation for 12 model organism species whereas QuickGO provides electronic annotation for over 300,000 taxa in UniProtKB;
- Annotations from external groups are only incorporated into QuickGO if the external sequence identifiers can be mapped to valid (neither secondary or deleted) UniProtKB accession numbers;
- Annotations are only displayed in QuickGO if the GO identifier used has not been made secondary.


Roles Class
Item Index
Methods
- _addRoleToParent static
- _addUserToRole static
- _assureConsistency static
- _backwardMigrate static
- _checkRoleName static
- _checkRoleName static
- _convertToNewField static
- _convertToNewRole static
- _convertToOldField static
- _convertToOldRole static
- _defaultUpdateRole static
- _defaultUpdateUser static
- _forwardMigrate static
- _isNewField static
- _isNewRole static
- _isOldField static
- _isOldRole static
- _onlyAssignedMatcher static
- _partitionMatcher static
- _removeRoleFromParent static
- _removeUserFromRole static
- _resolveUser static
- _roleAndPartitionMatcher static
- _roleMatcher static
- _usersInRoleQuery static
- addRolesToParent static
- addUsersToRoles static
- createRole static
- deleteRole static
- getAllRoles static
- getGroupsForUser static deprecated
- getPartitionsForUser static
- getRolesForUser static
- getUsersInRole static
- removePartition static
- removeRolesFromParent static
- removeUsersFromRoles static
- renamePartition static
- renameRole static
- setUserRoles static
- userIsInRole static
Properties
- GLOBAL_GROUP static deprecated
- subscription static
Methods
_addRoleToParent
-
roleName
-
parentName
Parameters:
-
roleName
StringName of role.
-
parentName
StringName of parent role.
_addUserToRole
-
user
-
roleName
-
options
Add one user to one role.
Parameters:
-
user
String | ObjectUser ID or object with an
_id
field. -
roleName
StringName of the role to add the user to. The role have to exist.
-
options
ObjectOptions:
partition
: name of the partition, ornull
for the global roleifExists
: iftrue
, do not throw an exception if the role does not exist_assigned
: internal option, should not be used publicly because it will break assumptions in te code; publicly, you can only add users to an assigned role should the role be set as assigned (true
),null
is the same asfalse
, only that it does not force the value tofalse
if the role is already assigned
Returns:
Roles set during the call (even those already set).
_assureConsistency
-
user
Makes sure all subroles are correctly set, and no extra subroles are set which should not be.
Used internally after complicated changes, but it can also be used whenever one feels that there might be inconsistencies (eg., after a crash).
We simply re-set to the user their assigned roles again and remove any roles which are marked as not explicitly assigned, and have not been part of what we currently set.
Parameters:
-
user
String | ObjectUser ID or an actual user object.
_backwardMigrate
-
updateUser
-
updateRole
-
usingGroups
Migrates Meteor.users
and Meteor.roles
to the old format.
We assume that we are converting back a failed migration, so values can only be
what were valid values in the old format. So no group names starting with $
and
no subroles.
Parameters:
-
updateUser
FunctionFunction which updates the user object. Default
_defaultUpdateUser
. -
updateRole
FunctionFunction which updates the role object. Default
_defaultUpdateRole
. -
usingGroups
BooleanShould we use groups or not.
_checkRoleName
-
partitionName
Throw an exception if partitionName
is an invalid partition name.
Parameters:
-
partitionName
StringA partition name to match against.
_checkRoleName
-
roleName
Throw an exception if roleName
is an invalid role name.
Parameters:
-
roleName
StringA role name to match against.
_convertToNewField
-
oldRoles
-
convertUnderscoresToDots
Parameters:
-
oldRoles
ArrayMeteor.users
documentroles
field in the old format. -
convertUnderscoresToDots
BooleanShould we convert underscores to dots in group names.
Returns:
Converted roles
to the new format.
_convertToNewRole
-
oldRole
Parameters:
-
oldRole
ObjectMeteor.roles
document.
Returns:
Converted role
to the new format.
_convertToOldField
-
newRoles
-
usingGroups
Parameters:
-
newRoles
ArrayMeteor.users
documentroles
field in the new format. -
usingGroups
BooleanShould we use groups or not.
Returns:
Converted roles
to the old format.
_convertToOldRole
-
newRole
Parameters:
-
newRole
ObjectMeteor.roles
document.
Returns:
Converted role
to the old format.
_defaultUpdateRole
-
oldRole
-
newRole
Parameters:
-
oldRole
ObjectOld
Meteor.roles
document. -
newRole
ObjectNew
Meteor.roles
document.
_defaultUpdateUser
-
user
-
roles
Parameters:
-
user
ObjectMeteor.users
document. -
roles
Array | ObjectValue to which user's
roles
field should be set.
_forwardMigrate
-
updateUser
-
updateRole
-
convertUnderscoresToDots
Migrates Meteor.users
and Meteor.roles
to the new format.
Parameters:
-
updateUser
FunctionFunction which updates the user object. Default
_defaultUpdateUser
. -
updateRole
FunctionFunction which updates the role object. Default
_defaultUpdateRole
. -
convertUnderscoresToDots
BooleanShould we convert underscores to dots in group names.
_isNewField
-
roles
Parameters:
-
roles
ArrayMeteor.users
documentroles
field.
Returns:
Returns true
if the roles
field is in the new format.
If it is ambiguous or it is not, returns false
.
_isNewRole
-
role
Parameters:
-
role
ObjectMeteor.roles
document.
Returns:
Returns true
if the role
is in the new format.
If it is ambiguous or it is not, returns false
.
_isOldField
-
roles
Parameters:
-
roles
ArrayMeteor.users
documentroles
field.
Returns:
Returns true
if the roles
field is in the old format.
If it is ambiguous or it is not, returns false
.
_isOldRole
-
role
Parameters:
-
role
ObjectMeteor.roles
document.
Returns:
Returns true
if the role
is in the old format.
If it is ambiguous or it is not, returns false
.
_onlyAssignedMatcher
()
Function
private
static
Returns:
A matcher function which accepts a role object and returns true
if the role is an assigned role.
_partitionMatcher
-
partition
Parameters:
-
partition
StringA partition to match against.
Returns:
A matcher function which accepts a role object and returns true
if its partition matches partition
.
_removeRoleFromParent
-
roleName
-
parentName
Parameters:
-
roleName
StringName of role.
-
parentName
StringName of parent role.
_removeUserFromRole
-
user
-
roleName
-
options
Remove one user from one role.
WARNING: It leaves user's roles in a possibly inconsistent state. Because we allow the same
role to be a child of multiple roles it might happen that it removes some subroles which
it should not because they are in effect also through some other parent role. You should always
call _assureConsistency
after you are finished with calls to _removeUserFromRole
for a
particular user.
Parameters:
-
user
String | ObjectUser ID or object with an
_id
field. -
roleName
StringName of the role to add the user to. The role have to exist.
-
options
ObjectOptions:
partition
: name of the partition, ornull
for the global role_assigned
: internal option, should not be used publicly because it will break assumptions in te code; publicly, you can only remove users from an assigned role iftrue
, only manually assigned roles are removed, iffalse
, only automatically assigned roles are removed, ifnull
, any role is removed
_resolveUser
-
user
-
force
Resolves the user ID into an actual user object with roles
field,
if it is not already.
Parameters:
-
user
String | ObjectUser ID or an actual user object.
-
force
BooleanLoad a new user object even if it is already one.
Returns:
User object.
_roleAndPartitionMatcher
-
roleName
-
partition
Parameters:
-
roleName
StringA role name to match against.
-
partition
StringA partition to match against.
Returns:
A matcher function which accepts a role object and returns true
if its name matches roleName
, and partition matches partition
.
_roleMatcher
-
roleName
Parameters:
-
roleName
StringA role name to match against.
Returns:
A matcher function which accepts a role object and returns true
if its name matches roleName
.
_usersInRoleQuery
-
roles
-
[options]
-
[queryOptions]
Parameters:
-
roles
Array | StringName of role or an array of roles. If array, users returned will have at least one of the roles specified but need not have all roles. Roles do not have to exist.
-
[options]
Object | String optionalOptions:
partition
: name of the partition to restrict roles to; user's global roles will also be checkedanyPartition
: if set, role can be in any partition (partition
option is ignored)queryOptions
: options which are passed directly through toMeteor.users.find(query, options)
Alternatively, it can be a partition name string.
-
[queryOptions]
Object optionalOptions which are passed directly through to
Meteor.users.find(query, options)
Returns:
Object with query
and queryOptions
.
addRolesToParent
-
rolesNames
-
parentName
Add role parent to roles.
Previous parents are kept (role can have multiple parents). For users which have the parent role set, new subroles are added automatically.
Parameters:
-
rolesNames
Array | StringName(s) of role(s).
-
parentName
StringName of parent role.
addUsersToRoles
-
users
-
roles
-
[options]
Add users to roles.
Adds roles to existing roles for each user.
Parameters:
-
users
Array | StringUser ID(s) or object(s) with an
_id
field. -
roles
Array | StringName(s) of roles to add users to. Roles have to exist.
-
[options]
Object | String optionalOptions:
partition
: name of the partition, ornull
for the global roleifExists
: iftrue
, do not throw an exception if the role does not exist
Alternatively, it can be a partition name string.
Example:
Roles.addUsersToRoles(userId, 'admin')
Roles.addUsersToRoles(userId, ['view-secrets'], 'example.com')
Roles.addUsersToRoles([user1, user2], ['user','editor'])
Roles.addUsersToRoles([user1, user2], ['glorious-admin', 'perform-action'], 'example.org')
createRole
-
roleName
-
[options]
Create a new role.
Parameters:
-
roleName
StringName of role.
-
[options]
Object optionalOptions:
unlessExists
: iftrue
, exception will not be thrown in the role already exists
Returns:
ID of the new role.
deleteRole
-
roleName
Delete an existing role.
If the role is set for any user, it is automatically unset.
Parameters:
-
roleName
StringName of role.
getAllRoles
-
[queryOptions]
Retrieve cursor of all existing roles.
Parameters:
-
[queryOptions]
Object optionalOptions which are passed directly through to
Meteor.roles.find(query, options)
.
Returns:
Cursor of existing roles.
getGroupsForUser
()
deprecated
static
Deprecated. Use getPartitionsForUser
instead.
getPartitionsForUser
-
user
-
[roles]
Retrieve users partitions, if any.
Parameters:
-
user
String | ObjectUser ID or an actual user object.
-
[roles]
Array | String optionalName of roles to restrict partitions to.
Returns:
Array of user's partitions, unsorted.
getRolesForUser
-
user
-
[options]
Retrieve user's roles.
Parameters:
-
user
String | ObjectUser ID or an actual user object.
-
[options]
Object | String optionalOptions:
partition
: name of partition to provide roles for; if not specified, global roles are returnedanyPartition
: if set, role can be in any partition (partition
option is ignored)fullObjects
: return full roles objects (true
) or just names (false
) (defaultfalse
)onlyAssigned
: return only assigned roles and not automatically inferred (like subroles)
Alternatively, it can be a partition name string.
Returns:
Array of user's roles, unsorted.
getUsersInRole
-
roles
-
[options]
-
[queryOptions]
Retrieve all users who are in target role.
Options:
Parameters:
-
roles
Array | StringName of role or an array of roles. If array, users returned will have at least one of the roles specified but need not have all roles. Roles do not have to exist.
-
[options]
Object | String optionalOptions:
partition
: name of the partition to restrict roles to; user's global roles will also be checkedanyPartition
: if set, role can be in any partition (partition
option is ignored)queryOptions
: options which are passed directly through toMeteor.users.find(query, options)
Alternatively, it can be a partition name string.
-
[queryOptions]
Object optionalOptions which are passed directly through to
Meteor.users.find(query, options)
Returns:
Cursor of users in roles.
removePartition
-
name
Remove a partition.
Roles assigned with a given partition are removed.
Parameters:
-
name
StringThe name of a partition.
removeRolesFromParent
-
rolesNames
-
parentName
Remove role parent from roles.
Other parents are kept (role can have multiple parents). For users which have the parent role set, removed subrole is removed automatically.
Parameters:
-
rolesNames
Array | StringName(s) of role(s).
-
parentName
StringName of parent role.
removeUsersFromRoles
-
users
-
roles
-
[options]
Remove users from assigned roles.
Parameters:
-
users
Array | StringUser ID(s) or object(s) with an
_id
field. -
roles
Array | StringName(s) of roles to add users to. Roles have to exist.
-
[options]
Object | String optionalOptions:
partition
: name of the partition, ornull
for the global role
Alternatively, it can be a partition name string.
Example:
Roles.removeUsersFromRoles(userId, 'admin')
Roles.removeUsersFromRoles([userId, user2], ['editor'])
Roles.removeUsersFromRoles(userId, ['user'], 'group1')
renamePartition
-
oldName
-
newName
Rename a partition.
Roles assigned with a given partition are changed to be under the new partition.
Parameters:
-
oldName
StringOld name of a partition.
-
newName
StringNew name of a partition.
renameRole
-
oldName
-
newName
Rename an existing role.
Parameters:
-
oldName
StringOld name of a role.
-
newName
StringNew name of a role.
setUserRoles
-
users
-
roles
-
[options]
Set users' roles.
Replaces all existing roles with a new set of roles.
Parameters:
-
users
Array | StringUser ID(s) or object(s) with an
_id
field. -
roles
Array | StringName(s) of roles to add users to. Roles have to exist.
-
[options]
Object | String optionalOptions:
partition
: name of the partition, ornull
for the global roleifExists
: iftrue
, do not throw an exception if the role does not exist
Alternatively, it can be a partition name string.
Example:
Roles.setUserRoles(userId, 'admin')
Roles.setUserRoles(userId, ['view-secrets'], 'example.com')
Roles.setUserRoles([user1, user2], ['user','editor'])
Roles.setUserRoles([user1, user2], ['glorious-admin', 'perform-action'], 'example.org')
userIsInRole
-
user
-
roles
-
[options]
Check if user has specified roles.
Parameters:
-
user
String | ObjectUser ID or an actual user object.
-
roles
Array | StringName of role or an array of roles to check against. If array, will return
true
if user is in any role. Roles do not have to exist. -
[options]
Object | String optionalOptions:
partition
: name of the partition; if supplied, limits check to just that partition; the user's global roles will always be checked whether partition is specified or notanyPartition
: if set, role can be in any partition (partition
option is ignored)
Alternatively, it can be a partition name string.
Returns:
true
if user is in any of the target roles
Example:
// global roles
Roles.userIsInRole(user, 'admin')
Roles.userIsInRole(user, ['admin','editor'])
Roles.userIsInRole(userId, 'admin')
Roles.userIsInRole(userId, ['admin','editor'])
// partition roles (global roles are still checked)
Roles.userIsInRole(user, 'admin', 'group1')
Roles.userIsInRole(userId, ['admin','editor'], 'group1')
Roles.userIsInRole(userId, ['admin','editor'], {partition: 'group1'})
Properties
GLOBAL_GROUP
Unknown
deprecated
static
Used as a global group (now partition) name. Not used anymore.
subscription
Object
static
Subscription handle for the collection of all existing roles.
Example:
Roles.subscription.ready(); // true if roles have been loaded


Alternative way:
Validating... Please wait!
Authentication successful!
Authentication failed!
This window or tab can be closed now!


Dynamically add element in form.
Select the element and hit Add to add it in form.
Button
Textbox
Radio
CheckBox


1 Introduction¶
This document describes the Intermediate Service Model format from the Domain-driven Microservice Design project. The project aims to facilitate the development of microservice-based software systems [New15] by employing Model-driven Development (MDD) [CFJezequel+17].
In this context, a microservice architecture consists of several different types of models, listed in Table 1.
| Model Type | Description |
| Domain Data Model | A Domain Data Model describes the domain-specific data used by a modeled microservice to specify its input/output data. See also the Intermediate Data Model Format Specification. |
| Mapping Model | A Mapping Model allows for assigning (alternative) technologies to modeled microservices in a Service Model. |
| Service Model | A Service Model contains several microservice models, their interfaces, and operations. The contents of imported Domain Data Models, e.g., data structures, may be used to type operations’ parameters. |
| Operation Model | An Operation Model expresses the deployment of microservices being imported from Service Models. |
| Technology Model | A Technology models encapsulates descriptions of technologies. For instance, certain implementation technologies, e.g., Java or Go, and protocol technologies, e.g., REST or AMQP, may be contained in a Technology Model. Moreover, service or operation aspects [KLM+97] may be defined, which enable to reify technology specifications in Mapping, Operation, or Service Models. |
2 Model Processing¶
The creation of the models happens within a bundle of Eclipse [1] plugins that are based on Xcore [2] and Xtext [3]. These technologies build upon the Ecore metamodeling standard [SBPM11] and the Eclipse Modeling Framework (EMF) [4].
However, to detach the processing of the models from the Eclipse ecosystem and allow microservice teams for creating custom model processors like validators and code generators [CFJezequel+17] that do not need to depend on EMF, the models are exported [5] from Eclipse to the technology-agnostic XML Metadata Interchange (XMI) format [6].
XMI is based on XML and encodes a model instance, whose metamodel [CFJezequel+17] is based on the Meta Object Facility (MOF) [7] which is generally the case for Ecore metamodels and derived model instances.
3 Format Specification¶
This document describes the metamodel and thus the structure of XMI files of Intermediate Service Models, i.e., instances of Domain Data Models that were exported from Eclipse (cf. 1 Introduction and 2 Model Processing). It may be used as reference, when implementing custom model processors for microservice-related Service Models.
Fig. 1 shows the structure of the metamodel of the Intermediate Service Models in an object-oriented way in the form of a UML class diagram. The modeling concepts, their properties, and relationships are depicted as classes, attributes, and associations, respectively.
In the following, the document contains a reference of each modeling concept of the metamodel depicted in Fig. 1.
Hint
Attributes that may contain more than one value but exhibit a *
multiplicity, i.e., they may contain an arbitrary number of values or even
none at all (*
is shorthand UML notation for 0..*
), are never null.
In case no multiplicity is stated after the object type of an attribute, the
attribute may be null. For example, an attribute defined as String name
implicitly has a multiplicity 0..1
and in the zero-case the String may
be null.
However, in case the attribute’s type is a built-in primitive Java type,
e.g. int
, the attribute will never be null but exhibits the type’s
default value in case it did not receive an explicit value.
3.1 Model Root¶
-
class
IntermediateServiceModel
¶ Root of the Intermediate Service Model instance.
-
String[1] sourceModelUri
“file” URI pointing to the source Service Model file from which this model was derived. Not that this might be an empty string, if the
IntermediateMicroservice
instances were derived from different Service Models. Model processors should then rely on the eponymous attribute in theIntermediateMicroservice
concept.
-
IntermediateImport[*] imports
References to
IntermediateDataModel
, Technology Model (cf. Table 1), or Intermediate Service Model instances that were imported into the source Service Model (cf.IntermediateImport
).
-
IntermediateMicroservice[1..*] microservices
Modeled
microservices
in the source Service Model.
-
3.2 Microservices¶
-
class
IntermediateMicroservice
¶ A modeled microservice.
-
String[1] sourceModelUri
“file” URI pointing to the source Service Model file from which this microservice originates.
-
String[1] name
Unique name of the service.
-
String version
Optional version of the service.
-
String[1] qualifiedName
Qualified name of the service. This is the service’s name prefixed by its version, if any. Both name fragments are separated by dots.
-
MicroserviceType[1] type
Type
of the microservice.
-
Visibility[1] visibility
Visibility
of the microservice.
-
boolean effectivelyImplemented
Flag to indicate if the microservice has at least one
IntermediateOperation
that is not marked as being not not implemented (either directly or transitively via its encapsulatingIntermediateInterface
.Hint
Code generators should consider to also generate code for not (yet) implemented microservices and, e.g., return failures to callers.
-
IntermediateTechnology[*] technologies
Technologies
assigned to the microservice.Note
In case, no technologies are specified for a microservice, code generators are free to generate code for the microservice or not.
Hint
There can only be one technology that defines types. Moreover, it is guaranteed that default protocol/data format combinations are unambiguous. For instance, there can only be one default synchronous protocol across all referenced technologies.
-
IntermediateEndpoint[*] endpoints
Endpoints
assigned to the microservice.Hint
If no endpoints were specified for the microservice’s (default) protocol specifications, the addresses attribute of the
IntermediateEndpoint
class will be empty.If no endpoints were specified or could be determined from (default) protocol specifications, or in case the addresses attribute is empty, code generators should produce sensible defaults, e.g., from the microservice’s name.
-
IntermediateProtocolSpecification[0..2] protocols
Protocol specifications
assigned to the microservice. There might be exactly one protocol specification percommunication type
.Note
In case the microservice had no protocols assigned in the source Service Model, the default protocols of the missing
communication types
are taken from the assigned technologies. That is, the attribute is only empty if the microservice had no protocol-defining technology assigned.Hint
If no protocol specifications are assigned to the service, code generators should produce sensible defaults, e.g., from the microservice’s name.
-
MicroserviceReference[*] requiredMicroservices
References
to required microservices.
-
InterfaceReference[*] requiredInterfaces
References
to required interfaces.
-
OperationReference[*] requiredOperations
References
to required operations.
-
IntermediateImportedAspect[*] aspects
Aspects
of the microservice.
-
IntermediateServiceModel serviceModel
Link to the containing
IntermediateServiceModel
instance.
-
-
enum
MicroserviceType
¶ Possible types of an
IntermediateMicroservice
.-
enumerator
FUNCTIONAL
¶ A functional microservice realizes the business functions of the microservice-based software system.
-
enumerator
INFRASTRUCTURE
¶ Infrastructure microservices provide the architecture with capabilities that are not related to business but technical functions. Examples of such functions comprise database lookups or integration of legacy systems.
-
enumerator
UTILITY
¶ Teams may realize utility microservices to implement reusable, business-related helper functions, e.g., for currency conversion.
-
enumerator
-
enum
Visibility
¶ Possible visibilitiy qualifiers of an
IntermediateMicroservice
,IntermediateInterface
, andIntermediateOperation
.-
enumerator
INTERNAL
¶ Internal services/interfaces/operations must only be visible to the services of the same team.
-
enumerator
IN_MODEL
¶ Qualifies an interface/operation to be visible only within the current service model file and its services.
-
enumerator
ARCHITECTURE
¶ Architecture services/interfaces/operations must only be visible to the services of the same architecture, but not to external consumers.
-
enumerator
PUBLIC
¶ Public services/interfaces/operations must be visible to all services of the same architecture and also to external consumers.
-
enumerator
-
class
IntermediateInterface
¶ This class represents an interface of an
IntermediateMicroservice
.-
String[1] name
Name of the interface.
-
String[1] qualifiedName
Qualified name of the interface. This is the interface’s name prefixed by its microservice’s qualified name. Both name fragments are separated by dots.
-
Visibility[1] visibility
Visibility
of the interface.
-
boolean notImplemented
Flag to indicate if the interface was marked as being not implemented.
Hint
Code generators should consider to also generate code for not (yet) implemented interfaces and, e.g., return failures to callers.
-
boolean hasImplementedOperations
Flag to indicate if the interface has at least one
operation
whose notImplemented attribute isfalse
.Hint
Code generators should consider to also generate code for interfaces whose operations are not (yet) implemented and, e.g., return failures to callers.
Note
The notImplemented and hasImplementedOperations are independent of each other. The first is set by the modeler, while the second is derived from the corresponding flags of the interface’s
operations
.
-
IntermediateEndpoint[*] endpoints
Endpoints
assigned to the interface.Hint
If no endpoints were specified for the interface’s (default) protocol specifications, the addresses attribute of the
IntermediateEndpoint
class will be empty.If no endpoints were specified or could be determined from (default) protocol specifications, or in case the addresses attribute is empty, code generators should produce sensible defaults, e.g., from the interface’s name.
-
IntermediateProtocolSpecification[0..2] protocols
Protocol specifications
assigned to the interface. There might be exactly one protocol specification percommunication type
.Hint
If no protocol specifications were explicitly assigned to the interface, it “inherits” the specifications of its microservice.
If the service also exhibited no protocol specifications and thus the interface does neither, code generators should produce sensible defaults, e.g., from the interface’s name.
-
IntermediateOperation[*] operations
Operations
of the interface.
-
IntermediateReferredOperation[*] referredOperations
Referred Operations
of the interface.Note
An interface defines at least one operation or refers to an existing operation, i.e., at least one of the
operations
andreferredOperations
is not empty.
-
IntermediateImportedAspect[*] aspects
Aspects
of the interface.
-
IntermediateMicroservice microservice
Link to the containing
IntermediateMicroservice
instance.
-
-
class
IntermediateOperation
¶ This class represents an operation of an
IntermediateInterface
.-
String[1] name
Name of the operation.
-
String[1] qualifiedName
Qualified name of the operation. This is the operation’s name prefixed by its interface’s qualified name. Both name fragments are separated by dots.
-
Visibility[1] visibility
Visibility
of the operation.
-
boolean notImplemented
Flag to indicate if the operation was marked as being not implemented.
Hint
Code generators should consider to also generate code for not (yet) implemented operation and, e.g., return failures to callers.
-
IntermediateEndpoint[*] endpoints
Endpoints
assigned to the operation.Hint
If no endpoints were specified for the operation’s (default) protocol specifications, the addresses attribute of the
IntermediateEndpoint
class will be empty.If no endpoints were specified or could be determined from (default) protocol specifications, or in case the addresses attribute is empty, code generators should produce sensible defaults, e.g., from the operation’s name.
-
IntermediateProtocolSpecification[0..2] protocols
Protocol specifications
assigned to the operation. There might be exactly one protocol specification percommunication type
.Hint
If no protocol specifications were explicitly assigned to the operation, it “inherits” the specifications of its interface.
If the interface also exhibited no protocol specifications and thus the operation does neither, code generators should produce sensible defaults, e.g., from the operation’s name.
-
IntermediateParameter[*] parameters
Parameters
of the operation.Note
There might be more than one
outgoing parameter
and it is up to code generators on how to proceed with this. For example, all outgoing parameters could be condensed within a uniforming data structure.
-
IntermediateImportedAspect[*] aspects
Aspects
of the operation.
-
IntermediateInterface interface
Link to the containing
IntermediateInterface
instance.
-
-
class
IntermediateParameter
¶ A parameter of an
IntermediateOperation
.-
String[1] name
Name of the parameter.
-
String[1] qualifiedName
Qualified name of the parameter. This is the parameter’s name prefixed by its operation’s qualified name. Both name fragments are separated by dots.
-
ExchangePattern[1] exchangePattern
ExchangePattern
of the parameter.
-
CommunicationType[1] communicationType
CommunicationType
of the parameter.
-
boolean communicatesFault
Flag to indicate that the parameter is used to communicate fault values to the caller.
Note
It is up to the code generator to ensure that the caller is aware that the parameter communicates a fault.
-
boolean optional
Flag to indicate that the parameter is optional.
Note
The combination of the exchangePattern, communicationType, and
optional
attributes determine a parameter’s “timing behavior”:Exchange Pattern Communication Type Opt? Operation Behavior IN
ASYNCHRONOUS
false
Operation may retrieve value at an arbitrary point in time during its execution. IN
ASYNCHRONOUS
true
Operation must retrieve value at some point in time during its execution. IN
SYNCHRONOUS
false
Operation can only be executed if parameter has has a value. IN
SYNCHRONOUS
true
Operation can be executed without the parameter value and it cannot expect to ever retrieve a value for the parameter. OUT
ASYNCHRONOUS
false
Operation may emit value at an arbitrary point in time during its execution. OUT
ASYNCHRONOUS
true
Operation emits value at some point in time during its execution. OUT
SYNCHRONOUS
false
Operation emits value when it finished its execution. OUT
SYNCHRONOUS
true
Operation might emit value after it finished its execution. INOUT
all all Parameter behaves like an incoming and outgoing parameter for the respective communication type and “optional” flag.
-
IntermediateType type
Type of the parameter.
-
OperationReference initializedByOperation
Link to the
IntermediateOperation
that initializes the parameter.Note
It is not safely guaranteed that the operation’s return values and the parameter’s type are compatible. This is due to the Service Modeling Language only yielding a warning if a (possible) type incompatibility is detected. Moreover, the type check is based on the type system of the Domain Data Modeling Language, which may not be applicable to all target languages.
-
IntermediateImportedAspect[*] aspects
Aspects
of the parameter.
-
IntermediateMappedDataField[*] mappedDataFields
Mapped data fields
of the parameter.Hint
If the parameter has mapped data fields, the corresponding types of the fields of the parameter’s structure type need to be replaced with the mapped types.
Furthermore, mapped data fields are the only way to assign
aspects
to the fields of a data structure.
-
IntermediateOperation operation
Link to the containing
IntermediateOperation
instance.
-
-
class
IntermediateMappedDataField
¶ A data field of a
parameter's
structure type, to which a type differing from its original type and optional aspects were assigned.-
String[1] mappedDataFieldName
Name of the mapped data field.
Hint
There is no direct link to the field in the respective
parameter's
structure type. Instead, the DataField instance to which the parameter’s type attribute links needs to be iterated with themappedDataFieldName
in order to retrieve the instance.
-
String[1] qualifiedName
Qualified name of the mapped data field.
Hint
This is the name of the mapped data field prefixed by the parameter’s qualified name. The qualified name of the data field itself needs to be derived from the corresponding DataField (see the documentation of the mappedDataFieldName attribute.
-
IntermediateType[1] mappedType
New (mapped) type of the data field.
Hint
Code generators must use this type as the field’s type.
-
IntermediateImportedAspect[*] aspects
Aspects
of the data field.
-
IntermediateParameter parameter
Link to the containing
IntermediateParameter
instance.
-
-
class
IntermediateReferredOperation
¶ Referred operation of an
IntermediateInterface
. In contrast toIntermediateOperations
, referred operations do not implement their own business logic. Instead, they act as façades to implementedIntermediateOperations
within the same microservice. That is, requests/responses to the original operation/the caller are just forwarded by referred operations.Referred operations exhibit the same
parameters
as the original operations. However, they may have differentendpoints
,protocols
, andaspects
.-
String[1] nameInReferringInterface
The name of the referred operation within the referring interface. Currently, the name is identical to the name of the original operation. However, code generators should not rely on that and instead use the content of this attribute to generate the referring operation.
-
String[1] qualifiedNameInReferringInterface
The qualified name of the referred operation within the referring interface. It consists of the name of the referring operation prefixed by the qualified name of its interface. Both name fragments are separated by dots.
-
IntermediateOperation[1] operation
Link to the original
operation
.Note
The type of the attribute is
IntermediateOperation
instead ofOperationReference
, because the original operation must be in the same microservice as the referring operation and can thus not originate from an imported Service Model.
-
IntermediateEndpoint[*] endpoints
Endpoints
assigned to the referred operation.Hint
If no endpoints were specified for the referred operation’s (default) protocol specifications, the addresses attribute of the
IntermediateEndpoint
class will be empty.If no endpoints were specified or could be determined from (default) protocol specifications, or in case the addresses attribute is empty, code generators should produce sensible defaults, e.g., from the referred operation’s name.
-
IntermediateProtocolSpecification[0..2] protocols
Protocol specifications
assigned to the referred operation. There might be exactly one protocol specification percommunication type
.Hint
If no protocol specifications were explicitly assigned to the referred operation, it “inherits” the specifications of its interface.
If the interface also exhibited no protocol specifications and thus the referred operation does neither, code generators should produce sensible defaults, e.g., from the referred operation’s name.
-
IntermediateImportedAspect[*] aspects
Aspects
of the referred operation.
-
IntermediateInterface referringInterface
Link to the containing
IntermediateInterface
instance.
-
3.3 Type System¶
Built-in as well as custom types are mostly covered within the Intermediate Data Model Format Specification.
However, Service Models may import technology-specific types from Technology Models that are not known to Domain Data Models (cf. Table 1). Thus, intermediate concepts for technology-specific types are needed to allow intermediate service models to refer to them.
-
class
IntermediateImportedTechnologySpecificType
extends IntermediateType¶ Representation of a type defined in a Technology Model.
-
String[1] qualifiedName
Qualified name of the type. It consists of the name of the defining technology, the “_types” prefix as internal qualifier within the Technology Model, and the name of the type.
-
IntermediateImport[1] import
The
<data_model:IntermediateImport>
instance that points to the Technology Model from which the type was imported.
-
3.4 Communication¶
This subsection describes concepts related to specifying the communication between microservices.
-
enum
CommunicationType
¶ The values of this enum represent certain communication types.
-
enumerator
ASYNCHRONOUS
¶ Asynchronous communication.
-
enumerator
SYNCHRONOUS
¶ Synchronous communication.
-
enumerator
-
enum
ExchangePattern
¶ The values of this enum represent certain exchange patterns.
-
enumerator
IN
¶ Incoming information exchange.
-
enumerator
OUT
¶ Outgoing information exchange.
-
enumerator
INOUT
¶ Incoming and outgoing information exchange.
-
enumerator
-
class
IntermediateEndpoint
¶ A protocol- and format-specific endpoint, e.g., “http://www.example.org” for HTTP and a format like JSON.
-
CommunicationType[1] communicationType
The
communication type
assigned to the endpoint. It corresponds to the communication type of the endpoint’s protocol.
-
String[1] protocol
Name of the endpoint’s protocol.
-
String[1] dataFormat
Name of the endpoint’s data format.
-
String[*] addresses
List of protocol- and format-specific addresses that were assigned to the endpoint, e.g., “http://www.example.org”.
Hint
If the list of addresses is empty, code generators should produce sensible defaults, as described
here
,here
,here
, andhere
.Hint
In case the modeler did not specify a data format for an endpoint, this is shorthand notation for “endpoint’s addresses apply to all formats of the protocol”. That is,
IntermediateEndpoint
instances with the source addresses are generated for all formats of the protocol. However, code generators must only create endpoints for the protocols and data formats that were assigned to the respective microservice, interface, operation, or referred operation.Hint
The addresses are not checked for validity by the Service Modeling Language. This step has to be done by model processors.
-
IntermediateTechnology[1] technology
Link to the Technology Model (cf. Table 1) which defines the protocol and data format.
-
IntermediateMicroservice microservice
IntermediateMicroservice
to which the endpoint was assigned.
-
IntermediateInterface interface
IntermediateInterface
to which the endpoint was assigned.
-
IntermediateOperation operation
IntermediateOperation
to which the endpoint was assigned.
-
IntermediateReferredOperation referredOperation
IntermediateReferredOperation
to which the endpoint was assigned.
-
-
class
IntermediateProtocolSpecification
¶ A protocol and data format specification.
-
CommunicationType[1] communicationType
CommunicationType
of the specification.
-
String[1] protocol
Name of the specification’s protocol.
-
String[1] dataFormat
Name of the specification’s data format.
-
3.5 References¶
This subsection describes concepts that are used to model references to possibly
imported microservices
,
interfaces
, or
operation
.
-
class
MicroserviceReference
¶ Reference to a possibly imported
microservice
.-
String[1] name
Name of the referenced microservice.
-
String version
Version of the referenced microservice.
-
String[1] qualifiedName
Qualified name of the referenced microservice.
-
boolean imported
Flag to indicate if the referenced microservice was imported from another Service Model.
-
IntermediateImport import
Link to the
IntermediateImport
which points to the imported Service Model. If the imported flag istrue
this attribute contains a value. Otherwise it isnull
.
-
IntermediateMicroservice localMicroservice
Link to the referenced
IntermediateMicroservice
in the same Service Model as theMicroserviceReference
. If the imported flag istrue
this attribute isnull
. Otherwise it contains a value.Hint
If the attribute is
null
, i.e., the referenced microservice is defined in another Service Model, model processors need to retrieve details of the referenced service from the imported Service Model themselves. That is, they need to parse the imported model and find the referenced microservice leveraging the qualified name of thisMicroserviceReference
instance.
-
IntermediateMicroservice requiringMicroservice
IntermediateMicroservice
that requires this microservice.
-
-
class
InterfaceReference
¶ Reference to a possibly imported
interface
.-
String[1] name
Name of the referenced interface.
-
String[1] qualifiedName
Qualified name of the referenced interface.
-
boolean imported
Flag to indicate if the referenced interface was imported from another Service Model.
-
IntermediateImport import
Link to the
IntermediateImport
which points to the imported Service Model. If the imported flag istrue
this attribute contains a value. Otherwise it isnull
.
-
IntermediateInterface localInterface
Link to the referenced
IntermediateInterface
in the same Service Model as theInterfaceReference
. If the imported flag istrue
this attribute isnull
. Otherwise it contains a value.Hint
If the attribute is
null
, i.e., the referenced interface is defined in another Service Model, model processors need to retrieve details of the referenced interface from the imported Service Model themselves. That is, they need to parse the imported model and find the referenced interface leveraging the qualified name of thisInterfaceReference
instance.
-
IntermediateMicroservice requiringMicroservice
IntermediateMicroservice
that requires this interface.
-
-
class
OperationReference
¶ Reference to a possibly imported
operation
.-
String[1] name
Name of the referenced operation.
-
String[1] qualifiedName
Qualified name of the referenced operation.
-
boolean imported
Flag to indicate if the referenced operation was imported from another Service Model.
-
IntermediateImport import
Link to the
IntermediateImport
which points to the imported Service Model. If the imported flag istrue
this attribute contains a value. Otherwise it isnull
.
-
IntermediateOperation localOperation
Link to the referenced
IntermediateOperation
in the same Service Model as theOperationReference
. If the imported flag istrue
this attribute isnull
. Otherwise it contains a value.Hint
If the attribute is
null
, i.e., the referenced operation is defined in another Service Model, model processors need to retrieve details of the referenced operation from the imported Service Model themselves. That is, they need to parse the imported model and find the referenced operation leveraging the qualified name of thisOperationReference
instance.
-
IntermediateMicroservice requiringMicroservice
IntermediateMicroservice
that requires this operation.
-
IntermediateParameter initializedParameter
IntermediateParameter
that is initialized by this operation.
-
3.6 Technologies¶
In the following, concepts for assigning technologies to microservices and other modeling concepts are described.
-
class
IntermediateTechnology
¶ Represents a Technology Model, which was assigned to an
IntermediateMicroservice
.-
String[1] name
Name of the source technology, e.g., “go” or “python” [10].
-
IntermediateImport[1] import
IntermediateImport
that points to the imported Technology Model.
-
IntermediateMicroservice microservice
Microservice
to which the technology was assigned.
-
-
class
IntermediateImportedAspect
¶ Aspects enable to semantically reify modeled
microservices
,interfaces
,operations
,parameters
, anddata fields
in the sense of Aspect-oriented Programming (AOP) [KLM+97].Aspects are defined within Technology Models. An aspect definition might be accompanied with properties and constrained to the concepts to which they apply. With this mechanism it is possible to create, e.g., aspects for HTTP status codes being returned by a service operation’s execution.
-
String[1] name
Name of the aspect.
-
IntermediateImport[1] import
Import
of the Technology Model which defines the aspect.
-
IntermediateAspectProperty[*] properties
All
properties
of the aspect as defined in its Technology Model.
-
IntermediateAspectPropertyValue[*] propertyValues
Values
for aspect properties specified in the source Service Model.
-
IntermediateMicroservice microservice
IntermediateMicroservice
to which the aspect was assigned.
-
IntermediateInterface interface
IntermediateInterface
to which the aspect was assigned.
-
IntermediateOperation operation
IntermediateOperation
to which the aspect was assigned.
-
IntermediateReferredOperation referredOperation
IntermediateReferredOperation
to which the aspect was assigned.
-
IntermediateParameter parameter
IntermediateParameter
to which the aspect was assigned.
-
IntermediateMappedDataField mappedDataField
IntermediateMappedDataField
to which the aspect was assigned.
-
-
class
IntermediateAspectProperty
¶ Specification of an
aspect's
property.-
String[1] name
Name of the property.
-
String[1] type
Name of the primitive type of the property. This can be one of the values:
- “boolean”
- “byte”
- “char”
- “date”
- “double”
- “float”
- “int”
- “long”
- “short”
- “string”
-
String defaultValue
If the property has a default value, it is encoded in this String attribute. However, it is guaranteed that the default value fits the type of the property by the Technology Modeling Language validator.
-
boolean mandatory
Flag to indicate if the property needs to receive a value. It is guaranteed by the Service Modeling Language that all mandatory values of a property receive a value when the respective
IntermediateImportedAspect
is used.
-
IntermediateImportedAspect aspect
The
aspect
to which the property belongs.
-
-
class
IntermediateAspectPropertyValue
¶ Value of an :py:class`IntermediateAspectProperty`.
-
String[1] value
The value.
-
IntermediateAspectProperty[1] property
The
property
for which the value was set.
-
IntermediateImportedAspect aspect
The
aspect
to which the property value belongs.
-
Footnotes
| [1] | https://www.eclipse.org |
| [2] | https://wiki.eclipse.org/Xcore |
| [3] | https://www.eclipse.org/Xtext |
| [4] | https://www.eclipse.org/modeling/emf |
| [5] | Actually, the models are transformed into the XMI format. Please refer to [CFJezequel+17] to learn more about model transformation. |
| [6] | https://www.omg.org/spec/XMI |
| [7] | https://www.omg.org/mof |
| [8] | https://docs.oracle.com/javase/specs/jls/se11/html/jls-5.html#jls-5.1.2 |
| [9] | https://www.golang.org |
| [10] | https://www.python.org |
4 Indices and Tables¶
5 References¶
| [CFJezequel+17] | (1, 2, 3, 4) Benoit Combemale, Robert B. France, Jean-Marc Jézéquel, Bernhard Rumpe, Jim Steel, and Didier Vojtisek. Engineering Modeling Languages. CRC Press, 2017. |
| [KLM+97] | (1, 2) Gregor Kiczales, John Lamping, Anurag Mendhekar, Chris Maeda, Cristina Lopes, Jean-Marc Loingtier, and John Irwin. Aspect-oriented programming. In Object-Oriented Programming, 220–242. Springer, 1997. |
| [New15] | Sam Newman. Building Microservices. O’Reilly Media, 2015. |
| [SBPM11] | Dave Steinberg, Frank Budinsky, Marcelo Paternostro, and Ed Merks. EMF–Eclipse Modeling Framework. Pearson Education, 2 edition, 2011. |


This document provides an overview on MCMC credible interval estimation. It is intended to give a broad overview on different approaches and underlying principles. It is based on Eberly & Casella (2003): Estimating Bayesian credible intervals and Chen (2000): Monte Carlo Methods in Bayesian Computation, Chapter 7.
In Bayesian inference, an analogon of frequentist confidence sets is given by credible sets. While the data is the realization of the random process in the former, the latter considers the underlying parameter to be random, and the data fixed.
Formally, let \(X\sim f(\;\cdot\;|\theta)\) a sample from a distribution dependent on \(\theta\in\Theta\), and \(\theta\sim\pi\). For any \(\alpha\in(0,1)\), a level \(1-\alpha\) credible set for \(\theta\) is any \(C(x)\in\mathcal{B}(\Theta)\) with \[\begin{equation*} P_{\theta|x}\{\theta\in C(x)\} = \int_{C(x)}\pi(\theta|x)\;d\theta \geq 1- \alpha. \end{equation*}\] A level \(1-\alpha\) highest posteriori density (HPD) credible set \(C(x)\) for \(\theta\) is defined by \[\begin{equation*} C(x) = \{ \theta\;|\; \pi(\theta|x) \geq c_\alpha\}, \end{equation*}\] where \(c_\alpha\) is the largest constant such that \(P_{\theta|x}\{\theta\in C(x)\} \geq 1-\alpha\).
These definitions are intuitively understood: While a posterior exhibits many credible sets, most of them are not useful since they include areas in which the posterior has little mass. Instead, it is a desirable property to first include those areas in which most mass is present until the desired level is attained. This is the essence of the HPD credible set.
Consider the Beta-Binomial hierarchy given by \[\begin{align*} X|p &\sim B(n,p),\\ p &\sim Beta(a,b). \end{align*}\] It is easy to see that \(p | x \sim Beta( a + x, b + n - x)\).
For some selected parameters, a naive 95%-credible interval can be readily calculated:
# set prior and likelihood parameters
alpha <- 0.05
n <- 5
a <- b <- 0.5
x <- 2
# set posterior parameters
a.star <- a + x
b.star <- b + n - x
# the naive credible interval is given by
CI1 <- qbeta(c(alpha/2, 1 - alpha/2), a.star, b.star)
In order to compute the HPD credible interval, an optimization problem which is equivalent to the definition above has to be solved.
# the HPD credible interval is the minimizer or
Q <- function(arg, a0 = alpha, a = a.star, b = b.star) {
abs(dbeta(arg[2], a, b) - dbeta(arg[1], a, b)) +
abs(pbeta(arg[2], a, b) - pbeta(arg[1], a, b) - (1 - a0))
}
CI2 = optim(c(0.2,0.7), Q,
lower = c(0,0),
upper = c(1,1),
method = "L-BFGS-B")$par
In this particular instance, we may somewhat trust the integrate
-function and compare both intervals.
# both sets yield the same coverage
integrate("dbeta", CI1[1], CI1[2], shape1 = a.star, shape2 = b.star)
## 0.95 with absolute error < 7.1e-11
integrate("dbeta", CI2[1], CI2[2], shape1 = a.star, shape2 = b.star)
## 0.9500096 with absolute error < 3.8e-10
# but not the same length
diff(CI1)
## [1] 0.696193
diff(CI2)
## [1] 0.6914237
While their coverage probabilities coincide, their positions - and thus their lengths - do not. This is visualized by plotting the sets.
# plot
require("ggplot2")
require("latex2exp")
p <- seq(0, 1, length = 1000)
f <- function(p) dbeta(p, a.star, b.star) #posterior
ggplot() + theme_classic() +
labs(y = unname(TeX("$\\pi(p|x)$")), x = "p") +
geom_line(aes(x = p, y = f(p))) +
stat_function(fun = f,
geom = "area",
xlim = CI1, fill = "#f8766d", alpha = 0.2) +
stat_function(fun = f,
geom = "area",
xlim = CI2, fill = "#00bfc4", alpha = 0.2) +
geom_hline(yintercept = f(CI2[1]), linetype = "dashed")
The naive credible set (red) is narrowly larger than the HPD (blue) set. Since it misses some mass-rich area on the left of the mode, it has to make up for it by including more areas at the right tail of the target density. The more skewed the posterior to the right, the more pronounced this effect will be. On the contrary, since the posterior \(f\) is continuous, the HPD set \([l,u]\), \(l,u>0\) has the property that \(f(l) = f(u)\). This is indicated by the dashed line.
Because in Bayesian computation, usually no analytic representation of the posterior is available. The HPD credible interval can be estimated without the explicit knowledge of the posterior by using the MCMC sample.
An (artificial) example is given as follows. First, lets generate a sample that coincides with the values of the Beta-Binomial hierarchy above.
# generate data
N <- 200
n <- 5
p <- 0.396
set.seed(123)
x <- rbinom(N, n, p) #sample
We generate our Markov chain by sampling from the posterior directly. In practice, the MCMC sample would be generated by full conditionals.
# generate MCMC sample
M <- 1e5 #length of Markov chain
theta <- rbeta(M, a.star, b.star) #MCMC sample
The Chen-Shao algorithm chooses the shortest estimated credible sets amongst all order statistics based credible sets that meet nominal coverage.
# chen shao
theta <- sort(theta) # order the MCMC sample
M.cand <- round(M*(1 - alpha)) # number of candidate HPDs
C <- matrix(NA, nrow = (M - M.cand), ncol = 2)
for (i in 1:(M - M.cand)) C[i,1:2] = c(theta[i], theta[i + M.cand])
diffC <- apply(C, 1, "diff") #lengths of candidate intervals
idx <- which.min(diffC)
CI3 <- C[idx,] # Chen-Shao HPD
Now, we compare the obtained Chen-Shao HPD credible set with the analytical credible sets computed earlier.
require("tidyverse")
tibble(type = c("Simple", "Optim", "Chen-Shao"),
lower = c(CI1[1], CI2[1], CI3[1]),
upper = c(CI1[2], CI2[2], CI3[2]),
diff = c(diff(CI1), diff(CI2), diff(CI3)))
## # A tibble: 3 x 4
## type lower upper diff
## <chr> <dbl> <dbl> <dbl>
## 1 Simple 0.0944 0.791 0.696
## 2 Optim 0.0768 0.768 0.691
## 3 Chen-Shao 0.0744 0.766 0.692
Although the Chen-Shao set depends only the MCMC sample, the estimated credible interval coincides with the analytical HPD credible set. It is important to emphasize that it is usually not possible to obtain the latter via solving the optimization problem above, since the analytic representation of the posterior is often not available. In such cases, the Chen-Shao algorithm offers a simple way to obtaining HPD credible intervals.
So why bothering with simple (non-HPD) credible sets in the first place? Because, if the underlying posterior is not too skewed, the ordinary credible interval is close to the HPD set. Moreover, more robust estimation techniques are available for simple credible sets of the form \[\begin{equation*} [\theta_{\alpha/2}, \theta_{1-\alpha/2}], \end{equation*}\] with \(\Pi(\theta_{\alpha/2}|x) = \alpha/2\) and \(\Pi(\theta_{1-\alpha/2}|x) = 1-\alpha/2\). A collection of such is given e.g. in Eberly & Casella. Implemented versions thereof are given in the example XYZ.


You cannot get enough of all the research and had such a blast writing your bachelor or master thesis? You want to join the scientific side of things (although they don’t have many cookies), and pursue a PhD? You also want to enjoy cricket, tea and Kate Middleton?
Step 1: Plan ahead
Having finished my studies in Psychology at a German university, it was quite a surprise for me to realize how much time it takes to apply for a PhD in the UK. In the beautiful home country of mine, most PhD students work for a professor on a certain, mostly predefined project, and get roughly a 50 to 70% payment for a being a “research assistant” where they work for the department or lab. The amount of time they spend working on their PhD and for their professor varies. Some also have a scholarship, for which you can apply all year round.
This is not the case in the UK.
Sometimes, rarely, it is possible to apply for a studentship attached to a certain project. These sorts of opportunities open up occasionally throughout the academic year, and hopefully you will stumble across one of them (for instances here or http://www.findaphd.com/ or on Twitter, following scholars whose work interests you!). But in most cases you, and your supervisor, will need to apply for funding. And this is why everything is so highly complicated and tedious.
Step 2: Find a supervisor
First, you need to find someone who works in your field of interest and is willing to take on PhD students. Sounds easy – and certainly can be. I found that my dream supervisor is also the guy whose papers I enjoyed boring all my friends with. But it would be handy if you, on top of that, also get along with the guy (or the lady). So get in touch and talk to them about what you plan to work on and how. At this stage you don’t have to have specific experiment in mind – but it helps to distinguish you from all the other students applying with that supervisor.
Of course, there are pre-defined projects that already have funding and where the supervisor already has a pretty good idea on what to do and how.
Technically, you can apply to the University first, but a) you might want to know who you go through all that trouble for and b) when someone has an application from a random guy on their desk, they might not take too much time with it.
Step 3: Applying to the University - The Process
When the first contact is established, you will need to apply with the university. Of course, if the supervisor wants to work with you, this is a good start, but the faculty will at least in theory want to give their two cents, which also implies that you might have to be interviewed by more than one faculty member.
For most universities, the deadline for a PhD program in psychology is in May/June (but of course you need to check) in the same year that you want to start your PhD. But be careful! Think of your funding. To apply for funding you might need a confirmed offer and the deadlines for this might be way earlier. Take Cambridge – the deadline for starting your PhD in October is not until 1 May. But here comes the trick – depending on which funding you are applying for, you will have to do so in early December or January. Yes, almost one year before you even start. It might be also the case that the funding institution needs your confirmation that you have been offered a place, so you need to get cracking.
1) What you'll need – a checklist
- References. Most of the time at least two. The higher the academic status of the referee, the better. Obviously. Your referees will probably have to submit the reference letter within a certain time period and might directly be contacted by the University you are applying to.
- A TOEFL / IELTS or some other proof that you are capable of communicating in English. It might be possible that you will only need to show proof of proficiency in English after you have been made an offer. Jipi, you have more time for the other stuff!
- A PhD Proposal. That is one of the hardest parts, so don’t underestimate it. You might get help from your potential supervisor with that, and you certainly will have to check with him or her, a process that takes time. A detailed proposal might not be needed for the university application, but for funding it will be. Therefore, by now you should have a good idea on how you will change the way we think about psychology – which kind of methods and procedures you would like to use and also whether your potential supervisor can actually provide you with them.
- A Statement of Purpose. Why do you apply to this university, with this supervisor and why should they consider you? A nice guide on how to write a statement of purpose can be found here www.nextscientist.com/statement-of-purpose-for-graduate-school/
- A (preferably official) translation of your transcripts, if applicable. Translation will probably cost a fee and takes a few days.
2) Don't get discouraged. You are almost there
3) Applying for funding
There are several opportunities to get money – for instance the Economic Social Research Council (ESRC), funding specifically for your university, or from the college you apply for, or other foundations such as the Wellcome Trust[1]. For clarity reasons I will mostly refer to the ESRC.
In the UK, you will have to pay a fee for pursuing a PhD. Also, you need money for your actual research, your food and other mundane things[2]. This will be covered by your fund. If you are lucky, the application for funding is “included” in your application to the university (for instance, if you apply before a certain deadline you will be automatically considered for funding). If not (or additionally, see below), you will need to apply separately. This also means you have to send all your documents again and your references might be asked once more to provide their evaluation of your academic abilities and potential. You might also have to write another statement of purpose as to why you are applying for this scholarship or why the project you are intending to undertake is feasible, and why the lab of your supervisor and this university is the perfect place for it.
4) Apply for more funding.
You should not put all your eggs in one basket. You can check out what opportunities are available for students a) from your country or b) with your subject / topic. There are many small funds available, and it really depends on the University you are applying for. It is also possible to attain funding from your home country, for instance a scholarship that pays your maintenance. And if all your efforts are not successful, it is also possible to pay for your PhD yourself – study part time while working or getting a loan.
5) Wait.
Good luck!
Helpful links
http://www.findaphd.com/funding/guides/phd-funding-guide.aspx
http://www.nextscientist.com/statement-of-purpose-for-graduate-school/
http://www.findaphd.com/advice/finding/phd-faqs.aspx
http://www.jobs.ac.uk/careers-advice/studentships/1570/5-steps-to-getting-a-phd/
[1]http://www.jobs.ac.uk/careers-advice/studentships/1534/phd-funding-a-checklist-of-possible-funding-sources/
[2] If you are not a UK resident, the ESRC will not cover your living expenses (it is a so called “fees only award”) – you need other ways of saving yourself from sleeping under a bridge.


{% extends 'email_base.html' %} {% block body %} {% load i18n %}
{% blocktrans %}Dear {{facilitator_name}},{% endblocktrans %}
{% if next_study_group %} {% blocktrans %} In {{ weeks }} weeks, a learning circle will start in {{ city }} studying "{{ course_title }}". As a group, can you please write them a short note welcoming them to the P2PU Community? {% endblocktrans %} {% else %} {% trans "Can you please write a short note welcoming the next learning circle to the P2PU community?" %} {% endif %} {% trans "Just reply to this email, and we’ll make sure they get it. Feel free to attach a photo of your learning circle :)" %}
{% trans "Learning circles are happening around the world, and your experience is valuable to others who are just beginning their journey." %}
{% trans "Here are a few prompts:" %}
{% trans "Cheers" %},
{% trans "The P2PU Team" %}
{% endblock %}


Welcome to Millennium Gymnastics Booster Club Popcorn Sales
Buyer's Name:
Street Address:
City, State, Zip:
Product Name
Price
Quantity
Unpopped Popcorn (1 lb.)
$3.00
Caramel Popcorn (2 lb. canister)
$3.50
Caramel Nut Popcorn (2 lb. canister)
$4.50
Toffey Nut Popcorn (2 lb. canister)
$5.00
Payment Method:
Visa
Discover
MasterCard
Check


Figure
9.9.1
.
Occupy Wall Street Protesters protesting student loans. Photo by Bob Jagendorf entitled ``Occupy Wall Street - Student Loans'' under
CC BY-NC 2.0
2
.
in-context


The purpose of the container is to manage the components under its care. That typically involves various creation and destruction stages, or what we call the LifeCycle. Part of the creation stages is the different needs the component has, such as it may need a Logger, so the container has to provide it, it may need some type of configuration and the container has to provide, and so on.
The container is also responsible to fulfill other concerns of the management contract, such as LifeStyle, Security, Dependencies, JAR handling and so on. Basically, the container should take care of everything required to get the component operational.
Avalon Framework and associated material specifies, among other things a contract between the component and the container. That means that if the component fulfills its obligations, the container will provide the component with its needs. Example; If the component declares that it implements LogEnabled, the container will provide the component with an initialized and ready-to-use Logger instance.
If the component declares that it implements the LogEnabled inteface, a ready-to-use, Logger instance will be provided through the method;
public void enableLogging( Logger logger ) { }
The Merlin container supports both LogKit and Log4J logging subsystem, and please look at the Avalon Logging subsystem for details.
There are many ways on how to resolve dependencies between components. Avalon uses a method called Lookup Injection, which means that the container will hand over a ServiceManager to the component, if the component implements the Serviceable interface.
public void service( ServiceManager manager ) { }
The ServiceManager will only provide the component with components that satisfy the dependencies declaration in the component's Type descriptor (.xinfo). If it attempts to lookup anything outside the declared dependencies, the container is expected to throw a ServiceException.
And Merlin is so clever that the component will never be deployed if the dependencies could not be satisfied, so if the component follows its obligations, i.e. only looking up declared dependencies, the container will supply the solution, always!
Many components are generic and can be tweaked into doing slightly different things, according to some settings. We call those settings Configuration, and is supply to the component if the component implements the Configurable interface.
public void configure( Configuration conf ) { }
The above construct allow for very complex Configurations, using XML nested elements, but not any XML, it must follow certain rules. See Configuration API docs for details.
Contextualization is about establishing a containment context. That means that there must be certain container features available to the component for it to function properly. This is slightly different from normal service dependencies, as context entries can be of any type, such as java.io.File for the standard "urn:avalon:home" context entry.
public void contextualize( Context context ) { }
It is also possible to create custom context entries. Read more about it.
We have all been in JAR Hell, which means that it is hard to keep track of which Jars are required, and more importantly which version of each. And that is only for your build system. When you start deploying the applications, this grows into a nightmare. This has been highlighted for quite some time within The Apache Software Foundation, and Maven has addressed it for build systems, and recently (March 2004) a new more generic project called Depot started in the incubator, which will address this problem.
Avalon has in the meantime created the Avalon Repository which allows the applications to be distributed without any Jars, and the right versions of the Jars will be picked up at one or many central repositories. This system is compatible with the Maven repositories, so we have instantly access to hundreds of projects at repositories, such as ibiblio.org.
The most straight forward deployment case is the stand-alone server, that is started from the command-line. No programming is required, and there are heaps of command-line arguments available. Read about the details here.
Merlin even supports that it is bootstrapped, with a tiny JAR, which will pick up and start Merlin (or any other compliant artifact) from a central repository. One can on the command-line specify which version of Merlin one wishes to start, and provide the application block reference, effectively selecting which application to start.
If a central repository is not desirable, Merlin's binary distribution contains all that is required to run, except the application block itself, which may either be local or online.
There is actually no difference between a stand-alone server and a stand-alone GUI application. In fact, with good Component Oriented practices, one can completely separate the business logic in the application, and provide a GUI interface or a Web interface simply by changing the block definition file.
Merlin is capable of starting as a Windows NT/XP Service. You can read about how on this page.
If you have an existing application that you want to complement with Avalon component management, without refactoring the whole application into components, you will need to create Merlin embedded inside your application. About 10-15 lines of code is currently required, where the InitialContext is established, the Directives are setup and a Kernel is created. It looks more complicated than it is, but it is extremely powerful, and allows the same features as the stand-alone server, in fact the small bootstrapper in the stand-alone case, does exactly the same thing.
If the Servlet engine allows, it is possible to embedd Merlin inside a Servlet. The code required to do it, can be seen here. It is expected that this Servlet will undergo some enhancement prior to be officially released in the Merlin distribution. This is to ensure maximum usability for our users.
Embedding in Application Servers can prove to be a lot more complicated than in generic Application, since the App Servers very often imposes restrictions on the parts that it hosts, such as security restrictions, classloading restrictions and similar. It is basically a case of trying to get a operating system running inside another operating system, both competing for the same resources.
One of the objectives of the Avalon community is to work out what is possible, and how, and what can not be done, in this area.


Apr 12, 2017 12:00 PM - Apr 12, 2017 1:30 PM
UX research is an integral part of any development process. In this presentation, you'll learn how to synthesize and translate research notes into deliverables the whole team can get behind.
Topic: Making UX Research Drive Agile Collaboration
Leader: Jessica Zhang
Description: More and more product teams are turning UX activities such as user interviews into team events for better team alignment around the user. For instance, after conducting user interviews as a team, how do you turn thousands of words (and snippets of your memory) into an accurate picture of what the user needs without needing years of formal training? Moreover, how do you strike a balance between doing UX research collaboratively and getting it done quickly?
UX Research has a reputation for secluding itself from the team and slowing things down, but it doesn’t have to. In fact, when done right, research can drive agile co-creation on your team. Of course, working in this way requires a high degree of open communication and collaboration. In this presentation, you will hear my team’s story of using UX research to make agile collaboration effective and productive.
Location: Fifth Floor
Tech: No computers please
RSVP by Friday, April 7th
Light lunch will be provided.
Producers: Joann Agnitti


Assignment
< SAME as in the assignment 4 handout >
Setting Up
Get data from BB into the appropriate folder: The links are provided only as a reference for documentation of the data. All data are provided on BB in the Assignments folder as a zipped file. Look at the data using proc contents/proc print (use the label option) to understand what variables you have. Do NOT open these tables using point & click. If you need more information, look at information on the webpages.
- Texas Discharge data (www.dshs.state.tx.us/thcic/hospitals/Inpatientpudf.shtm)
- Texas Physician Supply data (http://www.dshs.state.tx.us/chs/hprc/PHYS-lnk.shtm)
- Texas Death data (http://soupfin.tdh.state.tx.us/deathdoc.htm)
- Texas Health Regions Look-up Table (http://www.dshs.state.tx.us/chs/brfss/pages/counties.shtm)
New Text
Guideline for assignment grading (Total of 12)
- The initial unit of analysis for this assignment is “county year”. Thus, you will have to have 1 observation per “county year” in each table unless it is a county look up table. The county look up table has 1 observation per county which should link to all years.
- Which tables need to be changed to have 1 row per “county year”? How? Change these tables to the right unit of analysis. Following are things to consider.
- If you have multiple tables of the same kind of data (one table per year), append them as appropriate. Hint: rename variables as needed. Convert variable type to be the same if needed. Add year variable as needed during the appending process using in option.
- If the table is wide (years are going across columns), than convert to long (so that the years are going down rows)
- If you have multiple rows per “county year”, than aggregate the rows into one row using the correct statistics (sum, mean etc)
- Now link all the tables together to have all the variables in one table (counts of discharge, physician supply, number of deaths, border county, etc).
- What are the variables you must line up (matching vars), to get the tables to link up properly? (Hint: 1-to-1 matching and 1-to-N matching have to be done separately)
- There are issues with the data that make some rows not line up properly. Identify which rows these are and figure out how to get them to line up. Whenever you are merging tables this way, make sure to check which rows are lining up in all tables, and which rows are not using the in option. For the rows not lining up, check if these are expected to not line up (really missing in some tables, or not lining up due to a problems in the data). Hint: check the county names in the tables (look up compress & lowcase functions). There are 254 counties in TX. The county lookup tables has the correct names. One way to check county names in each table is to link up with the lookup table and look at rows that are not linking up properly since all should link up to one of the 254 rows in the lookup table. Once you have identify what needs to be fixed, you can use the if conditional statement to reassign to correct values.
- [Read Question 7 below first] Now we will change the unit of analysis to “PHR (Public Health Region) Year”. Aggregate “county year” data to have 1 row per “PHR Year”. Think about what is the proper statistics (sum, mean, median, etc) for the variables you need (i.e. you don’t need to have all the vars, just what you need to answer the question 7 below) when aggregating.
- [Read Questions 8-9 below first] Now we will change the unit of analysis to “MSA (Metropolitan Statistical Area) Border”.
- First, aggregate the “county year” data to 1 row per “MSA Border Year”. You should remove all rows that do not have the MSA designation
- Second, reshape the table from long (years going down the rows) to wide (years going across columns) per “MSA Border”. You should have exactly 31 rows (number of MSAs).
- Third, using arrays, calculate the percent increase in patients discharged each year (i.e. 2011 & 2012).


@@include('../analytics-code.html') @@include('../styles.html') @@include('../gtm-code.html')
@@include('../gtm-iframe-code.html')Your privacy is critically important to us. At VQ Labs we have a few fundamental principles:
We don’t ask you for your personal data unless we truly need it.
We don’t share your personal data with anyone except to comply with the law, develop our products, or protect our rights.
We don’t store personal data on our servers unless required for the on-going operation of one of our services.
ViciQloud UG (“VQ Labs”) operates website vq-labs.com. It is VQ Labs’ policy to respect your privacy regarding any personal data we may collect while operating our websites.
VQ Labs may collect following personal data:
Basic information such as name, age, postal address, email address and phone number. Details about user’s employer (name, address, phone number, ID and VAT ID, Authentication information such as vq-labs.com username and password, and if any third party service (e.g. Facebook) is used to sign in, the user ID of that service.
IP address
Information relating to the customer relationship such as bought services, their start and end times and information on their use.
Billing information
Customers of VQ Labs can operate their own marketplaces using the vq-labs.com service. Collection and processing of personal data on each such marketplace is subject to the Privacy Policies of the respective marketplace along with any applicable laws, rules and regulations. VQ Labs is not liable for the collection and processing of personal data on such marketplaces.
The personal data is collected for the purposes of making available the vq-labs.com and related services (VQ Marketplace) and for managing and administering VQ Labs’ customer relationships. In addition, if you are a registered user of a VQ Marketplace and have supplied your email address, VQ Labs may occasionally send you an email to tell you about new features, solicit your feedback, or just keep you up to date with what’s going on with VQ Labs and our products, as well as the various marketplaces built using the vqmarketplace.com service. If you send us a request (for example via a support email), we reserve the right to publish it in order to help us clarify or respond to your request or to help us support other users.
VQ Labs may collect statistics about the behavior of visitors to its websites. For instance, VQ Labs may monitor the most popular marketplaces on the vqmarketplace.com site or screen the marketplaces to help identify spam. VQ Labs may display this information publicly or provide it to others. However, VQ Labs does not disclose personal data other than as described below.
VQ Labs discloses personal data only to those of its employees, contractors and affiliated organizations that need that data in order to process it on VQ Labs’ behalf or to provide services available at VQ Labs’ websites. VQ Labs may disclose your personal data to its subcontractors or other such parties outside the EEA who assist VQ Labs in providing the vq-labs.com services. Such disclosure are made in accordance with the applicable German and European laws, rules and regulations. VQ Labs will not rent or sell personal data to anyone. Other than to its employees, contractors and affiliated organizations, as described above, VQ Labs discloses personal data only in response to a subpoena, court order or other governmental request, or when VQ Labs believes in good faith that disclosure is reasonably necessary to protect the property or rights of VQ Labs, third parties or the public at large.
Cookies
A cookie is a string of information that a website stores on a visitor’s computer, and that the visitor’s browser provides to the website each time the visitor returns. VQ Labs uses cookies to help VQ Labs identify and track visitors, their usage of VQ Labs website, and their website access preferences. VQ Labs visitors who do not wish to have cookies placed on their computers should set their browsers to refuse cookies before using VQ Labs’ websites, with the drawback that certain features of VQ Labs websites may not function properly without the aid of cookies.
If VQ Labs, or substantially all of its assets, were acquired, or in the unlikely event that VQ Labs goes out of business or enters bankruptcy, user information would be one of the assets that is transferred or acquired by a third party. You acknowledge that such transfers may occur, and that any acquirer of VQ Labs may continue to use your personal data as set forth in this policy.
VQ Labs takes all technical and organizational measures reasonably necessary to protect against the unauthorized access, use, alteration or destruction of personal data. Access to personal data is limited only to those employees of VQ Labs and its subcontractors who need to know the data in order to perform their work obligations. Each person who has access to the personal data has a personal username and password.
Name of the register holding personal data:
User register of the VQ Labs service
Responsible organization:
ViciQloud UG („VQ Labs“)
Robert-Bosch-Strasse 49
69190 Walldorf, GERMANY
www.vq-labs.com
<EMAIL_ADDRESS>Contact person:
Ani Calis
Phone: +49 176 342 936 85
<EMAIL_ADDRESS>Although most changes are likely to be minor, VQ Labs may change its Privacy Policy from time to time, and in VQ Labs’ sole discretion. VQ Labs encourages visitors to frequently check this page for any changes to its Privacy Policy. Your continued use of this site after any change in this Privacy Policy will constitute your acceptance of such change.
Last updated: December 21, 2017
© 2017 VQ Labs


Starts a remote object registry on the specified port on the current host.
rmiregistry [ port ]
The number of a port
on the current host at which to start the remote object registry.
The rmiregistry
command creates and starts a remote object registry on the specified port on the current host. If the port is omitted, then the registry is started on port 1099. The rmiregistry
command produces no output and is typically run in the background, for example:
rmiregistry &
A remote object registry is a bootstrap naming service that is used by RMI servers on the same host to bind remote objects to names. Clients on local and remote hosts can then look up remote objects and make remote method invocations.
The registry is typically used to locate the first remote object on which an application needs to call methods. That object then provides application-specific support for finding other objects.
The methods of the java.rmi.registry.LocateRegistry
class are used to get a registry operating on the local host or local host and port.
The URL-based methods of the java.rmi.Naming
class operate on a registry and can be used to look up a remote object on any host and on the local host. Bind a simple name (string) to a remote object, rebind a new name to a remote object (overriding the old binding), unbind a remote object, and list the URL bound in the registry.
Used with any Java option to pass the option following the -J
(no spaces between the -J
and the option) to the Java interpreter.
java.rmi.registry.LocateRegistry
class description at
http://docs.oracle.com/javase/8/docs/api/java/rmi/registry/LocateRegistry.html
java.rmi.Naming class description
at
http://docs.oracle.com/javase/8/docs/api/java/rmi/Naming.html


Lighting
Lighting is the most important aspect of making a scene look good.
Physically Based Rendering
There are many formulas for computing lighting on surfaces. The defacto industry standard, which is also used in ezEngine, is Physically Based Rendering (PBR) which describes a surface in terms of color, the surface normals, its roughness, whether it is a metal. Using this data, very convincing lighting can be computed.
Therefore the standard type of material requires you to provide such textures. Optionally an occlusion texture can pronounce the lighting for small crevices.
Static vs. Dynamic Lighting
Many games differentiate between static or baked lighting, and dynamic lighting. Static lighting is precomputed and typically stored in lightmaps (dedicated textures) and other data structures. Dynamic lighting does not require any preprocessing or extra data. Baked lighting typically has the advantage that it can look much better because it can simulate light bounces and thus illuminate areas that are not directly lit.
Currently ezEngine only supports dynamic lighting. That means every light source that you add to the scene can be moved around and change its color or brightness. It also means that every light source has a performance cost. The renderer uses a clustered forward rendering approach which can handle a relatively large amount of light sources efficiently. The most important rule is to reduce the number of overlapping light sources. The editor render modes allow you to look for hotspots.
Shadows
Dynamic lights have the disadvantage that they don't provide shadows by default. Instead, casting shadows is a separate process, which costs a lot of performance for every light source involved. Therefore, each light source requires you to decide whether it should cast shadows or not. You can use many small fill lights, as long as they don't cast shadows, but you should keep the number of shadow casting lights as low as possible, and each light should only cover an area as small as possible.
For more details see the chapter about dynamic shadows.
Light Component Types
There are different component types to provide different types of lighting:
- Ambient Light Component: For lighting up a scene in general.
- Directional Light Component: For sun/moon light.
- Point Light Component: For light bulbs and overall fill lights.
- Spot Light Component: For flashlights and directed lighting.
- Sky Light Component: For dynamic light contribution from the sky.
- Reflection Probe Components: For localized reflection probes.


RuneQuest
characters
encounters
references
🗎 background
⚒ skills
👤 body & mind
🎒 inventory
🏛 Cults
💾
🗑
👥
Name
Gender
♂
♀
Race
Human
Elf
Dwarf
Age
Handedness
🖑
🖑
Right
Left
Social Class
Peasant
Barbarian
Townsman
Poor Noble
Rich Noble
Very Rich Noble
Attributes
Strength
3d6
Constitution
Size
Intelligence
Power
Dexterity
Charisma
random


1. Test that no usable <source> element leaves the media element with networkState == NETWORK_NO_SOURCE


I was a customer experience designer intern at Shopee, which is the leading e-commerce platform in Southeast Asia. I was tasked to redesign UI and UX processes for shipping and delivery page. Also, Involved in workshop ideation, user research, flow chart, wireframes, prototyping, interaction design, and usability tests. Finally, the flow reduced checkout abandonment rate from 65.9% to 53.4%.
2018.06-2018.10
Customer Experience Intern
Project Manager, UX Researcher, Front-End Developer, Back-End Developer
Conducted usability tests with my fellow to observe how users interacted with our app and optimized the flows and UIs further.
Cooperated with cross-functional teams together to come up with a wider variety of ideas.
Assisted in project development, performed data findings and developed UX strategies by conducting questionnaires from users.


Home
About
Log In / Sign Up
ReMix
Home
About
Log In / Sign Up
ReMix
Better music is just a swipe away
We've put together the music for your ease.
All you have to do is find the right beat!
Join for Free


The faceted search allows you to browse and sort ESGF datasets in any custom hierarchical order. Explore and drill down search results until you have found what your looking for.
How to filter
It is good practice to select a project first, for example CORDEX. Second step could be selecting a variable (tas) and time frequency (mon). This reduces the number of search results already.
E.g: project Cordex --> time_frequency mon --> variable tas reduces the number of results from 420824 to 387.