| TOC |
|
Google Wave is a communication and collaboration platform based on hosted conversations, called waves. A wave comprises a set of concurrently editable structured documents and supports real-time sharing between multiple participants. This specification describes the Google Wave Federation Protocol Over XMPP, an open extension to the XMPP core [RFC3920] (Saint-Andre, P., Ed., “Extensible Messaging and Presence Protocol (XMPP): Core,” October 2004.) protocol allowing near real-time communication of wave updates between two wave servers.
1.
Introduction
1.1.
Document Status
1.2.
Overview
1.3.
Terminology
1.4.
Editorial Notes
2.
Architectural Overview
2.1.
Relationship between specifications
2.2.
Wave Providers
2.3.
Wavelets
2.4.
Documents
2.5.
Operations
2.6.
Wave Service Architecture
2.6.1.
Federation Host and Federation Remote
3.
Protocol Specification
3.1.
Connection Initiation and Lifetime
3.2.
Cryptographic Certificates and Signatures
3.3.
Stanzas
3.3.1.
Commonly used attributes
3.3.2.
Commonly used elements
3.3.3.
Update Stanzas
3.3.4.
Service Stanzas
4.
Wavelet Update
5.
Get Signer
6.
Post Signer
7.
Documents
7.1.
Document operations
7.2.
Document operation components
8.
Copyright and Patent
9.
References
Appendix A.
Protocol Schema
Appendix B.
Protocol Buffers
§
Authors' Addresses
| TOC |
| TOC |
This document represents work in progress. It omits details that we are unable to capture at this point and we expect parts of the protocol to change. Please also note that while we revise the protocol and white papers, some transient inconsistencies will occur.
This document is one in a larger set of specifications for Google Wave; see http://www.waveprotocol.org/draft-protocol-specs.
| TOC |
The Google Wave Federation Protocol Over XMPP is an open extension to the XMPP core [RFC3920] (Saint-Andre, P., Ed., “Extensible Messaging and Presence Protocol (XMPP): Core,” October 2004.) protocol allowing near real-time communication of wave updates between two wave servers.
| TOC |
The capitalized key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119] (Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” March 1997.) .
| TOC |
To provide feedback on this draft join the wave-protocol mailing list at http://groups.google.com/group/wave-protocol
| TOC |
Google Wave is a communication and collaboration platform based on hosted conversations, called waves. A wave consists of XML documents and supports concurrent modifications and low-latency updates between participants on the wave.
| TOC |
The Federation Protocol specifies the form and function of operations that mutate wave documents. See the Google Wave Conversation Model specification of conversation manifest documents and blip documents.
| TOC |
The wave federation protocol enables everyone to become a wave provider and share waves with others. For instance, an organization can operate as a wave provider for its members, an individual can run a wave server as a wave provider for a single user or family members, and an Internet service provider can run a wave service as another Internet service for its users as a supplement to email, IM, ftp, etc.
A wave provider is identified by its Internet domain name(s).
Wave users have wave addresses which consist of a user name and a wave provider domain in the same form as an email address, namely <username>@<domain>. Wave addresses can also refer to groups, robots, gateways, and other services. A group address refers to a collection of wave addresses, much like an email mailing list. A robot can be a translation robot or a chess game robot. A gateway translates between waves and other communication and sharing protocols such as email and IM. In the remainder we ignore addressees that are services, including robots and gateways - they are treated largely the same as users with respect to federation.
Wave users access all waves through their wave provider. If a wave has participants from different wave providers, their wave providers all maintain a copy of the wave and serve it to their users on the wave. The wave providers share updates to the wave with each other using the wave federation protocol which we describe below. For any given wave user, it is the responsibility of the wave provider for the user's domain to authenticate the user (using cookies and passwords, etc) and perform local access control.
| TOC |
A wave consists of a set of wavelets. When a user has access to a wavelet, that user is called a participant of that wavelet. Each wavelet has a list of participants, and a set of documents that make up its contents. Different wavelets of a wave can have different lists of participants. Copies of a wavelet are shared across all of the wave providers that have at least one participant in that wavelet. Amongst these wave providers, there is a designated wave provider that has the definitive copy of that wavelet. We say that this particular provider is hosting that wavelet.
When a user opens a wave, a view of the wave is retrieved, namely the set of wavelets in the wave that the user is a participant of (directly, or indirectly via group membership). In general, different users have different wave views for a given wave. For example, per-user data for a user in a wave, such as the user's read/ unread state for the wave, is stored in a user-data wavelet in the wave with the user as the only participant. The user-data wavelet only appears in this user's wave view. Another example is a private reply within a wave, which is represented as a wavelet with a restricted participant list. The private reply wavelet is only in the wave views of the restricted list of users.
A wave is identified by a globally unique wave id, which is a pair of a domain name and an id string. The domain names the wave provider where the wave originated.
A wavelet has a wavelet id which is unique within its wave. Like a wave id, a wavelet id is a pair of a domain name and an id string. The domain name in the wavelet id plays a special role: It names the wave provider that hosts the wavelet. A wavelet is hosted by the wave provider of the participant who creates the wavelet. The wave provider who hosts a wavelet is responsible both for operational transformation and application of wavelet operations to the wavelet and for sharing the applied operations with the wave providers of all the wavelet participants
Wavelets in the same wave can be hosted by different wave providers. For example, a user-data wavelet is always hosted by the user's wave provider, regardless of where the rest of the wave is hosted. Indeed, user-data is not federated, i.e., not shared with other wave providers. Another example is a private reply wavelet. A particularly simple instance of this is when all the participants of the private reply are from the same wave provider. Then this wave provider will not share the private reply wavelet with other wave providers, regardless of where the other wavelets in the wave are hosted.
| TOC |
Each wavelet is a container for any number of documents. Each document has an id that is unique within its containing wavelet. It is composed of an XML document and a set of annotations. Annotations are key-value pairs that span arbitrary ranges of the XML document and are independent of the XML document structure. They are used to represent text formatting, spelling suggestions and hyper-links.
Some documents represent rich-text messages in the wavelet. These are known as "blips". The blips in a wave form a threaded conversation. Others represent data, for example tags, and are not displayed to the user as part of the threaded conversation structure in the wave. For detailed information on the structure of documents, please refer to the Google Wave Operational Transformation [OT] (Wang, D. and A. Mah, “Google Wave Operation Transform,” July 2009.) white paper.
| TOC |
Operations are mutations on wavelets. The state of a wavelet is entirely defined by a sequence of operations on that wavelet.
Clients and servers exchange operations in order to communicate modifications to a wavelet. Operations propagate through the system to all clients and servers interested in that wavelet. They each apply the operation to their own copy of the wavelet. The use of operational transformation (OT) guarantees all copies of the wavelet will eventually converge to the same state. In order for the guarantees made by OT to hold, all communication participants must use the same operational transformation and composition algorithms (i.e. all OT implementations must be functionally equivalent).
| TOC |
A wave provider operates a wave service on one or more networked servers. The central pieces of the wave service is the wave store, which stores wavelet operations, and the wave server, which resolves wavelet operations by operational transformation and writes and reads wavelet operations to and from the wave store. Typically, the wave service serves waves to users of the wave provider which connect to the wave service frontend (see Google Wave Data Model and Client- Server Protocol), and we shall assume this in the following description of the wave service architecture. More importantly, for the purpose of federation, the wave service shares waves with participants from other providers by communicating with these wave provider's servers.
For a given wave provider, its wave server serves wave views to local participants, i.e., participants from its domain. This wave server stores the state of all wavelets that it knows about. Some are hosted by the wave server itself. These are "local wavelets" relative to this wave server. Others are copies of wavelets hosted by other wave providers. These are "remote". A wave view can contain both types of wavelet simultaneously.
At a particular wave provider, local wavelets are those created at that provider, namely by users who belong to the wavelet provider. The wave server is responsible for processing the wavelet operations submitted to the wavelet by local participants and by remote participants from other wave providers. The wave server performs concurrency control by ordering the submitted wavelet operations relative to each other using operational transformation. It also validates the operations before applying them to a local wavelet.
Remote wavelets are hosted by other wave providers. The wave server maintains cached copies locally and updates them with wavelet operations that it gets from the hosting wave providers. When a local participant submits a wavelet operation to a remote wavelet, the wave server forwards the operation to the wave server of the hosting provider. When the transformed and applied operation is echoed back, it is applied to the cached copy. Read access to local participants is done from the cached copy without a round trip to the hosting wave provider.
Local and remote wavelets are all stored in the wave server's persistent wave store.
We say that a wave provider is "upstream" relative to its local wavelets and that it is "downstream" relative to its remote wavelets.
| TOC |
The wave service uses two components for peering with other wave providers, a "federation host" and a "federation remote". (In an earlier revision of this draft specification these components were called "federation gateway" and "federation proxy", respectively).
The federation host communicates local wavelet operations, i.e., operations on local wavelets:
The federation remote communicates remote wavelet operations and is the component of a wave provider that communicates with the federation host of upstream wave providers:
An upstream wave provider's federation host connects to a downstream wave provider's federation remote to push wavelet operations that are hosted by the upstream wave provider.
The federation protocol has the following mechanisms to make operation delivery from host to remote reliable. The federation host maintains (in persistent storage) a queue of outgoing operations for each remote domain. Operations are queued until their receipt is acknowledged by the receiving federation remote. The federation host will continually attempt to establish a connection and reconnect after any connection failures (retrying with an exponential backoff). When a connection is established, the federation host will send queued operations. The receiving federation remote sends acknowledgements back to the sending federation host and whenever an acknowledgement is received, the sender dequeues the acknowledged operations.
| TOC |
| TOC |
As an XMPP extension, this protocol expects a bidirectional stream to be established according to the XMPP core specification.
The connection MUST be secured using the TLS feature of XMPP. It is RECOMMENDED that communication is encrypted (namely by using a non- identity TLS cipher).
All communication except wavelet updates are sent via PubSub [XEP0060] (Millard, P., Saint-Andre, P., and R. Meijer, “Publish-Subscribe,” October in progress, 2009.) events. Wavelet updates are sent using Message stanzas.
| TOC |
In the section below there are references to cryptographic signatures and certificates used to generate them.
The paper by Kissner and Laurie, General Verifiable Federation [VERFED] (Kissner, L. and B. Laurie, “General Verifiable Federation,” July 2009.) gives a detailed explanation of how we expect to make all changes to wavelets attributable to their originating servers and render the federation protocol immune to a number of attacks. The techniques described in the paper have not yet been fully implemented or incorporated into this protocol specification, however certificates are exchanged using the get signer and post signer XMPP messages.
| TOC |
The federation protocol involves two parties: a wave federation host and wave federation remote as described above. The top level stanzas are divided into two types: those that are part of the "update stanzas", and those part of the "service stanzas". The update stanzas are initiated by a federation host to a federation remote and carry <update/>s from the host to the remote. The service stanzas are initiated by the federation remote to the federation host and carry <submit-request/>s and <submit-response/>s, <history-request/>s and <history-response/>s, <signer-get-request/>s and <signer-get-response/>s, <signer-post-request/>s and <signer-post- response/>s.
| TOC |
These stanzas commonly contain the following attributes:
| TOC |
The 'wavelet-name' attribute is an encoded form of the following components:
These components are encoded into a single string in the format of a an absolute URI. The wavelet id domain is used as the host part (since this is where the wavelet is hosted). The wave id is used as the first path element, which contains the wave id domain if it does not match the wavelet id domain, in this case it is prepended to a unique identifier with a '$' delimiter. The unique identifier in the wavelet id is the final path element. URI generic delimiter characters (:/?#[]@) appearing in the id parts must be percent- escaped.
For example, a 'wavelet-name' might be "wave://initech-corp.com/ acmewave.com$w+4Kl2/conv+3sG7", where the wavelet id has domain "initech-corp.com" and unique identifier "conv+3sG7", and the wave id has domain "acmewave.com" and unique identifier "w+4Kl2".
If the wavelet was hosted at "initech-corp.com" and the wave had also been started on that domain, the 'wavelet-name' would be "wave://initech- corp.com/w+4Kl2/conv+3sG7".
| TOC |
| TOC |
A <hashed-version/> element contains the version and history hash pair of a wavelet.
The rolling hash is computed as follows:
The '+' operator means that the hash and the delta are concatenated. The delta is a protocol buffer encoding of the message type protocol::ProtocolAppliedWaveletDelta.
| TOC |
The <commit-notice/> element is a variant of the <hashed-version/> element. It is used to indicate that the wave server has committed deltas up to this point.
| TOC |
The <delta/> element contains a sequence of one or more operations grouped for communication to and between wave servers:
| TOC |
The <applied-delta/> element contains a delta which has been successfully applied to a wavelet by a wave server, along with supplementary information about the result of the application.
| TOC |
The wavelet-update operation is sent as a Message stanza.
| TOC |
The <wavelet-update/> element is used within a Message stanza. It is used to push new wavelet operations applied to a local wavelet to the wave providers of any remote participants.
When the requester is resending updates after reconnecting a XMPP stream, the <wavelet-update/> MAY omit the <applied-delta/> elements but MUST resend the <commit-notice/> elements. In this case the <commit-notice/> informs the receiver of the existence of updates, and it is up to the receiver to request these using a <history- request/> on a service stream.
| TOC |
An example of otherwave.com's federation host pushing data to a federation remote:
Step 1: otherwave.com's federation host sends an update to the federation remote:
<message type="normal" from="wave.initech-corp.com" id="1-1" to="wave.acmewave.com"> <request xmlns="urn:xmpp:receipts"/> <event xmlns="http://jabber.org/protocol/pubsub#event"> <items> <item> <wavelet-update xmlns="http://waveprotocol.org/protocol/0.2/waveserver" wavelet-name="wave://acmewave.com/initech-corp.com$w+a/conv+b"> <applied-delta><![CDATA[CiI...MwE] ]></applied-delta> </wavelet-update> </item> </items> </event> </message>
Step 2: The federation remote acknowledges the update, indicating success.:
<message id="1-1" from="wave.acmewave.com" to="wave.initech-corp.com"> <received xmlns="urn:xmpp:receipts"/> </message>
| TOC |
The service stanzas are for the submission of operations and wavelet history retrieval.
| TOC |
The <delta-history/> element is used within a PubSub [XEP0060] (Millard, P., Saint-Andre, P., and R. Meijer, “Publish-Subscribe,” October in progress, 2009.) event. It is sent by a federation remote to request wavelet operations from the hosting wave providers. The response by the host provider's federation host will contain the operations for the requested version range.
| TOC |
The response to a History Request contains:
| TOC |
Step 1: A federation remote makes a history-request (Section <IP_ADDRESS>) to the acmewave.com federation host:
<iq type="get" id="1-1" from="wave.initech-corp.com" to="wave.acmewave.com"> <pubsub xmlns="http://jabber.org/protocol/pubsub"> <items node="wavelet"> <delta-history xmlns="http://waveprotocol.org/protocol/0.2/waveserver" start-version="12" start-version-hash="..." end-version="2345" end-version-hash="..." response-length-limit="300000" wavelet-name="wave://acmewave.com/initech-corp.com$w+a/conv+b"/> </items> </pubsub> </iq>
Step 2: acmewave.com's federation host returns the requested history.:
<iq type="result" id="1-1" from="wave.acmewave.com" to="wave.initech-corp.com"> <pubsub xmlns="http://jabber.org/protocol/pubsub"> <items> <item> <applied-delta xmlns="http://waveprotocol.org/protocol/0.2/waveserver"> <![CDATA[CiI...MwE] ]> </applied-delta> </item> <item> <commit-notice xmlns="http://waveprotocol.org/protocol/0.2/waveserver" version="2344"/> </item> <item> <history-truncated xmlns="http://waveprotocol.org/protocol/0.2/waveserver" version="2300"/> </item> </items> </pubsub> </iq>
| TOC |
The <submit-request/> element is used within a PubSub [XEP0060] (Millard, P., Saint-Andre, P., and R. Meijer, “Publish-Subscribe,” October in progress, 2009.) event. The federation remote submits wavelet operations to the hosting wave provider. A <submit-response/> will be returned.
| TOC |
A <submit-response/> element is used within a PubSub [XEP0060] (Millard, P., Saint-Andre, P., and R. Meijer, “Publish-Subscribe,” October in progress, 2009.) response. It is returned by a federation host after the hosting wave server has processed the submitted delta.
| TOC |
Step 1: The federation remote makes a submit request to the initech- corp.com federation host:
<iq type="set" id="1-1" from="wave.initech-corp.com" to="wave.acmewave.com"> <pubsub xmlns="http://jabber.org/protocol/pubsub"> <publish node="wavelet"> <item> <submit-request xmlns="http://waveprotocol.org/protocol/0.2/waveserver"> <delta wavelet-name="wave://acmewave.com/initech-corp.com$w+a/conv+b"> <![CDATA[CiA...NvbQ==] ]> </delta> </submit-request> </item> </publish> </pubsub> </iq>
Step 2: The initech-corp.com federation host returns a response to the submit request.:
<iq type="result" id="1-1" from="wave.acmewave.com" to="wave.initech-corp.com"> <pubsub xmlns="http://jabber.org/protocol/pubsub"> <publish> <item> <submit-response xmlns="http://waveprotocol.org/protocol/0.2/waveserver" application-timestamp="1234567890" operations-applied="2"> <hashed-version history-hash="..." version="1234"/> </submit-response> </item> </publish> </pubsub> </iq>
| TOC |
Wavelet update operations mutate wavelets. The actual operation is a signed protocol buffer that is included in the applied-delta element Base64 encoded text. The wavelet update MAY contain zero or more applied- delta's and an optional commit-notice. The wavelet update response is an XMPP receipt of the form specified in XEP-0184.
Here is an example exchange:
<message type="normal" from="wave.initech-corp.com" id="1-1" to="wave.acmewave.com"> <request xmlns="urn:xmpp:receipts"/> <event xmlns="http://jabber.org/protocol/pubsub#event"> <items> <item> <wavelet-update xmlns="http://waveprotocol.org/protocol/0.2/waveserver" wavelet-name="wave://acmewave.com/initech-corp.com$w+a/conv+b"> <applied-delta><![CDATA[CiIKIAoFCNIJEgASF2ZvenppZUBpbml0ZWNoLWNvcnAuY29tEgUI0gkSABgCINKF2MwE] ]></applied-delta> </wavelet-update> </item> </items> </event> </message> <message id="1-1" from="wave.acmewave.com" to="wave.initech-corp.com"> <received xmlns="urn:xmpp:receipts"/> </message>
| TOC |
A remote wave server issues a signer-request to request certificates for wavelets where the signer of the wavelet is currently unknown. i.e. the request is being sent in response to a received wavelet update. A signer is identified by a sequence of bytes as used in protocol::ProtocolSignature.signer_id. The request is sent to the wave server that hosts the wavelet. The request MUST NOT be sent to a remote wave server. The provided history-hash identifies the delta for which the certificate is being requested.
Here is an example exchange:
<iq type="get" id="1-1" from="wave.initech-corp.com" to="wave.acmewave.com"> <pubsub xmlns="http://jabber.org/protocol/pubsub"> <items node="signer"> <signer-request xmlns="http://waveprotocol.org/protocol/0.2/waveserver" history-hash="somehash" version="1234" wavelet-name="wave://acmewave.com/initech-corp.com$w+a/conv+b"/> </items> </pubsub> </iq>
The hosting wave server replies with a chain of certificates sent Base64 encoded in the certificate elements. Each certificate element represents a single certificate. The order of the certificate elements goes from the first which is the closest certificate, to the last certificate which is the root for the certificate chain. More details on signing are still to be added to this document.:
<iq type="result" id="1-1" from="wave.acmewave.com" to="wave.initech-corp.com"> <pubsub xmlns="http://jabber.org/protocol/pubsub"> <items> <signature xmlns="http://waveprotocol.org/protocol/0.2/waveserver" domain="initech-corp.com" algorithm="SHA256"> <certificate><![CDATA[Q0VS...VElPTg==] ]></certificate> <certificate><![CDATA[QkV...LRQ==] ]></certificate> </signature> </items> </pubsub> </iq>
The certificates are base64 encoded (almost as in PEM). A (shortened) PEM certificate as follows:
-----BEGIN CERTIFICATE----- MIIDmTCCAwKgAwIBAgIJAJbxsoszxI+5MA0GCSqGSIb3DQEBBQUAMIGQMQswCQYD qBgkuse74JojLyzxHg== -----END CERTIFICATE-----
is compressed by omitting the first and last line and by removing the line break, resulting in:
MIIDmTCCAwKgAwIBAgIJAJbxsoszxI+5MA0GCSqGSIb3DQEBBQUAMIGQMQswCQYDqBgkuse74JojLyzxHg==
This value is base64 encoded and sent as text or CDATA inside the certificate element. Upon receiving the response, the remote wave server must compute the signer ID from the list of certificates to check that the received certificates match the requested signer. Therefore, the remote wave server decodes the certificates, encodes them using DER (ASN.1 Distinguished Encoding Rules), reversers their order, i.e. the root certificate of the chain is first and the closest certificate is the last. These DER encoded certificates are treated as an ASN.1 SEQUENCE OF data type and are concatenated accordingly resulting in a byte sequence. Finally, a SHA256 hash of the resulting byte sequence is computed. The hash must match the signer ID used in the signed delta.
A ASN.1 SEQUENCE OF is enocded as follows:
Byte 1: 0b110000 (this indicates the data type, i.e. SEQUENCE OF) Byte 2: 0b10000000 OR (the number of bytes required to express the length of the data as a binary number) Bytes 3 .. n: The data length encoded as a big endian number Bytes n+1 ff.: The data
For example, a data of length 0x293 is encoded as:
Byte 1: 0b110000 Byte 2: 0b10000010 Byte 3: 0x02 Byte 4: 0x93 Bytes 5 ff.: The data
| TOC |
Before its first submit request to a hosting wave server, a remote wave server MUST supply the certificate chain that will allow the hosting wave server to authenticate the signed wave delta. If the signature is not sent in advance, the hosting wave server will reject the submit request and the remote wave server must send the signature before it resends the submit request. More details on signing are still to be added to this document.
Here is an example exchange:
<iq type="set" id="1-1" from="wave.initech-corp.com" to="wave.acmewave.com"> <pubsub xmlns="http://jabber.org/protocol/pubsub"> <publish node="signer"> <item> <signature xmlns="http://waveprotocol.org/protocol/0.2/waveserver" domain="initech-corp.com" algorithm="SHA256"> <certificate><![CDATA[Q0V...Tg==] ]></certificate> <certificate><![CDATA[QkV...RQ==] ]></certificate> </signature> </item> </publish> </pubsub> </iq>
The hosting wave server acks the message.:
<iq type="set" id="1-1" from="wave.initech-corp.com" to="wave.acmewave.com"> <pubsub xmlns="http://jabber.org/protocol/pubsub"> <publish> <item node="signer"> <signature-response xmlns="http://waveprotocol.org/protocol/0.2/waveserver" /> </item> </publish> </pubsub> </iq>
The encoding of the certificates are the same as in the signer request.
| TOC |
A document is a sequence of items, where each item is a character, a start tag, or an end tag. Each item has a key-value map of annotations.
Characters are Unicode code points. Certain control characters, special characters and noncharacters are not permitted.
Start tags consist of a type and attributes. The type is an XML name. The attributes form a key-value map, where keys and values are strings. Certain Unicode control characters, special characters and noncharacters are permitted neither in the type nor in attribute names or values.
Each end tag terminates the rightmost unterminated start tag; the tag name is implicit. The number of start tags in the document equals the number of end tags, and for every prefix of the document, the number of start tags equals or exceeds the number of end tags. Thus, start and end tags nest properly, and there are no self-closing tags.
Annotation keys and values are strings. Certain Unicode control characters, special characters and noncharacters are not permitted. If the map has no entry for a given key, we sometimes say that the value for that key is null. While each item conceptually has its own annotation map, implementations may find it more efficient to have just one annotation map for each consecutive run of items with the same annotations.
Note that a naive serialization of the document without annotations into a string is not formally an XML document because it can have multiple elements and characters at the top level, while XML requires a single root element. How to interpret the document as XML is up to the application; options include making sure at the application level that the entire document contents are inside a single element even if the protocol does not enforce this; ignoring all content other than the first element; or wrapping the entire document in an implicit root element whose type and attributes are not represented inside the document.
| TOC |
A document operation is a set of instructions that specify how to process an input document, reading its sequence of items from left to right, to generate an output document. For the purpose of this specification, the operation does not modify the input document, although implementations that perform destructive updates are possible.
Document operations are invertible; for any document operation op that turns an input document A into an output document B, an inverse operation that turns B into A can always be derived from op without knowledge of A or B.
A document operation consists of a sequence of document operation components that are executed in order. During this process, two pieces of state need to be maintained in addition to the document being processed:
Initially, the cursor is to the left of the first item, and the annotations update is empty.
After the final component, the annotations update must be empty, and the cursor must be to the right of the last item in the input document.
| TOC |
Document operation components can be divided into four classes:
The different component classes have the following interaction with annotations:
- retain(itemCount)
- The cursor moves over the next itemCount items, and they are copied to the output document, with annotations as described above. The argument itemCount is a positive integer.
- replaceAttributes(oldAttributes, newAttributes)
- The cursor moves over the next item, which must be a start tag with the attributes oldAttributes. A start tag with the same type but the attributes newAttributes is generated in the output. Its annotations are as described above. The arguments oldAttributes and newAttributes are key-value maps.
- updateAttributes(attributesUpdate)
- The cursor moves over the next item, which must be a start tag. A start tag with the same type is generated in the output, with annotations as described above. The argument attributesUpdate is a map of attribute names to pairs (oldValue, newValue), where oldValue and newValue are either null or an attribute value. The oldValues match the attributes of the start tag in the input document; an oldValue of null means no such attribute is present. The generated start tag has the new values for the attributes in attributesUpdate. Attributes in the input whose names are not listed are transferred to the output unchanged.
- characters(characters)
- The specified characters are inserted into the output document, with annotations as described above.
- elementStart(type, attributes)
- An element start with type type and attributes attributes is inserted into the output document, with annotations as described above. This component must be terminated with an elementEnd. Between an elementStart and its corresponding elementEnd, only insertion components are permitted.
- elementEnd
- An element end is inserted into the output document, with annotations as described above. This component terminates the most recent unterminated elementStart. It must not occur without a corresponding elementStart.
- deleteCharacters(characters)
- This component moves the cursor over the specified characters in the input document without generating any output. The characters must match the actual characters in the input document, and the current annotations update must match as described above.
- deleteElementStart(type, attributes)
- This component moves the cursor over the specified element start in the input document without generating any output. There must be an element start to the right of the cursor, and its type and attributes must match the arguments. The current annotations update must match as described above. This component must be terminated with a deleteElementEnd. Between a deleteElementStart and its corresponding deleteElementEnd, only deletion components are permitted.
- deleteElementEnd
- This component moves the cursor over an element end in the input document without generating any output. There must be an element end to the right of the cursor. The current annotations update must match as described above. This component terminates the most recent unterminated deleteElementStart. It must not occur without a corresponding deleteElementStart.
- annotation-boundary(ends, changes)
- This component modifies the current annotations update. Ends is a set of annotation keys; these keys are removed from the annotations update. Changes is a map of annotation keys to pairs (oldValue, newValue), where oldValue and newValue are either null or an annotation value; these entries are added to the annotations update, or replace entries in the annotations update that have the same key. The keys in ends and changes must be disjoint. An operation must not contain two consecutive annotationBoundary components. Ends must only contain keys that are part of the current annotations update.
| TOC |
This specification is made available under the terms of the Creative Commons Attribution 3.0 License and the Patent License.
| TOC |
| [OT] | Wang, D. and A. Mah, “Google Wave Operation Transform,” Google Wave Whitepapers OT, July 2009. |
| [RFC2119] | Bradner, S., “Key words for use in RFCs to Indicate Requirement Levels,” BCP 14, RFC 2119, March 1997 (TXT, HTML, XML). |
| [RFC3920] | Saint-Andre, P., Ed., “Extensible Messaging and Presence Protocol (XMPP): Core,” RFC 3920, October 2004 (TXT, HTML, XML). |
| [VERFED] | Kissner, L. and B. Laurie, “General Verifiable Federation,” Google Wave Whitepapers VERFED, July 2009. |
| [XEP0060] | Millard, P., Saint-Andre, P., and R. Meijer, “Publish-Subscribe,” XSF XEP 0060, October in progress, 2009. |
| TOC |
namespace default = "" namespace pubsub = "http://jabber.org/protocol/pubsub" namespace disco = "http://jabber.org/protocol/disco#info" namespace rec = "urn:xmpp:receipts" # NAMESPACE_XMPP_RECEIPTS namespace discoitems = "http://jabber.org/protocol/disco#items" # NAMESPACE_DISCO_ITEMS namespace pubsubevt = "http://jabber.org/protocol/pubsub#event" # NAMESPACE_PUBSUB_EVENT namespace wavesrv = "http://waveprotocol.org/protocol/0.2/waveserver" # NAMESPACE_WAVE_SERVER namespace rcpt = "urn:xmpp:receipts" ## Our possible iq children start = update | submitrequest | submitresponse | history-request | history-response | signer-get-request | signer-get-response | signer-post-request | signer-post-response ## Envelope to push wavelet operations. Used in iq set stanza. update = element message { attribute id { text }, attribute from { text }, attribute to { text }, attribute type { text }, element rcpt:request { empty }, element pubsubevt:event { element pubsubevt:items { element pubsubevt:item { element wavesrv:wavelet-update { attribute wavelet-name { xsd:string }, element wavesrv:applied-delta { text }*, commit-notice? } * } } } } ## Request for historical wavelet operations. Used in iq get stanza. history-request = element iq { attribute id { text }, attribute from { text }, attribute to { text }, attribute type { text }, element pubsub:pubsub { element pubsub:items { attribute node { text }, # set to "wavelet" element wavesrv:delta-history { attribute wavelet-name { xsd:string }, attribute start-version { xsd:integer }, attribute start-version-hash { xsd:string }, attribute end-version { xsd:integer }, attribute end-version-hash { xsd:string }, attribute response-length-limit { xsd:integer }? } * } } } ## Response to history-request. Used in iq result stanza. history-response = element iq { attribute id { text }, attribute from { text }, attribute to { text }, attribute type { text }, element pubsub:pubsub { element pubsub:items { element pubsub:item { element wavesrv:applied-delta { text } | element wavesrv:history-truncated { attribute version { xsd:integer } } | commit-notice } * } } } ## Request to submit operations to a wavelet. Used in iq set stanza. submitrequest = element iq { attribute id { text }, attribute from { text }, attribute to { text }, attribute type { text }, element pubsub:pubsub { element pubsub:publish { attribute node { xsd:string }, element pubsub:item { element wavesrv:submit-request { element wavesrv:delta { attribute wavelet-name { xsd:string }, text } } } } } } ## Response to submit-request. Used in iq result stanza. submitresponse = element iq { attribute id { text }, attribute from { text }, attribute to { text }, attribute type { text }, element pubsub:pubsub { element pubsub:publish { element pubsub:item { element wavesrv:submit-response { attribute application-timestamp { xsd:integer }, attribute operations-applied { xsd:integer }, attribute error-message { xsd:string }?, hashed-version } } } } } ## Signer get request signer-get-request = element iq { attribute id { text }, attribute from { text }, attribute to { text }, attribute type { text }, element pubsub:pubsub { element pubsub:items { attribute node { xsd:string }, # need to be hardcoded value "signer" element wavesrv:signer-request { attribute signer-id {xsd:string }, attribute wavelet-name { xsd:string }, version-hash-attributes } } } } ## Signer get response signer-get-response = element iq { attribute id { text }, attribute from { text }, attribute to { text }, attribute type { text }, element pubsub:pubsub { element pubsub:items { element wavesrv:signature { attribute domain { text }, attribute algorithm { text }, element wavesrv:certificate { text } + } } } } ## Signer post request signer-post-request = element iq { attribute id { text }, attribute from { text }, attribute to { text }, attribute type { text }, element pubsub:pubsub { element pubsub:publish { attribute node { xsd:string }, # need to be hardcoded value "signer" element pubsub:item { element wavesrv:signature { attribute domain { text }, attribute algorithm { text }, element wavesrv:certificate { text } + } } } } } ## Signer post response signer-post-response = element iq { attribute id { text }, attribute from { text }, attribute to { text }, attribute type { text }, element pubsub:pubsub { element pubsub:publish { element pubsub:item { attribute node { xsd:string }, # need to be hardcoded value "signer" element wavesrv:signature-response { empty } } } } } ## A wavelet version and the wavelet's history hash at that version. version-hash-attributes = attribute version { xsd:integer } & attribute history-hash { xsd:string } ## Notification of the fact that the host provider has persisted a ## wavelet up to the specified version. commit-notice = element wavesrv:commit-notice { attribute version { xsd:integer } } ## Describes a wavelet version and the wavelet's history hash at that version. hashed-version = element wavesrv:hashed-version { version-hash-attributes }
| TOC |
/** * Copyright 2009 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ // // Google Wave Federation Protocol data structures. // // They are intended to be equivalent to the data structures in the // draft "Google Wave Federation Protocol Over XMPP" at // http://code.google.com/p/wave-protocol/source // // Author<EMAIL_ADDRESS>(Sam Thorogood<EMAIL_ADDRESS>(Soren Lassen) syntax = "proto2"; package federation; option java_package = "org.waveprotocol.wave.federation"; option java_outer_classname = "Proto"; /** * An immutable list of operations for contribution to a wavelet. * Specifies the contributor and the wavelet version that the * operations are intended to be applied to. The host wave server * may apply the operations to the wavelet at the specified wavelet version * or it may accept them at a later version after operational transformation * against the operations at the intermediate wavelet versions. */ message ProtocolWaveletDelta { // Wavelet version that the delta is intended to be applied to. required ProtocolHashedVersion hashed_version = 1; // Wave address of the contributor. Must be an explicit wavelet participant, // and may be different from the originator of this delta. required string author = 2; // Operations included in this delta. repeated ProtocolWaveletOperation operation = 3; /* * The nodes on the "overt" path from the originator through the address * access graph leading up to (but excluding) the author. The path excludes * any initial segments of the complete path which come before a WRITE edge * in the graph. This field is empty if the author is either the originator's * entry point into the address graph or is accessed by a WRITE edge. * * For example<EMAIL_ADDRESS>may be the explicit participant of * a wavelet, and is set as the author of a delta. However, this group is * being asked to act on behalf of<EMAIL_ADDRESS>who is a member * of "wave-authors", which is in turn a member of "wave-discuss". In this * example, the delta would be configured as such: * delta.author =<EMAIL_ADDRESS>* delta.addressPath =<EMAIL_ADDRESS><EMAIL_ADDRESS>*/ repeated string address_path = 4; } /** * Describes a wavelet version and the wavelet's history hash at that version. */ message ProtocolHashedVersion { required int64 version = 1; required bytes history_hash = 2; } /** * An operation within a delta. Exactly one of the following seven fields must be set * for this operation to be valid. */ message ProtocolWaveletOperation { // A document operation. Mutates the contents of the specified document. message MutateDocument { required string document_id = 1; required ProtocolDocumentOperation document_operation = 2; } // Adds a new participant (canonicalized wave address) to the wavelet. optional string add_participant = 1; // Removes an existing participant (canonicalized wave address) from the wavelet. optional string remove_participant = 2; // Mutates a document. optional MutateDocument mutate_document = 3; // Does nothing. True if set. optional bool no_op = 4; } /** * A list of mutation components. */ message ProtocolDocumentOperation { /** * A component of a document operation. One (and only one) of the component * types must be set. */ message Component { message KeyValuePair { required string key = 1; required string value = 2; } message KeyValueUpdate { required string key = 1; // Absent field means that the attribute was absent/the annotation // was null. optional string old_value = 2; // Absent field means that the attribute should be removed/the annotation // should be set to null. optional string new_value = 3; } message ElementStart { required string type = 1; // MUST NOT have two pairs with the same key. repeated KeyValuePair attribute = 2; } message ReplaceAttributes { // This field is set to true if and only if both oldAttributes and // newAttributes are empty. It is needed to ensure that the optional // replaceAttributes component field is not dropped during serialization. optional bool empty = 1; // MUST NOT have two pairs with the same key. repeated KeyValuePair old_attribute = 2; // MUST NOT have two pairs with the same key. repeated KeyValuePair new_attribute = 3; } message UpdateAttributes { // This field is set to true if and only if attributeUpdates are empty. // It is needed to ensure that the optional updateAttributes // component field is not dropped during serialization. optional bool empty = 1; // MUST NOT have two updates with the same key. repeated KeyValueUpdate attribute_update = 2; } message AnnotationBoundary { // This field is set to true if and only if both ends and changes are // empty. It is needed to ensure that the optional annotationBoundary // component field is not dropped during serialization. optional bool empty = 1; // MUST NOT have the same string twice. repeated string end = 2; // MUST NOT have two updates with the same key. MUST NOT // contain any of the strings listed in the 'end' field. repeated KeyValueUpdate change = 3; } optional AnnotationBoundary annotation_boundary = 1; optional string characters = 2; optional ElementStart element_start = 3; optional bool element_end = 4; optional int32 retain_item_count = 5; optional string delete_characters = 6; optional ElementStart delete_element_start = 7; optional bool delete_element_end = 8; optional ReplaceAttributes replace_attributes = 9; optional UpdateAttributes update_attributes = 10; } repeated Component component = 1; } /** * Information generated about this delta post-applicaton. Used in * ProtocolUpdate and ProtocolHistoryResponse. */ message ProtocolAppliedWaveletDelta { required ProtocolSignedDelta signed_original_delta = 1; optional ProtocolHashedVersion hashed_version_applied_at = 2; required int32 operations_applied = 3; required int64 application_timestamp = 4; } /** * A canonicalised delta signed with a number of domain signatures. */ message ProtocolSignedDelta { required bytes delta = 1; repeated ProtocolSignature signature = 2; } /** * A signature for a delta. It contains the actual bytes of the signature, * an identifier of the signer (usually the hash of a certificate chain), * and an enum identifying the signature algorithm used. */ message ProtocolSignature { enum SignatureAlgorithm { SHA1_RSA = 1; } required bytes signature_bytes = 1; required bytes signer_id = 2; required SignatureAlgorithm signature_algorithm = 3; } /** * A certificate chain that a sender will refer to in subsequent signatures. * * The signer_id field in a ProtocolSignature refers to a ProtocolSignerInfo * as follows: The certificates present in a ProtocolSignerInfo are encoded * in PkiPath format, and then hashed using the hash algorithm indicated in the * ProtocolSignerInfo. */ message ProtocolSignerInfo { enum HashAlgorithm { SHA256 = 1; SHA512 = 2; } // The hash algorithm senders will use to generate an id that will refer to // this certificate chain in the future required HashAlgorithm hash_algorithm = 1; // The domain that this certificate chain was issued to. Receivers of this // ProtocolSignerInfo SHOULD reject the ProtocolSignerInfo if the target // certificate (the first one in the list) is not issued to this domain. required string domain = 2; // The certificate chain. The target certificate (i.e., the certificate issued // to the signer) is first, and the CA certificate (or one issued directly // by the CA) is last. repeated bytes certificate = 3; }
| TOC |
| Anthony Baxter | |
| Google, Inc | |
| Email: |<EMAIL_ADDRESS>|
| Jochen Bekmann | |
| Google, Inc | |
| Email: |<EMAIL_ADDRESS>|
| Daniel Berlin | |
| Google, Inc | |
| Email: |<EMAIL_ADDRESS>|
| Joe Gregorio | |
| Google, Inc | |
| Email: |<EMAIL_ADDRESS>|
| Soren Lassen | |
| Google, Inc | |
| Email: |<EMAIL_ADDRESS>|
| Sam Thorogood | |
| Google, Inc | |
| Email: |<EMAIL_ADDRESS>|


Sprint 2: Mindfulness
“Therefore, happiness may be an unavoidable side effect of cultivating
emotional intelligence. Other side effects may include resilience, optimism,
and kindness. (You may want to call your doctor to determine if
happiness is right for you.)”
Search within yourself by Chade-Meng Tan, Chapter 1: Even an engineer can have emotional intelligence
What learnings did you take from the chapter?
I would like you to meet Jon MacDonald the CEO of Trade Me. Why? Because reading this chapter I saw this man.
The 5 domians that Meng mentions are
1. Strong achievement drive and high achievement standards
2. Ability to influence
3. Conceptual thinking
4. Analytical ability
5. Initiative in taking on challenges
6. Self-confidence
This is Jon (aka Jmac) in list form. I've been vey lucky to have been able to work with this man for the last 6 years and is everything mentioned about what a person with emotional inteligence is. Even beyond Jon, I work with others who I can see the same values in them as well.
Emotional intelligence is setting your own personal code of conduct. Its how you choose to interact with the world.
I studied psychology at uni plus done a number of courses through work on EI (emotional intelligence), Courgous converstaions, Resilence etc I know what EI is and alot of this all comes back to Mindfulness.
A couple of years ago I was having a hard time at work so I decided that i needed to make changes. Customer Service is hard and you need alot of resilence to deal with the pure, unadulterated and very raw emotions you get confronted with via email and on the phone. This can get to you especially when you don't know what the next call or next email is going to be.
One of things I chose to impliment was taking up meditation. What this did was made me more aware of me and what triggers my negative behaviours and just overall being more postive to be around. In the last few months I've pushed that aside to focus on other things, so making time to just be, hasn't been a priority. What I learnt from reading this chapter is I need to make make time again and to get my houses back in order.
By houses I mean my mind, body and wellbeing need a big tidy up, because things need to be in order for me to be the best version of me.
How did you find the two minutes of mindfulness?
Meet Calm, my favourite go to app for guided meditation. I've taken up doing this 15 mins in the morning when I wake up and 15 mins before bed. Its been a week and I forgot on Friday night/Saturday morning when I got home (staff party), but so far feeling good and more settled so to speak.


×
Message!
Try Streamify+ for free!
Home
More
Contact
Report
Source Code
Try Streamify+ for free!
Erika Vikman - Syntisten Pöytä
Your browser does not support the audio element.
Watch Video!
Erika Vikman - Cicciolina (UMK20)
Your browser does not support the audio element.
Watch Video!
Copyright © YouTube 2020. All rights reserved. Videos has been uploaded from YouTube.


Base class for all kinds of MODBUS connections. More...
#include <cModBusConnection.h>
Public Member Functions | |
| cConnectionBase (connection_type t) | |
| virtual int | Connect () |
| No connection from base class. | |
| virtual bool | IsOpened () |
| base class cannot be opened | |
| virtual int | SendData (const unsigned char *buffer, int size) |
| base class cannot send data | |
| virtual int | WaitForData (int len, int msec) |
| base class always times out | |
| virtual int | ReadData (void *, int) |
| base class connot read data | |
| virtual int | ReadDataWaiting (void) |
| never any data on base class | |
| void | setSerial () |
| void | setTCP () |
| virtual void | setCOMPort (int i) |
| bool | IsSerial () |
| bool | IsTCP () |
| void | setASCII () |
| void | setRTU () |
| bool | IsRTU () |
| const char * | GetLastError () |
Protected Types | |
| enum | connection_type { none, serial, tcp } |
Protected Attributes | |
|
enum cConnectionBase::connection_type | myType |
| bool | flagRTU |
| char * | myErrorMsg |
Base class for all kinds of MODBUS connections.


{% extends "layout.html" %} {% block style %} {% endblock %} {% block script %} {% endblock %} {% block title %} MDS Setup {% endblock %} {% block main %}
Please browse to any of the gmxmds files earlier generated and select all relevant files for MD simulations
However, if solvation was done manually, rename your final solvated.gro to fsolvated.gro and replace topol.top with your updated one
To setup manually, please read instructions in README.md file, and upload the relevant files below


Navigation available in MNML share general markup and styles
MNML
Link 1
Link 2
Link 3
MNML
Link 1
Link 2
Link 3
Link
Link
Link
MNML
Link
Link
Link
Forms
Forms in MNML look great and are easy to use
Colors
MNML has a wide variety of colors for any need!
All easily accesible through CSS variables with tons of shades for each color
Styles
MNML also offers default styling for H(1-6), P, & other common elements. MNML also contains container classes (row and column) to easily set up flex containers
Title
Subtitle
Lorem ipsum dolor sit amet consectetur adipisicing elit. Ab doloribus sunt at dicta adipisci, quos iusto natus. Aspernatur, ad eveniet qui recusandae obcaecati possimus autem distinctio? Nihil accusantium aliquam magnam.
Components
MNML offers a slideshow component to easily add slideshows to your site


Simple Bridge
call alert from IOS native
alert from JavaSript
send link to IOS to popup
IOS Notification
Get Geolocation from OS
Get map from OS
Get FingerPrint from OS


Integer maps, or fxmappings, are finite sets, where each element is
an association between a fixnum (exact integer) key and an arbitrary Scheme
object. They are similar to the general mappings of
SRFI
146, but the restricted key-type allows implementations of
fxmappings to benefit from optimized structures and algorithms. This
library provides a rich set of operations on fxmappings, including
analogues of most of the forms provided by SRFI 146. Fxmappings have
no intrinsic order, but may be treated as ordered sets, using the
natural ordering on keys; a substantial sublibrary for working with
fxmappings in this fashion is included.


Dancing Shapes
Controls Demo
Falling Pieces on a Game Board
Falling Pieces on a Game Board, with row-clearing
Falling Pieces on a Game Board, with row-clearing and Keyboard controls
Visual improvements


A visit to a British medium and healer in 1990 set him on the journey of discovery which dramatically changed his life and led him to write a series of controversial books including Truth Vibrations, It Doesnt Have To Be This Way, Heal The World, and The Robots Rebellion. His most recent is And the Truth Will Set You Free and has been described as the most explosive book of the 20th century. It reveals the esoteric background to a worldwide conspiracy to centralize power within the hands of a global elite. In it he offers an inspiring spiritual solution in which every man, woman and child can break free from robotic programming and take back their power to decide their own destiny.
Icke is travelling around the world explaining the danger to the future of our planet posed by the present worldwide economic system now dominated and controlled by a secret, global elite. The bottom line of this system is economic growth which economists claim leads to more jobs, more wealth (for the elite), more economic success, etc. This couldnt be more simple, but in truth it is a take, make and throw away system which increases the rate and amount of irreplaceable resources we take from the planet every year. It increases the speed at which these products, most of which we dont need, are made obsolete or wear out so that people are forced to buy the same products again and again in order to generate ever greater increases in production. This, in turn, leads to the increase in the amount of natural resources now called waste and rubbish that we throw away every year.
It must have taken a genius to come up with it because, as Icke says, It is the perfect environmental and human assassin and yet it is the system that controls the world and the minds of its people. In short, for the present system to survive and increase production every year, it is essential that we rape the planet for more and more resources and poison her with ever more pollution. This is the system supported by every major political movement in the world, except for the Greens. This is the conventional wisdom that is destroying the earth.
Also, in our present global system, individual countries surrender control of their own destiny as other countries produce cheaper products utilizing low-wage workers, and often new, but environmentally and socially destructive technology. Unemploy-ment rises in those countries which cant compete, but what of those that do have jobs. They spend most of their time working in factories and offices producing these trinkets to buy even more trinkets that someone else is also spending their lives in factories and offices making.
Whatever happened to living? The vast majority of people, rich and poor, on this planet are enslavedenslaved by the systems robotic programming, its economic imprisonment, and by their own refusal to think, question and find the liberation that comes with an open mind. We dont live in a free society, we live as robots in a society in which you are free to do what the society wants you to doproduce and consumethats the reality.
Icke has been able to carry out a detailed analysis which fits together past and present world events which appear to occur independently of each other, but in truth have the same people pulling the strings in all of them. Its becoming increasingly true that a very few people control the world by persuading and pressuring the population through fear to think the way they want them to act and think, or preferably, not to act or think independently at all. Currently, four multinational corporations control 90% of the global media.
He explains: What happens in practice is that if you look at all the dogmas in all cultures, all societies have what I call a hassle-free zone. It is that area within any culture, within each dogma (religious, economic, political etc) wherein if you conform to it, you are in the comfort zone. No ones going to laugh at you, condemn you for being different, or for expressing your uniqueness, because you are locked into the herd mentality, and you are conforming to what you are told you should be and do. When you step out of this mindset and express your unique aspect of all that exists and refuse to be frightened, or controlled, you immediately face ridicule or condemnation as I have in England.
In his talks, Icke connects and links conspiracy ideas with the spiritual. He first explains how we are giving our minds away and the means through which we are conditioned to do that. He discloses a vast number of names and organizations which are very famous, and of people who are in the controlling hierarchy, including the US President. He says, I do not do this out of condemnation because the people involved are expressing their own state of being at the time, they are also reflecting back to us the collective human mind itself and the results of our own lack of personal responsibility and integrity. I think that it is important to do this first.
I also point out how the same people on apparently different sides of politics are actually connected to the same elite organizations.  These apparent opposites in politics are there to persuade us that we are not living in a prison, that we have a choice. Yet these persons are not opposites at all but are part of a one-party state. The last two US Presidents were apparently opposites and on different sides Bill Clinton and George Bushyet they were both heavily involved within the same elite organizations.
The media and politicians have a cozy unwritten agreement that projects a myth to people which is that prime ministers, presidents, and high-ranking politicians are the top of the decision-making pyramid in the world. They then walk around the world stage and act as if they are the final arbiters of power. The media goes along with this which means that the echelons above the Clintons, who actually pull the strings, never get researched and investigated because they are invisible to the public.  The President is only the most famous front-man in the world.
This is also why movements for social, economic, and environmental changes are ineffective. They are unable to change the system because they are actually forced to be part of the system to survive. All of their resources are expended on the front-men while the real power acts subversively behind the scenes to perpetrate the system as it is now. Also, through non-profit foundations operated by the elite, many are infiltrated by agents who turn the movements into vehicles to promote the system. Most activists attack the elements of the system they can perceive with anger, blame, and often violence. From a spiritual perspective, it is only possible to transform the negative consciousness of the system with love and compassion. This is why it is so necessary at this time to move to a higher state of consciousness to solve our world problems.
A mass mind-controlling technique which is used by these elite organizations all the time is the problem-reaction-solution. A problem is covertly created (by the CIA, KGB, etc) and someone is blamed for the problem. The culprit might be a war, a run on the currency, national debt, or a government collapse. It can be anything. The media is used to stimulate public opinion in relationship to the created problem so that the public cries out, Something must be done! At that point, those who created the problem openly offer the solution as a means of getting what they wanted all along.
An example of this, Icke explains, is the world army scenario. The last thing that the problem-reaction-solution needed in Bosnia was an effective UN peace-keeping operation. If it was effective, it would have been so in Rwanda and Somalia, but then there would be no problem to solve. So, as a result of the UN peace-keeping operation not working, there continued to be a problem. The UN peace-keeping was designed not to work and was aided by the major peace negotiators in Bosnia who incidentally are all members in the same elite organizations that have as an agenda the creation of a world army.
The more horrific the pictures that came out of Bosnia, the louder came the public outcry, Something must be done! This was understandable from the publics point of view, but the solution put forward was the formation of what is effectively a world army, a 60,000-man force ... the largest multinational force assembled since World War II and exactly what the conspirators wanted.
Icke operates on two different levels, the here-and-now, the conspiratorial research level to assess what is actually taking place, and the spiritual which demonstrates that if you take your mind away, there are physical consequences. He says, If we take our personal and spiritual power back, stop being a herd of sheep and express our unique, divine individuality, then the ability of a few to control our world disappears. Once people realize they can control their own lives, that their own power exists within them rather than outside of themselves ... the game is over for the global elite. You dont need a gun. You dont need another political party. You dont need another smoke-filled room, protest group, or rally. All you need is to celebrate your uniqueness, de-link from the robotic herd mentality, and respect everybodys right to do the same. Suddenly we have removed the (energy) vehicle through which a global conspiracy can operateour herd mentality.
Icke has also been working extensively with what he calls earth energies and has travelled to Peru, Canada, Africa, and over much of Europe, especially Britain, doing planetary healing work. He explains, We are the custodians of Mother Earth and have access to higher consciousness. We can act as facilitators to heal and balance many of the disturbances in the earth through a grid system known as ley lines and power spots. These power spots act like acupuncture points on the earths surface and the ley lines as meridians and are easily disrupted by acts of violence (war), toxic pollution, construction, etc. We have the ability to work with higher consciousness to heal and balance the earth.
When asked where he got all his information, Icke explained, Many people within government and intelligence agencies as well as the military have known for a long time what is going on, but have not known what to do with the information. They are choosing to give it to me because they know that I will put it out into the world. I keep saying to people the worst thing that can happen to me is that my consciousness moves to another time/space reality, and thats the absolute worst thing that could happen! This fear of death is probably the most effective means of control the conspirators have. The truth is there is no death only the movement of consciousness between infinite time/space realities. We are in fact immortal, individualized units of consciousness.
David Icke will be in Vancouver and Victoria to present a lecture and workshop on September 20-22. His lecture, The Truth Will Set You Free, exposes the controlling interest groups active in the world and what individuals can do to turn the tide of world events. In his workshop he explains the methods used by the controlling forces to prevent knowledge of our true spiritual nature and the phenomenal power we have to create our own reality. It is the suppression of this knowledge which has allowed the control of the many by the very few. He gives techniques for breaking free of robotic programming and methods of tapping into our true spiritual potential. Earth healing techniques using meditation and rituals will also be presented. Participants will be encouraged to become part of a worldwide group of individuals dedicated to healing themselves and Mother Earth.
David Icke will also be speaking at the Shared Vision breakfast on September 20. For more information call<PHONE_NUMBER>.


Feature overview demo
Hello World
dom-repeat demo
paper-scroll-header-panel
"Real world" usage
Google Play Store v5.0 app-page-like effect


Gateway
BOT
07-Dec-18 05:31 AM
[dscrdvrsc] <blackjok3r> Just buy an FPGA ?
[dscrdvrsc] <blackjok3r> LOL
[dscrdvrsc] <blackjok3r> They would be more decentralised ... as there are heaps of them out there... even totall oper source ones
[dscrdvrsc] <blackjok3r> CPUs have back doors, and GPUs use too much power
[dscrdvrsc] <Ginasis Mining Pools> the problem is if they are not willing to meet at the level playing field that is meant to be verus then they wont be had here
(edited)
[dscrdvrsc] <blackjok3r> You cant do that
[dscrdvrsc] <blackjok3r> It will never work
[dscrdvrsc] <blackjok3r> Encourage competition
[dscrdvrsc] <blackjok3r> It will fix itself
[dscrdvrsc] <Ginasis Mining Pools> well that is not the goal of verus
[dscrdvrsc] <admon> descentralice never happend
[dscrdvrsc] <blackjok3r> Well their gola is fatally falwed
[dscrdvrsc] <blackjok3r> People want to make money ... the inventive needs to be competition to amke more money
[dscrdvrsc] <admon> i belive in wrong project
[dscrdvrsc] <blackjok3r> if one FPGA is dominating
[dscrdvrsc] <blackjok3r> make a better one
[dscrdvrsc] <blackjok3r>
[dscrdvrsc] <blackjok3r> Making people relay on CPUs which are full of hardware backdoors is a terrible idea
[dscrdvrsc] <admon> its a great idea
[dscrdvrsc] <admon> why you make a really profitable cpu mining algo, and dont usit
[dscrdvrsc] <blackjok3r> Why and how is that the case .. .there are OPEN SOURCE FPGAs with no backdoors no corperate licensing fees
[dscrdvrsc] <admon> hats is better
[dscrdvrsc] <admon> whats?
[dscrdvrsc] <admon> 30 fpga
[dscrdvrsc] <admon> or 1000 pc with cpu
[dscrdvrsc] <blackjok3r> Its a better goal of decentralissation to support open source hardware rather than icenced CPUs with back doors
[dscrdvrsc] <admon> and 30 fpga in the same place
[dscrdvrsc] <blackjok3r> Making more people learn hpw to program FPGA and use open source hardware is 100% better than relying on CPUs which had a monopoly
[dscrdvrsc] <admon> decentralized is only a marketing
[dscrdvrsc] <admon> jajajajja
[dscrdvrsc] <blackjok3r> All CPUs are clicenced to 1 company INTEL
[dscrdvrsc] <admon> cpu monopoly?
[dscrdvrsc] <Ginasis Mining Pools> forget AMD CPUs
(edited)
[dscrdvrsc] <blackjok3r> If intel decided they dont liek verus coin ..
[dscrdvrsc] <blackjok3r> AMD has to pay licencing to INTEL
[dscrdvrsc] <blackjok3r> and vice versa
[dscrdvrsc] <admon> what u saying???
[dscrdvrsc] <blackjok3r> they are hte same thing
[dscrdvrsc] <Ginasis Mining Pools> Forget GPUs
[dscrdvrsc] <blackjok3r> GPUs are only 2 companies
[dscrdvrsc] <admon> i know why mike dont want frok
[dscrdvrsc] <blackjok3r> as well ..thats a monopoly aswell
[dscrdvrsc] <admon> he has 2 legs
[dscrdvrsc] <admon> one in verus one in komodo
[dscrdvrsc] <blackjok3r> Open Source hardware is the way foward.. just start using it
[dscrdvrsc] <Ginasis Mining Pools> and currently FPGA for verus is 1 company that is keeping it a secret
[dscrdvrsc] <blackjok3r> and encorage competition
[dscrdvrsc] <Ginasis Mining Pools> talk about monopoly
[dscrdvrsc] <admon> if sometihing wrong with not succed with verus he will jump to komodo
[dscrdvrsc] <blackjok3r> So make a better one
[dscrdvrsc] <blackjok3r> Im sure mike has the money ans skills to do so
[dscrdvrsc] <admon> really secret?
[dscrdvrsc] <admon> you a nme know it
[dscrdvrsc] <admon> what are the secret?
[dscrdvrsc] <blackjok3r> There is no secret ...
[dscrdvrsc] <blackjok3r> Not sure hat you mean
[dscrdvrsc] <blackjok3r> Dont stifle innovation
[dscrdvrsc] <blackjok3r> if someone has an advantage
[dscrdvrsc] <admon> only i know mike will throw verus
[dscrdvrsc] <blackjok3r> beat them
[dscrdvrsc] <admon> and he will go to komodo
[dscrdvrsc] <admon> he have the skills
[dscrdvrsc] <admon> to grow up komodo
[dscrdvrsc] <blackjok3r> Rather than trying to keep everything based on centralised out dated tech ... let it die
[dscrdvrsc] <blackjok3r> The world will be a better place
[dscrdvrsc] <Ginasis Mining Pools> you are acting like verus flat out denied FPGAs
[dscrdvrsc] <miketout> @admon, you are making some not very nice, untrue statements
[dscrdvrsc] <Ginasis Mining Pools> when that was not the case
[dscrdvrsc] <blackjok3r> Well you litterally cant do that
[dscrdvrsc] <blackjok3r> forking constantly is a terrible solution
[dscrdvrsc] <miketout> i'm not sure i understand why you think i would "throw" verus. or jump to some other project.
[dscrdvrsc] <blackjok3r> Dunno what that guy is on about .. Just voicing my opinion here ...
[dscrdvrsc] <miketout> even Komodo, which I greatly respect
[dscrdvrsc] <miketout> not happening
[dscrdvrsc] <miketout> we can help each other. Komodo devs help Verus, Verus helps Komodo. A rising tide lifts all boats, but it is an ecosystem, and I'm doing Verus Coin
[dscrdvrsc] <blackjok3r> Thank you for youre efforts too ..
[dscrdvrsc] <miketout> thank you


As a kid, Nas wanted to be an instrumentalist. His father is jazz/blues musician Olu Dara, and Nas sometimes practiced with his dad's trumpet.
Nas was also into comics. But, he immersed himself into the hip-hop culture shortly after his parents Olu Dara and Ann Jones separated. That was when young Nasir Jones began to write short stories and poetry.
Nas made his hip-hop debut on "Halftime," which was featured on MC Serch's soundtrack to Zebrahead. In mid 1992, MC Serch helped Nas secure a deal with Columbia Records. The initial concern was that Columbia, a major label, would dilute Nas' raw rap style. In 1994, Illmatic was released and its grimy feel allayed all fears. The album featured production by DJ Premier, Large Professor, Pete Rock, and Q-Tip, and a relatively unknown emcee named AZ. It was lauded as a masterpiece.
Following the competitive nature of east coast rap, one of Brooklyn's most prolific rhymeslingers, Jay-Z, found himself in a wax war with QB's No. 1 draft pick, Nas. Most rap fans will tell you that Nas won the battle with "Ether," his esoteric, yet wittily ferocious response to Jay-Z's "Takeover." Both rappers claimed victory in a BET interview. See also: 25 Greatest Nas Songs


NOTE! Assigning the parser using a class name was added in version 2.0.11 (it is not part of the original plugin).
Demo
| Name | Major | Gender | English | Japanese | Calculus | Overall grades |
|---|---|---|---|---|---|---|
| Student01 | Languages | male | 80 | 70 | 75 | bad |
| Student02 | Mathematics | male | 90 | 88 | 100 | good |
| Student03 | Languages | female | 85 | 95 | 80 | medium |


import / export information
import / export is a non-story mission located in San Fierro. it is required for 100% completion.
the premise revolves around finding cars and exporting them, then importing them later to drive around.
in order to unlock import / export, you must complete
Cesar Vialpando's mission called 'Customs Fast Track'
---
in the beginning, you will only be able to import the 3 cars you moved during the Customs Fast Track mission.
the 3 cars available immediately are the Club, Jester, and Perennial.
---
### WARNING ###
with importing, only certain cars are available on certain days.
the cars you are able to import depend on the order you export them.
once the vehicles have been exported, this cannot be changed by normal means ingame.
if this matters to you and you want specific vehicles on specific days, make sure you export vehicles on the respective days.
---
cars able to import
monday
Perennial - $8,000 (already available)
3rd vehicle on 1st wanted list to be delivered.
9th vehicle on 1st wanted list to be delivered.
5th vehicle on 2nd wanted list to be delivered.
Turismo - $76,000 (must complete the 2nd list)
6th vehicle on 3rd wanted list to be delivered.
tuesday
Jester- $28,000 (already available)
4th vehicle on 1st wanted list to be delivered.
10th vehicle on 1st wanted list to be delivered.
Bandito - $12,000 (must deliver at least 5/10 vehicles on the 2nd list)
1st vehicle on 3rd wanted list to be delivered.
7th vehicle on 3rd wanted list to be delivered.
wednesday
Club - $28,000 (already available)
5th vehicle on 1st wanted list to be delivered.
Windsor - $28,000 - (must complete 1st list)
6th vehicle on 2nd wanted list to be delivered.
2nd vehicle on 3rd wanted list to be delivered.
8th vehicle on 3rd wanted list to be delivered.
thursday
Perennial - $8,000 (already available)
Monster - $32,000 (must deliver 5/10 vehicles on the 1st list)
1st vehicle on 2nd wanted list to be delivered.
7th vehicle on 2nd wanted list to be delivered.
3rd vehicle on 3rd wanted list to be delivered.
9th vehicle on 3rd wanted list to be delivered.
friday
Jester - $28,000 (already available)
6th vehicle on 1st wanted list to be delivered.
2nd vehicle on 2nd wanted list to be delivered.
8th vehicle on 2nd wanted list to be delivered.
4th vehicle on 3rd wanted list to be delivered.
10th vehicle on 3rd wanted list to be delivered.
saturday
1st vehicle on 1st wanted list to be delivered.
7th vehicle on 1st wanted list to be delivered.
3rd vehicle on 2nd wanted list to be delivered.
9th vehicle on 2nd wanted list to be delivered.
5th vehicle on 3rd wanted list to be delivered.
Bullet - $84,000 (must complete the 3rd list)
sunday
Club - $28,000 (already available)
2nd vehicle on 1st wanted list to be delivered.
8th vehicle on 1st wanted list to be delivered.
4th vehicle on 2nd wanted list to be delivered.
10th vehicle on 2nd wanted list to be delivered.
Vortex - $20,800 (must deliver at least 5/10 vehicles on the 3rd list)
---
cars needed to export
list #1
Admiral
Buffalo
Camper
Feltzer
Infernus
Patriot
Remington
Sanchez
Sentinel
Stretch
list #2
Blista Compact
Cheetah
Comet
FCR-900
Rancher
Sabre
Slamvan
Stafford
Stallion
Tanker
list #3
Banshee
BF Injection
Blade
Euros
Freeway
Journey
Huntley
Super GT
ZR-350
click here to return to the index


malaria mosquito compounds mosquitoes gambiae control Anopheles vector An. insect repellent essential larval plant ./--- application potential vectors transmission oil plant-derived Malar repellents Med oils plants s.s.) study efficacy reported Toxicity oviposition ppm chemical protection human ./s--- Vectors {border-style ./journal.pone. DEET Parasit growth sugar use Entomol ecology host px;} studies using #ffffff;} Laboratory action development effects natural Sci Topical activity receptors Insect arabiensis behavioural effective female habitats odorant plant-based stephensi Africa African controlling olfactory populations reducing Trop anopheline field push-pull disruption insecticide interventions neem products reduce reduced synthetic used (Diptera: Kenya Knols adult attractive extracts gravid larvae management resistance toxic toxicity Aedes BGJ Culicidae) Kweka LLINs Ocimum behaviour developing falciparum feeding high impact instance, mosquitoes, residual site various Chem Fillinger Hassanali Killeen Parasitol Plant Rev agents insecticides methods molecular outdoor relative review species However, Int Takken Vitex acid attraction blends characteristics complex cues derivatives mg/ml microbial nets olfaction px; response responses source sources tools {font-family ./j.-...x . × .–. Azadirachta Beier Biol Ecol Field Melia Mosquito Nyasembe Torto Trends Turraea approaches associated basis bioactive blood capacity demonstrated derived disease effect environment environmental evaluation exposure font-size formulations functional inhibit insects larvicidal local longevity manipulation odour rates receptor showed shown strategies subsequent suggesting trial volatile volatiles western ;:–. Annu Bohbot Control Dis Dysoxylum Kenyan Larvicidal Mosq Plant-derived Plasmodium Plumbago Res Soc Tanzania Vet [], activities aegypti applications away bait binding bites biting burning currently cycle double; drive egg elimination following indoor inducing infection interactions larvicides limonoids new pest produced reduction require sensory significantly skin small stages target technique topical (ATSB) ,-cineole, ./j.pt... ATSB Also, Assoc Carey Carlson Chemical Cinnamomum Deletre Foster Health IRS Lindh Lippia Mol Molecular Moore Müller Nature Plectranthus Science Seyoum Silva Traore Vector World Zhou Zwiebel alcohol, applied approach avoidance baits behavioral border-color border-width botanical breeding burden caryophyllene challenge challenges changes coding composition current disrupting elicited emergence epidemiological epidemiology existing extraction great groups humans individual information integrated laboratory larviciding leaf limonene, linalool, mediate mortality nuisance phytoecdysteroids prevalence programmes provide regulators repellents: resources risk role rural s.s. search seeking semiochemicals solid; spraying strong sub-Saharan surveillance survival technologies trapping vectorial {font-style {font-weight α-pinene, ./S- ./S-()- ./j.biortech... ./nature ./science. ATSBs Acad Academic Acta Africa: BMC Biochem Bioresour Cell Comprehensive Curr Cymbopogon Debboun Department Dickens Environ Govella Hyg IVM Infect Integrated Kenya, Larval Lee Lindsay Logan Muema Mukabana Nathan Natl Njeru PEA Pickett Proc Repellent Table Tagetes Teal Technol Therefore, Trans Tumlinson USA. Wageningen Zanthoxylum abyssinica active addition aquatic attractant based bed behaviours biological bold caused children citronella combination communities conducted continues countries coupled courier; deployed design deterrents developmental different diseases disrupt early electrophysiological em; endogenous entry ethnobotanical exhibit extract future geraniol, health hormone implications important increase indica indicate inhibition inoculation insecticidal juvenile knowledge lead limonene long-lasting low major malarial manipulating nectar odor organic parasite parasites pests phenomenon population potent process promising pt;} regulatory repellency reports required research robust s.s.), selection settings settings, signals similar sites sources, specific study, successfully suggested systems targeting tested tool transmit traps treated understanding urban uses vectors, μg/ml


.. ..
Cover
Home
Features
Contact
fakeIt.JS
First Name:
Last Name:
Full Name:
Email:
Paragraph:
Cover template for
Bootstrap
, by
@mdo
.


Loads and parses HPMS samples from a Google sheets document. Each sample's begin point is shown as a marker.
The marker can be selected to show a pop-up bubble giving (1) HPMS sample number, (2) latitude, (3) longitude, and (4) maps direction link.


--- layout: components title: Inputs ---
Control the sizes of inputs by adding .is-small
, .is-medium
or
.is-large
to a text input.
Control colors when inputs are focused by adding .is-primary-focus
,
.is-secondary-focus
or .is-accent-focus
to a text input.
You can add icons to inputs, either on the left side, on the right side or both. You need to add
.has-icons-left
, .has-icons-right
or both to the .control
wrapper. Check out the code examples to learn more.
To show success or error states, add the .required
class to the .control
wrapper. You can the add the .has-success
and .has-error
classes to the
same wrapper to apply one of theses states.
Change border color when inputs are focused by adding .is-primary
,
.is-secondary
or .is-accent
to the .control-material
wrapper.
You can add icons to material inputs, only on the right side. You need to add .has-icon
to the .control-material
wrapper. Check out the code examples to learn more.
To show success or error states, add the .required
class to the
.control-material
wrapper. You can the add the .has-success
and
.has-error
classes to the same wrapper to apply one of theses states.
Change border colors when textareas are focused by adding .is-primary-focus
,
.is-secondary-focus
or .is-accent-focus
to a .textarea
text
area.
You can have a button inside a textarea by adding the class is-button
. Check out the
code example for more details.
Material textareas behave the same way than the material inputs. Add .is-primary
,
.is-secondary
or .is-accent
to the .control-material
wrapper
to change border color on focus.
Inputs can be set to loading state by adding the .is-loading
class to the
.control
wrapper. Based on the input size modifier, you have to have to add the same
modifier to the wrapper for optimal positioning. Check the code examples.
You can create a basic select by wrapping an html select
element with div
that has the .select
class.
Basic selects can have different sizes: small, default, medium and large. To change the select size,
add the .is-small
, .is-medium
or .is-large
class to the
div.select
wrapper element.
Basic selects have icon support for all sizes. See the markup structure for more details.
A material design version of the select box. Don't forget to use the same wrapper as the material
inputs : .control-material
.
Chosen is a jQuery library that helps you generating beautiful select boxes. You can find the plugin documentation on the github project repository.
Chosen supports option groups. Insert your options inside an
<optgroup label=""></optgroup>
tag to create structured
options lists.
Chosen lets you define a search threshold by setting the option
disable_search_threshold: (number)
. If the number of options is higher than the
specified number, a search filed is activated inside the select's dropdown.
Chosen can be easily turned into a multiple select. You can also control how many options can be
selected at the same time by using the max_selected_options: (number)
. In the following
example, only 5 items can be selected at the same time.
Easy to use and styled combo boxes that you can use out of the box to replace traditional selects. Combo boxes support icons and images.
Easy to use and styled combo boxes that you can use out of the box to replace traditional selects. Combo boxes support icons and images.
Easy to use and styled combo boxes that you can use out of the box to replace traditional selects. Combo boxes support icons and images.
Tags inputs are handled with a simple jQuery plugin. You can find the documentation here. Use the example below, enter a tag and add it by pressing the ENTER key. Some options are available, like minimum / maximum tag size and max total caracter length.
Tags inputs are handled with a simple jQuery plugin. You can find the documentation here. Use the example below, enter a tag and add it by pressing the ENTER key. Some options are available, like minimum / maximum tag size and max total caracter length.
This is an example of a basic autocomplete getting data from an external json
source.
The plugin's documentation can be found here.
With one of the built in templates, you can easily display an additional description.
You can also create your own custom templates. This is an example showing a user search use case.
A lightweight and easy to implement datepicker. Supports options and multiple instances. Documentation can be found here.
A powerful and fancy datepicker with many features. Supports many options and custom theming. Documentation can be found here.
An original time picker library that focuses on user experience when setting time. Documentation can be found here.
A range input custom style that works in all major browsers.
Range inputs can have different sizes, add the .is-small
, .is-medium
or
.is-large
to change the input size.
Range inputs can have different colors. Available color classes are default, .is-info
,
.is-success
, .is-warning
, .is-danger
,
.is-primary
, .is-secondary
and .is-accent
Range inputs can be vertical. However, due to the current implementation, styles might not apply to
the slider thumb element in webkit browsers. Note that orient=""
attribute also leads
to an issue when it comes to html validation.
Arange input can be disabled. Just add the attribute disabled=""
with the value
disabled
.
Range inputs can have an output tooltip that is updated with the current input value. This is handled
via javascript. Two classes are available for outputs : .has-output
, wiche displays a
static output element, and .has-output-tooltip
, wich displays the outpus as a slider
thum tooltip.
A custom input range implementation based on Darlan Rod sass implementation.


I'm Bibi Connor, a web designer based out of Austin, Texas.
I was born with creativity in my blood, but I fell in love with design after discovering its influence in small business.
Since then, I've been chasing my fascination with intentional and communicative design. I found that usability and adaptability lead to the most successful design campaigns.
Web application that helps connect girls with each other through the lost art of handwritten letters.
SaaS application that offers users a simple way to store and share links, photos, and notes all in one place.


Iceland, a Nordic island nation, is defined by its dramatic landscape with volcanoes, geysers, hot springs and lava fields. Massive glaciers are protected in Vatnajökull and Snæfellsjökull national parks.
Viking Ties
Iceland was settled by Vikings from Norway sometime in the 800s.
Volcanoes
There are more than 125 volcanic mountains in the country.
Glaciers
Glaciers are responsible for carving out everything in Iceland.


{% include head.html %}
{% include header.html %} {% include hero.html %} {% include venue.html %} {% include details.html %} {% include party.html %} {% include registry.html %} {% include rsvp.html %} {% include footer.html %}


--- layout: post status: publish published: true title: Punxsutawney Phil Prognosticator - Episode 8.60 author: display_name: Corey Fineran login: Corey email<EMAIL_ADDRESS>url: '' author_login: Corey author_email<EMAIL_ADDRESS>wordpress_id: 12107 wordpress_url: http://ivyenvy.com/?p=12107 date: '2016-10-06 23:21:49 +0000' date_gmt: '2016-10-07 04:21:49 +0000' categories: - Podcast tags: [] comments: [] ---
We've been waiting for this since last October, it's Cubs playoff baseball! In this episode, we're previewing Game #1 of the NLDS between the Cubs and Giants. We tell you how the Cubs have fared against the Giants this season and how the Cubs players have done against Cueto. We also look at the Lester vs. Giants match-up. We share our predictions for the series and Game #1.
We'll broadcast live Friday night after Game #1 and share our thoughts on how the game went, and preview Game #2. We will all three be at Game #2, so there won't be a live post-game show after that game, but we'll record a Game #2 recap and Game #3 preview episode on Sunday night.
Deep breaths, Cubs fans...and #LetsGo!


Facebook recently introduced a feature to show comments on your news feed, even for pages' posts. And, if you're like me, you follow a lot of news pages and get a lot of name-calling.
This bookmarklet will hide and show comments on Facebook by using their own styles. As of this version, you'll still see some of the structure around them, but the comments themselves will be hidden. Enjoy!
To install, drag this link to your bookmarks bar. Click the bookmark to hide or show Facebook comments.


Remember to write this ID number on the related paperwork.
Go to Check and submit Return to payments list


Hellbound Traitor:
Fools! They are wasting their time and effort on a lost cause...
Ask him who is foolish.
Quest.


This is a collection of sample ajax web applications for comparison of various JavaScript templating library.


This is a general purpose complement to the specialised manipulation
functions filter()
, select()
, mutate()
,
summarise()
and arrange()
. You can use do()
to perform arbitrary computation, returning either a data frame or
arbitrary objects which will be stored in a list. This is particularly
useful when working with models: you can fit models per group with
do()
and then flexibly extract components with either another
do()
or summarise()
.
do(.data, ...)
| .data | a tbl |
|---|---|
| ... | Expressions to apply to each group. If named, results will be
stored in a new column. If unnamed, should return a data frame. You can
use |
do()
always returns a data frame. The first columns in the data frame
will be the labels, the others will be computed from ...
. Named
arguments become list-columns, with one element for each group; unnamed
elements must be data frames and labels will be duplicated accordingly.
Groups are preserved for a single unnamed input. This is different to
summarise()
because do()
generally does not reduce the
complexity of the data, it just expresses it in a special way. For
multiple named inputs, the output is grouped by row with
rowwise()
. This allows other verbs to work in an intuitive
way.
For an empty data frame, the expressions will be evaluated once, even in the presence of a grouping. This makes sure that the format of the resulting data frame is the same for both empty and non-empty input.
If you're familiar with plyr, do()
with named arguments is basically
equivalent to plyr::dlply()
, and do()
with a single unnamed argument
is basically equivalent to plyr::ldply()
. However, instead of storing
labels in a separate attribute, the result is always a data frame. This
means that summarise()
applied to the result of do()
can
act like ldply()
.
#> Source: local data frame [6 x 11] #> Groups: cyl [3] #> #> mpg cyl disp hp drat wt qsec vs am gear carb #> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> #> 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 #> 2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 #> 3 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 #> 4 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 #> 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 #> 6 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4models <- by_cyl %>% do(mod = lm(mpg ~ disp, data = .)) models#> Source: local data frame [3 x 2] #> Groups: <by row> #> #> # A tibble: 3 × 2 #> cyl mod #> * <dbl> <list> #> 1 4 <S3: lm> #> 2 6 <S3: lm> #> 3 8 <S3: lm>#> # A tibble: 3 × 1 #> rsq #> <dbl> #> 1 0.64840514 #> 2 0.01062604 #> 3 0.27015777models %>% do(data.frame(coef = coef(.$mod)))#> Source: local data frame [6 x 1] #> Groups: <by row> #> #> # A tibble: 6 × 1 #> coef #> * <dbl> #> 1 40.871955322 #> 2 -0.135141815 #> 3 19.081987419 #> 4 0.003605119 #> 5 22.032798914 #> 6 -0.019634095models %>% do(data.frame( var = names(coef(.$mod)), coef(summary(.$mod))) )#> Source: local data frame [6 x 5] #> Groups: <by row> #> #> # A tibble: 6 × 5 #> var Estimate Std..Error t.value Pr...t.. #> * <fctr> <dbl> <dbl> <dbl> <dbl> #> 1 (Intercept) 40.871955322 3.589605400 11.3861973 1.202715e-06 #> 2 disp -0.135141815 0.033171608 -4.0740206 2.782827e-03 #> 3 (Intercept) 19.081987419 2.913992892 6.5483988 1.243968e-03 #> 4 disp 0.003605119 0.015557115 0.2317344 8.259297e-01 #> 5 (Intercept) 22.032798914 3.345241115 6.5863112 2.588765e-05 #> 6 disp -0.019634095 0.009315926 -2.1075838 5.677488e-02models <- by_cyl %>% do( mod_linear = lm(mpg ~ disp, data = .), mod_quad = lm(mpg ~ poly(disp, 2), data = .) ) models#> Source: local data frame [3 x 3] #> Groups: <by row> #> #> # A tibble: 3 × 3 #> cyl mod_linear mod_quad #> * <dbl> <list> <list> #> 1 4 <S3: lm> <S3: lm> #> 2 6 <S3: lm> <S3: lm> #> 3 8 <S3: lm> <S3: lm>compare <- models %>% do(aov = anova(.$mod_linear, .$mod_quad)) # compare %>% summarise(p.value = aov$`Pr(>F)`) if (require("nycflights13")) { # You can use it to do any arbitrary computation, like fitting a linear # model. Let's explore how carrier departure delays vary over the time carriers <- group_by(flights, carrier) group_size(carriers) mods <- do(carriers, mod = lm(arr_delay ~ dep_time, data = .)) mods %>% do(as.data.frame(coef(.$mod))) mods %>% summarise(rsq = summary(mod)$r.squared) not_run({ # This longer example shows the progress bar in action by_dest <- flights %>% group_by(dest) %>% filter(n() > 100) library(mgcv) by_dest %>% do(smooth = gam(arr_delay ~ s(dep_time) + month, data = .)) }) }


No lessons yet
Start creating lessons to feature on your home page
Create a new lesson
Please check your lesson listings


The longbow was a powerful, accurate, and agile weapon in the hands of the working class. It came to dominate battle technology and rendered heavy, expensive, plate armor nearly obsolete. Similarly, social media has shifted the tide of advertising. Big national brands are struggling to leverage its potential. But small, local business owners are able to target customer segments with incredible precision. These ad campaigns are agile, provide feedback within days instead of weeks, and can be tested and optimized at a fraction of the cost of traditional media like print and radio and provide much higher return on investment.


|
Human Object Detection Module
1.0
This module can take an image/video as input and output the localization of the detected humans in the robot’s reference frame.
|
Public Member Functions | |
| bool | moveToSrv (kids_next_door::moveTo::Request &req, kids_next_door::moveTo::Response &resp) |
| Service server which gets new target pose in request and starts moving towards it. It returns true/false once the service call is completed. More... | |
| void | initializeServiceServers () |
| Method for initializinig service servers inherited from the ROSModule. More... | |
| void | setGoal (const geometry_msgs::PoseStamped &goalPose) |
| Method to set new goal position. More... | |
| move_base_msgs::MoveBaseGoal | getGoal () |
| Method for accessing the private member goalPose. More... | |
| ~Navigation () | |
| Default Destructor for navigation class. | |
| Public Member Functions inherited from ROSModule | |
| ROSModule () | |
| Constructor for class. More... | |
| virtual | ~ROSModule () |
| Destructor for class. More... | |
| virtual void | initializeSubscribers () |
| Function to initialize Subscribers for node. More... | |
| virtual void | initializePublishers () |
| Function to initialize Publishers for node. More... | |
| virtual void | initializeServiceClients () |
| Function to initialize Service Clients for node. More... | |
| virtual void | initializeActionClients () |
| Function to initialize Action Client for node. More... | |
| virtual void | initializeTransformBroadcaster () |
| Function to initialize Transform Broadcasters for node. More... | |
| virtual void | initializeTransformListener () |
| Function to initialize Transform Listener for node. More... | |
| move_base_msgs::MoveBaseGoal Navigation::getGoal | ( | ) |
Method for accessing the private member goalPose.
| None |
|
virtual |
| bool Navigation::moveToSrv | ( | kids_next_door::moveTo::Request & | req, |
| kids_next_door::moveTo::Response & | resp | ||
| ) |
Service server which gets new target pose in request and starts moving towards it. It returns true/false once the service call is completed.
| req | - service request object of new target Pose |
| resp | - service response object of completed action |
| void Navigation::setGoal | ( | const geometry_msgs::PoseStamped & | goalPose | ) |
Method to set new goal position.
| goalPose | - const reference to new goal position |


{{ pitch.user.username }} {{ pitch.time }} {{ pitch.title }} {{ pitch.content }} {{ pitch.category_id }}


{% extends "base.html" %} {% block head %} {{ super() }} {% endblock head %} {% block bigdesc %} {% endblock bigdesc %} {% block middlecontent %}
| Computer Name | IP Address | Operating System | Is Windows | |
|---|---|---|---|---|
|
Question ID: {{ server.question_id }} Question Progress: Started Question Query: {{ server.question_query }}) |
... | ... | ... |


Login/Sign Up
Register Your Business
Want to register your business?
Fill out the form below and we will reach out as soon as possible


scale_yoy.Rd
This takes a data set with a date variable and calculates year-on-year changes for a set of variables of your choice. Returns a data.table
.
scale_yoy( data, yoy_vars, date_var = "date", leap_year_fillin = TRUE, by = NULL, growth = TRUE, format_percent = FALSE, accuracy = 0.1 )
| data | Any type of data set that can be coerced to a |
|---|---|
| yoy_vars | String vector of the variable names you want to calculate year-on-year change for. |
| date_var | The name of the date variable, as a string. Must be formatted as Date objects. |
| leap_year_fillin | If the date is Feb. 29, the previous year will not have a Feb. 29. Set to |
| by | Character vector of the variable names you'd like the operation to be performed by. There should only be one observation per date per combination of |
| growth | Set to |
| format_percent | Set to |
| accuracy | If |
This will add new variables using yoy_vars
, adding lag
and YOY
variants.
# Create some fake data to do year-on-year calculations with patterns <- data.table::data.table(date = c(lubridate::ymd('2019-01-15'), lubridate::ymd('2019-01-16'), lubridate::ymd('2020-01-15'), lubridate::ymd('2020-01-16')), visits_by_day = c(1,2,3,4)) # And scale relative to the year before! scale_yoy(patterns, 'visits_by_day')[]#> date visits_by_day visits_by_day_lag visits_by_day_YOY #> 1: 2019-01-15 1 NA NA #> 2: 2019-01-16 2 NA NA #> 3: 2020-01-15 3 1 2 #> 4: 2020-01-16 4 2 1