| RFC 8785 | JSON Canonicalization Scheme | May 2020 |
| Rundgren, et al. | Informational | [Page] |
Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the operations are reliably repeatable. One way to address this is to create a canonical representation of the data. Canonicalization also permits data to be exchanged in its original form on the "wire" while cryptographic operations performed on the canonicalized counterpart of the data in the producer and consumer endpoints generate consistent results.¶
This document describes the JSON Canonicalization Scheme (JCS). This specification defines how to create a canonical representation of JSON data by building on the strict serialization methods for JSON primitives defined by ECMAScript, constraining JSON data to the Internet JSON (I-JSON) subset, and by using deterministic property sorting.¶
This document is not an Internet Standards Track specification; it is published for informational purposes.¶
This is a contribution to the RFC Series, independently of any other RFC stream. The RFC Editor has chosen to publish this document at its discretion and makes no statement about its value for implementation or deployment. Documents approved for publication by the RFC Editor are not candidates for any level of Internet Standard; see Section 2 of RFC 7841.¶
Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at https://www.rfc-editor.org/info/rfc8785.¶
Copyright (c) 2020 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document.¶
This document describes the JSON Canonicalization Scheme (JCS). This specification defines how to create a canonical representation of JSON [RFC8259] data by building on the strict serialization methods for JSON primitives defined by ECMAScript [ECMA-262], constraining JSON data to the I-JSON [RFC7493] subset, and by using deterministic property sorting. The output from JCS is a "hashable" representation of JSON data that can be used by cryptographic methods. The subsequent paragraphs outline the primary design considerations.¶
Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the operations are reliably repeatable. One way to accomplish this is to convert the data into a format that has a simple and fixed representation, like base64url [RFC4648]. This is how JSON Web Signature (JWS) [RFC7515] addressed this issue. Another solution is to create a canonical version of the data, similar to what was done for the XML signature [XMLDSIG] standard.¶
The primary advantage with a canonicalizing scheme is that data can be kept in its original form. This is the core rationale behind JCS. Put another way, using canonicalization enables a JSON object to remain a JSON object even after being signed. This can simplify system design, documentation, and logging.¶
To avoid "reinventing the wheel", JCS relies on the serialization of JSON primitives (strings, numbers, and literals), as defined by ECMAScript (aka JavaScript) [ECMA-262] beginning with version 6.¶
Seasoned XML developers may recall difficulties getting XML signatures to validate. This was usually due to different interpretations of the quite intricate XML canonicalization rules as well as of the equally complex Web Services security standards. The reasons why JCS should not suffer from similar issues are:¶
JCS is compatible with some existing systems relying on JSON canonicalization such as JSON Web Key (JWK) Thumbprint [RFC7638] and Keybase [KEYBASE].¶
For potential uses outside of cryptography, see [JSONCOMP].¶
The intended audiences of this document are JSON tool vendors as well as designers of JSON-based cryptographic solutions. The reader is assumed to be knowledgeable in ECMAScript, including the "JSON" object.¶
Note that this document is not on the IETF standards track. However, a conformant implementation is supposed to adhere to the specified behavior for security and interoperability reasons. This text uses BCP 14 to describe that necessary behavior.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
This section describes the details related to creating a canonical JSON representation and how they are addressed by JCS.¶
Appendix F describes the RECOMMENDED way of adding JCS support to existing JSON tools.¶
Data to be canonically serialized is usually created by:¶
Irrespective of the method used, the data to be serialized MUST be adapted for I‑JSON [RFC7493] formatting, which implies the following:¶
An additional constraint is that parsed JSON string data MUST NOT be altered during subsequent serializations. For more information, see Appendix E.¶
Note: Although the Unicode standard offers the possibility of rearranging certain character sequences, referred to as "Unicode Normalization" [UCNORM], JCS-compliant string processing does not take this into consideration. That is, all components involved in a scheme depending on JCS MUST preserve Unicode string data "as is".¶
The following subsections describe the steps required to create a canonical JSON representation of the data elaborated on in the previous section.¶
Appendix A shows sample code for an ECMAScript-based canonicalizer, matching the JCS specification.¶
Whitespace between JSON tokens MUST NOT be emitted.¶
Assume the following JSON object is parsed:¶
{ "numbers": [333333333.33333329, 1E30, 4.50, 2e-3, 0.000000000000000000000000001], "string": "\u20ac$\u000F\u000aA'\u0042\u0022\u005c\\\"\/", "literals": [null, true, false] }¶
If the parsed data is subsequently serialized using a serializer compliant with ECMAScript's "JSON.stringify()", the result would (with a line wrap added for display purposes only) be rather divergent with respect to the original data:¶
{"numbers":[333333333.3333333,1e+30,4.5,0.002,1e-27],"string": "€$\u000f\nA'B\"\\\\\"/","literals":[null,true,false]}¶
The reason for the difference between the parsed data and its serialized counterpart is due to a wide tolerance on input data (as defined by JSON [RFC8259]), while output data (as defined by ECMAScript) has a fixed representation. As can be seen in the example, numbers are subject to rounding as well.¶
The following subsections describe the serialization of primitive JSON data types according to JCS. This part is identical to that of ECMAScript. In the (unlikely) event that a future version of ECMAScript would invalidate any of the following serialization methods, it will be up to the developer community to either stick to this specification or create a new specification.¶
In accordance with JSON [RFC8259], the literals "null", "true", and "false" MUST be serialized as null, true, and false, respectively.¶
For JSON string data (which includes JSON object property names as well), each Unicode code point MUST be serialized as described below (see Section <IP_ADDRESS> of [ECMA-262]):¶
Finally, the resulting sequence of Unicode code points MUST be enclosed in double quotes (").¶
Note: Since invalid Unicode data like "lone surrogates" (e.g., U+DEAD) may lead to interoperability issues including broken signatures, occurrences of such data MUST cause a compliant JCS implementation to terminate with an appropriate error.¶
ECMAScript builds on the IEEE 754 [IEEE754] double-precision standard for representing JSON number data. Such data MUST be serialized according to Section <IP_ADDRESS> of [ECMA-262], including the "Note 2" enhancement.¶
Due to the relative complexity of this part, the algorithm itself is not included in this document. For implementers of JCS-compliant number serialization, Google's implementation in V8 [V8] may serve as a reference. Another compatible number serialization reference implementation is Ryu [RYU], which is used by the JCS open-source Java implementation mentioned in Appendix G. Appendix B holds a set of IEEE 754 sample values and their corresponding JSON serialization.¶
Note: Since Not a Number (NaN) and Infinity are not permitted in JSON, occurrences of NaN or Infinity MUST cause a compliant JCS implementation to terminate with an appropriate error.¶
Although the previous step normalized the representation of primitive JSON data types, the result would not yet qualify as "canonical" since JSON Object properties are not in lexicographic (alphabetical) order.¶
Applied to the sample in Section 3.2.2, a properly canonicalized version should (with a line wrap added for display purposes only) read as:¶
{"literals":[null,true,false],"numbers":[333333333.3333333, 1e+30,4.5,0.002,1e-27],"string":"€$\u000f\nA'B\"\\\\\"/"}¶
The rules for lexicographic sorting of JSON object properties according to JCS are as follows:¶
When a JSON object is about to have its properties sorted, the following measures MUST be adhered to:¶
Property name strings either have different values at some index that is a valid index for both strings, or their lengths are different, or both. If they have different values at one or more index positions, let k be the smallest such index; then, the string whose value at position k has the smaller value, as determined by using the "<" operator, lexicographically precedes the other string. If there is no index position at which they differ, then the shorter string lexicographically precedes the longer string.¶
In plain English, this means that property names are sorted in ascending order like the following:¶
"" "a" "aa" "ab"¶
The rationale for basing the sorting algorithm on UTF-16 code units is that it maps directly to the string type in ECMAScript (featured in web browsers and Node.js), Java, and .NET. In addition, JSON only supports escape sequences expressed as UTF-16 code units, making knowledge and handling of such data a necessity anyway. Systems using another internal representation of string data will need to convert JSON property name strings into arrays of UTF-16 code units before sorting. The conversion from UTF-8 or UTF-32 to UTF-16 is defined by the Unicode [UNICODE] standard.¶
The following JSON test data can be used for verifying the correctness of the sorting scheme in a JCS implementation:¶
{ "\u20ac": "Euro Sign", "\r": "Carriage Return", "\ufb33": "Hebrew Letter Dalet With Dagesh", "1": "One", "\ud83d\ude00": "Emoji: Grinning Face", "\u0080": "Control", "\u00f6": "Latin Small Letter O With Diaeresis" }¶
Expected argument order after sorting property strings:¶
"Carriage Return" "One" "Control" "Latin Small Letter O With Diaeresis" "Euro Sign" "Emoji: Grinning Face" "Hebrew Letter Dalet With Dagesh"¶
Note: For the purpose of obtaining a deterministic property order, sorting of data encoded in UTF-8 or UTF-32 would also work, but the outcome for JSON data like above would differ and thus be incompatible with this specification. However, in practice, property names are rarely defined outside of 7-bit ASCII, making it possible to sort on string data in UTF-8 or UTF-32 format without conversion to UTF-16 and still be compatible with JCS. Whether or not this is a viable option depends on the environment JCS is used in.¶
Finally, in order to create a platform-independent representation, the result of the preceding step MUST be encoded in UTF-8.¶
Applied to the sample in Section 3.2.3, this should yield the following bytes, here shown in hexadecimal notation:¶
7b 22 6c 69 74 65 72 61 6c 73 22 3a 5b 6e 75 6c 6c 2c 74 72 75 65 2c 66 61 6c 73 65 5d 2c 22 6e 75 6d 62 65 72 73 22 3a 5b 33 33 33 33 33 33 33 33 33 2e 33 33 33 33 33 33 33 2c 31 65 2b 33 30 2c 34 2e 35 2c 30 2e 30 30 32 2c 31 65 2d 32 37 5d 2c 22 73 74 72 69 6e 67 22 3a 22 e2 82 ac 24 5c 75 30 30 30 66 5c 6e 41 27 42 5c 22 5c 5c 5c 5c 5c 22 2f 22 7d¶
This data is intended to be usable as input to cryptographic methods.¶
This document has no IANA actions.¶
It is crucial to perform sanity checks on input data to avoid overflowing buffers and similar things that could affect the integrity of the system.¶
When JCS is applied to signature schemes like the one described in Appendix F, applications MUST perform the following operations before acting upon received data:¶
If any of these steps fail, the operation in progress MUST be aborted.¶
Below is an example of a JCS canonicalizer for usage with ECMAScript-based systems:¶
//////////////////////////////////////////////////////////// // Since the primary purpose of this code is highlighting // // the core of the JCS algorithm, error handling and // // UTF-8 generation were not implemented. // //////////////////////////////////////////////////////////// var canonicalize = function(object) { var buffer = ''; serialize(object); return buffer; function serialize(object) { if (object === null || typeof object !== 'object' || object.toJSON != null) { ///////////////////////////////////////////////// // Primitive type or toJSON, use "JSON" // ///////////////////////////////////////////////// buffer += JSON.stringify(object); } else if (Array.isArray(object)) { ///////////////////////////////////////////////// // Array - Maintain element order // ///////////////////////////////////////////////// buffer += '['; let next = false; object.forEach((element) => { if (next) { buffer += ','; } next = true; ///////////////////////////////////////// // Array element - Recursive expansion // ///////////////////////////////////////// serialize(element); }); buffer += ']'; } else { ///////////////////////////////////////////////// // Object - Sort properties before serializing // ///////////////////////////////////////////////// buffer += '{'; let next = false; Object.keys(object).sort().forEach((property) => { if (next) { buffer += ','; } next = true; ///////////////////////////////////////////// // Property names are strings, use "JSON" // ///////////////////////////////////////////// buffer += JSON.stringify(property); buffer += ':'; ////////////////////////////////////////// // Property value - Recursive expansion // ////////////////////////////////////////// serialize(object[property]); }); buffer += '}'; } } };¶
The following table holds a set of ECMAScript-compatible number serialization samples, including some edge cases. The column "IEEE 754" refers to the internal ECMAScript representation of the "Number" data type, which is based on the IEEE 754 [IEEE754] standard using 64-bit (double-precision) values, here expressed in hexadecimal.¶
| IEEE 754 | JSON Representation | Comment |
|---|---|---|
0000000000000000
|
0
|
Zero
|
8000000000000000
|
0
|
Minus zero
|
0000000000000001
|
5e-324
|
Min pos number
|
8000000000000001
|
-5e-324
|
Min neg number
|
7fefffffffffffff
|
1.7976931348623157e+308
|
Max pos number
|
ffefffffffffffff
|
-1.7976931348623157e+308
|
Max neg number
|
4340000000000000
|
9007199254740992
|
Max pos int (1)
|
c340000000000000
|
-9007199254740992
|
Max neg int (1)
|
4430000000000000
|
295147905179352830000
|
~2**68 (2)
|
7fffffffffffffff
|
|
NaN (3)
|
7ff0000000000000
|
|
Infinity (3)
|
44b52d02c7e14af5
|
9.999999999999997e+22
|
|
44b52d02c7e14af6
|
1e+23
|
|
44b52d02c7e14af7
|
1.0000000000000001e+23
|
|
444b1ae4d6e2ef4e
|
999999999999999700000
|
|
444b1ae4d6e2ef4f
|
999999999999999900000
|
|
444b1ae4d6e2ef50
|
1e+21
|
|
3eb0c6f7a0b5ed8c
|
9.999999999999997e-7
|
|
3eb0c6f7a0b5ed8d
|
0.000001
|
|
41b3de4355555553
|
333333333.3333332
|
|
41b3de4355555554
|
333333333.33333325
|
|
41b3de4355555555
|
333333333.3333333
|
|
41b3de4355555556
|
333333333.3333334
|
|
41b3de4355555557
|
333333333.33333343
|
|
becbf647612f3696
|
-0.0000033333333333333333
|
|
43143ff3c1cb0959
|
1424953923781206.2
|
Round to even (4)
|
Notes:¶
For a more exhaustive validation of a JCS number serializer, you may test against a file (currently) available in the development portal (see Appendix I) containing a large set of sample values. Another option is running V8 [V8] as a live reference together with a program generating a substantial amount of random IEEE 754 values.¶
Since the result from the canonicalization process (see Section 3.2.4) is fully valid JSON, it can also be used as "Wire Format". However, this is just an option since cryptographic schemes based on JCS, in most cases, would not depend on that externally supplied JSON data already being canonicalized.¶
In fact, the ECMAScript standard way of serializing objects using "JSON.stringify()" produces a more "logical" format, where properties are kept in the order they were created or received. The example below shows an address record that could benefit from ECMAScript standard serialization:¶
{ "name": "John Doe", "address": "2000 Sunset Boulevard", "city": "Los Angeles", "zip": "90001", "state": "CA" }¶
Using canonicalization, the properties above would be output in the order "address", "city", "name", "state", and "zip", which adds fuzziness to the data from a human (developer or technical support) perspective. Canonicalization also converts JSON data into a single line of text, which may be less than ideal for debugging and logging.¶
There are several issues associated with the JSON number type, here illustrated by the following sample object:¶
{ "giantNumber": 1.4e+9999, "payMeThis": 26000.33, "int64Max":<PHONE_NUMBER>854775807 }¶
Although the sample above conforms to JSON [RFC8259], applications would normally use different native data types for storing "giantNumber" and "int64Max". In addition, monetary data like "payMeThis" would presumably not rely on floating-point data types due to rounding issues with respect to decimal arithmetic.¶
The established way of handling this kind of "overloading" of the JSON number type (at least in an extensible manner) is through mapping mechanisms, instructing parsers what to do with different properties based on their name. However, this greatly limits the value of using the JSON number type outside of its original, somewhat constrained JavaScript context. The ECMAScript "JSON" object does not support mappings to the JSON number type either.¶
Due to the above, numbers that do not have a natural place in the current JSON ecosystem MUST be wrapped using the JSON string type. This is close to a de facto standard for open systems. This is also applicable for other data types that do not have direct support in JSON, like "DateTime" objects as described in Appendix E.¶
Aided by a system using the JSON string type, be it programmatic like¶
var obj = JSON.parse('{"giantNumber": "1.4e+9999"}'); var biggie = new BigNumber(obj.giantNumber);¶
or declarative schemes like OpenAPI [OPENAPI], JCS imposes no limits on applications, including when using ECMAScript.¶
Due to the limited set of data types featured in JSON, the JSON string type is commonly used for holding subtypes. This can, depending on JSON parsing method, lead to interoperability problems, which MUST be dealt with by JCS-compliant applications targeting a wider audience.¶
Assume you want to parse a JSON object where the schema designer assigned the property "big" for holding a "BigInt" subtype and "time" for holding a "DateTime" subtype, while "val" is supposed to be a JSON number compliant with JCS. The following example shows such an object:¶
{ "time": "2019-01-28T07:45:10Z", "big": "055", "val": 3.5 }¶
Parsing of this object can be accomplished by the following ECMAScript statement:¶
var object = JSON.parse(JSON_object_featured_as_a_string);¶
After parsing, the actual data can be extracted, which for subtypes, also involves a conversion step using the result of the parsing process (an ECMAScript object) as input:¶
... = new Date(object.time); // Date object ... = BigInt(object.big); // Big integer ... = object.val; // JSON/JS number¶
Note that the "BigInt" data type is currently only natively supported by V8 [V8].¶
Canonicalization of "object" using the sample code in Appendix A would return the following string:¶
{"big":"055","time":"2019-01-28T07:45:10Z","val":3.5}¶
Although this is (with respect to JCS) technically correct, there is another way of parsing JSON data, which also can be used with ECMAScript as shown below:¶
// "BigInt" requires the following code to become JSON serializable BigInt.prototype.toJSON = function() { return this.toString(); }; // JSON parsing using a "stream"-based method var object = JSON.parse(JSON_object_featured_as_a_string, (k,v) => k == 'time' ? new Date(v) : k == 'big' ? BigInt(v) : v );¶
If you now apply the canonicalizer in Appendix A to "object", the following string would be generated:¶
{"big":"55","time":"2019-01-28T07:45:10.000Z","val":3.5}¶
In this case, the string arguments for "big" and "time" have changed with respect to the original, presumably making an application depending on JCS fail.¶
The reason for the deviation is that in stream- and schema-based JSON parsers, the original string argument is typically replaced on the fly by the native subtype that, when serialized, may exhibit a different and platform-dependent pattern.¶
That is, stream- and schema-based parsing MUST treat subtypes as "pure" (immutable) JSON string types and perform the actual conversion to the designated native type in a subsequent step. In modern programming platforms like Go, Java, and C#, this can be achieved with moderate efforts by combining annotations, getters, and setters. Below is an example in C#/Json.NET showing a part of a class that is serializable as a JSON object:¶
// The "pure" string solution uses a local // string variable for JSON serialization while // exposing another type to the application [JsonProperty("amount")] private string _amount; [JsonIgnore] public decimal Amount { get { return decimal.Parse(_amount); } set { _amount = value.ToString(); } }¶
In an application, "Amount" can be accessed as any other property while it is actually represented by a quoted string in JSON contexts.¶
Note: The example above also addresses the constraints on numeric data implied by I-JSON (the C# "decimal" data type has quite different characteristics compared to IEEE 754 double precision).¶
Since the JSON array construct permits mixing arbitrary JSON data types, custom parsing and serialization code may be required to cope with subtypes anyway.¶
The optimal solution is integrating support for JCS directly in JSON serializers (parsers need no changes). That is, canonicalization would just be an additional "mode" for a JSON serializer. However, this is currently not the case. Fortunately, JCS support can be introduced through externally supplied canonicalizer software acting as a post processor to existing JSON serializers. This arrangement also relieves the JCS implementer from having to deal with how underlying data is to be represented in JSON.¶
The post processor concept enables signature creation schemes like the following:¶
A compatible signature verification scheme would then be as follows:¶
A canonicalizer like above is effectively only a "filter", potentially usable with a multitude of quite different cryptographic schemes.¶
Using a JSON serializer with integrated JCS support, the serialization performed before the canonicalization step could be eliminated for both processes.¶
The following open-source implementations have been verified to be compatible with JCS:¶
There are (and have been) other efforts creating "Canonical JSON". Below is a list of URLs to some of them:¶
The listed efforts all build on text-level JSON-to-JSON transformations. The primary feature of text-level canonicalization is that it can be made neutral to the flavor of JSON used. However, such schemes also imply major changes to the JSON parsing process, which is a likely hurdle for adoption. Albeit at the expense of certain JSON and application constraints, JCS was designed to be compatible with existing JSON tools.¶
The JCS specification is currently developed at: <https://github.com/cyberphone/ietf-json-canon>.¶
JCS source code and extensive test data is available at: <https://github.com/cyberphone/json-canonicalization>.¶
Building on ECMAScript number serialization was originally proposed by James Manger. This ultimately led to the adoption of the entire ECMAScript serialization scheme for JSON primitives.¶
Other people who have contributed with valuable input to this specification include Scott Ananian, Tim Bray, Ben Campbell, Adrian Farell, Richard Gibson, Bron Gondwana, John-Mark Gurney, Mike Jones, John Levine, Mark Miller, Matthew Miller, Mark Nottingham, Mike Samuel, Jim Schaad, Robert Tupelo-Schneck, and Michal Wadas.¶
For carrying out real-world concept verification, the software and support for number serialization provided by Ulf Adams, Tanner Gooding, and Remy Oudompheng was very helpful.¶


|
Panda3D
|
This class handles smoothing of sampled motion points over time, e.g. More...
Public Types | |
| enum | PredictionMode { PM_off = 0, PM_on = 1 } |
| enum | SmoothMode { SM_off = 0, SM_on = 1 } |
Public Member Functions | |
| __init__ () | |
| __init__ (const SmoothMover) | |
| applySmoothHpr (NodePath node) | |
| Applies the smoothed orientation to the indicated NodePath. More... | |
| applySmoothPos (NodePath node) | |
| Applies the smoothed position to the indicated NodePath. More... | |
| applySmoothPosHpr (NodePath pos_node, NodePath hpr_node) | |
| Applies the smoothed position and orientation to the indicated NodePath. More... | |
| clearPositions (bool reset_velocity) | |
| Erases all the old position reports. More... | |
| computeAndApplySmoothHpr (NodePath hpr_node) | |
| A further optimization to reduce Python calls. More... | |
| computeAndApplySmoothPos (NodePath node) | |
| A further optimization to reduce Python calls. More... | |
| computeAndApplySmoothPosHpr (NodePath pos_node, NodePath hpr_node) | |
| A further optimization to reduce Python calls. More... | |
| bool | computeSmoothPosition () |
| Computes the smoothed position (and orientation) of the mover at the indicated point in time, based on the previous position reports. More... | |
| bool | computeSmoothPosition (double timestamp) |
| Computes the smoothed position (and orientation) of the mover at the indicated point in time, based on the previous position reports. More... | |
| bool | getAcceptClockSkew () |
| Returns the current state of the 'accept clock skew' flag. More... | |
| bool | getDefaultToStandingStill () |
| Returns the current state of the 'default to standing still' flag. More... | |
| double | getDelay () |
| Returns the amount of time, in seconds, to delay the computed position of a SmoothMover. More... | |
| bool | getDirectionalVelocity () |
| Returns the current state of the 'directional velocity' flag. More... | |
| double | getExpectedBroadcastPeriod () |
| Returns the interval at which we expect the SmoothNodes to broadcast their position, in elapsed seconds. More... | |
| const LVecBase3 | getForwardAxis () |
| Returns the smoothed position as computed by a previous call to compute_smooth_position(). More... | |
| bool | getLatestPosition () |
| Updates the smooth_pos (and smooth_hpr, etc.) members to reflect the absolute latest position known for this avatar. More... | |
| double | getMaxPositionAge () |
| Returns the maximum amount of time a position is allowed to remain unchanged before assuming it represents the avatar actually standing still. More... | |
| double | getMostRecentTimestamp () |
| Returns most recently recorded timestamp. More... | |
| SmoothMover::PredictionMode | getPredictionMode () |
| Returns the predictioning mode of all SmoothMovers in the world. More... | |
| double | getResetVelocityAge () |
| Returns the amount of time that should elapse after the last position report before the velocity is reset to 0. More... | |
| const LVecBase3 | getSampleHpr () |
| Returns the current orientation of the working sample point. More... | |
| const LPoint3 | getSamplePos () |
| Returns the current position of the working sample point. More... | |
| float | getSmoothForwardVelocity () |
| Returns the speed at which the avatar is moving, in feet per second, along its own forward axis (after applying the avatar's hpr). More... | |
| const LVecBase3 | getSmoothHpr () |
| Returns the smoothed orientation as computed by a previous call to compute_smooth_position(). More... | |
| float | getSmoothLateralVelocity () |
| Returns the speed at which the avatar is moving, in feet per second, along its own lateral axis (after applying the avatar's hpr). More... | |
| SmoothMover::SmoothMode | getSmoothMode () |
| Returns the smoothing mode of all SmoothMovers in the world. More... | |
| const LPoint3 | getSmoothPos () |
| Returns the smoothed position as computed by a previous call to compute_smooth_position(). More... | |
| float | getSmoothRotationalVelocity () |
| Returns the speed at which the avatar is rotating in the horizontal plane (i.e. More... | |
| handleWrtReparent (NodePath old_parent, NodePath new_parent) | |
| Node is being wrtReparented, update recorded sample positions to reflect new parent. More... | |
| bool | hasMostRecentTimestamp () |
| Returns true if we have most recently recorded timestamp. More... | |
| markPosition () | |
| Stores the position, orientation, and timestamp (if relevant) indicated by previous calls to set_pos(), set_hpr(), and set_timestamp() in a new position report. More... | |
| output (Ostream out) | |
| setAcceptClockSkew (bool flag) | |
| Sets the 'accept clock skew' flag. More... | |
| setDefaultToStandingStill (bool flag) | |
| Sets the flag that indicates whether to assume that the node stopped moving during periods when we don't get enough position updates. More... | |
| setDelay (double delay) | |
| Sets the amount of time, in seconds, to delay the computed position of a SmoothMover. More... | |
| setDirectionalVelocity (bool flag) | |
| Sets the flag that indicates whether the avatar's direction is considered in computing the velocity. More... | |
| setExpectedBroadcastPeriod (double period) | |
| Sets the interval at which we expect the SmoothNodes to broadcast their position, in elapsed seconds. More... | |
| bool | setH (float h) |
| Sets the heading only. More... | |
| bool | setHpr (const LVecBase3 hpr) |
| Specifies the orientation of the SmoothMover at a particular time in the past. More... | |
| bool | setHpr (float h, float p, float r) |
| Specifies the orientation of the SmoothMover at a particular time in the past. More... | |
| setMaxPositionAge (double age) | |
| Sets the maximum amount of time a position is allowed to remain unchanged before assuming it represents the avatar actually standing still. More... | |
| bool | setP (float p) |
| Sets the pitch only. More... | |
| setPhonyTimestamp (double timestamp, bool period_adjust) | |
| Lies and specifies that the current position report was received now. More... | |
| bool | setPos (const LVecBase3 pos) |
| Specifies the position of the SmoothMover at a particular time in the past. More... | |
| bool | setPos (float x, float y, float z) |
| Specifies the position of the SmoothMover at a particular time in the past. More... | |
| bool | setPosHpr (const LVecBase3 pos, const LVecBase3 hpr) |
| Specifies the position and orientation of the SmoothMover at a particular time in the past. More... | |
| bool | setPosHpr (float x, float y, float z, float h, float p, float r) |
| Specifies the position of the SmoothMover at a particular time in the past. More... | |
| setPredictionMode (SmoothMover::PredictionMode mode) | |
| Sets the predictioning mode of all SmoothMovers in the world. More... | |
| bool | setR (float r) |
| Sets the roll only. More... | |
| setResetVelocityAge (double age) | |
| Sets the amount of time that should elapse after the last position report before the velocity is reset to 0. More... | |
| setSmoothMode (SmoothMover::SmoothMode mode) | |
| Sets the smoothing mode of all SmoothMovers in the world. More... | |
| setTimestamp (double timestamp) | |
| Specifies the time that the current position report applies. More... | |
| bool | setX (float x) |
| Sets the X position only. More... | |
| bool | setY (float y) |
| Sets the Y position only. More... | |
| bool | setZ (float z) |
| Sets the Z position only. More... | |
| write (Ostream out) | |
This class handles smoothing of sampled motion points over time, e.g.
for smoothing the apparent movement of remote avatars, whose positions are sent via occasional telemetry updates.
It can operate in any of three modes: off, in which it does not smooth any motion but provides the last position it was told; smoothing only, in which it smooths motion information but never tries to anticipate where the avatar might be going; or full prediction, in which it smooths motion as well as tries to predict the avatar's position in lead of the last position update. The assumption is that all SmoothMovers in the world will be operating in the same mode together.
| enum PredictionMode |
| enum SmoothMode |
| __init__ | ( | ) |
| __init__ | ( | const | SmoothMover | ) |
| applySmoothHpr | ( | NodePath | node | ) |
Applies the smoothed orientation to the indicated NodePath.
This is equivalent to calling node.set_hpr(smooth_mover->get_smooth_hpr()). It exists as an optimization only, to avoid the overhead of passing the return value through Python.
| applySmoothPos | ( | NodePath | node | ) |
Applies the smoothed position to the indicated NodePath.
This is equivalent to calling node.set_pos(smooth_mover->get_smooth_pos()). It exists as an optimization only, to avoid the overhead of passing the return value through Python.
Applies the smoothed position and orientation to the indicated NodePath.
This is equivalent to calling node.set_pos_hpr(smooth_mover->get_smooth_pos(), smooth_mover->get_smooth_hpr()). It exists as an optimization only, to avoid the overhead of passing the return value through Python.
| clearPositions | ( | bool | reset_velocity | ) |
Erases all the old position reports.
This should be done, for instance, prior to teleporting the avatar to a new position; otherwise, the smoother might try to lerp the avatar there. If reset_velocity is true, the velocity is also reset to 0.
| computeAndApplySmoothHpr | ( | NodePath | hpr_node | ) |
A further optimization to reduce Python calls.
This computes the smooth position and applies it to the indicated node or nodes in one call. The pos_node and hpr_node might be the same NodePath.
| computeAndApplySmoothPos | ( | NodePath | node | ) |
A further optimization to reduce Python calls.
This computes the smooth position and applies it to the indicated node in one call.
A further optimization to reduce Python calls.
This computes the smooth position and applies it to the indicated node or nodes in one call. The pos_node and hpr_node might be the same NodePath.
| bool computeSmoothPosition | ( | ) |
Computes the smoothed position (and orientation) of the mover at the indicated point in time, based on the previous position reports.
After this call has been made, get_smooth_pos() etc. may be called to retrieve the smoothed position.
With no parameter, the function uses ClockObject::get_frame_time() as the default time.
| bool computeSmoothPosition | ( | double | timestamp | ) |
Computes the smoothed position (and orientation) of the mover at the indicated point in time, based on the previous position reports.
After this call has been made, get_smooth_pos() etc. may be called to retrieve the smoothed position.
The return value is true if the value has changed (or might have changed) since the last call to compute_smooth_position(), or false if it remains the same.
| bool getAcceptClockSkew | ( | ) |
Returns the current state of the 'accept clock skew' flag.
See set_accept_clock_skew().
| bool getDefaultToStandingStill | ( | ) |
Returns the current state of the 'default to standing still' flag.
See set_default_to_standing_still().
| double getDelay | ( | ) |
Returns the amount of time, in seconds, to delay the computed position of a SmoothMover.
See set_delay().
| bool getDirectionalVelocity | ( | ) |
Returns the current state of the 'directional velocity' flag.
See set_directional_velocity().
| double getExpectedBroadcastPeriod | ( | ) |
Returns the interval at which we expect the SmoothNodes to broadcast their position, in elapsed seconds.
See set_expected_broadcast_period().
| const LVecBase3 getForwardAxis | ( | ) |
Returns the smoothed position as computed by a previous call to compute_smooth_position().
| bool getLatestPosition | ( | ) |
Updates the smooth_pos (and smooth_hpr, etc.) members to reflect the absolute latest position known for this avatar.
This may result in a pop to the most recent position.
Returns true if the latest position is known, false otherwise.
| double getMaxPositionAge | ( | ) |
Returns the maximum amount of time a position is allowed to remain unchanged before assuming it represents the avatar actually standing still.
| double getMostRecentTimestamp | ( | ) |
Returns most recently recorded timestamp.
| SmoothMover::PredictionMode getPredictionMode | ( | ) |
Returns the predictioning mode of all SmoothMovers in the world.
See set_prediction_mode().
| double getResetVelocityAge | ( | ) |
Returns the amount of time that should elapse after the last position report before the velocity is reset to 0.
See set_reset_velocity_age().
| const LVecBase3 getSampleHpr | ( | ) |
Returns the current orientation of the working sample point.
This orientation is updated periodically by set_h(), set_p(), etc., and its current value is copied to the sample point table when mark_position() is called.
| const LPoint3 getSamplePos | ( | ) |
Returns the current position of the working sample point.
This position is updated periodically by set_x(), set_y(), etc., and its current value is copied to the sample point table when mark_position() is called.
| float getSmoothForwardVelocity | ( | ) |
Returns the speed at which the avatar is moving, in feet per second, along its own forward axis (after applying the avatar's hpr).
This will be a positive number if the avatar is moving forward, and a negative number if it is moving backward.
| const LVecBase3 getSmoothHpr | ( | ) |
Returns the smoothed orientation as computed by a previous call to compute_smooth_position().
| float getSmoothLateralVelocity | ( | ) |
Returns the speed at which the avatar is moving, in feet per second, along its own lateral axis (after applying the avatar's hpr).
This will be a positive number if the avatar is moving right, and a negative number if it is moving left.
| SmoothMover::SmoothMode getSmoothMode | ( | ) |
Returns the smoothing mode of all SmoothMovers in the world.
See set_smooth_mode().
| const LPoint3 getSmoothPos | ( | ) |
Returns the smoothed position as computed by a previous call to compute_smooth_position().
| float getSmoothRotationalVelocity | ( | ) |
Returns the speed at which the avatar is rotating in the horizontal plane (i.e.
heading), in degrees per second. This may be positive or negative, according to the direction of rotation.
Node is being wrtReparented, update recorded sample positions to reflect new parent.
| bool hasMostRecentTimestamp | ( | ) |
Returns true if we have most recently recorded timestamp.
| markPosition | ( | ) |
Stores the position, orientation, and timestamp (if relevant) indicated by previous calls to set_pos(), set_hpr(), and set_timestamp() in a new position report.
When compute_smooth_position() is called, it uses these stored position reports to base its computation of the known position.
| output | ( | Ostream | out | ) |
| setAcceptClockSkew | ( | bool | flag | ) |
Sets the 'accept clock skew' flag.
When this flag is true, clock skew from the other clients will be tolerated by delaying each smooth mover's position an additional amount, on top of that specified by set_delay(), based on the measured average latency for timestamp messages received by the client.
In this way, if the other client has significant clock skew with respect to our clock, it will be evident as a large positive or negative average latency for timestamps. By subtracting out this average latency, we compensate for poor clock sync.
| setDefaultToStandingStill | ( | bool | flag | ) |
Sets the flag that indicates whether to assume that the node stopped moving during periods when we don't get enough position updates.
If true, the object will stand still momentarily. If false, the object will continuously lerp between the position updates that we did get.
| setDelay | ( | double | delay | ) |
Sets the amount of time, in seconds, to delay the computed position of a SmoothMover.
This is particularly useful when the prediction mode is off, because it can allow the apparent motion of an avatar to appear smooth without relying on prediction, at the cost of introducing additional lag in the avatar's apparent position.
| setDirectionalVelocity | ( | bool | flag | ) |
Sets the flag that indicates whether the avatar's direction is considered in computing the velocity.
When this is true, velocity is automatically decomposed into a forward and a lateral velocity (and both may be positive or negative); when it is false, all velocity is always returned as forward velocity (and it is always positive).
| setExpectedBroadcastPeriod | ( | double | period | ) |
Sets the interval at which we expect the SmoothNodes to broadcast their position, in elapsed seconds.
This controls the length of time we assume the object has truly stopped, when we receive a long sequence of no updates.
| bool setH | ( | float | h | ) |
Sets the heading only.
See set_hpr().
| bool setHpr | ( | const LVecBase3 | hpr | ) |
Specifies the orientation of the SmoothMover at a particular time in the past.
When mark_position() is called, this will be recorded (along with hpr and timestamp) in a position report, which will then be used along with all other position reports to determine the smooth position at any particular instant.
The return value is true if any parameter has changed since the last call to set_hpr(), or false if they are the same.
| bool setHpr | ( | float | h, |
| float | p, | ||
| float | r | ||
| ) |
Specifies the orientation of the SmoothMover at a particular time in the past.
When mark_position() is called, this will be recorded (along with hpr and timestamp) in a position report, which will then be used along with all other position reports to determine the smooth position at any particular instant.
The return value is true if any parameter has changed since the last call to set_hpr(), or false if they are the same.
| setMaxPositionAge | ( | double | age | ) |
Sets the maximum amount of time a position is allowed to remain unchanged before assuming it represents the avatar actually standing still.
| bool setP | ( | float | p | ) |
Sets the pitch only.
See set_hpr().
| setPhonyTimestamp | ( | double | timestamp, |
| bool | period_adjust | ||
| ) |
Lies and specifies that the current position report was received now.
This is usually used for very old position reports for which we're not sure of the actual receipt time.
| bool setPos | ( | const LVecBase3 | pos | ) |
Specifies the position of the SmoothMover at a particular time in the past.
When mark_position() is called, this will be recorded (along with hpr and timestamp) in a position report, which will then be used along with all other position reports to determine the smooth position at any particular instant.
The return value is true if any parameter has changed since the last call to set_pos(), or false if they are the same.
| bool setPos | ( | float | x, |
| float | y, | ||
| float | z | ||
| ) |
Specifies the position of the SmoothMover at a particular time in the past.
When mark_position() is called, this will be recorded (along with hpr and timestamp) in a position report, which will then be used along with all other position reports to determine the smooth position at any particular instant.
The return value is true if any parameter has changed since the last call to set_pos(), or false if they are the same.
Specifies the position and orientation of the SmoothMover at a particular time in the past.
When mark_position() is called, this will be recorded (along with timestamp) in a position report, which will then be used along with all other position reports to determine the smooth position at any particular instant.
The return value is true if any parameter has changed since the last call to set_pos_hpr(), or false if they are the same.
| bool setPosHpr | ( | float | x, |
| float | y, | ||
| float | z, | ||
| float | h, | ||
| float | p, | ||
| float | r | ||
| ) |
Specifies the position of the SmoothMover at a particular time in the past.
When mark_position() is called, this will be recorded (along with timestamp) in a position report, which will then be used along with all other position reports to determine the smooth position at any particular instant.
The return value is true if any parameter has changed since the last call to set_pos_hpr(), or false if they are the same.
| setPredictionMode | ( | SmoothMover::PredictionMode | mode | ) |
Sets the predictioning mode of all SmoothMovers in the world.
If this is PM_off, no prediction will be performed, but smoothing might still be performed.
| bool setR | ( | float | r | ) |
Sets the roll only.
See set_hpr().
| setResetVelocityAge | ( | double | age | ) |
Sets the amount of time that should elapse after the last position report before the velocity is reset to 0.
This is similar to max_position_age, but it is only used to determine the resetting of the reported velocity. It should always be greater than or equal to max_position_age.
| setSmoothMode | ( | SmoothMover::SmoothMode | mode | ) |
Sets the smoothing mode of all SmoothMovers in the world.
If this is SM_off, no smoothing or prediction will be performed, and get_smooth_pos() will simply return the position last set by mark_position().
| setTimestamp | ( | double | timestamp | ) |
Specifies the time that the current position report applies.
This should be called, along with set_pos() and set_hpr(), before a call to mark_position().
| bool setX | ( | float | x | ) |
Sets the X position only.
See set_pos().
| bool setY | ( | float | y | ) |
Sets the Y position only.
See set_pos().
| bool setZ | ( | float | z | ) |
Sets the Z position only.
See set_pos().
| write | ( | Ostream | out | ) |


| Total net profit | 25.34 | Gross profit | 79.35 | Gross loss | -54.01 |
| Profit factor | 1.47 | Expected payoff | 0.91 | ||
| Absolute drawdown | -36.52 | Maximal drawdown (%) | 47.47 (433.52%) | ||
| Total trades | 28 | Profit trades (% of total) | 14 (50.0%) | Loss trades (% of total) | 14 (50.0%) |
| Long positions (won %) | 16 (25.0%) | Short positions (won %) | 12 (83.33%) | ||
| Largest | profit trade | 16.43 | loss trade | -12.18 | |
| Average | profit trade | 5.67 | loss trade | -3.86 | |
| Minimum | profit trade | 0.59 | loss trade | -0.01 | |
| Maximum | take profit in pips | 207.2 | stop loss in pips | -119.4 | |
| Average | take profit in pips | 154.7 | stop loss in pips | -88.5 | |
| Minimum | take profit in pips | 145.6 | stop loss in pips | -2.2 | |
| Maximum | Reward-Risk | 72.0 | Duration in minutes | 4677 | |
| Average | Reward-Risk | 5.3 | Duration in minutes | 1248.4 | |
| Minimum | Reward-Risk | 1.2 | Duration in minutes | 89 | |
| Maximum | consecutive wins (profit in money) | 6.0 (10.79) | consecutive losses (loss in money) | 9.0 (-47.47) | |
| Average | consecutive wins | 3.0 | consecutive losses | 4.0 |
| Total net profit | -45.3 | Gross profit | 6.01 | Gross loss | -51.31 |
| Profit factor | 0.12 | Expected payoff | -2.83 | ||
| Absolute drawdown | -45.3 | Maximal drawdown (%) | 46.89 (2949.06%) | ||
| Total trades | 16 | Profit trades (% of total) | 4 (25.0%) | Loss trades (% of total) | 12 (75.0%) |
| Largest | profit trade | 2.49 | loss trade | -12.18 | |
| Average | profit trade | 1.5 | loss trade | -4.28 | |
| Minimum | profit trade | 0.7 | loss trade | -0.01 | |
| Maximum | take profit in pips | 207.2 | stop loss in pips | -119.4 | |
| Average | take profit in pips | 158.9 | stop loss in pips | -104.1 | |
| Minimum | take profit in pips | 145.6 | stop loss in pips | -57.8 | |
| Maximum | Reward-Risk | 3.6 | Duration in minutes | 4677.0 | |
| Average | Reward-Risk | 1.6 | Duration in minutes | 1624.0 | |
| Minimum | Reward-Risk | 1.2 | Duration in minutes | 190.0 | |
| Maximum | consecutive wins (profit in money) | 2.0 (1.59) | consecutive losses (loss in money) | 8.0 (-45.46) | |
| Average | consecutive wins | 2.0 | consecutive losses | 4.0 |
| Total net profit | 70.64 | Gross profit | 73.34 | Gross loss | -2.7 |
| Profit factor | 27.16 | Expected payoff | 5.89 | ||
| Absolute drawdown | 2.87 | Maximal drawdown (%) | 2.01 (18.63%) | ||
| Total trades | 12 | Profit trades (% of total) | 10 (83.33%) | Loss trades (% of total) | 2 (16.67%) |
| Largest | profit trade | 16.43 | loss trade | -2.01 | |
| Average | profit trade | 7.33 | loss trade | -1.35 | |
| Minimum | profit trade | 0.59 | loss trade | -0.69 | |
| Maximum | take profit in pips | 158.5 | stop loss in pips | -119.0 | |
| Average | take profit in pips | 149.1 | stop loss in pips | -67.7 | |
| Minimum | take profit in pips | 146.0 | stop loss in pips | -2.2 | |
| Maximum | Reward-Risk | 72.0 | Duration in minutes | 1167.0 | |
| Average | Reward-Risk | 10.2 | Duration in minutes | 747.5 | |
| Minimum | Reward-Risk | Duration in minutes | 89.0 | ||
| Maximum | consecutive wins (profit in money) | 6.0 (10.79) | consecutive losses (loss in money) | 1.0 (-2.01) | |
| Average | consecutive wins | 5.0 | consecutive losses | 1.0 |


Preparation time
less than 30 mins
Cooking time
less than 10 mins
Serves
Serves 4-6
Dietary
It’s hard to explain the precise nature of these: they are light, almost like doughnuts, but made of scented, sweet air rather than batter. Strictly speaking, you shouldn’t leave them to stand, once they’ve been made. But pleasurable though it is to eat them as soon as you can – once they’re out of the pan – I have found they’re fine for a while in a low oven. The contrast between outside and inside is lost rather, but not so much as you gain in the convenience of being able to make them ahead.
Put the egg and ricotta into a bowl and beat together until smooth.
Add the flour, baking powder, sambuca, sugar and grated orange zest. Beat the mixture again to make a smooth batter.
Pour about 2cm/1in oil into a frying pan, and heat until a small piece of bread sizzles when you drop it into the pan and browns in about 40 seconds (the temperature should be at about 180C/350F). And keep your eye on the pan at all times.
Oil a teaspoon measure and gently drop rounded teaspoons of the ricotta batter into the pan, about four at a time is manageable.
The little kisses will puff up slightly and turn golden underneath, so flip them over carefully with an implement, to colour the other side. Watch out that the oil doesn’t get too hot, turning the heat down if they are browning too quickly.
Once they are golden all over, lift them out with a slotted spoon and place them on a plate lined with one or two sheets of kitchen roll, to get rid of any excess oil.
Carry on cooking until all the mixture is used up, then turn off the heat under the oil. Once the kisses have cooled a bit, push the icing sugar through a small sieve to dust them thickly.
If you are not eating them straightaway, pop the pre-sugared cooked kisses on a rack over a tin in a 150C/Gas 2 oven, and keep them warm for up to one hour.
Serve with an espresso, with one teaspoon of sambuca added, for each person.


i had a life story written of how i started out trying to make games in flash, but i was getting blah blah, so – in short – much credit to tonypa, out of society and Keith Peters for getting my feet wet. online there was very little resources for creating games based on OOP (though steve has some excellent tutorials) so i tried to marry my practices used at work with that of what was available on the internet *mostly in AS1.
plus my mind wonders pretty frequently, so to follow a whole tutorial is hard. i tend to get through about 1/5 of it, stop looking at it, (maybe throw on Heaven Tonight or Trash&Burn), and start trying to incorporate what i learned with what i already know, and get frustrated that nothing is working the way i want (blah blah).
while i was making another game, i started to realize i had gotten “smarter” (all thanks to Keith, Sam and Colby) and thought i throw something up here for anybody that is in the same boat i am – trying to make sense of making games in Flash using OOP principles instead of the timeline and symbol-based functions.
First up: the basic Hero. i only call it the Hero because it reacts to user controls like the keyboard, though i could be proven wrong.
download it here and have a look around.
if any of you have a different approach or any questions, leave a comment. i am terrible at commenting my code so…
and here is a short list of people and sites you should really check out:
tonypa
andré michelle
video-animation
out of society
keith peters
gotoAndPlay()
maybe i’ll make a bigger list of resources some day.


The Sparks Foundation
Home
About
Contact us
COME AND DONATE
BECOME A HOPE FOR THEM AND HELP THEM TO ACHIEVE THEIR BETTER TOMORROW
MAKING A DONATION IS THE ULTIMATE SIGN OF SOLIDARITY


1. Main / Start Up Screen
This screen embodies the core of the program. Here you will find the master list of all frames. Also, here you can navigate to the other aspects of the program. You can have multiple sub-windows open at once - in fact, quite often this is very beneficial.
2. The Main Frame List
The main frame list takes up the majority of the main screen. This list consists of the following sections:
- Timestamp: The timestamp is either in microseconds or seconds. This is a setting in preferences. Either way, the timestamp can have microsecond resolution. The difference is just whether there is a decimal point or not. GVRET has the ability to maintain full microsecond resolution for timestamping purposes. There is a third timing mode where the timestamp can be customized and is based upon the actual “clock” time.
- ID: The ID is specified either in hexadecimal or decimal (a preference you can set). This is the message identifier sent over the CAN bus.
- Ext: 0 = Standard message (11 bit ID). 1 = Extended message (29 bit ID)
- Dir: Either “Rx” or “Tx” to show whether SavvyCAN has received or sent this message.
- Bus: SavvyCAN supports a variety of capture hardware. GVRET compatible devices can support more than one bus. The bus a frame came in on is specified here. Many file formats do not specify bus and thus all frames will be loaded as bus 0.
- Len: The number of data bytes that were sent with this frame. It can range from 0 to 8.
- Data: All of the data bytes separated by spaces. Can be in either hexadecimal or decimal (preference). If “Interpet Frames” is checked you will also see extra data at the end of any frames that have DBC data. To see the rest of this data click upon the frame in the list. It will automatically expand to show all signals attached to that frame.
3. The Bottom Statusbar
At the very bottom of the main screen is a status bar with two sections.
- The first section shows the connection status. You will see the number of currently connected buses here.
- The second second section shows which file is currently loaded. This is updated by loading or saving.
4. The Rest of the Main Window
To the right of the main frames list is an area that shows the total number of captured frames and the frames per second. Total frames might not match the number of shown frames. If you’ve deselected any IDs in the filter list then fewer frames will be shown. Frames per second is calculated as an average and so will wind up or down when there is a sudden change.
Suspend Capturing / Resume Capturing is a button that will temporarily disable frame capture or re-enable it. This can be used to keep everything connected without capturing traffic for a short time. This can help to not capture traffic in between tests.
The “Normalize Frame Timing” button is used to reset the lowest timestamp to “0” and offset all other timestamps accordingly. This is useful to remove the starting offset when you start up the GVRET board long before actual traffic starts. SavvyCAN is designed such that this doesn’t really matter most of the time but normalizing the timing might be useful to help correlate the timing between two different captures.
The “Clear Frames” button will erase all captured messages. They will be irreversably erased and all memory will be freed.
The “Auto Scroll Window” checkbox will cause the main frame list to hunt toward the bottom of the list as frames come in. It will normally not be quite at the very bottom as, for performance reasons, the program runs at quarter second updates to things like the auto scroll. Thus, the main list will be scrolled to the bottom four times per second.
The “Interpret Frames” checkbox is used to specify whether the loaded DBC file should be used to interpret all available messages and signals. One might want this off for performance reasons (interpreting takes some extra processor power and RAM) or to declutter the main frame list.
The “Overwrite Mode” checkbox is used to ensure that only the newest frame for each message ID is shown. That is, if 100 messages with ID 0x105 come in you will see only the newest one. This is generally used along side “Interpret Frames” to interpret frames and always see the up-to-date information.
“Frame Filtering” provides a list of all the frame IDs seen so far. Any ID which is checked will be shown in the main list. Any ID which is unchecked will not. This can be used to hone in on frames of importance while hiding frames that are currently of no interest. The filtered list can be saved as well.
5. Loading And Saving Frames
What CANBus analysis tool would be complete without an easy way to load and save frames?
- SavvyCAN can load and save in several formats (a few of which are listed below):
- CRTD: This format was made by Mark Webb-Johnson for OVMS (open vehicle monitoring system) and other related tools. It is a reasonably readable and compact format.
- GVRET: This is the native format for GVRET and SavvyCAN. The GVRET format saves more information such as the bus a frame originated on. This format is in CSV (comma delimited) format and as such can easily be loaded into your favorite spreadsheet program as well.
- Generic ID/DATA - Another CSV format. This is a very cut down format with limited information.
- BusMaster - This is the format output by the BusMaster CANBus program. BusMaster is an open source Windows-only somewhat clone of CANAlyzer (the 800lb gorilla in the analysis space). The ability to load and save in this format makes SavvyCAN fully capable of swapping data with BusMaster should you need to do so.
- Microchip - Format output by Microchip CANBus tools. Perhaps you have logs that were captured with a $100 Microchip dongle? You can load them in SavvyCAN.
There are many other formats supported. Some are only supported for writing, some only for reading. The list of supported formats is expanded every so often.
6. Filters
You might notice that there are three entries in the file menu that mention filters. SavvyCAN can filter messages so that you only see some of the messages coming in on the bus. It still saves all incoming messages but you are able to filter which you will view at any given time. SavvyCAN allows for loading and saving the list of frames you’d like to view so that you can easily switch “sets” of frames to view. Also, when saving you can optionally save just the frames that you have filtered instead of every captured frame. Filters are set in the lower righthand of the this screen. All IDs are selected by default. To deselect an ID click on the checkbox next to it. You can also deselect all IDs or select all IDs. These are useful if you only want to view a couple of IDs (click None then the few you need) or you just want to remove a couple (click All and then deselect the ones you don’t care about).
7. What is DBC and why would I care?!
I’m glad you asked. DBC is a file format used to specify how “signals” are stored in “messages.” A message is essentially a unique packet of data sent on the CAN bus. Ordinarily this message is differentiated by frame ID. Each ID is a different message (usually). A signal is a piece of data stored in a message. For instance, ID 0x105 might be a message from the vehicle control unit to the motor inverter. Within that message bytes 0 and 1 might encode the desired torque. That would be a signal. A DBC file allows these relationships to be specified and named. It also allows for scaling of values stored in a signal. Additionally, a signal can have values associated with textual output. For instance, if a signal encodes the current gear then a DBC file can define that a value of 0 means “Park” and a value of 1 means “Drive”. This makes analysis a lot easier since you do not need to remember the mapping yourself. In this way data can be better understood by users of the program. Also, other windows can use the DBC file for such things as being able to graph a signal without having to figure out the actual details of that signal.
8. How DBC interacts with the main screen:
First of all, one can load and save DBC files from the “DBC File Manager” found in the File menu. Also in the File menu it is possible to save the currently loaded frames but with DBC decoding. This is somewhat like the normal saving functionality with a two differences: there is only one output format and that format has all signals contained in each message listed and decoded.


| Contents | Prev | Next | Index | Java Language Specification Second Edition |
CHAPTER 2
This chapter describes the context-free grammars used in this specification to define the lexical and syntactic structure of a program.
Starting from a sentence consisting of a single distinguished nonterminal, called the goal symbol, a given context-free grammar specifies a language, namely, the set of possible sequences of terminal symbols that can result from repeatedly replacing any nonterminal in the sequence with a right-hand side of a production for which the nonterminal is the left-hand side.
These input elements, with white space (§3.6) and comments (§3.7) discarded, form the terminal symbols for the syntactic grammar for the Java programming language and are called tokens (§3.5). These tokens are the identifiers (§3.8), keywords (§3.9), literals (§3.10), separators (§3.11), and operators (§3.12) of the Java programming language.
fixed
width
font in the productions of the lexical and syntactic grammars, and throughout this specification whenever the text is directly referring to such a terminal symbol. These are to appear in a program exactly as written. Nonterminal symbols are shown in italic type. The definition of a nonterminal is introduced by the name of the nonterminal being defined followed by a colon. One or more alternative right-hand sides for the nonterminal then follow on succeeding lines. For example, the syntactic definition:
states that the nonterminal IfThenStatement represents the tokenIfThenStatement: if ( Expression ) Statement
if
, followed by a left parenthesis token, followed by an Expression, followed by a right parenthesis token, followed by a Statement. As another example, the syntactic definition:
states that an ArgumentList may represent either a single Argument or an ArgumentList, followed by a comma, followed by an Argument. This definition of ArgumentList is recursive, that is to say, it is defined in terms of itself. The result is that an ArgumentList may contain any positive number of arguments. Such recursive definitions of nonterminals are common.ArgumentList: Argument ArgumentList , Argument
The subscripted suffix "opt", which may appear after a terminal or nonterminal, indicates an optional symbol. The alternative containing the optional symbol actually specifies two right-hand sides, one that omits the optional element and one that includes it.
This means that:
is a convenient abbreviation for:BreakStatement: break Identifieropt ;
and that:BreakStatement: break ; break Identifier ;
is a convenient abbreviation for:ForStatement: for ( ForInitopt ; Expressionopt ; ForUpdateopt ) Statement
which in turn is an abbreviation for:ForStatement: for ( ; Expressionopt ; ForUpdateopt ) Statement for ( ForInit ; Expressionopt ; ForUpdateopt ) Statement
which in turn is an abbreviation for:ForStatement: for ( ; ; ForUpdateopt ) Statement for ( ; Expression ; ForUpdateopt ) Statement for ( ForInit ; ; ForUpdateopt ) Statement for ( ForInit ; Expression ; ForUpdateopt ) Statement
so the nonterminal ForStatement actually has eight alternative right-hand sides.ForStatement: for ( ; ; ) Statement for ( ; ; ForUpdate ) Statement for ( ; Expression ; ) Statement for ( ; Expression ; ForUpdate ) Statement for ( ForInit ; ; ) Statement for ( ForInit ; ; ForUpdate ) Statement for ( ForInit ; Expression ; ) Statement for ( ForInit ; Expression ; ForUpdate ) Statement
A very long right-hand side may be continued on a second line by substantially indenting this second line, as in:
which defines one right-hand side for the nonterminal ConstructorDeclaration.ConstructorDeclaration: ConstructorModifiersoptConstructorDeclarator Throwsopt
ConstructorBody
When the words "one of" follow the colon in a grammar definition, they signify that each of the terminal symbols on the following line or lines is an alternative definition. For example, the lexical grammar contains the production:
which is merely a convenient abbreviation for:ZeroToThree: one of0 1 2 3
When an alternative in a lexical production appears to be a token, it represents the sequence of characters that would make up such a token. Thus, the definition:ZeroToThree:0
1
2
3
in a lexical grammar production is shorthand for:BooleanLiteral: one oftrue false
The right-hand side of a lexical production may specify that certain expansions are not permitted by using the phrase "but not" and then indicating the expansions to be excluded, as in the productions for InputCharacter (§3.4) and Identifier (§3.8):BooleanLiteral:t r u e f a l s e
Finally, a few nonterminal symbols are described by a descriptive phrase in roman type in cases where it would be impractical to list all the alternatives:InputCharacter: UnicodeInputCharacter but notCR
orLF
Identifier: IdentifierName but not a Keyword or BooleanLiteral or NullLiteral
RawInputCharacter: any Unicode character
| Contents | Prev | Next | Index | Java Language Specification Second Edition |


Next
Previous
Contents
The issues for retargetting the compiler are far too numerous to be covered
by this document. What follows is a brief description of each of the seven
phases of the compiler and its MCU dependency.
- Parsing the source and building the annotated parse tree. This phase is
largely MCU independent (except for the language extensions). Syntax &
semantic checks are also done in this phase , along with some initial optimizations
like back patching labels and the pattern matching optimizations like bit-rotation
etc.
- The second phase involves generating an intermediate code which can be
easy manipulated during the later phases. This phase is entirely MCU independent.
The intermediate code generation assumes the target machine has unlimited number
of registers, and designates them with the name iTemp. The compiler can be
made to dump a human readable form of the code generated by using the --dumpraw
option.
- This phase does the bulk of the standard optimizations and is also MCU
independent. This phase can be broken down into several sub-phases.
- Break down intermediate code (iCode) into basic blocks.
- Do control flow & data flow analysis on the basic blocks.
- Do local common subexpression elimination, then global subexpression elimination
- dead code elimination
- loop optimizations
- if loop optimizations caused any changes then do 'global subexpression
elimination' and 'dead code elimination' again.
- This phase determines the live-ranges; by live range I mean those iTemp
variables defined by the compiler that still survive after all the optimizations.
Live range analysis is essential for register allocation, since these computation
determines which of these iTemps will be assigned to registers, and for how
long.
- Phase five is register allocation. There are two parts to this process
.
- The first part I call 'register packing' (for lack of a better term) .
In this case several MCU specific expression folding is done to reduce register
pressure.
- The second part is more MCU independent and deals with allocating registers
to the remaining live ranges. A lot of MCU specific code does creep into this
phase because of the limited number of index registers available in the 8051.
- The Code generation phase is (unhappily), entirely MCU dependent and very
little (if any at all) of this code can be reused for other MCU. However the
scheme for allocating a homogenized assembler operand for each iCode operand
may be reused.
- As mentioned in the optimization section the peep-hole optimizer is rule
based system, which can reprogrammed for other MCUs.
Next
Previous
Contents


ABOUT
A warm welcome to you from Tuscan Pizza.
We opened our doors in 2013
to offer a unique upscale casual dining experience.
Our pizza pays homage to old world Vera Pizza Napolitano
traditions, but is a contemporary take on the style.
The pizza arrives still steaming from our Stefano Ferrara wood burning oven.
The crust is thin, with a blistered cornicione—the
raised rim of the pizza that’s the outer crust of the pizza — about an inch thick.
It is neither thin and crispy nor thick and soft but chewy and crisp all at once.
Because it is handcrafted, no two are exactly alike.
The toppings are fresh and natural with each ingredient tasting very much like what it is.
Our pizza strikes a careful balance among crust, sauce, and cheese with not too much of any one component.


Secondary sources address or analyze events, people, words, or topics.
Examples of secondary sources...
|
Book Catalog for the Upper School Library
Search by author, keyword, subject, or title of the book. |
|
|
Ebook Central
Ebook Central is an online collection of 70,000+ authoritative and copyrighted academic level electronic books (ebooks). |
|
|
MasterFILE Complete
Full text for 2,400+ magazines on a wide range of subject areas - politics. sports, education, business, science and much more. |
|
|
Solutions (ABC-CLIO)
Search across all of a combination of our ABC-CLIO databases: American History, Daily Life, Geography, Ancient & Medieval, Modern, and Religions. |
|
|
U.S. History in Context (GALE)
People, events, and topics in United States History with reference books, academic journals, magazine and newspaper articles, primary sources, images, videos, audio files and links to vetted websites. |
|
|
World History in Context (Gale)
People, events, and topics in World History with reference books, academic journals, magazine and newspaper articles, primary sources, images, videos, audio files and links to vetted websites. |


1 Yahweh said to me, “Go again, love a woman loved by another, and an adulteress, even as Yahweh loves the children of Israel, though they turn to other gods, and love cakes of raisins.”
2 So I bought her for myself for fifteen pieces of silver and a homer
1 and a half of barley.
3 I said to her, “You shall stay with me many days. You shall not play the prostitute, and you shall not be with any other man. I will also be so toward you.”
4 For the children of Israel shall live many days without king, without prince, without sacrifice, without sacred stone, and without ephod or idols.
5 Afterward the children of Israel shall return and seek Yahweh their God, and David their king, and shall come with trembling to Yahweh and to his blessings in the last days.


Thank you ..!!
-
Thank you for regisetring with us
click here to login
punetraining.com is a leading portal for corporate business that will help you monetize your work to the most level you could reach.
Lorem ipsum dolor sit amet, consectetur adip, Yourbusiness.com will give you a new way to look at your business and lead it to all new horizons.


Image to use:
Canvas:
Note: The canvas tag is not supported in Internet Explorer 8 and earlier versions.


---
layout: post
title: Texture map
date: '2014-11-27T07:30:20+01:00'
categories:
- Aljubarrota
picture_url: https://film-Storyboards.tumblr.com/post/103719834629/ground-screen-mood-board-map-for-aljubarrota
---
Ground screen / mood board map for Aljubarrota Royal Battle


Robert Baart
Robert Baart - Recent Paintings and Drawings
Artist Statement:
For as long as I can remember, I have been an observer of nature and the landscape.
Although my work is not specific to any one place, it is a very personal expression of my relationship to the landscape and my concerns about the state of the earth's environment. Much on earth has been lost over a short period of time. More species are extinct and ecosystems continue to deteriorate at a rapid rate. In spite of the current reality, I still feel there is much to inspire. Over decades I have wandered in and around mountains, fields, swamps, and woodlands as well as having daily encounters with ribbons of green spaces in the city. It all provides a constant source of study and reflection that continues to inform my work.
My paintings hover between realism and abstraction. They embody a language of color, texture, light, and atmosphere.They remain abstract yet familiar and I hope they provide the viewer with a point of contemplative departure. I like the following quote by William Corbett in a review of the work of painter Jake Berthot: " The artist paints to see what his experience looks like. It is an embrace of the never-to-be-understood way in which the world moves us."
*********************************************************************************************************************************************
Curator's Statement:
Painting is a language that allows expression in ways that go beyond written words and spoken ideas. It must be seen in person for the actual experience cannot be adequately substituted by printed matter or words. The great power of painting is not limited by the constraints of any temporal theory or dogma. Painting reflects the ideology of the artist; it is the end product of a private dance with experience. Painting has endured and survived despite the myriad attacks to its existence by stylish dogmas and theories, and other mediums trying to grab the power that only painting uniquely demonstrates.
NKG is pleased to present the rich abstract world of painter Robert Baart. Robert taught at the School of the Museum of Fine Art Boston for 35 years. His classes in painting were popular and highly respected by the students. He demonstrated process, materials, and techniques that are rarely taught, all in a calm, generous and knowledgeable manner that inspired his students.
Please visit NKG to experience firsthand the most recent work of this contemporary painter. Robert Baart will bring you into his rich abstract, yet recognizable world.
Natacha Villamia Sochat
May 2011
**********************************************************************************************************************************************


First page Back Continue Last page Overview Graphics
Remaining fixable ES5 warts
Static, not Lexical Scoping:
const, let, nested named function declarations.
Ambient global at bottom of scope chain.
Spec wart: Multiple global objects?
Regular Expressions process UTF-16 code units.
Non-BMP, Combining chars → breaking change
i18n → insufficient interest?
Decimal? Mozilla to test the waters.
Extensible numerics?


Class: Aws::EBS::Types::StartSnapshotRequest
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Struct
|
|
|
Instance Chain:
self,
::Aws::Structure ,
Struct
|
|
| Inherits: |
Struct
|
| Defined in: | gems/aws-sdk-ebs/lib/aws-sdk-ebs/types.rb |
Overview
Constant Summary
Instance Attribute Summary
-
#client_token ⇒ String
rw
A unique, case-sensitive identifier that you provide to ensure the idempotency of the request.
-
#description ⇒ String
rw
A description for the snapshot.
-
#encrypted ⇒ Boolean
rw
Indicates whether to encrypt the snapshot.
-
#kms_key_arn ⇒ String
rw
The Amazon
::Aws::EBS::Resource
Name (ARN) of the Key Management Service (KMS) key to be used to encrypt the snapshot. -
#parent_snapshot_id ⇒ String
rw
The ID of the parent snapshot.
-
#tags ⇒ Array<Types::Tag>
rw
The tags to apply to the snapshot.
-
#timeout ⇒ Integer
rw
The amount of time (in minutes) after which the snapshot is automatically cancelled if:
-
#volume_size ⇒ Integer
rw
The size of the volume, in GiB.
Instance Method Summary
::Aws::Structure
- Included
| #to_hash | Alias for Structure#to_h. |
Instance Attribute Details
#client_token ⇒ String
(rw)
A unique, case-sensitive identifier that you provide to ensure the idempotency of the request. Idempotency ensures that an API request completes only once. With an idempotent request, if the original request completes successfully. The subsequent retries with the same client token return the result from the original successful request and they have no additional effect.
If you do not specify a client token, one is automatically generated by the Amazon Web Services SDK.
For more information, see Idempotency for StartSnapshot API in the Amazon Elastic Compute Cloud User Guide.
A suitable default value is auto-generated. You should normally not need to pass this option.
# File 'gems/aws-sdk-ebs/lib/aws-sdk-ebs/types.rb', line 690
class StartSnapshotRequest < Struct.new( :volume_size, :parent_snapshot_id, :, :description, :client_token, :encrypted, :kms_key_arn, :timeout) SENSITIVE = [:kms_key_arn] include Aws::Structure end
#description ⇒ String
(rw)
A description for the snapshot.
# File 'gems/aws-sdk-ebs/lib/aws-sdk-ebs/types.rb', line 690
class StartSnapshotRequest < Struct.new( :volume_size, :parent_snapshot_id, :, :description, :client_token, :encrypted, :kms_key_arn, :timeout) SENSITIVE = [:kms_key_arn] include Aws::Structure end
#encrypted ⇒ Boolean
(rw)
Indicates whether to encrypt the snapshot.
You can't specify Encrypted and ParentSnapshotId in the
same request. If you specify both parameters, the request fails with
ValidationException
.
The encryption status of the snapshot depends on the values that you specify for Encrypted, KmsKeyArn, and ParentSnapshotId, and whether your Amazon Web Services account is enabled for encryption by default. For more information, see Using encryption in the Amazon Elastic Compute Cloud User Guide.
To create an encrypted snapshot, you must have permission to use the
::Aws::KMS
key. For more information, see Permissions to use Key
Management Service keys in the Amazon Elastic Compute Cloud
User Guide.
# File 'gems/aws-sdk-ebs/lib/aws-sdk-ebs/types.rb', line 690
class StartSnapshotRequest < Struct.new( :volume_size, :parent_snapshot_id, :, :description, :client_token, :encrypted, :kms_key_arn, :timeout) SENSITIVE = [:kms_key_arn] include Aws::Structure end
#kms_key_arn ⇒ String
(rw)
The Amazon ::Aws::EBS::Resource
Name (ARN) of the Key Management Service (KMS)
key to be used to encrypt the snapshot.
The encryption status of the snapshot depends on the values that you specify for Encrypted, KmsKeyArn, and ParentSnapshotId, and whether your Amazon Web Services account is enabled for encryption by default. For more information, see Using encryption in the Amazon Elastic Compute Cloud User Guide.
To create an encrypted snapshot, you must have permission to use the
::Aws::KMS
key. For more information, see Permissions to use Key
Management Service keys in the Amazon Elastic Compute Cloud
User Guide.
# File 'gems/aws-sdk-ebs/lib/aws-sdk-ebs/types.rb', line 690
class StartSnapshotRequest < Struct.new( :volume_size, :parent_snapshot_id, :, :description, :client_token, :encrypted, :kms_key_arn, :timeout) SENSITIVE = [:kms_key_arn] include Aws::Structure end
#parent_snapshot_id ⇒ String
(rw)
The ID of the parent snapshot. If there is no parent snapshot, or if you are creating the first snapshot for an on-premises volume, omit this parameter.
You can't specify ParentSnapshotId and Encrypted in the
same request. If you specify both parameters, the request fails with
ValidationException
.
The encryption status of the snapshot depends on the values that you specify for Encrypted, KmsKeyArn, and ParentSnapshotId, and whether your Amazon Web Services account is enabled for encryption by default. For more information, see Using encryption in the Amazon Elastic Compute Cloud User Guide.
If you specify an encrypted parent snapshot, you must have
permission to use the ::Aws::KMS
key that was used to encrypt the parent
snapshot. For more information, see Permissions to use Key
Management Service keys in the Amazon Elastic Compute Cloud
User Guide.
# File 'gems/aws-sdk-ebs/lib/aws-sdk-ebs/types.rb', line 690
class StartSnapshotRequest < Struct.new( :volume_size, :parent_snapshot_id, :, :description, :client_token, :encrypted, :kms_key_arn, :timeout) SENSITIVE = [:kms_key_arn] include Aws::Structure end
#tags ⇒ Array
<Types::Tag> (rw)
The tags to apply to the snapshot.
# File 'gems/aws-sdk-ebs/lib/aws-sdk-ebs/types.rb', line 690
class StartSnapshotRequest < Struct.new( :volume_size, :parent_snapshot_id, :, :description, :client_token, :encrypted, :kms_key_arn, :timeout) SENSITIVE = [:kms_key_arn] include Aws::Structure end
#timeout ⇒ Integer
(rw)
The amount of time (in minutes) after which the snapshot is automatically cancelled if:
No blocks are written to the snapshot.
The snapshot is not completed after writing the last block of data.
If no value is specified, the timeout defaults to 60
minutes.
# File 'gems/aws-sdk-ebs/lib/aws-sdk-ebs/types.rb', line 690
class StartSnapshotRequest < Struct.new( :volume_size, :parent_snapshot_id, :, :description, :client_token, :encrypted, :kms_key_arn, :timeout) SENSITIVE = [:kms_key_arn] include Aws::Structure end
#volume_size ⇒ Integer
(rw)
The size of the volume, in GiB. The maximum size is 65536
GiB (64
TiB).
# File 'gems/aws-sdk-ebs/lib/aws-sdk-ebs/types.rb', line 690
class StartSnapshotRequest < Struct.new( :volume_size, :parent_snapshot_id, :, :description, :client_token, :encrypted, :kms_key_arn, :timeout) SENSITIVE = [:kms_key_arn] include Aws::Structure end


{{ username }}
{{ username }}
Logout
IN+
Site Control
Site Management
User Management
Event Logging
Log out
Event View
User
Event Time
Event


BT: 11 tracks that blew my mind - "I heard this and literally pulled the car over and wept"
by Jon RegenBT: 11 tracks that blew my mind - "I heard this and literally pulled the car over and wept"
Last month, Grammy-nominated, multi-platinum recording artist BT’s new ambient set Between Here and You (Black Hole Recordings) was released and quickly soared to number 1 on the iTunes Electronic chart.
The companion album, the experimental Everything You’re Searching for is on the Other Side of Fear, is due out 13 December, also via Black Hole Recordings.
Groundbreaking electronic music pioneer BT has written and produced for such widely-acclaimed and diverse artists as Death Cab for Cutie, Peter Gabriel, Howard Jones, Tiesto, Depeche Mode, David Bowie, Armin Van Buuren, Sting, NSYNC, Blake Lewis, The Roots, Madonna, Britney Spears and more.
We asked BT to give us the 10 tracks that blew his mind. He gave us 11!
1. Manuel Göttsching - E2 to E4
"I heard this piece of music for the first time on a dance floor at the age of 17 in New York City club Limelight. The thought that a pulsing ostinato could build and undulate for 50 plus minutes and continue to drive me to move my body was a profound inspiration in what I do. This piece of music unlocked something profound for me."
2. Claude Debussy - The Sunken Cathedral
"Classical music is my starting point connection with the world of music. Along with making field recordings and becoming fascinated with the idea of organization of sound that is “non-music” or music concrete, my introduction to classical music began very young. I studied Suzuki method piano from the age of four, and I went to Washington Conservatory at the age of seven.
"My teachers exposed me to breathtaking music by Bartok, Stravinsky, Chopin, Wagner and Rachmaninoff - greats from every era. The one that to this day speaks to me the most is Debussy. The aching ambiguity of his chord voicings, the soaring longing of his counterpoint and melodies that could cut the most guarded heart in half. I adore his work. This is a personal favorite."
3. Catherine Wheel - Black Metallic
"To this day, it’s hard to quantify why this piece speaks to me personally in the way that it does. I put this next to another song that had a similar effect on me. I heard this on WHFS (our local indie station in the 80’s and 90’s) and literally (no hyperbole) pulled the car over and wept.
"It’s simple, direct and again has this kind of ambiguity, human longing that is my favorite feeling in music."
4. Tracy Chapman - Fast Car
"I went to the Berklee College of Music at the age of 15. When I was there, I was the youngest kid ever admitted at the time. This song was out then and I am still moved by the profundity and directness of the lyric.
"What she says and with the candor and courage she says it is bone-cutting. This is an example of the finest kind of songwriting craft humanity has to offer, IMHO. The modern equivalent to this would be like The Band Perry’s “If I Die Young” (another absolute favorite)."
5. Timo Maas - Azzido Da Bass
"This may seem like a strange one to include here, but the sound of this track made me rethink engineering in general. The arrangement and use of compression is mind-blowing."
6. William Orbit - Strange Cargo
"This entire series of works sprinkles in the exact right amount of dub and synth goodness I adore.
"He’s a mixolydian addict as well, so all these works really speak to me."
7. Talk Talk - Spirit of Eden
"Another red pill moment for me. Hearing this album as a kid made me realize the way we structure modern pop songs is a construct everyone just blindly accepts.
"You can tell a story that starts one place and ends in another without every crossing back.
"The use of thru-composition and ambient music mixed with tape loops and other electronic elements in a band context blew my mind."
8. The Blue Nile – A Walk Across the Rooftops
"Talk about aching and longing. Even thinking of this record conjures massive emotions of nostalgia, a hopeful kind of sadness and loss.
I remember listening to this with my two best friends as a kid (Hamid and Ali) and thinking, 'How can something cut on to a piece of vinyl make me feel so heard and understood?' It felt like a record made just for me."
9. The Future Sound of London - Papua New Guinea
"This whole time period of music that encompassed The Orb, KLF, etc. was my lightbulb “anything is possible with synthesis” time period.
"This one hasn’t dated well, but it was a watershed moment for me when it came out."
10. My Bloody Valentine – Loveless
"The greatest rock record ever made (that really isn’t a rock record), IMHO. I loved Jesus and Mary Chain growing up, and I loved this kind of Phil Spector meets wall of distortion sound. When I heard Loveless for the first time, it was a very intimate experience.
"My friend Richard Fortus (who now plays with Guns N’ Roses) and I were on tour for my album Movement in Still Life and he played it for me. We listened to that album about eight times in a row, jumping on the benches of a moving tour bus. It’s imprinted on me like a scar."
11. Vangellis - Score to Blade Runner
"This one is hard to even write about because it had such a massive effect on me, I probably would not be making music without it. I rode my BMX bike to the theatre as a kid, bought some hot tamales (I’ve been paleo for about 15 years and those may be the one thing I miss - sorry for the digression), and watched this movie until the theatre closed.
"Simply, the ethereal reverbs, worn in future esthetic, haloed lights and massive subsonic CS-80 bends made me say 'That’s what I want to do for a living…no matter what.'
"I wouldn’t be making music professionally without this score."


Provides a scene graph component ({@link org.blaise.graphics.GraphicComponent}) and a tree of {@link org.blaise.graphics.Graphic} objects supporting pluggable rendering, mouse actions, selections, tooltips, and more.
{@link org.blaise.graphics.GraphicComponent} is the top-level swing component, and works primarily with two classes: a {@link org.blaise.graphics.GraphicRoot} and a {@link org.blaise.style.StyleContext}. As might be expected, the first is responsible for storing the shapes and the second for drawing the shapes. However, the shapes stored in the {@code GraphicRoot} may also provide their own style information. Shapes within the {@code GraphicRoot} are stored as {@link org.blaise.graphics.Graphic}s, comprised of:
The {@link org.blaise.graphics.GraphicRoot} maintains the shapes that are to be drawn, including both the shapes themselves and the order in which they are drawn. This object also listens to mouse events from the {@link org.blaise.graphics.GraphicComponent}, which it passes along as a {@link org.blaise.graphics.GraphicMouseEvent} to the top-most {@link org.blaise.graphics.Graphic} (in terms of draw order) whose parent is a {@link org.blaise.graphics.GraphicMouseListener}.
Implementing {@link org.blaise.graphics.Graphic} should be straightforward. {@link org.blaise.graphics.GraphicSupport} contains much of the code required, apart from the {@code draw} and {@code contains} methods. {@link org.blaise.graphics.GraphicComposite} groups together several {@code Graphic}s, and also has an overridable {@link org.blaise.style.StyleContext}, which can be used to set a default style for its constituents. {@code Graphic}s are typically implemented in one of two ways: either with concrete styles, or with styles that are chosen/generated as the object is drawn, depending on a "source object". The first are labeled by "{@code Basic}" and the second by "{@code Delegating}".
Within the package, a few specific {@code Graphic}s are implemented, as described in the table below:
| Class Name | Description |
|---|---|
| {@link org.blaise.graphics.BasicPointGraphic} | A draggable point, rendered by a {@link org.blaise.style.PointStyle} |
| {@link org.blaise.graphics.BasicPointSetGraphic} | Several points, rendered by a common {@link org.blaise.style.PointStyle} |
| {@link org.blaise.graphics.BasicShapeGraphic} | An arbitrary shape or path, rendered by a common {@link org.blaise.style.ShapeStyle} or {@link org.blaise.style.PathStyle} |
| {@link org.blaise.graphics.BasicStringGraphic} | A string located at a point on the graphics canvas, rendered by a {@link org.blaise.style.StringStyle} |
| {@link org.blaise.graphics.CustomPointSetGraphic} | Several points, with references to source objects, rendered by a {@link org.blaise.style.PointStyle} delegate. |


Rick and Morty is an American adult animated science-fiction sitcom created by Justin Roiland and Dan Harmon for Cartoon Network's late-night programming block Adult Swim. The series follows the misadventures of cynical mad scientist Rick Sanchez and his fretful, easily influenced grandson Morty Smith, who split their time between domestic life and interdimensional adventures. The series premiered on December 2, 2013 and its third season concluded on October 1, 2017. A fourth season has been mentioned first by Harmon in a September 2017 interview, and later in the post-credits scene of the third season's finale
Roiland voices the eponymous characters, with Chris Parnell, Spencer Grammer, and Sarah Chalke voicing the rest of the family. The series originated from an animated short parody film of Back to the Future, The Real Animated Adventures of Doc and Mharti, created by Roiland for Channel 101, a short film festival co-founded by Harmon. When Adult Swim approached Harmon for television show ideas, he and Roiland decided to develop a program based on the short.


CRIMINAL LOVERS A film review by Steve Rhodes Copyright 2000 Steve Rhodes RATING (0 TO ****): ***
"Isn't it exciting?" the lithe and beautiful Alice (Natacha Régnier from THE DREAMLIFE OF ANGELS) asks her virginal boyfriend, Luc (Jérémie Renier). "Our adventure. You used to complain that nothing happened." Loading the body of a high school classmate, Saïd (Salim Kechiouche), whom they just murdered into the trunk of the car, the numb Luc isn't likely to be griping about the lack of excitement ever again.
Writer/director François Ozon's CRIMINAL LOVERS (LES AMANTS CRIMINELS) is a dark, dark psychosexual fairy tale for adults as written by the Brothers Grimm, as in VERY grim. It is an erotically-charged morality tale with the message that actions have consequences and horrific actions have horrific consequences.
At first, we aren't sure why these two young lovers have killed Saïd. Is it just for sadomasochistic sexual gratification as it certainly seems? Using flashbacks, we learn from Alice the reason why she feels that she deserves to enact revenge on Saïd, but how credible is her version of the truth? And will we ever come to know the exact events that led her to take another's life with such premeditated viciousness?
After asking the shocked Luc if he loves her and getting no response, Alice goes off with Luc to bury Saïd's body in the woods. Along the way they stick up a jewelry store, but Alice wishes they had held up the bakery instead since she's hungry. This is a girl with a very twisted sense of morality.  What is clear is that she gets her sexual kicks from perverse activities.
Filmed beautifully and scored well musically, the picture alternately invites and repulses us. The most sickening scene turns out to be the skinning of a rabbit, as its flesh is ripped off its body. It is the type of movie that, the more you describe it, the more your readers want no part of it. But this is a fascinating film with chillingly believable acting. And with plenty of surprises along the way.
The second part of the story happens after our young lovers have buried Saïd's body. Lost in the woods, they happen upon the remote cabin of an ogre. They figure that they are quite invincible and can easily rob food from him.
Instead, this man, listed in the credits only as the man in the forest (Miki Manojlovic), proves to be a one-man vigilante squad. He throws them down into a dark basement inhabited by rats and Saïd's decomposing body, which the man has unburied.  This means that Luc gets stuffed like a goose while Alice starves. Homosexual rape is just one of many terrors that he inflicts on his prisoners. Suffice it to say that they would have been much better off if the police had found them first.
If ever there was a movie that isn't for everyone, it's CRIMINAL LOVERS. But if you find really dark sexual thrillers intriguing, CRIMINAL LOVERS may be the picture for you since they don't get much darker or more erotic than this.
CRIMINAL LOVERS runs 1:30. It is in French with English subtitles. The film is not rated but would probably be NC-17 for nudity, language and strong sexuality and violence, including rape. It is for adults only.
Email<EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Treasurer Demo
v.0.1.4 01/19/2019 11:04pm
New op every second: Balance, Withdraw, Deposit or Transfer. Stare below or check Swagger
docs
Ledger
Moment
Transaction Id
Operation
Id From
Id To
Amount
Balance
Balance
Currency


{# POSITIVE IMPACT INDEX /templates/positive-impact/index.html niceworld 7.18.18 #} {% extends "_layouts/site" %} {% set pageName = 'Positive Impact' %} {% block head %} {% set title = "Positive Impact Stories" %} {% set description = "Our goal is to drive through completion on time, on budget and most importantly with a positive impact on the learner and on the organization’s stated objectives." %} {% set canon_url = siteUrl ~"positive-impact" %} {% set og_img = siteUrl ~"imgz/social-share-default.jpg" %} {{ parent() }} {% include '_partials/scrollface' %} {% endblock %} {% block main %}
Our goal is to deliver meaningful business results to organizations — on time, on budget, and most importantly, with a positive impact on the learner and on the organization’s stated objectives.