The interface taxonomy classification provided here is for guidance to developers and users of interfaces. The classification guides a developer to declare the targeted audience or users of an interface and also its stability.
Benefits to the user of an interface: Knows which interfaces to use or not use and their stability.
Benefits to the developer: to prevent accidental changes of interfaces and hence accidental impact on users or other components or system. This is particularly useful in large systems with many developers who may not all have a shared state/history of the project.
Hadoop adopts the following interface classification, this classification was derived from the OpenSolaris taxonomy and, to some extent, from taxonomy used inside Yahoo. Interfaces have two main attributes: Audience and Stability
Audience denotes the potential consumers of the interface. While many interfaces are internal/private to the implementation, other are public/external interfaces that are meant for wider consumption by applications and/or clients. For example, in posix, libc is an external or public interface, while large parts of the kernel are internal or private interfaces. Also, some interfaces are targeted towards other specific subsystems.
Identifying the audience of an interface helps define the impact of breaking it. For instance, it might be okay to break the compatibility of an interface whose audience is a small number of specific subsystems. On the other hand, it is probably not okay to break a protocol interface that millions of Internet users depend on.
Hadoop uses the following kinds of audience in order of increasing/wider visibility:
Hadoop doesn’t have a Company-Private classification, which is meant for APIs which are intended to be used by other projects within the company, since it doesn’t apply to opensource projects. Also, certain APIs are annotated as @VisibleForTesting (from com.google.common .annotations.VisibleForTesting) - these are meant to be used strictly for unit tests and should be treated as “Private” APIs.
The interface is for internal use within the project (such as HDFS or MapReduce) and should not be used by applications or by other projects. It is subject to change at anytime without notice. Most interfaces of a project are Private (also referred to as project-private).
The interface is used by a specified set of projects or systems (typically closely related projects). Other projects or systems should not use the interface. Changes to the interface will be communicated/negotiated with the specified projects. For example, in the Hadoop project, some interfaces are LimitedPrivate{HDFS, MapReduce} in that they are private to the HDFS and MapReduce projects.
Stability denotes how stable an interface is, as in when incompatible changes to the interface are allowed. Hadoop APIs have the following levels of stability.
Can evolve while retaining compatibility for minor release boundaries; in other words, incompatible changes to APIs marked as Stable are allowed only at major releases (i.e. at m.0).
Incompatible changes to Unstable APIs are allowed at any time. This usually makes sense for only private interfaces.
However one may call this out for a supposedly public interface to highlight that it should not be used as an interface; for public interfaces, labeling it as Not-an-interface is probably more appropriate than “Unstable”.
Examples of publicly visible interfaces that are unstable (i.e. not-an-interface): GUI, CLIs whose output format will change.
How will the classification be recorded for Hadoop APIs?
Each interface or class will have the audience and stability recorded using annotations in org.apache.hadoop.classification package.
The javadoc generated by the maven target javadoc:javadoc lists only the public API.
One can derive the audience of java classes and java interfaces by the audience of the package in which they are contained. Hence it is useful to declare the audience of each java package as public or private (along with the private audience variations).
Why aren’t the java scopes (private, package private and public) good enough?
But I can easily access a private implementation interface if it is Java public. Where is the protection and control?
Why bother declaring the stability of a private interface? Aren’t private interfaces always unstable?
What is the harm in applications using a private interface that is stable? How is it different than a public stable interface?
Why bother with Limited-private? Isn’t it giving special treatment to some projects? That is not fair.
Lets treat all private interfaces as Hadoop-private. What is the harm in projects in the Hadoop family have access to private classes?
Aren’t all public interfaces stable?


{% extends "global/Page.html" %} {% load staticfiles otree_tags %} {% block title %}
1. You have been assigned to a group: ● or ▲ (inner symbol). How often does your group change?
{% formfield player.given_group label="" %}
2. You will be given an appearance: ◯ or △ (external symbol). How often does your appearance change?
{% formfield player.appearance label="" %}
3. You will be assigned a label from 1 to {{ names }}. How often does your label change?
{% formfield player.label label="" %}
4. In Stage 2 (Actions) you only participate with your active connections. When is a connection active?
{% formfield player.active label="" %}
5. In Figure 2 above, how many active connections does player 7 have?
{% formfield player.count label="" %}


- Range - Class in org.sbolstandard.core2
-
Represents a Range extension object of the SBOL Location class.
- RDF - Static variable in class org.sbolstandard.core2.SBOLDocument
-
Constant representing RDF file format
- RDFV1 - Static variable in class org.sbolstandard.core2.SBOLDocument
-
Constant representing the format of an SBOL version 1.1 output file as being
RDF format
- REACTANT - Static variable in class org.sbolstandard.core2.SystemsBiologyOntology
-
Substance consumed by a chemical reaction (
SBO:0000010).
- read(String) - Method in class org.sbolstandard.core2.SBOLDocument
-
Takes in a given RDF file name and adds the data read to this SBOLDocument.
- read(File) - Method in class org.sbolstandard.core2.SBOLDocument
-
Takes in a given RDF file and adds the data read to this SBOL document.
- read(InputStream) - Method in class org.sbolstandard.core2.SBOLDocument
-
Takes in a given RDF input stream and adds the data read to this SBOL
document.
- read(String) - Static method in class org.sbolstandard.core2.SBOLReader
-
Takes in the given RDF filename and converts the file to an SBOLDocument.
- read(File) - Static method in class org.sbolstandard.core2.SBOLReader
-
Parses the given RDF file and stores its contents in an SBOLDocument object.
- read(InputStream) - Static method in class org.sbolstandard.core2.SBOLReader
-
Takes in a given RDF InputStream and converts the file to an SBOLDocument.
- REDOX_REACTION - Static variable in class org.sbolstandard.core2.SystemsBiologyOntology
-
Chemical process in which atoms have their oxidation number (oxidation state) changed
(
SBO:0000200).
- REDUCTION - Static variable in class org.sbolstandard.core2.SystemsBiologyOntology
-
Chemical process in which a molecular entity gain electrons
(
SBO:0000202).
- RefinementType - Enum in org.sbolstandard.core2
-
Represents the refinement relationship between a MapsTo instance's local and remote components.
- RELATIONSHIP - Static variable in class org.sbolstandard.core2.SystemsBiologyOntology
-
Connectedness between entities and/or interactions representing their relatedness or
influence
(
SBO:0000374).
- REMOVAL_OF_A_CHEMICAL_GROUP - Static variable in class org.sbolstandard.core2.SystemsBiologyOntology
-
Covalent reaction that results in the removal of a chemical group from a molecule
(
SBO:0000211).
- removeActivity(Activity) - Method in class org.sbolstandard.core2.SBOLDocument
-
Removes the given activity from this SBOL document's list of activities.
- removeAgent(Agent) - Method in class org.sbolstandard.core2.SBOLDocument
-
Removes the given agent from this SBOL document's list of agents.
- removeAnnotation(Annotation) - Method in class org.sbolstandard.core2.Identified
-
Removes the given annotation from the list of annotations owned by this instance.
- removeAssociation(Association) - Method in class org.sbolstandard.core2.Activity
-
Removes the given association from the list of associations.
- removeAttachment(Attachment) - Method in class org.sbolstandard.core2.SBOLDocument
-
Removes the given attachment from this SBOL document's list of attachments.
- removeAttachment(URI) - Method in class org.sbolstandard.core2.TopLevel
-
Removes the given attachment from the list of attachments.
- removeCollection(Collection) - Method in class org.sbolstandard.core2.SBOLDocument
-
Removes the given collection from this SBOL document's list of collections.
- removeCombinatorialDerivation(CombinatorialDerivation) - Method in class org.sbolstandard.core2.SBOLDocument
-
Removes the given combinatorial derivation from this SBOL document's list of
combinatorial derivations.
- removeComponent(Component) - Method in class org.sbolstandard.core2.ComponentDefinition
-
Removes the given component from the list of components.
- removeComponentDefinition(ComponentDefinition) - Method in class org.sbolstandard.core2.SBOLDocument
-
Removes the given component definition from this SBOL document's list of
component definitions.
- removeExperiment(Experiment) - Method in class org.sbolstandard.core2.SBOLDocument
-
Removes the given experiment from this SBOL document's list of experiments.
- removeExperimentalData(URI) - Method in class org.sbolstandard.core2.Experiment
-
Removes the given experimentalData from this Experiment's set of experimentalData.
- removeExperimentalData(ExperimentalData) - Method in class org.sbolstandard.core2.SBOLDocument
-
Removes the given experimentalData from this SBOL document's list of experimentalData.
- removeFunctionalComponent(FunctionalComponent) - Method in class org.sbolstandard.core2.ModuleDefinition
-
Removes the given functional component from this module definition's list of
functional components.
- removeGenericTopLevel(GenericTopLevel) - Method in class org.sbolstandard.core2.SBOLDocument
-
Removes the given generic top-level from this SBOL document's list of generic
top-levels.
- removeImplementation(Implementation) - Method in class org.sbolstandard.core2.SBOLDocument
-
Removes the given implementation from this SBOL document's list of
implementations.
- removeInteraction(Interaction) - Method in class org.sbolstandard.core2.ModuleDefinition
-
Removes the given interaction from the list of interactions.
- removeLocation(Location) - Method in class org.sbolstandard.core2.Component
-
Removes the given location from the list of locations.
- removeLocation(Location) - Method in class org.sbolstandard.core2.SequenceAnnotation
-
Removes the given location from the list of locations.
- removeMapsTo(MapsTo) - Method in class org.sbolstandard.core2.Component
-
Removes the given mapsTo from the list of
mapsTos.
- removeMapsTo(MapsTo) - Method in class org.sbolstandard.core2.FunctionalComponent
-
Removes the given mapsTo.
- removeMapsTo(MapsTo) - Method in class org.sbolstandard.core2.Module
-
Removes the given mapsTo from the list of mapsTos owned by this module.
- removeMeasure(Measure) - Method in class org.sbolstandard.core2.Measured
-
Removes the given measure from this measured object's list of measures.
- removeMember(URI) - Method in class org.sbolstandard.core2.Collection
-
Removes the given member from this Collection instance's set of members.
- removeModel(URI) - Method in class org.sbolstandard.core2.ModuleDefinition
-
Removes the given model URI from the set of model URIs owned by this module definition.
- removeModel(Model) - Method in class org.sbolstandard.core2.SBOLDocument
-
Removes the given model from this SBOL document's list of models.
- removeModule(Module) - Method in class org.sbolstandard.core2.ModuleDefinition
-
Removes the given module from the list of modules.
- removeModuleDefinition(ModuleDefinition) - Method in class org.sbolstandard.core2.SBOLDocument
-
Removes the given module definition from this SBOL document's list of module
definitions.
- removeNamespace(URI) - Method in class org.sbolstandard.core2.SBOLDocument
-
Removes the given namespace URI from this SBOL document's list of namespaces.
- removeParticipation(Participation) - Method in class org.sbolstandard.core2.Interaction
-
Removes the given participation from this interaction's list of participations.
- removePlan(Plan) - Method in class org.sbolstandard.core2.SBOLDocument
-
Removes the given plan from this SBOL document's list of plans.
- removeRegistry(String) - Method in class org.sbolstandard.core2.SBOLDocument
-
Removes the given registry id from this SBOL document's list of registries.
- removeRegistryParts(SBOLDocument) - Method in class org.synbiohub.frontend.SynBioHubFrontend
-
Remove all parts from this registry from a given SBOL document
- removeRole(URI) - Method in class org.sbolstandard.core2.Association
-
Removes the given role URI from the set of roles.
- removeRole(URI) - Method in class org.sbolstandard.core2.Component
-
Removes the given role URI from the set of roles.
- removeRole(URI) - Method in class org.sbolstandard.core2.ComponentDefinition
-
Removes the given role URI from the set of roles.
- removeRole(URI) - Method in class org.sbolstandard.core2.ModuleDefinition
-
Removes the given role from the set of roles.
- removeRole(URI) - Method in class org.sbolstandard.core2.Participation
-
Removes the given role from the set of roles.
- removeRole(URI) - Method in class org.sbolstandard.core2.SequenceAnnotation
-
Removes the given role from this sequence annotation's set of roles.
- removeRole(URI) - Method in class org.sbolstandard.core2.Usage
-
Removes the given role URI from the set of roles.
- removeSBOL(URI) - Method in class org.synbiohub.frontend.SynBioHubFrontend
-
Remove SBOL TopLevel object from a SynBioHub instance using its URI.
- removeSequence(URI) - Method in class org.sbolstandard.core2.ComponentDefinition
-
Removes the given sequence URI from the set of sequence URIs.
- removeSequence(Sequence) - Method in class org.sbolstandard.core2.SBOLDocument
-
Removes the given sequence from this SBOL document's list of sequences.
- removeSequenceAnnotation(SequenceAnnotation) - Method in class org.sbolstandard.core2.ComponentDefinition
-
Removes the given sequence annotation from the list of sequence annotations.
- removeSequenceConstraint(SequenceConstraint) - Method in class org.sbolstandard.core2.ComponentDefinition
-
Removes the given sequence constraint from the list of sequence constraints.
- removeSourceLocation(Location) - Method in class org.sbolstandard.core2.Component
-
Removes the given location from the list of source locations.
- removeTopLevel(TopLevel) - Method in class org.sbolstandard.core2.SBOLDocument
-
Method to remove a TopLevel object
- removeType(URI) - Method in class org.sbolstandard.core2.Activity
-
Removes the given type URI from the set of types.
- removeType(URI) - Method in class org.sbolstandard.core2.ComponentDefinition
-
Removes the given type URI from the set of types.
- removeType(URI) - Method in class org.sbolstandard.core2.Interaction
-
Removes the given type URI from this interation's the set of type URIs.
- removeType(URI) - Method in class org.sbolstandard.core2.Measure
-
Removes the given type URI from the set of types.
- removeUsages(Usage) - Method in class org.sbolstandard.core2.Activity
-
Removes the given usage from the list of usages.
- removeVariableComponent(VariableComponent) - Method in class org.sbolstandard.core2.CombinatorialDerivation
-
Removes the given variable component from the list of variable components.
- removeVariant(ComponentDefinition) - Method in class org.sbolstandard.core2.VariableComponent
-
Removes the given component definition from the list of variants.
- removeVariant(URI) - Method in class org.sbolstandard.core2.VariableComponent
-
Removes the component definition with the given URI from the list of
variants.
- removeVariantCollection(Collection) - Method in class org.sbolstandard.core2.VariableComponent
-
Removes the given collection from the list of variantCollections.
- removeVariantCollection(URI) - Method in class org.sbolstandard.core2.VariableComponent
-
Removes the collection with the given URI from the list of
variantCollections.
- removeVariantDerivation(CombinatorialDerivation) - Method in class org.sbolstandard.core2.VariableComponent
-
Removes the given combinatorial derivation from the list of variant
derivations.
- removeVariantDerivation(URI) - Method in class org.sbolstandard.core2.VariableComponent
-
Removes the combinatorial derivation with the given URI from the list of
variant derivations.
- removeWasDerivedFrom(URI) - Method in class org.sbolstandard.core2.Identified
-
Removes the given wasDerivedFrom URI from the set of wasDerivedFroms.
- removeWasGeneratedBy(URI) - Method in class org.sbolstandard.core2.Identified
-
Removes the given wasGeneratedBy URI from the set of wasGeneratedBys.
- rename(TopLevel, String) - Method in class org.sbolstandard.core2.SBOLDocument
-
Renames the given top-level's display ID with the given one.
- rename(TopLevel, String, String) - Method in class org.sbolstandard.core2.SBOLDocument
-
Renames the given top-level's display ID and version with the given ones.
- rename(TopLevel, String, String, String) - Method in class org.sbolstandard.core2.SBOLDocument
-
Renames the given top-level's URI prefix, display ID, and version with the
given ones.
- replaceSBOL(URI) - Method in class org.synbiohub.frontend.SynBioHubFrontend
-
Remove SBOL TopLevel object from a SynBioHub instance using its URI,
but leave references to this object, since it is going to be replaced.
- RESTRICTION_ENZYME_RECOGNITION_SITE - Static variable in class org.sbolstandard.core2.SequenceOntology
-
Represents a region of a DNA molecule which is a nucleotide region (usually a palindrome) that is recognized by a
restriction enzyme (
SO:0001687).
- RestrictionType - Enum in org.sbolstandard.core2
-
Represents the relationship between a sequence constraint's subject and object components.
- reverseComplement(String, URI) - Static method in class org.sbolstandard.core2.Sequence
-
Perform the reverse complement of a sequence encoded using IUPAC_DNA
- RIBOSOME_ENTRY_SITE - Static variable in class org.sbolstandard.core2.SequenceOntology
-
Region in mRNA where ribosome assembles (
SO:0000139)
- RNA - Static variable in class org.sbolstandard.core2.ComponentDefinition
-
Deprecated.
- RNA - Static variable in class org.sbolstandard.core2.SequenceOntology
-
An attribute describing a sequence consisting of nucleobases bound to a repeating
unit made of a D-ribose ring connected to a phosphate backbone.
- RNA_MOLECULE - Static variable in class org.sbolstandard.core2.ComponentDefinition
-
A physical entity consisting of a sequence of ribonucleotide monophosphates; a ribonucleic acid.
- RNA_REGION - Static variable in class org.sbolstandard.core2.ComponentDefinition
-
A region on a RNA molecule.
- RoleIntegrationType - Enum in org.sbolstandard.core2
-
Represents the role integration relationship between roles specified in related objects.


Class NtpPacket
Represents RFC4330 SNTP packet used for communication to and from a network time server.
Namespace: LiteNetLib.Utils
Assembly: LiteNetLib.dll
Syntax
public class NtpPacket
Remarks
Most applications should just use the CorrectionOffset property.
The same data structure represents both request and reply packets. Request and reply differ in which properties are set and to what values.
The only real property is Bytes. All other properties read from and write to the underlying byte array with the exception of DestinationTimestamp, which is not part of the packet on network and it is instead set locally after receiving the packet.
Copied from GuerrillaNtp project with permission from Robert Vazan (@robertvazan) under MIT license, see https://github.com/RevenantX/LiteNetLib/pull/236
Constructors
NtpPacket()
Initializes default request packet.
Declaration
public NtpPacket()
Remarks
Properties Mode and VersionNumber are set appropriately for request packet. Property TransmitTimestamp is set to UtcNow.
Properties
Bytes
Gets RFC4330-encoded SNTP packet.
Declaration
public byte[] Bytes { get; }
Property Value
| Type | Description |
|---|---|
| byte[] | Byte array containing RFC4330-encoded SNTP packet. It is at least 48 bytes long. |
Remarks
This is the only real property. All other properties except DestinationTimestamp read from or write to this byte array.
CorrectionOffset
Gets the offset that should be added to local time to synchronize it with server time.
Declaration
public TimeSpan CorrectionOffset { get; }
Property Value
| Type | Description |
|---|---|
| TimeSpan | Time difference between server and client. It should be added to local time to get server time.
It is calculated from timestamps in the packet as |
DestinationTimestamp
Gets or sets the time of reception of response SNTP packet on the client.
Declaration
public DateTime? DestinationTimestamp { get; }
Property Value
| Type | Description |
|---|---|
| DateTime? | Time of reception of response SNTP packet on the client. It is |
Remarks
This property is not part of the protocol and has to be set when reply packet is received.
See Also
LeapIndicator
Gets the leap second indicator.
Declaration
public NtpLeapIndicator LeapIndicator { get; }
Property Value
| Type | Description |
|---|---|
| NtpLeapIndicator | Leap second warning, if any. Special value AlarmCondition indicates unsynchronized server clock. Default is NoWarning. |
Remarks
Only servers fill in this property. Clients can consult this property for possible leap second warning.
Mode
Gets or sets SNTP packet mode, i.e. whether this is client or server packet.
Declaration
public NtpMode Mode { get; }
Property Value
| Type | Description |
|---|---|
| NtpMode | SNTP packet mode. Default is Client in newly created packets. Server reply should have this property set to Server. |
OriginTimestamp
Gets or sets the time when the client sent its request.
Declaration
public DateTime? OriginTimestamp { get; }
Property Value
| Type | Description |
|---|---|
| DateTime? | This property is |
See Also
Poll
Gets server's preferred polling interval.
Declaration
public int Poll { get; }
Property Value
| Type | Description |
|---|---|
| int | Polling interval in log2 seconds, e.g. 4 stands for 16s and 17 means 131,072s. |
Precision
Gets the precision of server clock.
Declaration
public int Precision { get; }
Property Value
| Type | Description |
|---|---|
| int | Clock precision in log2 seconds, e.g. -20 for microsecond precision. |
ReceiveTimestamp
Gets or sets the time when the request was received by the server.
Declaration
public DateTime? ReceiveTimestamp { get; }
Property Value
| Type | Description |
|---|---|
| DateTime? | This property is |
See Also
ReferenceId
Gets the ID of the time source used by the server or Kiss-o'-Death code sent by the server.
Declaration
public uint ReferenceId { get; }
Property Value
| Type | Description |
|---|---|
| uint | ID of server's time source or Kiss-o'-Death code. Purpose of this property depends on value of Stratum property. Stratum 1 servers write here one of several special values that describe the kind of hardware clock they use. Stratum 2 and lower servers set this property to IPv4 address of their upstream server. If upstream server has IPv6 address, the address is hashed, because it doesn't fit in this property. When server sets Stratum to special value 0, this property contains so called kiss code that instructs the client to stop querying the server. |
ReferenceTimestamp
Gets or sets the time when the server clock was last set or corrected.
Declaration
public DateTime? ReferenceTimestamp { get; }
Property Value
| Type | Description |
|---|---|
| DateTime? | Time when the server clock was last set or corrected or |
Remarks
This Property is usually set only by servers. It usually lags server's current time by several minutes, so don't use this property for time synchronization.
RootDelay
Gets the total round-trip delay from the server to the reference clock.
Declaration
public TimeSpan RootDelay { get; }
Property Value
| Type | Description |
|---|---|
| TimeSpan | Round-trip delay to the reference clock. Normally a positive value smaller than one second. |
RootDispersion
Gets the estimated error in time reported by the server.
Declaration
public TimeSpan RootDispersion { get; }
Property Value
| Type | Description |
|---|---|
| TimeSpan | Estimated error in time reported by the server. Normally a positive value smaller than one second. |
RoundTripTime
Gets the round-trip time to the server.
Declaration
public TimeSpan RoundTripTime { get; }
Property Value
| Type | Description |
|---|---|
| TimeSpan | Time the request spent traveling to the server plus the time the reply spent traveling back.
This is calculated from timestamps in the packet as |
Stratum
Gets server's distance from the reference clock.
Declaration
public int Stratum { get; }
Property Value
| Type | Description |
|---|---|
| int | Distance from the reference clock. This property is set only in server reply packets. Servers connected directly to reference clock hardware set this property to 1. Statum number is incremented by 1 on every hop down the NTP server hierarchy. Special value 0 indicates that this packet is a Kiss-o'-Death message with kiss code stored in ReferenceId. |
TransmitTimestamp
Gets or sets the time when the packet was sent.
Declaration
public DateTime? TransmitTimestamp { get; }
Property Value
| Type | Description |
|---|---|
| DateTime? | Time when the packet was sent. It should never be |
Remarks
This property must be set by both clients and servers.
See Also
VersionNumber
Gets or sets protocol version number.
Declaration
public int VersionNumber { get; }
Property Value
| Type | Description |
|---|---|
| int | SNTP protocol version. Default is 4, which is the latest version at the time of this writing. |
Remarks
In request packets, clients should leave this property at default value 4. Servers usually reply with the same protocol version.
Methods
FromServerResponse(byte[], DateTime)
Initializes packet from data received from a server.
Declaration
public static NtpPacket FromServerResponse(byte[] bytes, DateTime destinationTimestamp)
Parameters
| Type | Name | Description |
|---|---|---|
| byte[] | bytes | Data received from the server. |
| DateTime | destinationTimestamp | Utc time of reception of response SNTP packet on the client. |
Returns
| Type | Description |
|---|---|
| NtpPacket |


Nothing in nature lives for itself.
The river does not drink its water, the sea does not eat its fish, the trees do not eat its fruits, the sun does not shine for itself, and the flower does not penetrate for itself, things are created to serve others.
Happiness Makers aims to support talented kids either by donate for them by buying their unique products or by direct donating for them.


The file Emissions by Country/Region 1 from [<IP_ADDRESS>] gives data for countries and regions around the world. The data includes:
Country Name
Population
Total CO2 Emissions in 2021.
CO2 Emissions per capita - the total CO2 emissions divided by the population in 2021.
Cumulative CO2 emissions over history.
The change in atmostpheric CO2 due to land use. This can be positive or negative - if countries plant more trees, for example, that would reduce atmospheric CO2, while clearing land or changing how it is used can increase emissions.
CO2 emissions from land use per capita.
Share of CO2 emissions in 2021, as a percentage of global emissions in 2021.
Share of cumulative global CO2 emissions over time, as a percentage of cumulative global emissions.
Share of temperature change from greenhouse gas emissions. Certain changes or types of emissions can have larger effects on temperature change, so this may be different that then the percentage of CO2 emissions.
Use the data in the spreadsheet to answer these questions:
Create a graph of the total CO2 emissions of the 10 countries with the highest emissions in the list. What kind of graph did you choose to make and why?
Create a graph which shows the percentage share of CO2 that each continent or region (the continents/regions listed are Africa, Asia, Europe, North America, Oceania, and South America) has emitted. What kind of graph did you choose to make and why?
Taking all the countries with populations smaller than the USA, create a graph which shows the relationship between population and the percentage of CO2 emissions which the country is responsible for. What kind of graph did you choose and why? Does there seem to be a relationship between the size of the country and the percentage of CO2 emissions they're responsible for.


--- layout: newsstory title: BACK TO THE FUTURE match: Friendly Halesowen Harriers 0 Yeltz 2 ---
And we're off again. A low key start at our, well I don't know what to call them...partner? ... subsiduary? ... anyway Halesowen Harriers and a nice 2-0 victory with second half goals from Les Hines and Rob Elmes .
There was the usual mix of regulars and trialists - full details in DJ's match report - but the big news is that old favorite Sean Flynn turned out in the second half. I'm not certain what the situation with Flynnie making it a lengthy return, but I think everyone would be very excited if he did.
Next fixture is the annual extravaganza down The Grove against the Albion on Saturday . There's all sorts of events going on around the game so it should be, as they say, a fun day out for all the family.
Halesowen Harriers: Turner; P. Taylor, Follows, Wilson, G. Parry, Pestridge, Round, Kelsall, R. Perry, Huskisson, Hughes. Subs: Chatwin, M. Smith, Crudington, Oakes, Howe, Korby, Coldicott.
Halesowen Town
(First Half): Clarke; Colwell, Reece, Newall, L. Collins, R. Collins, Skidmore, Adams, Leadbeater, Jones, Webb.
(Second Half): Garvey; Spencer, Hines, N. Smith, Gardiner, Burnham, Flynn, Ashby, Elmes, Taylor, Tallents. Subs: Derry, Phillips, Henry.
Referee: P. Rejer
Halesowen Town fielded two teams and included their former favourite and ex-Baggies midfield maestro Sean Flynn in their second-half line up. The friendly cemented the recently announced partnership between the two Halesowen clubs with the higher league Yeltz coming out on top.
Richard Adams rattled the post with a 20-yard drive for Town in the 14th minute and Tim Clarke collected a Richard Perry shot at the other end two minutes later. With the Harriers giving a good account of themselves Clint Hughes made a solo run before shooting wide on 37 minutes.
Dr Martens Premier Halesowen Town finally went ahead two minutes into the second half with Les Hines touching the ball home from a Rob Elmes flick-on. The lead was extended on the hour when Flynn chipped into the box and although Neil Turner saved Jason Ashby's shot, Elmes headed home the ball on the goal-line. Turner then did well to cut out a 65th minute cross from Hines before Ashby curled a 70th minute effort just wide. The Harriers goalkeeper went on to make a string of saves from Andy Spencer, Elmes and Ashby in an 80th minute goalmouth scramble with the Yeltz well on top.


Instrument Driver Technology: LabVIEW Plug and Play
(project-style)
Manufacturer: AS
Metrosert
Supported Language(s):
The supported programming environments. Example: LabVIEW
Supported
Model(s): 3458A, 33210A
Model(s) Tested: 3458A, 33210A
Interface(s):
GPIB
Firmware Revision(s) Tested:
-
Certified: No
NI
Supported: No
Source Code
Available: Yes
Driver Revision: 1.1
Original Release
Date: 30.05.2017
Current Revision Date: 25.09.2017
Some software components need to be installed before using this
instrument driver. The minimum versions of these components are
listed below, and can be downloaded from the Download Site.
VISA 3 or later
Basic Agilent 3458 driver
Refer to the LabVIEW Help for more information about
software requirements. You access the LabVIEW Help by
selecting Help»Search the LabVIEW Help.
To report issues or provide feedback about this instrument driver, please send an email to
<EMAIL_ADDRESS>or<EMAIL_ADDRESS>REV 1.0, 30/05/2017
Modified by: Andrei Pokatilov, Tallinn, Estonia.
Original release.
REV 1.1, 25/09/2017
Modified by: Stanislav Maslan, Czech republic.
Current release.


Module API
Module API
The module API provides an intermediate and high-level interface for performing computation with neural networks in MXNet. A module is an instance of subclasses of the BaseModule
. The most widely used module class is called Module
. Module wraps a Symbol
and one or more Executors
. For a full list of functions, see BaseModule
.
A subclass of modules might have extra interface functions. This topic provides some examples of common use cases. All of the module APIs are in the Module
namespace.
Preparing a Module for Computation
To construct a module, refer to the constructors for the module class. For example, the Module
class accepts a Symbol
as input:
import org.apache.mxnet._
import org.apache.mxnet.module.{FitParams, Module}
// construct a simple MLP
val data = Symbol.Variable("data")
val fc1 = Symbol.api.FullyConnected(Some(data), num_hidden = 128, name = "fc1")
val act1 = Symbol.api.Activation(Some(fc1), "relu", "relu1")
val fc2 = Symbol.api.FullyConnected(Some(act1), num_hidden = 64, name = "fc2")
val act2 = Symbol.api.Activation(Some(fc2), "relu", "relu2")
val fc3 = Symbol.api.FullyConnected(Some(act2), num_hidden = 10, name = "fc3")
val out = Symbol.api.SoftmaxOutput(fc3, name = "softmax")
// construct the module
val mod = new Module(out)
By default, context
is the CPU. If you need data parallelization, you can specify a GPU context or an array of GPU contexts.
Before you can compute with a module, you need to call bind()
to allocate the device memory and initParams()
or SetParams()
to initialize the parameters.
If you simply want to fit a module, you don't need to call bind()
and initParams()
explicitly, because the fit() function automatically calls them if they are needed.
mod.bind(dataShapes = train_dataiter.provideData, labelShapes = Some(train_dataiter.provideLabel))
mod.initParams()
Now you can compute with the module using functions like forward()
, backward()
, etc.
Training, Predicting, and Evaluating
Modules provide high-level APIs for training, predicting, and evaluating. To fit a module, call the fit()
function with some DataIter
s:
import org.apache.mxnet.optimizer.SGD
val mod = new Module(softmax)
mod.fit(train_dataiter, evalData = scala.Option(eval_dataiter), \
numEpoch = n_epoch, fitParams = new FitParams()\
.setOptimizer(new SGD(learningRate = 0.1f, momentum = 0.9f, wd = 0.0001f)))
The interface is very similar to the old FeedForward
class. You can pass in batch-end callbacks using setBatchEndCallback
and epoch-end callbacks using setEpochEndCallback
. You can also set parameters using methods like setOptimizer
and setEvalMetric
. To learn more about the FitParams()
, see the API page. To predict with a module, call predict()
with a DataIter
:
mod.predict(val_dataiter)
The module collects and returns all of the prediction results. For more details about the format of the return values, see the documentation for the predict()
function.
When prediction results might be too large to fit in memory, use the predictEveryBatch
API:
val preds = mod.predictEveryBatch(val_dataiter)
val_dataiter.reset()
var i = 0
while (val_dataiter.hasNext) {
val batch = val_dataiter.next()
val predLabel: Array[Int] = NDArray.argmax_channel(preds(i)(0)).toArray.map(_.toInt)
val label = batch.label(0).toArray.map(_.toInt)
//do something...
i += 1
}
If you need to evaluate on a test set and don't need the prediction output, call the score()
function with a DataIter
and an EvalMetric
:
mod.score(val_dataiter, metric)
This runs predictions on each batch in the provided DataIter
and computes the evaluation score using the provided EvalMetric
. The evaluation results are stored in metric
so that you can query later.
Saving and Loading Module Parameters
To save the module parameters in each training epoch, use a checkpoint
callback:
val modelPrefix: String = "mymodel"
for (epoch <- 0 until 5) {
while(train_dataiter.hasNext){
// forward backward pass
//do something...
}
val checkpoint = mod.saveCheckpoint(modelPrefix, epoch, saveOptStates = true)
}
To load the saved module parameters, call the loadCheckpoint
function:
val mod = Module.loadCheckpoint(modelPrefix, loadModelEpoch, loadOptimizerStates = true)
To initialize parameters, Bind the symbols to construct executors first with bind
method. Then, initialize the parameters and auxiliary states by calling initParams()
method.
mod.bind(dataShapes = train_dataiter.provideData, labelShapes = Some(train_dataiter.provideLabel))
mod.initParams()
To get current parameters, use getParams
method.
val (argParams, auxParams) = mod.getParams
To assign parameter and aux state values, use setParams
method.
mod.setParams(argParams, auxParams)
To resume training from a saved checkpoint, instead of calling setParams()
, directly call fit()
, passing the loaded parameters, so that fit()
knows to start from those parameters instead of initializing randomly:
mod.fit(..., fitParams=new FitParams().setArgParams(argParams).\
setAuxParams(auxParams).setBeginEpoch(beginEpoch))
Create an object of the FitParams()
class, and then use it to call the setBeginEpoch()
method to pass beginEpoch
so that fit()
knows to resume from a saved epoch.
Next Steps
- See Model API for an alternative simple high-level interface for training neural networks.
- See Symbolic API for operations on NDArrays that assemble neural networks from layers.
- See IO Data Loading API for parsing and loading data.
- See NDArray API for vector/matrix/tensor operations.
- See KVStore API for multi-GPU and multi-host distributed training.


QuantileEstimator.rb
This implements the quantile estimator described in the paper:
Cormode et. al.: "Effective Computation of Biased Quantiles over Data Streams"
Given the different strategies to implement the algorithm I used the easiest one by using github.com/odo/quantile_estimator as reference for the implementation.
Installation
Add this line to your application's Gemfile:
gem 'quantile_estimator'
And then execute:
$ bundle
Or install it yourself as:
$ gem install quantile_estimator
Usage
First initialize the estimator. Right now you can either have a
Biased
or
Targeted
invariants. The targeted
invariant let you select the quantiles you are
particularly interested and
will yield higher compression rates.
biased = Invariant::Biased.new(0.004)
targeted = Invariant::Targeted.new([
[0.05, 0.02],
[0.5, 0.02],
[0.95, 0.02]
])
estimator = Estimator.new(targeted)
Insertion of data is as simple as:
estimator.insert(value)
The insertion of data doesn't automatically compress it. To compress the data just call:
estimator.compress!
Using these primitives you can build wraps to compress on every nth insert as shown in this file
Pretty Graphs
Using a targeted invariant to keep track of the 0.05, 0.5 and 0.95 quantiles, a uniform source of random values and compressing every 100 iterations. We get the following behavior regarding the size of the internal data structure:
Running time behavior is not too bad. The following graph shows the cost of insertions in the estimator. The homogeneous layer of outlayers probably corresponds to the compression cycles, while the bottom line is the cost of compression-less insertions.
Different distributions, different invariants setups will have different behaviors.
Check your real data before using this!
Known issues
The implementation is known not to be thread-safe, and little effort has been done to optimize it.
Contributing
-
Fork it
-
Create your feature branch (
git checkout -b my-new-feature
) -
Commit your changes (
git commit -am 'Add some feature'
) -
Push to the branch (
git push origin my-new-feature
) -
Create new Pull Request


The Crimson Fairy Book
by Andrew Lang
“The Rogue and the Herdsman”
by Andrew Lang
Additional Information
- Year Published: 1903
- Language: English
- Country of Origin: Iceland
- Source: Lang, A. (Ed.). (1903). The Crimson Fairy Book. London: Dover Publications.
-
Readability:
- Flesch–Kincaid Level: 5.1
- Word Count: 3,123
- Genre: Fairy Tale/Folk Tale
- Keywords: cleverness
- ✎ Cite This
Downloads
In a tiny cottage near the king’s palace there once lived an old man, his wife, and his son, a very lazy fellow, who would never do a stroke of work. He could not be got even to look after their one cow, but left her to look after herself, while he lay on a bank and went to sleep in the sun. For a long time his father bore with him, hoping that as he grew older he might gain more sense; but at last the old man’s patience was worn out, and he told his son that he should not stay at house in idleness, and must go out into the world to seek his fortune.
The young man saw that there was no help for it, and he set out with a wallet full of food over his shoulder. At length he came to a large house, at the door of which he knocked.
‘What do you want?’ asked the old man who opened it.
‘That you shall have,’ replied the man; ‘but to-morrow I shall give you some work to do, for you must know that I am the chief herdsman of the king.’
The youth made no answer to this. He felt, if he was to be made to work after all, that he might as well have stayed where he was. But as he did not see any other way of getting a bed, he went slowly in.
The herdsman’s two daughters and their mother were sitting at supper, and invited him to join them. Nothing more was said about work, and when the meal was over they all went to bed.
In the morning, when the young man was dressed, the herdsman called to him and said:
‘Now listen, and I will tell you what you have to do.’
‘What is it?’ asked the youth, sulkily.
‘Nothing less than to look after two hundred pigs,’ was the reply.
‘Oh, I am used to that,’ answered the youth.
‘Yes; but this time you will have to do it properly,’ said the herdsman; and he took the youth to the place where the pigs were feeding, and told him to drive them to the woods on the side of the mountain. This the young man did, but as soon as they reached the outskirts of the mountain they grew quite wild, and would have run away altogether, had they not luckily gone towards a narrow ravine, from which the youth easily drove them home to his father’s cottage.
‘Where do all these pigs come from, and how did you get them?’ asked the old man in surprise, when his son knocked at the door of the hut he had left only the day before.
‘They belong to the king’s chief herdsman,’ answered his son. ‘He gave them to me to look after, but I knew I could not do it, so I drove them straight to you. Now make the best of your good fortune, and kill them and hang them up at once.’
‘What are you talking about?’ cried the father, pale with horror. ‘We should certainly both be put to death if I did any such thing.’
‘No, no; do as I tell you, and I will get out of it somehow,’ replied the young man. And in the end he had his way. The pigs were killed, and laid side by side in a row. Then he cut off the tails and tied them together with a piece of cord, and swinging the bundle over his back, he returned to the place where they should have been feeding. Here there was a small swamp, which was just what he wanted, and finding a large stone, he fastened the rope to it, and sank it in the swamp, after which he arranged the tails carefully one by one, so that only their points were seen sticking out of the water. When everything was in order, he hastened home to his master with such a sorrowful face that the herdsman saw at once that something dreadful had happened.
‘Where are the pigs?’ asked he.
‘Oh, don’t speak of them!’ answered the young man; ‘I really can hardly tell you. The moment they got into the field they became quite mad, and each ran in a different direction. I ran too, hither and thither, but as fast as I caught one, another was off, till I was in despair. At last, however, I collected them all and was about to drive them back, when suddenly they rushed down the hill into the swamp, where they vanished completely, leaving only the points of their tails, which you can see for yourself.’
‘You have made up that story very well,’ replied the herdsman.
‘No, it is the real truth; come with me and I’ll prove it.’ And they went together to the spot, and there sure enough were the points of the tails sticking up out of the water. The herdsman laid hold of the nearest, and pulled at it with all his might, but it was no use, for the stone and the rope held them all fast. He called to the young man to help him, but the two did not succeed any better than the one had done.
‘Yes, your story was true after all; it is a wonderful thing,’ said the herdsman. ‘But I see it is no fault of yours. and I must put up with my loss as well as I can. Now let us return home, for it is time for supper.
Next morning the herdsman said to the young man: ‘I have got some other work for you to do. To-day you must take a hundred sheep to graze; but be careful that no harm befalls them.’
‘I will do my best,’ replied the youth. And he opened the gate of the fold, where the sheep had been all night, and drove them out into the meadow. But in a short time they grew as wild as the pigs had done, and scattered in all directions. The young man could not collect them, try as he would, and he thought to himself that this was the punishment for his laziness in refusing to look after his father’s one cow.
At last, however, the sheep seemed tired of running about, and then the youth managed to gather them together, and drove them, as before, straight to his father’s house.
‘Whose sheep are these, and what are they doing here?’ asked the old man in wonder, and his son told him. But when the tale was ended the father shook his head.
‘Give up these bad ways and take them back to your master,’ said he.

‘Oh, I am not sure of that!’ said the son, ‘and, anyway, I will have my will for once.’ And he killed all the sheep and laid them on the grass. But he cut off the head of the ram which always led the flock and had bells round its horns. This he took back to the place where they should have been feeding, for here he had noticed a high rock, with a patch of green grass in the middle and two or three thick bushes growing on the edge. Up this rock he climbed with great difficulty, and fastened the ram’s head to the bushes with a cord, leaving only the tips of the horns with the bells visible. As there was a soft breeze blowing, the bushes to which the head was tied moved gently, and the bells rang. When all was done to his liking he hastened quickly back to his master.
‘Where are the sheep?’ asked the herdsman as the young man ran panting up the steps.
‘Oh! don’t speak of them,’ answered he. ‘It is only by a miracle that I am here myself.’
‘Tell me at once what has happened,’ said the herdsman sternly.
The youth began to sob, and stammered out: ‘I—I hardly know how to tell you! They—they—they were so—so troublesome—that I could not manage them at all. They—ran about in—in all directions, and I- -I—ran after them and nearly died of fatigue. Then I heard a—a noise, which I—I thought was the wind. But—but—it was the sheep, which, be—before my very eyes, were carried straight up—up into the air. I stood watching them as if I was turned to stone, but there kept ringing in my ears the sound of the bells on the ram which led them.’
‘That is nothing but a lie from beginning to end,’ said the herdsman.
‘No, it is as true as that there is a sun in heaven,’ answered the young man.
‘Then give me a proof of it,’ cried his master.
‘Well, come with me,’ said the youth. By this time it was evening and the dusk was falling. The young man brought the herdsman to the foot of the great rock, but it was so dark you could hardly see. Still the sound of sheep bells rang softly from above, and the herdsman knew them to be those he had hung on the horns of his ram.
‘Do you hear?’ asked the youth.
‘Yes, I hear; you have spoken the truth, and I cannot blame you for what has happened. I must bear the loss as best as I can.’
He turned and went home, followed by the young man, who felt highly pleased with his own cleverness.
‘I should not be surprised if the tasks I set you were too difficult, and that you were tired of them,’ said the herdsman next morning; ‘but to-day I have something quite easy for you to do. You must look after forty oxen, and be sure you are very careful, for one of them has gold-tipped horns and hoofs, and the king reckons it among his greatest treasures.’
The young man drove out the oxen into the meadow, and no sooner had they got there than, like the sheep and the pigs, they began to scamper in all directions, the precious bull being the wildest of all. As the youth stood watching them, not knowing what to do next, it came into his head that his father’s cow was put out to grass at no great distance; and he forthwith made such a noise that he quite frightened the oxen, who were easily persuaded to take the path he wished. When they heard the cow lowing they galloped all the faster, and soon they all arrived at his father’s house.
The old man was standing before the door of his hut when the great herd of animals dashed round a corner of the road, with his son and his own cow at their head.
‘Whose cattle are these, and why are they here?’ he asked; and his son told him the story.
 They will make you fat!’
 Last of all they came to the king’s cherished ox.
The son had a rope ready to cast round its horns, and threw it to the ground, but the ox was stronger than the rope, and soon tore it in pieces. Then it dashed away to the wood, the youth following; over hedges and ditches they both went, till they reached the rocky pass which bordered the herdsman’s land. Here the ox, thinking itself safe, stopped to rest, and thus gave the young man a chance to come up with it. Not knowing how to catch it, he collected all the wood he could find and made a circle of fire round the ox, who by this time had fallen asleep, and did not wake till the fire had caught its head, and it was too late for it to escape. Then the young man, who had been watching, ran home to his master.
‘You have been away a long while,’ said the herdsman. ‘Where are the cattle?’
The young man gasped, and seemed as if he was unable to speak. At last he answered:
‘It is always the same story! The oxen are—gone—gone!’
‘G-g-gone?’ cried the herdsman. ‘Scoundrel, you lie!’
‘I am telling you the exact truth,’ answered the young man. ‘Directly we came to the meadow they grew so wild that I could not keep them together. Then the big ox broke away, and the others followed till they all disappeared down a deep hole into the earth. It seemed to me that I heard sounds of bellowing, and I thought I recognised the voice of the golden horned ox; but when I got to the place from which the sounds had come, I could neither see nor hear anything in the hole itself, though there were traces of a fire all round it.’
‘Wretch!’ cried the herdsman, when he had heard this story, ‘even if you did not lie before, you are lying now.’
‘No, master, I am speaking the truth.
‘What do you call that?’ asked the youth. And the herdsman looked and saw the traces of a fire, which seemed to have sprung up from under the earth.
‘Wonder upon wonder,’ he exclaimed, ‘so you really did speak the truth after all! Well, I cannot reproach you, though I shall have to pay heavily to my royal master for the value of that ox.  I will never set you to herd cattle again, henceforward I will give you something easier to do.’
‘I have thought of exactly the thing for you,’ said the herdsman as they walked along, ‘ and it is so simple that you cannot make a mistake. Just make me ten scythes, one for every man, for I want the grass mown in one of my meadows to-morrow.’
At these words the youth’s heart sank, for he had never been trained either as a smith or a joiner. However, he dared not say no, but smiled and nodded.
Slowly and sadly he went to bed, but he could not sleep, for wondering how the scythes were to be made. All the skill and cunning he had shown before was of no use to him now, and after thinking about the scythes for many hours, there seemed only one way open to him. So, listening to make sure that all was still, he stole away to his parents, and told them the whole story. When they had heard everything, they hid him where no one could find him.
Time passed away, and the young man stayed at home doing all his parents bade him, and showing himself very different from what he had been before he went out to see the world; but one day he said to his father that he should like to marry, and have a house of his own.
‘When I served the king’s chief herdsman,’ added he, ‘I saw his daughter, and I am resolved to try if I cannot win her for my wife.’
‘It will cost you your life, if you do,’ answered the father, shaking his head.
‘Well, I will do my best,’ replied his son; ‘but first give me the sword which hangs over your bed!’
The old man did not understand what good the sword would do, however he took it down, and the young man went his way.
Late in the evening he arrived at the house of the herdsman, and knocked at the door, which was opened by a little boy.
‘I want to speak to your master,’ said he.
‘So it is you?’ cried the herdsman, when he had received the message. ‘Well, you can sleep here to-night if you wish.’
‘I have come for something else besides a bed,’ replied the young man, drawing his sword, ‘and if you do not promise to give me your youngest daughter as my wife I will stab you through the heart.’
What could the poor man do but promise? And he fetched his youngest daughter, who seemed quite pleased at the proposed match, and gave the youth her hand.
Then the young man went home to his parents, and bade them get ready to welcome his bride. And when the wedding was over he told his father-in-law, the herdsman, what he had done with the sheep, and pigs, and cattle. By-and-by the story came to the king’s ears, and he thought that a man who was so clever was just the man to govern the country; so he made him his minister, and after the king himself there was no one so great as he.


Samsung to terminate its CPU design team in the United States
Source: Android Central
What you need to know
- Samsung is rumored to be considering eliminating its CPU chip design team.
- The company notified Texas of impending layoffs at the labs that house CPU research.
- Samsung manufacturing in Austin will not be affected.
Samsung has filed documents with the Texas Workforce Commission notifying the state of impending layoffs, a move that comes amid rumors that the electronics giant will cease work on its own CPU cores and license entirely from ARM instead.
While the company employs 3,000 workers in a manufacturing facility in Austin, those workers would not be affected and the labs in question would not be shut down entirely.
The so-called Worker Adjustment and Retraining Notification (WARN) letter sent to the state notifies of layoffs in Austin as well as at the Advanced Computer Lab in San Jose, CA. The letter does not specify how many workers in each state would be let go, but in total 290 workers on the CPU team are expected to lose their jobs. Companies are required by Federal law to notify local state officials if there will be a significant number of layoffs.
Per Michele Glaze, a Samsung spokeswomen:
We have treated all employees with respect. They all have been given appropriate packages and advanced notice," Glaze said. "These things are very tough. People always wonder, 'Did they treat them right?' And we did. It's unfortunate that they are losing their jobs, but it is based upon the fact that we're always assessing our business.
While it sounds like Samsung handled the layoffs as best as it could, it does create for questions regarding the future of Samsung's own Exynos processors. This isn't the first bit of news to suggest that Samsung is looking to get out of this game, so it'll be interesting to see where things go from here.
Exynos Smartphone
Motorola One Action
Samsung-powered Motorola action cam
The Motorola One Action is unique in a few ways - mostly its wide-angle lens that lets you capture true horizontal video while holding the phone in portrait. It also sports a Samsung Exynos octa-core processor.
Philip Berne worked from 2011 to 2017 as part of Samsung's Public Relations team and maintains no business or financial relationships with Samsung nor is he currently bound by non-disclosure agreement.
We may earn a commission for purchases using our links. Learn more.


FreeFrame Open Video Plugin System Specification
Version 1.5 - 'FreeFrameGL'
1. OS integration
2. Basic types and constants
3. Enumerated and derived types
4. Structures
5. Functions
5.1. Global functions
5.2. Instance specific functions
Copyright (c) 2002-2007 www.freeframe.org
All rights reserved.
This document is a functional specification for the FreeFrame application programmers interface
(API). It is intended to be subject to the same license as the code supplied as examples of
use of the FreeFrame API.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
-
Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
-
Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the
distribution.
-
Neither the name of FreeFrame nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.

1. OS integration
FreeFrame plugins are distributed and used as compiled shared objects (.so)
in Linux, as Bundles in Mac OS X and as Dynamic Link Libraries (.dll) in
Windows.
FreeFrame Plugins export a single function: plugMain. This is passed 3 values:
a 32-bit function code, a 32-bit input value and a 32-bit instance identifier.
It returns a 32-bit output value.
The input values and output values have different types according to the function code.
This may be implemented differently on different platforms in different languages, but the
format of the values must be consistent.
plugMain |
(unsigned integer functionCode, unsigned integer inputValue, unsigned integer instanceID) |
Parameters:
| functionCode: |
Tells the plugin which function is being called (see function table) |
| inputValue: |
32-bit value or 32-bit pointer to some structure, depending on function
code.
|
| instanceID: |
32-bit instance identifier. Only used for instance specific functions (see function table) |
Return value:
Depends on function code. See function table for details.
Remarks:
| PLUGIN DEVELOPERS: |
You shouldn't need to change this function. This is the one and only function exposed by
the library containing the actual plugin.
|
2. Basic types and constants
All numbers in this document are ordinary decimal numbers, expect if specified
otherwise.
The following types are used:
| Type |
Range of type |
Notes |
| 32-bit unsigned integer |
0 to<PHONE_NUMBER> |
- |
| 32-bit pointer |
0 to<PHONE_NUMBER> |
needs to be a valid memory location |
| 32-bit IEEE float |
1 sign bit, 8 bit exponent, 23 bit fraction |
Smallest Non-Zero Values: + or - 1.4012985 × (10 ^ ?45) |
Largest Non-Infinite Values: + or - 3.4028235 × (10 ^ 38) |
| 64-bit IEEE float |
1 sign bit, 11 bit exponent, 52 bit fraction |
Smallest Non-Zero Values: + or - 5.0 × (10 ^ ?324) |
Largest Non-Infinite Values: + or - 1.7976931348623157 × (10 ^ 308) |
The following constants are used as return values:
| FF_SUCCESS |
0 |
| FF_FAIL |
(hex) FFFFFFFF |
| FF_TRUE |
1 |
| FF_FALSE |
0 |
| FF_SUPPORTED |
1 |
| FF_UNSUPPORTED |
0 |
Remarks:
-
In functions that return error codes any value other than 0 is assumed to be an
error code. These are to be defined in each function below.
-
In functions that return a pointer, (hex) FFFFFFFF also represents a failure condition.
3. Enumerated and derived types
InstanceIdentifier |
(32-bit unsigned integer) |
Definition:
| InstanceIdentifier: |
Unique identifier for the instance of a plugin. For some plugins, this value
might represent a pointer to a plugin-specific data structure containing the
instance's current state. Or it could be an index to a table of all active
instances of a plugin, or any other value that uniquely identifies an instance.
|
NumParameters |
(32-bit unsigned integer)
|
Definition:
| NumParameters: |
Specifies the number of parameters that the plugin implements. |
Definition:
| ParameterNumber: |
Index of a parameter, starting at 0 for the first parameter. |
ParameterName |
(array of 16 1-byte ASCII characters, *not null terminated*) |
Definition:
| ParameterName: |
The name of the Parameter as it will be displayed by the host on the UI. |
ParameterValue |
(32-bit float value OR 32-bit pointer) |
Definition:
| ParameterValue: |
Float value from 0-1 or pointer to null terminated string. (See remarks) |
Remarks:
Apart from text parameters, FreeFrame parameter values are always 32-bit floats,
and the range of values permitted is STRICTLY 0-1 (0 <= ParameterValue <= 1).
This allows faster processing and a good range of values over a standard
range, so the host can run up sliders or similar for the plugin.
The Use of any values outside this range will result in hideous incompatibilities.
The ParameterDisplayValue can be used to display whatever actual values
the plugin likes e.g. 0-255, 0-767, 1-256 or whatever.
The plugin should translate the standard 0-1 float range into the values it
needs for its processing.
For text parameters, this 32-bit value represents a pointer to a null terminated
string.
ParameterDefaultValue |
(32-bit float value OR 32-bit pointer) |
Definition:
| ParameterDefaultValue: |
The initial default value for this parameter. 32-bit float value or 32-bit pointer to null terminated string. (See remarks) |
Remarks:
Plugins should always specify default values.
Sometimes a host may not implement all parameters on a plugin,
so the plugin must use default values until told to do otherwise by the host.
Apart from text parameters, FreeFrame parameter values are always 32-bit floats,
and the range of values permitted is STRICTLY 0-1.
For text parameters, this 32-bit value represents a pointer to a null terminated
string.
ParameterDisplayValue |
(array of 16 1-byte ASCII characters, *not null
terminated*) |
Definition:
| ParameterDisplayValue: |
String representing the current display value of this parameter.
The plugin can display whatever it
likes here e.g. just the float, a rounded 0-100 '%' representation for the user,
words representing states like 'on' / 'off',
different effects that the one plugin can do etc...
|
Definition:
| PluginCapsIndex: |
32-bit unsigned integer. Specifies certain capabilities of a plugin that the host may
want to enquire about.:
0 = 16-bit 5-6-5 pixelformat support
1 = 24-bit pixelformat support
2 = 32-bit (or 24-bit 32-bit aligned) pixelformat support
3 = Plugin supports processFrameCopy function
4 = Plugin supports processOpengl function
5 = Plugin supports setTime function
Calls to these caps indexes are only meaningful if the plugin has reported
that it supports processFrameCopy or
processOpengl:
10 = Minimum input frames
11 = Maximum input frames
Calls to this caps index are only meaningful if the plugin has reported
that it supports processFrameCopy:
15 = Plugin optimized for copy or in-place processing
|
Remarks:
See getPluginCaps for more information about the usage
of this structure.
See VideoInfoStruct for more information about the
pixelformats.
Definition:
| ParameterType: |
32-bit unsigned integer. Tells the host what kind of data the
parameter is. Current meaningful values:
| Value |
Type |
Description |
| 0 |
boolean |
0.0 defined as false and anything else defined as true - e.g. checkbox |
| 1 |
event |
Similar to boolean but for a momentary push button style trigger.
1.0 is set momentarily to denote a simple event - e.g. pushbutton / keystroke. |
| 2 |
red |
The 3 colors e.g. for a colorpicker |
| 3 |
green |
| 4 |
blue |
| 5 |
xpos |
For x, y video interaction e.g. cursor - these define a position within the processed video frames.
|
| 6 |
ypos |
| 10 |
standard |
A standard parameter representing an unspecified float value |
| 11 |
alpha |
Transparency value esp. for use in a 3 colour colourpicker + alpha |
| 100 |
text |
A null terminated text input type - Note: only this type has a
different data type for the moment |
|
Remarks:
The range of values permitted for all variables (except text) is strictly 0-1.
For the xpos and ypos parameter types, GPU plugin coordinates (0,0) refer to the bottom left corner
of the processed frame, and coordinates (1,1) refer to the upper right corner. CPU plugin coordinates (0,0) may be at the bottom left or top left,
and (1,1) at the top right or bottom right, depending on the orientation defined in the VideoInfoStruct.
InputChannel |
32-bit unsigned integer |
Definition:
| InputChannel: |
Input channel as relates to the use of multiple inputs in processFrameCopy
The first channel is 0.
|
InputStatus |
32-bit unsigned integer |
Definition:
| InputStatus: |
Status of input channels as relates to the use of multiple inputs in processFrameCopy.
0 = Not in use
1 = In Use
|
4. Structures
PluginInfoStruct |
(size = 32 bytes) |
PluginInfoStruct {
APIMajorVersion: 32-bit unsigned integer
APIMinorVersion: 32-bit unsigned integer
PluginUniqueID: 4 1-byte ASCII characters *not null terminated*
PluginName: 16 1-byte ASCII characters *not null terminated*
PluginType: 32-bit unsigned integer
}
Fields:
| APIMajorVersion: |
Represents number before decimal point in version numbers |
| APIMinorVersion: |
Represents number after decimal point in version numbers |
| PluginUniqueID: |
Unique ID for plugin |
| PluginName: |
Name of plugin |
| PluginType: |
Current meaningful values:
0 = effect
1 = source
(see remarks)
|
Remarks:
Plugins of PluginType effect process one or more input frames to create an output frame.
Source plugins create an output based only on the plugin parameters, and do
not expect or use any input frames.
FreeFrame APIMinorVersion numbers should always have 3 digits - so divide the
minor version number by 1000 and add the major version number to get the full
version number.
Example: for version 0.511, APIMajorVersion=0 and APIMinorVersion=511.
VideoInfoStruct |
(size = 16 bytes) |
VideoInfoStruct {
FrameWidth: 32-bit unsigned integer
FrameHeight: 32-bit unsigned integer
BitDepth: 32-bit unsigned integer
Orientation: 32-bit unsigned integer
}
Fields:
| FrameWidth: |
Width of video frame in pixels |
| FrameHeight: |
Height of video frame in pixels |
| BitDepth: |
Current meaningful values:
0 = 16-bit, 5-6-5 packed
1 = 24-bit, packed (see remarks)
2 = 32-bit, also suitable for 32-bit unsigned integer aligned 24-bit (see remarks).
(see remarks)
|
| Orientation: |
Current meaningful values:
1 = origin at top left
2 = origin at bottom left
(see remarks)
|
Remarks:
This structure is provided by the host when a CPU plugin is instantiated.
When a GPU plugin is instantiated, it is passed a FFGLViewportStruct. The remarks below
are not relevant to GPU plugins.
Video frames are provided to CPU plugins as large buffers of pixels. The Red, Green, Blue,
and sometimes Alpha values of a single pixel are located at consecutive memory locations.
A video buffer consists of FrameWidth x FrameHeight pixels.
Plugins using 32-bit as byte aligned 24-bit video should be careful not to
overwrite the alpha (4th) byte of each pixel (e.g. by using it as a processing
space) as this may be used soon by hosts with 32-bit video processing becoming
more accessible.
If Orientation == 1 the first pixel at the pointer to the frame is the top left
pixel. If Orientation == 2, it is the bottom left pixel. This is particularly important for text and
live input (to avoid mirroring of the image).
The byte order of color values depends on the target platform (i.e. big-endian versus little-endian). For little-endian platforms
(e.g. Intel PC), the byte order is BGRA for 32-bit and BGR for 24-bit colors.
For big-endian machines (e.g. MAC), the byte order for 32-bit is ARGB and RGB for 24-bit.
For all target platforms, the unsigned integer representation of a 32-bit color is the same, namely (in C syntax):
unsigned int color = (A << 24) + (R << 16) + (G << 8) + (B << 0);
where A, R, G, B are the 8-bit color components. Plugin developers who aim for platform-independence should be aware of these
differences and program their plugins accordingly.
SetParameterStruct |
(size = 8 bytes) |
SetParameterStruct {
ParameterNumber: ParameterNumber
NewParameterValue: ParameterValue
}
Fields:
| ParameterNumber: |
Index of the parameter to set. |
| NewParameterValue: |
New value for this parameter. For float parameters, this is a float from 0-1.
For text parameters, this is a pointer to a null terminated string
(see ParameterValue).
|
PluginExtendedInfoStruct |
(size = 24 bytes) |
PluginExtendedInfoStruct{
PluginMajorVersion: 32-bit unsigned integer
PluginMinorVersion: 32-bit unsigned integer
Description: 32-bit pointer to null terminated string
About: 32-bit pointer to null terminated string
FreeFrameExtendedDataSize: 32-bit unsigned integer
FreeFrameExtendedDataBlock: 32-bit pointer
}
Fields:
| PluginMajorVersion: |
Represents number before decimal point in version numbers.
|
| PluginMinorVersion: |
Represents number after decimal point in version numbers.
|
| Description: |
A description of the plugin - intended to be made available to the user
in hosts supporting this function via the UI. Pointer value can be 0
if not provided by plugin!
|
| About: |
Author and license information. Pointer value can be 0
if not provided by plugin!
|
| FreeFrameExtendedDataSize: |
Size in bytes of the FreeFrameExtendedDataBlock - or 0 if not provided by plugin.
|
| FreeFrameExtendedDataBlock: |
32-bit pointer to a FreeFrame ExtendedDataBlock
- this interface is not yet in use, but provided
to allow the FreeFrame project to establish an
extended data block format in the future.
Please do not use until a data format has been agreed.
|
Remarks:
FreeFrame PluginMinorVersion numbers should always have 3 digits - so divide the
minor version number by 1000 and add the major version number to get the full
version number. Example: 0.751 APIMajorVersion=0, APIMinorVersion=751
ProcessFrameCopyStruct |
(size = 12 bytes) |
ProcessFrameCopyStruct{
numInputFrames: 32-bit unsigned integer
ppInputFrames: 32-bit pointer to array of pointers
pOutputFrame: 32-bit pointer
}
Fields:
| numInputFrames: |
Number of input frames contained in ppInputFrames. |
| ppInputFrames: |
A pointer to an array of pointers to input frames. |
| pOutputFrame: |
Pointer to output frame.
|
FFGLTextureStruct |
(size = 20 bytes) |
FFGLTextureStruct {
Width: 32-bit unsigned integer
Height: 32-bit unsigned integer
HardwareWidth: 32-bit unsigned integer
HardwareHeight: 32-bit unsigned integer
Handle: 32-bit unsigned integer (GLuint)
}
Fields:
| Width: |
Width (in pixels) of video frame |
| Height: |
Height (in pixels) of video frame |
| HardwareWidth: |
Width (in pixels) of GPU texture storing the video frame |
| HardwareHeight: |
Height (in pixels) of GPU texture storing the video frame |
| Handle: |
The OpenGL texture handle, from glGenTextures, use with glBindTexture |
Remarks:
Hosts must provide textures of type GL_TEXTURE_2D. GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_3D, etc, are NOT supported.
FFGLViewportStruct |
(size = 16 bytes) |
FFGLViewportStruct {
X: 32-bit unsigned integer
Y: 32-bit unsigned integer
Width: 32-bit unsigned integer
Height: 32-bit unsigned integer
}
Fields:
| X: |
X-coordinate of the viewport's bottom left corner |
| Y: |
Y-coordinate of the viewport's bottom left corner |
| Width: |
Width of viewport |
| Height: |
Height of viewport |
Remarks:
This structure is provided by the host when a GPU plugin is instantiated.
When a CPU plugin is instantiated, it is passed a VideoInfoStruct. The remarks below
are not relevant to CPU plugins.
GPU plugins draw their output into the host's OpenGL viewport during calls to processOpenGL. Plugins can expect that this viewport will not change during the lifetime of the plugin.
If the host's viewport changes (perhaps because the user changed their output window size or output resolution), any loaded plugins must be deinstantiated and reinstantiated and provided with the new viewport information.
ProcessOpenGLStruct |
(size = 12 bytes) |
ProcessOpenGLStruct {
numInputTextures: 32-bit unsigned integer
ppInputTextures: 32-bit pointer to array of pointers to FFGLTextureStruct
HostFBO: 32-bit unsigned integer (GLuint)
}
Fields:
| numInputTextures: |
Number of input textures contained in ppInputTextures |
| ppInputTextures: |
A pointer to an array of pointers to input textures |
| HostFBO: |
32-bit unsigned integer (GLuint) see Remarks below |
Remarks:
Hosts must provide textures of type GL_TEXTURE_2D. GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_3D, etc, are NOT supported.
Hosts will often wish to capture the output of a GPU plugin to an offscreen texture. Hosts and plugins *must* use the
the EXT_framebuffer_object ("FBO") extension to do this. Use of any other methods (such as 'PBuffers') is not supported.
When a host calls ProcessOpenGL with an FBO active, the host must provide the handle to the FBO in the 'HostFBO' field.
Plugins that use their own FBOs internally must restore the host's FBO with a call to glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, HostFBO)
so that the host can successfully capture the output of the plugin.
When a host calls ProcessOpenGL with no FBO active, it must pass a value of 0 in the 'HostFBO' field.
5. Functions
Some functions are specific to an instance of a plugin, and thus require a
valid InstanceID in the InstanceID field, others concern global parameters
that are the same for all instances, and so do not require a valid InstanceID.
Function Code Table
Global functions:
Instance specific functions:
5.1. Global functions
getInfo |
(function code = 0) |
Input value:
none
Return value:
32-bit pointer to PluginInfoStruct if successful,
FF_FAIL otherwise.
Remarks:
Gets information about the plugin - version, unique id, short name and type (see
PluginInfoStruct).
This function should be identical in all future versions of the FreeFrame API.
| HOST: |
Call this function first to get version information.
The version defines the other function codes that are supported.
|
initialise |
(function code = 1) |
Input value:
none
Return value:
FF_SUCCESS if successful, FF_FAIL or
other error-codes if failed. (32-bit unsigned integer)
Remarks:
| PLUGIN: |
Prepare the plug-in for processing.
Set default values, allocate memory.
When the plug-in returns from this function it must be ready to accept calls to
instantiate.
|
| HOST: |
This function *must* return before a call to instantiate.
|
deInitialise |
(function code = 2) |
Input value:
none
Return value:
FF_SUCCESS if successful, FF_FAIL or
other error-codes if failed. (32-bit unsigned integer)
Remarks:
| PLUGIN: |
Tidy up, deallocate memory |
| HOST: |
This *must* be the last function called on the plugin |
getNumParameters |
(function code = 4) |
Input value:
none
Return value:
NumParameters indicating the number of parameters in plugin
or FF_FAIL on error.
Remarks:
| PLUGIN: |
Plugin developers should normally expect hosts to expose up to 8 parameters
Some hosts may only expose 1 or 4 parameters, some may expose larger numbers.
All parameters should have sensible defaults incase the user is unable to
control them from the host.
|
| HOST: |
Host developers should try to implement at least the first 4 parameters.
8 is the recommended number to expose.
|
getParameterName |
(function code = 5) |
Input value:
Return value:
32-bit pointer to ParameterName (16 byte char array) containing the name of parameter specified by
index.
Returns FF_FAIL on error.
getParameterDefault |
(function code = 6) |
Input value:
Return value:
ParameterDefaultValue indicating the default value of parameter specified by index.
For float parameters, the return value is a 32-bit float (0<=value<=1). Return value
for text parameters is a 32-bit pointer to a null terminated string.
Returns FF_FAIL on error.
getPluginCaps |
(function code = 10) |
Input value:
Return value:
32-bit unsigned integer
Use the table below to determine what value to return for each capability (see PluginCapsIndex).
| capsIndex value |
capsIndex meaning |
return values |
| 0 (FF_CAP_16BITVIDEO) |
16 bit video |
FF_SUPPORTED: plugin supports 16 bit video
FF_UNSUPPORTED: plugin doesn't support 16 bit video
|
| 1 (FF_CAP_24BITVIDEO) |
24 bit video |
FF_SUPPORTED: plugin supports 24 bit video
FF_UNSUPPORTED: plugin doesn't support 24 bit video
|
| 2 (FF_CAP_32BITVIDEO) |
32 bit video |
FF_SUPPORTED: plugin supports 32 bit video
FF_UNSUPPORTED: plugin doesn't support 32 bit video
|
| 3 (FF_CAP_PROCESSFRAMECOPY) |
processFrameCopy support |
FF_SUPPORTED: plugin supports processFrameCopy
FF_UNSUPPORTED: plugin doesn't support processFrameCopy
|
| 4 (FF_CAP_PROCESSOPENGL) |
processOpengl support |
FF_SUPPORTED: plugin supports processOpengl
FF_UNSUPPORTED: plugin doesn't support processOpengl
|
| 5 (FF_CAP_SETTIME) |
setTime support |
FF_SUPPORTED: plugin supports setTime
FF_UNSUPPORTED: plugin doesn't support setTime
|
| 10 (FF_CAP_MINIMUMINPUTFRAMES) |
Minimum input frames |
Returns minimum number of input frames plugin requires or FF_UNSUPPORTED if capability not supported. |
| 11 (FF_CAP_MAXIMUMINPUTFRAMES) |
Maximum input frames |
Returns maximum number of input frames plugin can process or FF_UNSUPPORTED if capability not supported. |
| 15 (FF_CAP_COPYORINPLACE) |
Plugin optimization |
Return value indicates whether plugin is optimized for Copy or InPlace processing.
0 (FF_UNSUPPORTED) = no preference
1 (FF_CAP_PREFER_INPLACE) = InPlace processing is faster
2 (FF_CAP_PREFER_COPY) = Copy processing is faster
3 (FF_CAP_PREFER_BOTH) = Both are optimized
|
Remarks:
Plugins must support either CPU or GPU processing, but not both. CPU processing involves repeated calls to processFrame and/or
processFrameCopy. GPU processing involves repeated calls to processOpenGL.
CPU plugins should return FF_UNSUPPORTED (0) for FF_CAP_PROCESSOPENGL.
GPU plugins should return FF_SUPPORTED (1) for FF_CAP_PROCESSOPENGL.
GPU plugins should return FF_UNSUPPORTED (0) for FF_CAP_16BITVIDEO,
FF_CAP_24BITVIDEO, FF_CAP_32BITVIDEO, FF_CAP_PROCESSFRAMECOPY, and FF_CAP_COPYORINPLACE.
FF_CAP_MINIMUMINPUTFRAMES, FF_CAP_MAXIMUMINPUTFRAMES, and FF_CAP_SETTIME apply to both CPU and GPU plugins, so all plugins should return appropriate values for these queries.
CPU PLUGIN/HOST BIT DEPTH
Typically a host program has a preferred bit depth that it uses to perform its operations, and it will ask the plugin if it supports that bit depth.
If the plugin does not support it, the host may decide not to use the plugin and deinitialize it. If the host supports a 2nd or 3rd format, it may
check with the plugin to see if those are supported, and use one of them instead.
getExtendedInfo |
(function code = 13) |
Input value:
none
Return value:
32-bit pointer to PluginExtendedInfoStruct or
FF_FAIL on error.
getParameterType |
(function code = 15) |
Input value:
Return value:
ParameterType value which tells the host what kind of data the
parameter index is.
Returns FF_FAIL on error.
Remarks:
Hosts may decide to present an appropriate visual interface
depending on the parameter type. All FreeFrame data for the moment is
passed as 32-bit floats from 0-1, except text data.
5.2. Instance specific functions
processFrame |
(function code = 3, needs valid instanceID!) |
Input value:
| pFrame: |
32-bit pointer to byte array containing frame of video.
|
Return value:
FF_SUCCESS if successful, FF_FAIL if
failed. (32-bit unsigned integer)
Remarks:
| CPU PLUGINS: |
Process a frame of video 'in place'. This is also the basic
frameport for source plugins. |
| GPU PLUGINS: |
Do not implement this function, return FF_FAIL. |
| HOST: |
pFrame needs to be a valid pointer throughout this call as the plugin processes
the frame 'in place'.
|
getParameterDisplay |
(function code = 7, needs valid instanceID!) |
Input value:
Return value:
Pointer to ParameterDisplayValue containing
a string to display as the value of parameter index.
Returns FF_FAIL if failed.
setParameter |
(function code = 8, needs valid instanceID!) |
Input value:
Return value:
Returns FF_SUCCESS if successful or FF_FAIL if failed
Remarks:
Sets the value of a parameter.
| PLUGIN: |
A plugin shouldn't change parameter values by itself. All
parameters are set by the plugin host through this function.
|
getParameter |
(function code = 9, needs valid instanceID!) |
Input value:
Return value:
A ParameterValue or FF_FAIL on error.
Remarks:
Returns value of a parameter. Note that the return value has different interpretations,
depending on the type of the parameter (see ParameterValue).
instantiate |
(function code = 11, needs valid instanceID!) |
Input value:
Return value:
An InstanceIdentifier for the newly instantiated
effect. Will be used as instanceID for future function calls.
Returns FF_FAIL on error.
Remarks:
| CPU PLUGINS: |
Prepare an instance of the plugin for processing. Set default values, allocate memory.
When the plugin returns from this function it must be ready to process a frame.
Make a local copy of the VideoInfoStruct if necessary, the
pointer may not be valid after the function returns. The instance identifier you provide to the host must
be the unique identifier of this instance until a call to deinitialise.
|
|
| GPU PLUGINS: |
Do not implement this function, return FF_FAIL. GPU plugins have their own instantiateGL function.
|
|
| HOST: |
This function *must* return before a call to processFrame. The InstanceIdentifier
provided by the plugin is your handle to this instance of the plugin. The host must keep this instance identifier,
and provide it in all calls to the plugin regarding that instance.
Ensure that the pointer to VideoInfoStruct remains valid until the function returns.
|
deInstantiate |
(function code = 12, needs valid instanceID!) |
Input value:
none
Return value:
Returns FF_SUCCESS if successful or FF_FAIL if failed.
Remarks:
| CPU PLUGINS: |
Tidy up, deallocate memory. All memory associated with the instance being deinstantiated must be freed
here.
|
| GPU PLUGINS: |
Do not implement this function, return FF_FAIL. GPU plugins have their own deInstantiateGL function.
|
| HOST: |
This function must be called to close an instance of the plugin.
All instances should be closed before deInitialising the plugin!
|
processFrameCopy |
(function code = 14, needs valid instanceID!) |
Input value:
Return value:
Returns FF_SUCCESS if successful or FF_FAIL if failed.
Remarks:
| CPU PLUGINS: |
The processFrameCopy function performs a source->dest buffer frame process
in CPU effect plugins. Multiple input frames can be processed by processFrameCopy, so plugins should indicate the number of input frames they prefer with getPluginCaps.
CPU source plugins should not support processFrameCopy as they do not require input frames.
Plugins do not have to support processFrameCopy, but they must support the processFrame (in-place) method of
processing. Support for processFrameCopy should be indicated in getPluginCaps.
The plugin can also define (via getPluginCaps) which of processFrameCopy or processFrame should be used for optimal performance.
|
|
| GPU PLUGINS: |
Do not implement this function, return FF_FAIL;
|
getInputStatus |
(function code = 16, needs valid instanceID!) |
Input value:
Return value:
Returns an InputStatus value describing the status of
channel.
Remarks:
This function is provided to allow hosts to optimize the rendering of input
frames. Due to user input a plugin may only plan to render certain input
channels - this function allows hosts to ask the plugin which input channels
it plans to render.
| HOST: |
A host may only call this function for channels in this range:
'Minimum input frames' <= channel < 'Maximum input frames' (see getPluginCaps).
One should assume that all channels < 'Minimum input frames' are always in use.
|
processOpengl |
(function code = 17, needs valid instanceID!) |
Input value:
Return value:
FF_SUCCESS if successful, FF_FAIL if
failed. (32-bit unsigned integer)
Remarks:
| CPU PLUGINS: |
Do not implement this function, return FF_FAIL.
|
| GPU PLUGINS: |
Before returning from ProcessOpenGL, plugins MUST RESTORE ANY CHANGED OPENGL STATES BACK TO THE DEFAULT OPENGL STATE as defined by the OpenGL spec - WITH THE FOLLOWING EXCEPTIONS:
|
| GPU HOST: |
Hosts must provide textures of type GL_TEXTURE_2D. GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_3D, etc, are NOT supported.
Hosts must ensure that OpenGL is in its default state when ProcessOpenGL is called - with the exceptions listed above.
|
instantiateGL |
(function code = 18, needs valid instanceID!) |
#define FF_INSTANTIATEGL 18
DWORD instantiateGL(const FFGLViewportStruct *pHostGLViewport)
Input value:
| pFFGLViewportStruct: |
pointer to FFGLViewportStruct structure that defines the host's OpenGL viewport. |
Return value:
An InstanceIdentifier for the newly instantiated
effect. Will be used as instanceID for future function calls.
Returns FF_FAIL on error.
Remarks:
| CPU PLUGINS: |
Do not implement this function, return FF_FAIL. CPU plugins have their own instantiate function. |
|
| GPU PLUGINS: |
Prepare an instance of the plugin for processing.
Set default values, allocate memory, GPU resources, textures, shader programs, etc.
Plugins should expect the host's OpenGL viewport to remain valid for the lifetime of the plugin. The FFGLViewportStruct pointer will become invalid after instantiateGL returns, so (if necessary) plugins should store a copy of the FFGLViewportStruct for later use during calls to processOpenGL.
When the plugin returns from this function it must be ready to process a frame.
|
|
| GPU HOST: |
Hosts must ensure that a valid OpenGL context is active during this call so that plugins can allocate GPU resources.
This function must return before the host makes any calls to processOpengl. The InstanceIdentifier provided by the plugin is your handle to this
instance of the plugin. The host must keep this instance identifier,
and provide it in all calls to the plugin regarding that instance.
If the host's viewport changes (perhaps because the user changed their output window size or output resolution), any loaded plugins affected by the change must be deinstantiated and reinstantiated and provided with the new viewport information.
|
deInstantiateGL |
(function code = 19, needs valid instanceID!) |
#define FF_DEINSTANTIATEGL 19
DWORD deInstantiateGL(void *instanceID)
Input value:
| pProcessOpenGLStruct: |
pointer to ProcessOpenGLStruct structure. |
Return value:
Returns FF_SUCCESS if successful or FF_FAIL if failed.
Remarks:
| CPU PLUGINS: |
Do not implement this function, return FF_FAIL. CPU plugins have their own deInstantiate function. |
|
| GPU PLUGINS: |
Tidy up, deallocate memory, deallocate GPU resources specific to this GL instance: textures, shader programs, etc. All memory associated with the instance being deinstantiated must be freed
here. Plugins should release all GPU resources they've created for this instance. |
|
| GPU HOST: |
This function is called to close an instance of the plugin.
Hosts must ensure a valid OpenGL context is active during this call so that plugins can free GPU resources.
All instances should be closed before deInitialising the plugin!
|
setTime |
(function code = 20, needs valid instanceID!) |
Input value:
Return value:
Returns FF_SUCCESS if successful or FF_FAIL if failed
Remarks:
Plugins that support the setTime function should return FF_TRUE when asked for the FF_CAP_SETTIME capability in getPluginCaps.
Hosts must not call SetTime while any of the plugin's process functions are still executing.


GET CARTER A film review by Steve Rhodes Copyright 2000 Steve Rhodes RATING (0 TO ****): *
Generic brands have revolutionized consumer products from drugs to cigarettes, so why not movies? Maybe the multiplexes of the future will dispense with marquee titles in favor of generic packaging labels like Comedy, Romance and Action. If so, GET CARTER would appear to be a trend setter, as you couldn't find a more generic action thriller than GET CARTER. Its dialog is superfluous. What little impact the movie has is due solely to its clichéd images.
The problem with this line of reasoning is that movies like GET CARTER, starring pricey stars like Sylvester Stallone, can't be made on a pittance, so the tickets have to be full price if there is ever to be any hope of recouping the financial backers' investments. And, if moviegoers are required to pay about nine bucks a ticket for a bad movie like GET CARTER, why wouldn't they choose instead a great one, like ALMOST FAMOUS, for the same price?
GET CARTER, as you may know, is a remake of perhaps the best known film of director Mike Hodges (CROUPIER). The original in 1971 starred Michael Caine as Jack Carter. Caine, replaced by Sylvester Stallone, gets a cameo part in this version, which is directed by Stephen T. Kay (the writer of THE MOD SQUAD remake) and written by David McKenna (BODY SHOTS). The recent résumés alone of the director and writer should give you pause.
As the story opens, Carter is attending the funeral of his estranged brother, who died under mysterious circumstances. As a fossilized action hero, Stallone just stares and broods when he's not hitting someone.
Mickey Rourke, an actor whose mere presence in a movie immediately raises a big red flag in my mind, plays Carter's nemesis, Cyrus Paice. Cyrus, with his ubiquitous dark sunglasses framed in iridescent green, shares a trait with Carter. With their aging muscles and bulging veins, they look like a couple of old lifeguards who are about to OD from too many late nights at the gym.
The women are all given throw away parts, Miranda Richardson as Carter's sister-in-law, Rachael Leigh Cook as his niece and Gretchen Mol as Carter's love interest.
The movie is set, incongruously, in that hotbed of crime, that notorious underworld city of latte lovers and dot-com darlings -- Seattle! As a wiry and flagrantly wealthy software geek, Alan Cumming modestly informs Carter that "I'm the all powerful ruler of time and space." See what excessive caffeine will do to your brain.
Before annihilating the first guy to get in his way, Carter tells him, "You really don't want to know me." I completely agree. You don't want to waste your time and money getting to know Jack Carter, especially when the movie in the next screen would have to be better.
GET CARTER runs a long 1:55. It is rated R for violence, language, some sexuality and drug content and would be acceptable for older teenagers.
Email<EMAIL_ADDRESS>Web: http://www.InternetReviews.com
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


Please select Green House
Please enter Kit Code
Please enter valid Kit Code
Please enter Parent Device


All Classes and Interfaces
Class
Description
References decorator that automatically creates missing components using
available component factories upon component retrival.
Configuration of a component inside a container.
Inversion of control (IoC) container that creates components and manages their lifecycle.
Container configuration defined as a list of component configurations.
Helper class that reads container configuration from JSON or YAML file.
Container managed references that can be created from container configuration.
Creates default container components (loggers, counters, caches, locks, etc.) by their descriptors.
References decorator that automatically sets references to newly added components
that implement IReferenceable interface and unsets references from removed components
that implement IUnreferenceable interface.
Managed references that in addition to keeping and locating references can also
manage their lifecycle.
Inversion of control (IoC) container that runs as a system process.
Chainable decorator for IReferences that allows to inject additional capabilities
such as automatic component creation, automatic registration and opening.


EXPERIENCE
Software Development Engineer (Java, Python, Spark, AWS)
Amazon Alexa, Boston, MA, 2018; Amazon Retail, New York City, NY, 2019 - present
- Building Machine Learning model workflows to forecast demand for Amazon emerging businesses
- Improved the discoverability of faster delivery speed for Amazon retail customers
- Built scalable realtime and batch ETL pipelines to ingest Wikipedia and news sources for Alexa QA
Software Development Engineer Intern (Java, AWS)
Amazon Web Services, Seattle, WA, May - August 2017
- Implemented an exponential way to improve deployment speed by 50% with DynamoDB and SWF
- Integrated the exponential option and a progress monitor into the Ruby-on-Rails website
- Built a song quiz Alexa skill with flask-ask framwork and SSML output in Global Intern Hackathon
Back-end Engineer Intern, Cross-Border e-Commerce Web Application (Java)
Club Factory, Hangzhou, China, May - July 2015
- Developed back-end business logic and data access based on Spring and Hibernate framework
- Generated automated scripts for back-end request and response testing with Jmeter
EDUCATION
Carnegie Mellon University, Pittsburgh, PA & Silicon Valley, CA
Master of Science in Information Technology, Mobility, August 2016 - December 2017
Course: Introduction to Computer Systems, Web Application Development, Telecommunications & Computer Networks, Cloud Computing, Distributed Systems, Computer Vision Apps, Machine Learning, Mobile Hardware for Software Engineer
Singapore Management University, Singapore
Exchange, Information Systems, August - December 2015
Zhejiang University, Hangzhou, China
Bachelor of Engineering, Computer Science, September 2012 - July 2016
PROJECT
Energy Data Monitoring (Django, AWS)
SLAC National Accelerator Laboratory, Fall 2017
- Used AWS Lambda to monitor and Django to display S3 buckets and files changes in AWS CloudTrail logs
Map Calendar Web Application (JavaScript)
Carnegie Mellon University, Fall 2016
- Undertook the map interactions and logic design for page synchronization of a Location-based calendar web app using Mapbox API
Dynamic Memory Allocator (C)
Carnegie Mellon University, Fall 2016
- Overwrote the system level Dynamic Storage Allocator, to allocate (malloc), reclaim (free), split, and coalesce memory space from heap
Computer Vision based Sudoku (C++/OpenCV)
Carnegie Mellon University, Spring 2017
- Built an iOS application with OpenCV libraries to let users interact with a printed Sudoku puzzle on their devices
Twitter Analytics Web Service (Java)
Carnegie Mellon University, Spring 2017
- Designed a web service from ETL to backend schema optimization on AWS to support queries with throughput and budget requirement
File Caching Proxy (Java)
Carnegie Mellon University, Spring 2017
- Implemented a Proxy with LRU Cache Replacement Policy and Check on Use Cache Consistency approach


Works
Webmaster
Besides this personal portfolio site, I host a restaurant homepage, zongzihouse.com, developed from scratch with no bootstrap or templates, and using images drawn by me using my MacBook Air's trackpad.
Home Lab
Network Diagram
Snapshot
I set up a rather unnecessarily complex home network that takes advantage of pfSense routing and firewall. My goal was to isolate networks for LAN, IoT, gaming, and security camera devices.
pfSense is running on an old laptop in a router-on-a-stick configuration. My ESXi host runs services such as piHole, FreeNAS, Jellyfin, and game servers. More than satisfied with this inexpensive 32GB host. I'd say that's the spirit of homelab, yeah?
Desktops
Current Build
- AMD Ryzen 5 5600X
- NVIDIA RTX 3070
- 2x8GB Crucial Ballistix DDR4-3600 CL16
- be quiet! Pure Base 500DX
Computers have been a fun hobby since I was little. It wasn't until college when I had a bit of spending money that I finally built my own. Since then, I've built for myself and others, most notably an i7-4770k build that I stretched to around 6 years (with updates here and there) and my current 5600X-based build that I built in November 2020.
Design
Memorial Project
Typeface Project
I like to dabble in photography and design. I also take joy in face swapping, but I can't demonstrate those here in respect of my victims' subjects' privacy.
Travel
China
Japan
Saying "I like to travel" can be considered cliché, but it really is that exhilarating.
I had the time of my life traveling in Asia. I've toured all over China, from the vast tea fields in Hangzhou, the grandest historic architecture in Beijing, the famous filming set of the old Romance of the Three Kingdoms drama, to arduous mountain trails amongst the humid summer heat. In Japan, I've had the joy of tasting all the food like made-to-order sushi, masterfully prepared tonkatsu and gyukatsu, and irresistible fast food from local and western chains. I even conquered a mountain in the form of a bowl of ramen at Ramen Jiro. Also, with activities such as urban hiking, batting cages, and arcades, it was easy to get caught in its pace. Lastly, peaking Mt Fuji was a feeling like no other.


Open Source by Sigma
Road Map & Learning Resources
Sharing is caring. Here we highlight what we at Sigma think is important to know about.
Start learning front end the Sigma way at Front End By Sigma
Start learning Java the Sigma way at Java By Sigma
Start learning .NET the Sigma way at .Net By Sigma
Start learning RnD the Sigma way at RnD By Sigma
Start learning QT the Sigma way at QT By Sigma
Start learning IAM the Sigma way at IAM By Sigma
Competence By Sigma
We are currently trying out different approaches to developing our skills and we aim to share as much as possible.
Competence By Java
Our Java group in Gothenburg is currently doing a mob programming inspired workshop series. We have a concept where we work with a Spring Boot microservice and for each session we have a main topic (e.g. persistence, security, etc.) which we incorporate in the microservice. You can find and follow the project here Sigma ITC CompetenceByJava - Spring Boot Microservice .
Sigma Smart Developer Society
We host our own developer focused events that are open for everyone.
You can find more information and join the events on our Meetup.
Sigma-podden
Our own podcast focusing on anything from tech to management.
You can find it on Soundcloud Sigma-podden.
This site is a progressive web app. You can save it to your home screen and view it offline.