7.1. Accumulo Connector
Overview
The Accumulo connector supports reading and writing data from Apache Accumulo. Please read this page thoroughly to understand the capabilities and features of the connector.
Installing the Iterator Dependency
The Accumulo connector uses custom Accumulo iterators in
order to push various information in a SQL predicate clause to Accumulo for
server-side filtering, known as predicate pushdown. In order
for the server-side iterators to work, you need to add the presto-accumulo
jar file to Accumulo’s lib/ext
directory on each TabletServer node.
# For each TabletServer node:
scp $PRESTO_HOME/plugins/accumulo/presto-accumulo-*.jar [tabletserver_address]:$ACCUMULO_HOME/lib/ext
# TabletServer should pick up new JAR files in ext directory, but may require restart
Note that this uses Java 8. If your Accumulo cluster is using Java 7,
you’ll receive an Unsupported major.minor version 52.0
error in your TabletServer logs when you
attempt to create an indexed table. You’ll instead need to use the presto-accumulo-iterators jar file
that is located at https://github.com/bloomberg/presto-accumulo.
Connector Configuration
Create etc/catalog/accumulo.properties
to mount the accumulo
connector as the accumulo
catalog,
replacing the accumulo.xxx
properties as required:
connector.name=accumulo
accumulo.instance=xxx
accumulo.zookeepers=xxx
accumulo.username=username
accumulo.password=password
Configuration Variables
| Property Name | Default Value | Required | Description |
|---|---|---|---|
accumulo.instance |
(none) | Yes | Name of the Accumulo instance |
accumulo.zookeepers |
(none) | Yes | ZooKeeper connect string |
accumulo.username |
(none) | Yes | Accumulo user for Presto |
accumulo.password |
(none) | Yes | Accumulo password for user |
accumulo.zookeeper.metadata.root |
/presto-accumulo |
No | Root znode for storing metadata. Only relevant if using default Metadata Manager |
accumulo.cardinality.cache.size |
100000 |
No | Sets the size of the index cardinality cache |
accumulo.cardinality.cache.expire.duration |
5m |
No | Sets the expiration duration of the cardinality cache. |
Unsupported Features
The following features are not supported:
- Adding columns via
ALTER TABLE
: While you cannot add columns via SQL, you can using a tool. See the below section on Adding Columns for more details. DELETE
: Deletion of rows is not yet implemented for the connector.
Usage
Simply begin using SQL to create a new table in Accumulo to begin
working with data. By default, the first column of the table definition
is set to the Accumulo row ID. This should be the primary key of your
table, and keep in mind that any INSERT
statements containing the same
row ID is effectively an UPDATE as far as Accumulo is concerned, as any
previous data in the cell will be overwritten. The row ID can be
any valid Presto datatype. If the first column is not your primary key, you
can set the row ID column using the row_id
table property within the WITH
clause of your table definition.
Simply issue a CREATE TABLE
statement to create a new Presto/Accumulo table:
CREATE TABLE myschema.scientists (
recordkey VARCHAR,
name VARCHAR,
age BIGINT,
birthday DATE
);
DESCRIBE myschema.scientists;
Column | Type | Extra | Comment
-----------+---------+-------+---------------------------------------------------
recordkey | varchar | | Accumulo row ID
name | varchar | | Accumulo column name:name. Indexed: false
age | bigint | | Accumulo column age:age. Indexed: false
birthday | date | | Accumulo column birthday:birthday. Indexed: false
This command will create a new Accumulo table with the recordkey
column
as the Accumulo row ID. The name, age, and birthday columns are mapped to
auto-generated column family and qualifier values (which, in practice,
are both identical to the Presto column name).
When creating a table using SQL, you can optionally specify a
column_mapping
table property. The value of this property is a
comma-delimited list of triples, presto column : accumulo column
family : accumulo column qualifier, with one triple for every
non-row ID column. This sets the mapping of the Presto column name to
the corresponding Accumulo column family and column qualifier.
If you don’t specify the column_mapping
table property, then the
connector will auto-generate column names (respecting any configured locality groups).
Auto-generation of column names is only available for internal tables, so if your
table is external you must specify the column_mapping property.
For a full list of table properties, see Table Properties.
For example:
CREATE TABLE myschema.scientists (
recordkey VARCHAR,
name VARCHAR,
age BIGINT,
birthday DATE
)
WITH (
column_mapping = 'name:metadata:name,age:metadata:age,birthday:metadata:date'
);
DESCRIBE myschema.scientists;
Column | Type | Extra | Comment
-----------+---------+-------+-----------------------------------------------
recordkey | varchar | | Accumulo row ID
name | varchar | | Accumulo column metadata:name. Indexed: false
age | bigint | | Accumulo column metadata:age. Indexed: false
birthday | date | | Accumulo column metadata:date. Indexed: false
You can then issue INSERT
statements to put data into Accumulo.
Note
While issuing INSERT
statements is convenient,
this method of loading data into Accumulo is low-throughput. You’ll want
to use the Accumulo APIs to write Mutations
directly to the tables.
See the section on Loading Data for more details.
INSERT INTO myschema.scientists VALUES
('row1', 'Grace Hopper', 109, DATE '1906-12-09' ),
('row2', 'Alan Turing', 103, DATE '1912-06-23' );
SELECT * FROM myschema.scientists;
recordkey | name | age | birthday
-----------+--------------+-----+------------
row1 | Grace Hopper | 109 | 1906-12-09
row2 | Alan Turing | 103 | 1912-06-23
(2 rows)
As you’d expect, rows inserted into Accumulo via the shell or programatically will also show up when queried. (The Accumulo shell thinks “-5321” is an option and not a number… so we’ll just make TBL a little younger.)
$ accumulo shell -u root -p secret
root@default> table myschema.scientists
root@default myschema.scientists> insert row3 metadata name "Tim Berners-Lee"
root@default myschema.scientists> insert row3 metadata age 60
root@default myschema.scientists> insert row3 metadata date 5321
SELECT * FROM myschema.scientists;
recordkey | name | age | birthday
-----------+-----------------+-----+------------
row1 | Grace Hopper | 109 | 1906-12-09
row2 | Alan Turing | 103 | 1912-06-23
row3 | Tim Berners-Lee | 60 | 1984-07-27
(3 rows)
You can also drop tables using DROP TABLE
. This command drops both
metadata and the tables. See the below section on External
Tables for more details on internal and external
tables.
DROP TABLE myschema.scientists;
Indexing Columns
Internally, the connector creates an Accumulo Range
and packs it in
a split. This split gets passed to a Presto Worker to read the data from
the Range
via a BatchScanner
. When issuing a query that results
in a full table scan, each Presto Worker gets a single Range
that
maps to a single tablet of the table. When issuing a query with a
predicate (i.e. WHERE x = 10
clause), Presto passes the values
within the predicate (10
) to the connector so it can use this
information to scan less data. When the Accumulo row ID is used as part
of the predicate clause, this narrows down the Range
lookup to quickly
retrieve a subset of data from Accumulo.
But what about the other columns? If you’re frequently querying on
non-row ID columns, you should consider using the indexing
feature built into the Accumulo connector. This feature can drastically
reduce query runtime when selecting a handful of values from the table,
and the heavy lifting is done for you when loading data via Presto
INSERT
statements (though, keep in mind writing data to Accumulo via
INSERT
does not have high throughput).
To enable indexing, add the index_columns
table property and specify
a comma-delimited list of Presto column names you wish to index (we use the
string
serializer here to help with this example – you
should be using the default lexicoder
serializer).
CREATE TABLE myschema.scientists (
recordkey VARCHAR,
name VARCHAR,
age BIGINT,
birthday DATE
)
WITH (
serializer = 'string',
index_columns='name,age,birthday'
);
After creating the table, we see there are an additional two Accumulo tables to store the index and metrics.
root@default> tables
accumulo.metadata
accumulo.root
myschema.scientists
myschema.scientists_idx
myschema.scientists_idx_metrics
trace
After inserting data, we can look at the index table and see there are indexed values for the name, age, and birthday columns. The connector queries this index table
INSERT INTO myschema.scientists VALUES
('row1', 'Grace Hopper', 109, DATE '1906-12-09'),
('row2', 'Alan Turing', 103, DATE '1912-06-23');
root@default> scan -t myschema.scientists_idx
-21011 metadata_date:row2 []
-23034 metadata_date:row1 []
103 metadata_age:row2 []
109 metadata_age:row1 []
Alan Turing metadata_name:row2 []
Grace Hopper metadata_name:row1 []
When issuing a query with a WHERE
clause against indexed columns,
the connector searches the index table for all row IDs that contain the
value within the predicate. These row IDs are bundled into a Presto
split as single-value Range
objects (the number of row IDs per split
is controlled by the value of accumulo.index_rows_per_split
) and
passed to a Presto worker to be configured in the BatchScanner
which
scans the data table.
SELECT * FROM myschema.scientists WHERE age = 109;
recordkey | name | age | birthday
-----------+--------------+-----+------------
row1 | Grace Hopper | 109 | 1906-12-09
(1 row)
Loading Data
The Accumulo connector supports loading data via INSERT statements, however
this method tends to be low-throughput and should not be relied on when throughput
is a concern. Instead, users of the connector should use the PrestoBatchWriter
tool that is provided as part of the presto-accumulo-tools subproject in the
presto-accumulo repository.
The PrestoBatchWriter
is a wrapper class for the typical BatchWriter
that
leverages the Presto/Accumulo metadata to write Mutations to the main data table.
In particular, it handles indexing the given mutations on any indexed columns.
Usage of the tool is provided in the README in the repository.
External Tables
By default, the tables created using SQL statements via Presto are internal tables, that is both the Presto table metadata and the Accumulo tables are managed by Presto. When you create an internal table, the Accumulo table is created as well. You will receive an error if the Accumulo table already exists. When an internal table is dropped via Presto, the Accumulo table (and any index tables) are dropped as well.
To change this behavior, set the external
property to true
when
issuing the CREATE
statement. This will make the table an external
table, and a DROP TABLE
command will only delete the metadata
associated with the table. If the Accumulo tables do not already exist,
they will be created by the connector.
Creating an external table will set any configured locality groups as well
as the iterators on the index and metrics tables (if the table is indexed).
In short, the only difference between an external table and an internal table
is the connector will delete the Accumulo tables when a DROP TABLE
command
is issued.
External tables can be a bit more difficult to work with, as the data is stored
in an expected format. If the data is not stored correctly, then you’re
gonna have a bad time. Users must provide a column_mapping
property
when creating the table. This creates the mapping of Presto column name
to the column family/qualifier for the cell of the table. The value of the
cell is stored in the Value
of the Accumulo key/value pair. By default,
this value is expected to be serialized using Accumulo’s lexicoder API.
If you are storing values as strings, you can specify a different serializer
using the serializer
property of the table. See the section on
Table Properties for more information.
Next, we create the Presto external table.
CREATE TABLE external_table (
a VARCHAR,
b BIGINT,
c DATE
)
WITH (
column_mapping = 'a:md:a,b:md:b,c:md:c',
external = true,
index_columns = 'b,c',
locality_groups = 'foo:b,c'
);
After creating the table, usage of the table continues as usual:
INSERT INTO external_table VALUES
('1', 1, DATE '2015-03-06'),
('2', 2, DATE '2015-03-07');
SELECT * FROM external_table;
a | b | c
---+---+------------
1 | 1 | 2015-03-06
2 | 2 | 2015-03-06
(2 rows)
DROP TABLE external_table;
After dropping the table, the table will still exist in Accumulo because it is external.
root@default> tables
accumulo.metadata
accumulo.root
external_table
external_table_idx
external_table_idx_metrics
trace
If we wanted to add a new column to the table, we can create the table again and specify a new column. Any existing rows in the table will have a value of NULL. This command will re-configure the Accumulo tables, setting the locality groups and iterator configuration.
CREATE TABLE external_table (
a VARCHAR,
b BIGINT,
c DATE,
d INTEGER
)
WITH (
column_mapping = 'a:md:a,b:md:b,c:md:c,d:md:d',
external = true,
index_columns = 'b,c,d',
locality_groups = 'foo:b,c,d'
);
SELECT * FROM external_table;
a | b | c | d
---+---+------------+------
1 | 1 | 2015-03-06 | NULL
2 | 2 | 2015-03-07 | NULL
(2 rows)
Table Properties
Table property usage example:
CREATE TABLE myschema.scientists (
recordkey VARCHAR,
name VARCHAR,
age BIGINT,
birthday DATE
)
WITH (
column_mapping = 'name:metadata:name,age:metadata:age,birthday:metadata:date',
index_columns = 'name,age'
);
| Property Name | Default Value | Description |
|---|---|---|
column_mapping |
(generated) | Comma-delimited list of column metadata: col_name:col_family:col_qualifier,[...] .
Required for external tables. Not setting this property results in auto-generated column names. |
index_columns |
(none) | A comma-delimited list of Presto columns that are indexed in this table’s corresponding index table |
external |
false |
If true, Presto will only do metadata operations for the table. Otherwise, Presto will create and drop Accumulo tables where appropriate. |
locality_groups |
(none) | List of locality groups to set on the Accumulo table. Only valid on internal tables.
String format is locality group name, colon, comma delimited list of column families in the group.
Groups are delimited by pipes. Example: group1:famA,famB,famC|group2:famD,famE,famF|etc... |
row_id |
(first column) | Presto column name that maps to the Accumulo row ID. |
serializer |
default |
Serializer for Accumulo data encodings. Can either be default , string , lexicoder
or a Java class name. Default is default ,
i.e. the value from AccumuloRowSerializer.getDefault() , i.e. lexicoder . |
scan_auths |
(user auths) | Scan-time authorizations set on the batch scanner. |
Session Properties
You can change the default value of a session property by using SET SESSION. Note that session properties are prefixed with the catalog name:
SET SESSION accumulo.column_filter_optimizations_enabled = false;
| Property Name | Default Value | Description |
|---|---|---|
optimize_locality_enabled |
true |
Set to true to enable data locality for non-indexed scans |
optimize_split_ranges_enabled |
true |
Set to true to split non-indexed queries by tablet splits. Should generally be true. |
optimize_index_enabled |
true |
Set to true to enable usage of the secondary index on query |
index_rows_per_split |
10000 |
The number of Accumulo row IDs that are packed into a single Presto split |
index_threshold |
0.2 |
The ratio between number of rows to be scanned based on the index over the total number of rows If the ratio is below this threshold, the index will be used. |
index_lowest_cardinality_threshold |
0.01 |
The threshold where the column with the lowest cardinality will be used instead of computing an intersection of ranges in the index. Secondary index must be enabled |
index_metrics_enabled |
true |
Set to true to enable usage of the metrics table to optimize usage of the index |
scan_username |
(config) | User to impersonate when scanning the tables. This property trumps the scan_auths table property |
index_short_circuit_cardinality_fetch |
true |
Short circuit the retrieval of index metrics once any column is less than the lowest cardinality threshold |
index_cardinality_cache_polling_duration |
10ms |
Sets the cardinality cache polling duration for short circuit retrieval of index metrics |
Adding Columns
Adding a new column to an existing table cannot be done today via
ALTER TABLE [table] ADD COLUMN [name] [type]
because of the additional
metadata required for the columns to work; the column family, qualifier,
and if the column is indexed.
Instead, you can use one of the utilities in the
presto-accumulo-tools
sub-project of the presto-accumulo
repository. Documentation and usage can be found in the README.
Serializers
The Presto connector for Accumulo has a pluggable serializer framework for handling I/O between Presto and Accumulo. This enables end-users the ability to programatically serialized and deserialize their special data formats within Accumulo, while abstracting away the complexity of the connector itself.
There are two types of serializers currently available; a string
serializer that treats values as Java String
and a lexicoder
serializer that leverages Accumulo’s Lexicoder API to store values. The
default serializer is the lexicoder
serializer, as this serializer
does not require expensive conversion operations back and forth between
String
objects and the Presto types – the cell’s value is encoded as a
byte array.
Additionally, the lexicoder
serializer does proper lexigraphical ordering of
numerical types like BIGINT
or TIMESTAMP
. This is essential for the connector
to properly leverage the secondary index when querying for data.
You can change the default the serializer by specifying the
serializer
table property, using either default
(which is
lexicoder
), string
or lexicoder
for the built-in types, or
you could provide your own implementation by extending
AccumuloRowSerializer
, adding it to the Presto CLASSPATH
, and
specifying the fully-qualified Java class name in the connector configuration.
CREATE TABLE myschema.scientists (
recordkey VARCHAR,
name VARCHAR,
age BIGINT,
birthday DATE
)
WITH (
column_mapping = 'name:metadata:name,age:metadata:age,birthday:metadata:date',
serializer = 'default'
);
INSERT INTO myschema.scientists VALUES
('row1', 'Grace Hopper', 109, DATE '1906-12-09' ),
('row2', 'Alan Turing', 103, DATE '1912-06-23' );
root@default> scan -t myschema.scientists
row1 metadata:age [] \x08\x80\x00\x00\x00\x00\x00\x00m
row1 metadata:date [] \x08\x7F\xFF\xFF\xFF\xFF\xFF\xA6\x06
row1 metadata:name [] Grace Hopper
row2 metadata:age [] \x08\x80\x00\x00\x00\x00\x00\x00g
row2 metadata:date [] \x08\x7F\xFF\xFF\xFF\xFF\xFF\xAD\xED
row2 metadata:name [] Alan Turing
CREATE TABLE myschema.stringy_scientists (
recordkey VARCHAR,
name VARCHAR,
age BIGINT,
birthday DATE
)
WITH (
column_mapping = 'name:metadata:name,age:metadata:age,birthday:metadata:date',
serializer = 'string'
);
INSERT INTO myschema.stringy_scientists VALUES
('row1', 'Grace Hopper', 109, DATE '1906-12-09' ),
('row2', 'Alan Turing', 103, DATE '1912-06-23' );
root@default> scan -t myschema.stringy_scientists
row1 metadata:age [] 109
row1 metadata:date [] -23034
row1 metadata:name [] Grace Hopper
row2 metadata:age [] 103
row2 metadata:date [] -21011
row2 metadata:name [] Alan Turing
CREATE TABLE myschema.custom_scientists (
recordkey VARCHAR,
name VARCHAR,
age BIGINT,
birthday DATE
)
WITH (
column_mapping = 'name:metadata:name,age:metadata:age,birthday:metadata:date',
serializer = 'my.serializer.package.MySerializer'
);
Metadata Management
Metadata for the Presto/Accumulo tables is stored in ZooKeeper. You can (and should) issue SQL statements in Presto to create and drop tables. This is the easiest method of creating the metadata required to make the connector work. It is best to not mess with the metadata, but here are the details of how it is stored. Information is power.
A root node in ZooKeeper holds all the mappings, and the format is as follows:
/metadata-root/schema/table
Where metadata-root
is the value of zookeeper.metadata.root
in
the config file (default is /presto-accumulo
), schema
is the
Presto schema (which is identical to the Accumulo namespace name), and
table
is the Presto table name (again, identical to Accumulo name).
The data of the table
ZooKeeper node is a serialized
AccumuloTable
Java object (which resides in the connector code).
This table contains the schema (namespace) name, table name, column
definitions, the serializer to use for the table, and any additional
table properties.
If you have a need to programmatically manipulate the ZooKeeper metadata
for Accumulo, take a look at
com.facebook.presto.accumulo.metadata.ZooKeeperMetadataManager
for some
Java code to simplify the process.
Converting Table from Internal to External
If your table is internal, you can convert it to an external table by deleting
the corresponding znode in ZooKeeper, effectively making the table no longer exist as
far as Presto is concerned. Then, create the table again using the same DDL, but adding the
external = true
table property.
For example:
1. We’re starting with an internal table foo.bar
that was created with the below DDL.
If you have not previously defined a table property for column_mapping
(like this example),
be sure to describe the table before deleting the metadata. We’ll need the column mappings
when creating the external table.
CREATE TABLE foo.bar (a VARCHAR, b BIGINT, c DATE)
WITH (
index_columns = 'b,c'
);
DESCRIBE foo.bar;
Column | Type | Extra | Comment
--------+---------+-------+-------------------------------------
a | varchar | | Accumulo row ID
b | bigint | | Accumulo column b:b. Indexed: true
c | date | | Accumulo column c:c. Indexed: true
2. Using the ZooKeeper CLI, delete the corresponding znode. Note this uses the default ZooKeeper
metadata root of /presto-accumulo
$ zkCli.sh
[zk: localhost:2181(CONNECTED) 1] delete /presto-accumulo/foo/bar
3. Re-create the table using the same DDL as before, but adding the external=true
property.
Note that if you had not previously defined the column_mapping, you’ll need to add the property
to the new DDL (external tables require this property to be set). The column mappings are in
the output of the DESCRIBE
statement.
CREATE TABLE foo.bar (
a VARCHAR,
b BIGINT,
c DATE
)
WITH (
column_mapping = 'a:a:a,b:b:b,c:c:c',
index_columns = 'b,c',
external = true
);


Oddjob is the network.
Oddjob makes working with jobs on a remote server virtually transparent.
Here's a a world according to Oddjob:
It has local jobs but also has connections to three servers running anywhere on the network.
Setting up Oddjob for sharing is easy. Create an Oddjob for your view of the world and add a client job for each server you want to connect to. When the client runs all the server jobs magically appear. They aren't quite real though, they are only reflections of the server jobs.
If we stop the client, the reflected server jobs disappear, but they are still running on the server.
Here, the client jobs named Server 1 and Server 2 have been stopped and the client job named Server 3 is about to be stopped.
Working with the local reflection of a remote job is no different to working with a local job except that the action takes place on the server.
Lets work through some examples, but as I'm not going to explain
how to set up servers until you're completely persuaded by the magic of sharing
you might wish to work with one I created earlier. It's in the
examples/userguide
directory and it's called sharingMain.xml
.
Open and run it in Oddjob explorer, and if you're on Windows you will
something like this:
Three console windows will appear, which are the 3 server processes. If
they don't appear then you might need to change the runnOddjob
property in the variables. If you are not on windows, you will also have to
change the three ExecJob configurations.
Lets run a job on Server 1. Run the client called Server 1 and expanded the job tree to see the jobs we've got on Server 1. Ignore the Server 2 and Server 3 jobs (they are for later) but run the Job 'Echo To Console'.
Now take a look at the console window for Server 1.
Oddjob reflects the console of the server locally.
And also the Log output for the server job is reflected locally. These features make supporting applications on remote servers much easier.
Resetting and Stopping jobs work just as transparently. So does setting a property.
And the proof...
Setting a property is only temporary, if the server is restarted the configured value is reused. If the configured value was a runtime property (in ${} form) the runtime property will be reset when the job is run. Fortunately oddjob allows you to permanently change the remote configuration as well.
Oddjob Makes configuring remote jobs wonderfully simple too. Lets start our client to Server 2 and drag our Important Job 1 to Server 2.
And run it.
And configure it.
And run it again.
You Try...
Now stop having fun and pay attention because this is really important. What we are changing is an in memory copy of the configuration on the server. If you restart the server then this configuration is lost. To save this back to the configuration file on the server you must have any job in that configuration selected, and then select save from the menu.
Now the file sharingJob2.xml
has the changes.
<oddjob xmlns:jmx="http://rgordon.co.uk/oddjob/jmx"> <job> <folder name="Jobs On Server 2"> <jobs> <echo id="echo2" text="Important Job 2"/> <echo id="echo1" text="Important Job 1 (Now On Server 2)"/> <jmx:client id="server1" name="Server 1" url="service:jmx:rmi:///jndi/rmi://localhost/oddjob-server-1"/> <jmx:client id="server3" name="Server 3" url="service:jmx:rmi:///jndi/rmi://localhost/oddjob-server-3"/> </jobs> </folder> </job> </oddjob>
Now I admit that having Save associated with the file menu, not the job menu, and having no warning that configuration has changed, and not knowing if someone else has changed the configuration isn't great. But this will be fixed soon. I promise.
Now just to counter those slight negative vibes you might be getting - let me point out one cool feature about nested Oddjobs. When you create new nested Oddjob, the nested Oddjob's configuration file will be created on the server, (when you save that nested Oddjob) No server access required! .
Clients and Servers can be linked together to enable jobs to be visible across several servers:
This is achieved simply by adding a client job to the server configuration. What we've got in our example is this:
So we (Us) have access to all three servers directly, but each server has access to the other two servers. Lets see how that looks in Oddjob Explorer.
We're now seeing Server 2 via Server 1, including it's console output. The same complete server transparency but across multiple servers.
The server has built in loop back detection to detect the situation when a client loops back to the originating server. The Server 1 client on Server 2 no longer shows any children when viewed from our original Server 1 client. If you're confused, I'm talking about the selected Job in the picture above.
Accessing a remote job and it's properties from a configuration file is a virtually seamless transition from working with a nested Oddjob job. A job is accessible using the notation ${client-id/id-of-job-on-server}.
Setting up Oddjob as a server is easy too. First the really easy way.
Oddjob comes packaged with a server.xml and a client.xml file. Run the server.xml and you have a server.
java -jar run-oddjob.jar -f server.xml
Connect to server by opening client.xml in Oddjob Explorer and start configuring...
To understand what's going on let's take a look at the server.xml.
<EMAIL_ADDRESS>../oddjob/server.xml}The job that provides the sharing functionality is the server job. This job shares the local jobs from the given root job down. In this case the root job is a nested Oddjob called Server Jobs.
The server uses JMX (Java Management Extensions) which you don't need to know anything about except that the JMX protocol our server is using requires an RMI registry to be running somewhere, and we ensure this is the case by running one ourselves via the preceding rmireg job. If an RMI server is already running on our machine, our Registry Job will silently complete. The URL is the only other confusing thing and that becomes less confusing when you know that all you need to worry about is the last path element which is the name the server will be registered by in the registry and must be unique for each server job on each machine.
For those that would like to know more about JMX and the URL format it's in The JMX Specification, but for those that aren't too bothered by how it works - just cut and paste.
There is no limit to the number of server jobs you have in an Oddjob configuration or which jobs they share. A server could share a folder that contains itself allowing the client to shut it down. A master or administrator server could share several child servers, perhaps running jobs for different departments. In this respect the server job is very flexible.
One caveat about remote configuration. Oddjob can share any job and it's children, but configuration will only work from an Oddjob node down. That is why the first node to be shared will often be an Oddjob job.


VSL // Design With Humans In Mind
* Design with humans in mind. That’s the message behind The Urban Yoga
today’s Very Short List:
culture 11 Mar 2015
A Jill of all trades. Louise Ljungberg heads up digital PR for House of Radon
Subscribe
* Tired of mass-produced art prints? Check out this experiment
* In the “ICED FLOWERS”
http://link.nyobserver.com/516ca68465217dc6e1b9a3a62dc0r.244y/VP-t1UmO3uQvkppKC9e18
delightful e-mail that shares
cultural gems from a
different curator every day.
If you have any problems reading this e-mail, click here
http://link.nyobserver.com/516ca68465217dc6e1b9a3a62dc0r.244y/UHyHCJsf7NZSKXrPCbb2c
Subscribe
Forward
My Account
Unsubscribe
culture 6 Mar 2015
Singer Lady Lamb reveals the inspiration behind her newest album.
lit 4 Mar 2015
Writer Victoria Law explores zine libraries.
culture 2 Mar 2015
Kyle Studstill is in pursuit of virtue.
Editorial Policy
Privacy Policy
Contact Us
Press
Terms + Conditions
very fine print: ©2015
Observer VSL LLC.
321 West 44th Street, 6th Floor
New York, NY 10036 USA
All rights reserved.
Questions?<PHONE_NUMBER>.
This message was intended for<EMAIL_ADDRESS>If you believe this has been sent to you in error, please safely unsubscribe


{# NOTE: This template was added("copy/pasted") from the wagtail library #} {# - Having it within our code base allows us modify the html/css to fit our UI needs. #} {# - CAUTION: This is the top level injection of html in our templeting system. #} {# - Future changes to wagtail should be checked out in the skeleton.html within the wagtail library. #} {% load wagtailadmin_tags i18n %} {% get_current_language as LANGUAGE_CODE %} {% get_current_language_bidi as LANGUAGE_BIDI %}


Mission Statement
To provide a creative, intellectual and entrepreneurial outlet for students to use the latest open-source software platforms to develop applications that solve societal problems.
Description
RCOS is a group of RPI students who work on open source projects. During the semester, meeting times are as follows:
- Tuesday(4-5:15) Meeting with individual mentors Rooms
- Friday(4-5:15) Meeting in DCC 318
Benefits of being an RCOS member
- The opportunity to help society by creating useful software.
- An excellent environment to share your skills with your peers and learn from them as well
- Great practice in the code review process, a very important skill for your software career!
- Practice giving and receiving feedback. Learning how to discuss technical and non-technical aspects of a project in a constructive fashion is a critical skill that employers look for!
Details
Students can participate in RCOS for course credit or for a stipend. At the beginning of each semester, the Internal Advisory Board will review project proposals and decide which projects should receive financial support.


{% extends "base.html" %} {% load staticfiles %} {% block title %}About ResearchCompendia{% endblock %} {% block content %}
An article about computational science in a scientific publication is not the scholarship itself, it is merely advertising of the scholarship. The actual scholarship is the complete software development environment and the complete set of instructions which generated the figures.
D. Donoho
The ResearchCompendia platform is an attempt to use the web to enhance the reproducibility and verifiability—and thus the reliability—of scientific research. We provide the tools to publish the "actual scholarship" by hosting data, code, and methods in a form that is accessible, trackable, and persistent. Some of our short term goals include:
It has been a long held principle of academic science that all respectable research must be reproducible. As such, authors of published research have historically been expected to archive and share the data used to obtain to their conclusions. Now that much of that data and analysis is generated computationally, it is natural to expect that code and parameters also be shared. Additionally, it is right to expect that researchers ought to document the computational portions of their research methods as thoroughly as they would document a tabletop experiment.
We introduce the concept of a compendium as both a container for the different elements that make up the document and its computations (i.e. text, code, data,...), and as a means for distributing, managing and updating the collection.”
Gentleman, R. and Temple Lang, D. "Statistical Analyses and Reproducible Research" (May 2004). Bioconductor Project Working Papers.
With ResearchCompendia we wish to address these issues facing reproducibility in computational research. We will provide tools to share and archive the data, codes, documentation, parameters, and environmental settings linked with published research all in one place. Soon, we wish to support the verification and validation processes by providing for the remote execution of shared codes in our cloud resources, and the visualization of results. Most of all we wish to make these tools heavily automated, and easy to access and utilize to lessen the exertion required from already overburdened academic researchers in the process of publishing fully reproducible work.
Why create a Research Compendium?
ResearchCompendia follows these main objectives:
To do this we hope to provide the following tools:


Post edited 5 x times, last by
Topicstarter
As posted in the feature request I created a plugin for keyboard navigation in assignment and dogtag list.
Github Url:
https://github.com/alexander-schranz/bblog-keyboard-navigation
Plugin Url:
https://getbblog.com/en/plugin/147278/List-Keyboard-Navigation
You can navigate with the Arrow Keys or WASD in the Assignement or Dogtag list. With enter you can equip your dogtags or track the current assignment.


I am a final year under graduate student in Electronics and Communication Department of NIT Rourkela, who is interested and fascinated about the new era's technology
May 2020 - July 2020
Designed the backend architecture for both the admin and
student side of this application.
Admin Side feature includes:- Exam management, question
management, Answer evaluaton, class management,etc.
Student Side feature includes:- Answering Questions, Results,
etc.
April 2020 - May 2020
Worked as Full Stack Web developer and made a PWA for maintaining the details of the cycle like current location, distance travelled, speed. It also has feature of Rent Mode for cycle.
May 2019 - July 2019
Worked as a tool developer in the project named ”An
interactive tool for the simulation of MOS Electrostatics”.
The tool has been made for the simulation of MOS Cap (2
terminal), 3 terminal MOS and 4 terminal MOS as well as has
options for both n-type MOS and p-type MOS.
Click
Here
for link of the tool uploaded in nanoHUB.
July 2017 - May 2021
On going under graduate degree in Electronics and Communication Engineering with an overall CGPA of 8.63 out of 10.
May 2015 - April 2017
Completed my intermediate degree in Science stream in CBSE Board with an overall percentage of 89% out of 100%.
May 2014 - April 2015
Completed my 10th class in CBSE Board with an overall CGPA of 10 out of 10.
Responsibilities boosts a person's self-esteem and self-worth. Responsibility goes hand in hand with confidence and increases the communication and management skills.
Cyborg, a technical club focusses entirely on Robotics and Automation. It works under the collaboration of different subsystems like Software( Image Processing, ML, DL), Electronics, Mechanical, Web development etc. It is my responsibility to manage all the projects, events, workshops undergoing by the club and take the club to greater heights.
Led the web team of Nitrutsav, which is the annual cultural fest of NIT Rourkela, where my responsibilies included coordinating among members and complete the project within the given deadline. Made APIs for features like participant registration,event management,Campus ambassador program,payment, certificate generation,etc.
Worked both as a front-end and back-end developer following MVC architecture for the website of Innovision, which is the anual Tech-fest of NITR. It had a footfall of around 2000 participants from all over India.
Technical Event Coordinator of the Tread-o-Quest event, which is an autonomous line follower event, organized by CYBORG in Innovision ( Annual Tech Fest of NIT Rourkela ). Around 200 participants from various colleges of India had participated in this competition.
C.R.E.A.T.E Class is the annual robotics classes organized by CYBORG, where basics of robotics are covered and practical implementation of Line follower bot is done by students. It was my responsibility to guide the students and order bulk components from different vendors.
Mentor of Student Counselling Services which aims to addresses Academic, Financial, Mental and Socio-cultural issues, ensuring an enjoyable life for the freshmen in the institute.
DBA Hall or Residence, NIT Rourkela
Rourkela, Odisha,India
Pin code - 769008
<EMAIL_ADDRESS><EMAIL_ADDRESS>Phone: (+91) 97787 56623


My take on the DBC experience is that you have a lot of say in your own learning and development. DBC is unlike the traditional learning system in which there is a rigid curriculum. I feel that if I have some positive input or perhaps a different way of doing something, my feedback will be heard, appreciated, and makes an impact to the evolution of the program.
I see myself being not only in the role of the student, but also a trailblazer. I am now more aware of my responsibilities of being a student at DBC. I am not here at DBC to only take, but I to also give back. I am aware that the developer culture thrives on teamwork as we are all adding to a pool of shared knowledge and experiences. We are all unique individuals with slightly different lenses on how to view the world and how to solve problems, so everyone’s opinion and input should be listened to and valued. I know that there will be times where I feel like I am the least developed person in the room, but if I keep the communal aspect of sharing and kindness in mind, then my vulnerabilities will turn into strengths: the strength of honesty and asking questions immediately, and not being afraid to do so. I will also keep in mind when I see someone who needs help and I can help, I will offer myself to help him or her in return.
Upon watching this fireside chat, my expectations of DBC have changed in a sense that I now feel a sense of duty to myself and to DBC, because as much sacrifice I am making in my personal life and having a blind faith in the DBC program, they are taking a chance on me in return in the hope that I represent their culture as well. I am aware that I was selected as a student for a reason, and it inspires me to know that I will be around many motivated individuals. So here I am, looking at all of the chefs in the kitchen, I am now here with my apron, fresh out of the bag and an unused potato peeler in hand ready and eager to learn and contribute to this delicious meal called Dev Bootcamp!
I am very excited to take part in this program. I will take control of my education. I will commit fully to the program. I will listen and I will give feedback.
Am I nervous? Absolutely! As Shareef mentioned early in the video, the North American educational mindset is geared towards never revealing or weaknesses or admitting we do not know. In a sense, this becomes ingrained in us and letting go of this gives me a queasy feeling in my stomach. We are going to be re-wiring out brains and giving into this new mindset with total faith. I am nervous that I may not know too much about programming, but I am hopeful with the idea that the code is actually a small portion of the process, and what we are actually here to learn in the logic behind being a programmer.
Nervousness, excitement, hunger, drive and passion are all words that describe my feelings at present. I’m here to become my dreams.
Thank you for reading.
Alex


Photo: Thomas Partey’s Girlfriend Shows Cleavage At 2019 MTN 4Syte Music Video Awards
by BB JonesThe 2019 MTN 4syte Music Video Awards was held over the weekend at the luxurious Kempinski Hotel in Accra.
It was a night of excitement and loads of fun as Stonebwoy and Shatta stole the show, whiles Medikal and local Jesus, Mmebusem took the audience to the roof.
In attendance were many celebrities and as we all know, they came to slay with their outfits. Also on the red carpet was Gifty Boakye, the alleged girlfriend of Black Stars player, Thomas Partey.
She was spotted in a red and black stripes dress. Her simple but beautiful outfit did not attract much attention like the cleavage she flaunted.
See below;


https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#ECB
General notes
Encrypts each block with the same key
Same plaintext blocks encrypt to same ciphertext blocks
Attackers can use this to identify blocks of plaintext that repeat
See bottom for visual example of issue with same data blocks
Electronic Code Book Mode
The simplest of the encryption modes is the Electronic Codebook (ECB) mode (named after conventional physical codebooks[10]). The message is divided into blocks, and each block is encrypted separately.
The disadvantage of this method is a lack of diffusion. Because ECB encrypts identical plaintext blocks into identical ciphertext blocks, it does not hide data patterns well. In some senses, it doesn't provide serious message confidentiality, and it is not recommended for use in cryptographic protocols at all.
A striking example of the degree to which ECB can leave plaintext data patterns in the ciphertext can be seen when ECB mode is used to encrypt a bitmap image which uses large areas of uniform color. While the color of each individual pixel is encrypted, the overall image may still be discerned, as the pattern of identically colored pixels in the original remains in the encrypted version.
ECB mode can also make protocols without integrity protection even more susceptible to replay attacks, since each block gets decrypted in exactly the same way.
You can demonstrate this using [ecb_encrypt_image]


University of California, Santa Barbara
Office of Lorem Ipsum
Search Query:
Main Navigation
About
Photos
Visit Us
Contact
Photos


Proper Configuration
Prabhaker Mateti
www.cs.wright.edu/~pmateti
Wright State University
Proper Configuration
Abstract
Perhaps as many as 900 million nodes connected to the
Internet are personal machines running Windows and Linux with little
supervision from trained system administrators. These have become
targets of script kiddies. This lecture and the associated lab
experiment are intended to help configure multi-user Linux systems
have pretty good intrusion resistance.
Educational Objectives
Students should be able to
- Recognize that out-of-the-box installations of OS are generally insecure.
- Distinguish: Proper Configuration v Fortification v Hardening
- Properly configure a multi-user Linux system
2 Proper Configuration, Fortification and Hardening (5 min)
- Separate lectures on each of these.
- These words are commonly "misused" but the distinction is important
- Need to understand how a system: boots, runs, and shuts down
- Network specifics in another course
- Detecting Listening Network Ports
- Restricting system access from servers and networks: see
hosts.allow .deny below
2.1 Configuration
- Fixing an out-of-the-box installation of a Linux distro
- Reading docs and adjusting the config files of installed software
- We tend to focus on smooth operation and performace
- Recognize insecure and privacy-losing elements
- A one-time activity unless new/updated software is installed
- No analysis of why some software is installed
2.2 What is Fortification?
- Install and configure software that
- Detects unauthorized changes
- Monitors a running system
- Evaluation of our needs and removing unnecessary services/software
- Security updates/ patching Linux systems
2.3 Hardening
- Much higher skill level
- Replace/Rebuild parts of kernel, etc.
3 Installed Software (10 min)
- Linux server distros typically install all the server software mentioned.
- Linux desktop distros skip all except mail clients.
- For usablity: Most Linux systems install ssh and nfs.
- Separate partitions for
/boot, /usr, /home, /var, /var/tmp, /tmp
?
3.1 File Permissions and Ownership
chmod, chown, umask
- Access Control Lists
getfacl, setfacl
find / -xdev -nouser -o -nogroup
no (existing) user owns
find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \)
world writable
3.2
Securing Network Presence
/etc/hosts.allow
-
/etc/hosts.deny
ALL: PARANOID
- auth.log showed
Sep 1 18:15:17 sunshine sshd[10300]: Invalid user aaaaa from <IP_ADDRESS>
ALL: <IP_ADDRESS>, <IP_ADDRESS>, <IP_ADDRESS>,<IP_ADDRESS>,<IP_ADDRESS>, <IP_ADDRESS>, <IP_ADDRESS>
3.2 Securing SSH
Server + Client
- generating host keys
ssh-keygen /etc/ssh/ssh_host_dsa_key.pub
- SSH v1 disabled
/etc/ssh/ssh_config sshd_config
- Generate a public + private key pair for yourself using either
DSA or RSA.
% ssh-keygen -t rsa -b 2048
The ~/.ssh
dir now has id_rsa, id_rsa.pub, known_hosts
- Login using SSH and/or copy remote files using SFTP without login
prompts
~/.ssh/authorized_keys
3.3 Securing NFS
- root on the client v root on the server;
root_squash
- mapping userids between the server and client
nosuid
mount
/etc/exports; /usr/sbin/rpc.gssd, rpc.idmapd, rpc.mountd,
rpc.nfsd, rpc.svcgssd
3.4 Securing Mail Clients/Servers
- Most webmail and instant messaging services are insecure
- Postfix, Sendmail, exim
- GNU Privacy Guard (GnuPG)
- Pretty Good Privacy
3.5 Securing Samba
# smbpasswd -a pmateti
- Config file
/etc/samba/smb.conf
-
hosts allow = <IP_ADDRESS> <IP_ADDRESS>/24
hosts deny = <IP_ADDRESS>/0
valid users = @smbusers, pmateti
valid users = @admins, pmateti
invalid users = root
write list = @admins, pmateti
usershare allow guests = Yes
3.6
Securing Web Servers
apache, nginx
- Web content on a separate file volume,
/var/www
with mount options: noexec, nodev, nosuid
- Web server processes run as user/group
www-data
- Disable unused modules;
ls -F /etc/apache2/mods-enabled/
chroot
jails
- Similar items for nginx
4 Users (10 min)
- Security model based on user id
- At least four: root, ordinary, nobody, "pseudo"
/etc/passwd, /etc/shadow, /etcgroup
whoami, w, who, last
- Restricting Direct Login Access for System and Shared Accounts
- Restricting su Access to System and Shared Accounts
/etc/sudoers
- Encryption
- Characteristics of strong passwords
- Cracking the passwords
4.1 SUID executables
- Ownership of Programs v Processes, Effective User Id
- The need for suid programs
chmod +s; /usr/bin/passwd; /bin/mount;
…
find / -user root -perm -4000 -exec ls -ldb {} \;
5 Booting Sequence (15 min)
To Be Done TBD
5.1 Boot time line
- Related chronological events
- Time scale
5.2 Power On to OS Loader Selection
- BIOS/ UEFI / POST
- Partitions v File Volumes v (Master) Boot Record
- OS Boot Loaders: GRUB; BootMgr
- Trusted Platform Management (TPM)
- Anatomy of An Attack: Reflash BIOS, Replace UEFI boot
5.3 OS Loader to OS Kernel Selection
- Grub stanzas, grub menu, grub password
- Anatomy of An Attack: Boot an Alt Kernel and InitRD
5.4 OS Kernel Initialization to the First Process init
- uncompressing the kernel, and initial ramdisk
- kernel modules
- Locating the init program
- Kernel command line: cat /proc/cmdline; e.g., boot=/bin/bash
- Anatomy of An Attack: Construct an Alt Kernel and InitRD
5.5 From Init to User Login
- Several distro have switched to other init-equiv programs, but do
provide compatibility with SysV init. Our discussion continues to
use the more established SystemV init.
- program
/sbin/init
, and the Init process
- Reviewing inittab and Boot Scripts
/etc/init.d/ /etc/rc[0-6].d/
- Run Levels
- Network Setup
- Configuring Services
- Anatomy of An Attack: /sbin/getty, /bin/login, /usr/bin/passwd Trojans
- Mutual authentication: init v kernel
6.1 Protecting the root account
- Should we enable root account? Ubuntu does not.
- Sharing the root account
- The
sudo
prefix
- Extra strong passwords
more /etc/securetty
- Make Sure No Non-Root Accounts Have UID Set To 0
6.2 Kernel Security Improvement
- Do not display login banners. Some web blogs misadvise to
display.
/etc/motd; /etc/issue;
% cat /proc/version; % uname -a
# sysctl
Edit files /etc/sysctl.conf sysctl.d/
kernel.exec-shield = 1
kernel.kptr_restrict = 1
"When an attacker is trying
to exploit the local kernel, it is helpful to determine where in
memory the kernel, modules, and data structures live.
Kernel addresses are sensitive information."
kernel.sysrq = 176
kernel.core_uses_pid = 1
kernel.randomize_va_space = 1
fs.file-max = 65535
kernel.pid_max = 65536
6.2 Kernel Security Improvement
-
kernel.shmall = 2097152
kernel.shmmax =<PHONE_NUMBER>
kernel.shmmni =4096
kernel.sem = 250 32000 100 128
vm.dirty_background_ratio = 5
vm.swappiness = 60 vm.dirty_ratio = 10
ls -l /proc/sys/vm
Keep kernel details confidential ls -l /boot
-rw-r--r-- 1 root root 1007311 Oct 2 19:19 abi-3.11.0-11-lowlatency
-rw-r--r-- 1 root root 163504 Oct 2 19:19 config-3.11.0-11-lowlatency
-rw-r--r-- 1 root root 26228945 Oct 17 23:33 initrd.img-3.11.0-11-lowlatency
-rw------- 1 root root 3310511 Oct 2 19:19 System.map-3.11.0-11-lowlatency
-rw------- 1 root root 5674032 Oct 2 19:19 vmlinuz-3.11.0-11-lowlatency
- SELinux
6.3 Preventing Accidental Denial of Service
- file volumes becoming full
- disk quota
- how many processes, files, … per user login session
ulimit
more /etc/security/limits.conf
6.4 Watch the log files.
- List of log file path names
/var/log/*.log
- Logging to a remote log service
- Log file rotation
- Ever growing log files and Denial of Service
7 Shutdown Sequence (5 min)
- Services shutdown
- Network down
- Single user mode
- Recording system state
- Power off
- Anatomy of An Attack: Install Alt Kernel and InitRD
8 Lab Experiment (2 to 3 hours by the student)
- Practices things discussed above, but not all
- Included list: user accounts, sudoers, file perms, kernel
- Excluded list: password cracking (a separate lab)
- Download a Linux ISO we provide (time taken not counted)
- Student installs on a USBD or in a virtual box (10 - 15 min)
- Examines this system (30 min)
- Configures properly this system (60 min)
- Writes a lab report (30 min)
9 Required and Recommended Reading (5 to 10 hours)
- Dozens of books
- CERT config guide, not online anymore, but can still be found
- Tool: http://www.bastille-linux.org/ They call this "hardening" but
it is a proper config helper.
Copyright © 2013 • www.wright.edu/~pmateti • 2013-10-30T11:03-0400


Wasm Browser Shutdown Sample
Throw Managed Exception
Trigger Native Assert
Trigger Environment.FailFast
Call Harmless JSExport
Call exit
Start Timer
Timer Value:


When you connect to the online mode, SuperCodingBall stores your nickname and a link to your profile picture
if you were connected with Facebook or Google.
To allow online players to play against each other, SuperCodingBall stores the blocks defining your team's
strategy.
To compute the players ranking, SuperCodingBall also stores the results of the games you played.
At any moment, you can choose to delete all this information by going
to the online page, clicking your profile
on the top right corner and choose "Delete my account".
SuperCodingBall uses Firebase Analytics to get anonymous statistics about the usage of the application.


neuronsblog
Under developmentDeveloper: Vijaysinh Kamble
The latest stories
Get comprehensive, concise articles related to science, technology & art
Under developmentDeveloper: Vijaysinh Kamble
Get comprehensive, concise articles related to science, technology & art


{%extends 'base.html'%} {% load bootstrap3%} {%block content%} {{block.super}}
{{project.average}} average based on {{project.reviews}} reviews.
{{project.description}}


REGISTRATION FORM
USERNAME
EMAIL-ID
PASSWORD
MOBILE NUMBER
REGISTER NOW
send confirmation link to email


Jimi Hendrix is very important. He’s my idol. He sort of epitomizes, from his presentation on stage, the whole works of a rock star. There’s no way you can compare him. You either have the magic or you don’t. There’s no way you can work up to it. There’s nobody who can take his place.


- LaunchGame() - Method in class ControlLayer.Controller
-
Instantiates the GameEngine, which takes over the control to launch a new game.
- LaunchScreen - Class in ViewLayer.Screens.LaunchScr
-
A pre-game configuration screen allowing the player(s) to select car(s) and a map.
- LaunchScreen(Image) - Constructor for class ViewLayer.Screens.LaunchScr.LaunchScreen
-
A pre-game configuration screen allowing the player(s) to select car(s) and a map.
- Line - Variable in class ModelLayer.CollisionManagement.MapObject
-
Represents the object or part of the object as a line.
- LoadBackgroundImage() - Static method in class ModelLayer.FileLoaders.ImageFileLoader
-
Loads the background image for the main menu.
- LoadCarImageFromFileForLaunchScreen(int) - Static method in class ModelLayer.FileLoaders.ImageFileLoader
-
Loads the thumbnail of a car.
- LoadCarImages() - Method in class ModelLayer.Car
-
Retrieves the in-game images of a car for all the angles.
- LoadCarImages(int) - Static method in class ModelLayer.FileLoaders.ImageFileLoader
-
Loads the car images in all its angles for in-game display.
- LoadCarSelectorLabels() - Method in class ViewLayer.Screens.LaunchScr.CarSelectionPanel
-
Instantiates the JLabels containing arrow images to represent car selection
- LoadCrashedCarImage() - Static method in class ModelLayer.FileLoaders.ImageFileLoader
-
Returns the image of the crashed car.
- LoadKeyboardLayoutImage(int) - Static method in class ModelLayer.FileLoaders.ImageFileLoader
-
Return the image file containing the keyboard layout for a given player.
- LoadMapSelectionImage(String) - Static method in class ModelLayer.FileLoaders.ImageFileLoader
-
Loads the maps thumbnails.
- LoadMapSelectorLabels() - Method in class ViewLayer.Screens.LaunchScr.MapSelectionPanel
-
Instantiates the JLabels containing arrow images to represent map selection
- LoadSelectorArrowImage(boolean) - Static method in class ModelLayer.FileLoaders.ImageFileLoader
-
Loads the arrow icon used in the LaunchScreen when selecting car or map.
- LoadTextureImage() - Method in class ViewLayer.MapVL.MapView
-
Gets the enhanced map (texture) image from the disk.
- LS_GameStartButton_Color - Static variable in class ControlLayer.SharedResources
-
- LS_GameStartButton_Font - Static variable in class ControlLayer.SharedResources
-
- LS_GameStartButton_Foreground_Color - Static variable in class ControlLayer.SharedResources
-
- LS_GameStartButton_Height - Static variable in class ControlLayer.SharedResources
-
- LS_GameStartButton_Text_Ready - Static variable in class ControlLayer.SharedResources
-
- LS_GameStartButton_Y - Static variable in class ControlLayer.SharedResources
-
- LS_ReturnToMainButton_Color - Static variable in class ControlLayer.SharedResources
-
- LS_ReturnToMainButton_Font - Static variable in class ControlLayer.SharedResources
-
- LS_ReturnToMainButton_Height - Static variable in class ControlLayer.SharedResources
-
- LS_ReturnToMainButton_Text - Static variable in class ControlLayer.SharedResources
-
- LS_ReturnToMainButton_Width - Static variable in class ControlLayer.SharedResources
-
- LS_ReturnToMainButton_X - Static variable in class ControlLayer.SharedResources
-
- LS_ReturnToMainButton_Y - Static variable in class ControlLayer.SharedResources
-
- LS_SelectorArrow_Image_Height - Static variable in class ControlLayer.SharedResources
-
- LS_SelectorArrow_Image_Width - Static variable in class ControlLayer.SharedResources
-
- LS_SelectorArrow_LtoR_Image_Filename - Static variable in class ControlLayer.SharedResources
-
- LS_SelectorArrow_RtoL_Image_Filename - Static variable in class ControlLayer.SharedResources
-


Failed to create an event. Time slot is already booked.
Participants
Choose...
All members
Jhon
Mila
Sam
Molly
Garry
Liza
Mike
Day
Choose...
Monday
Tuesday
Wednesday
Thursday
Friday
Time
Choose...
10-00
11-00
12-00
13-00
14-00
15-00
16-00
17-00
18-00
Submit
Cancel


this diagram will provided you with detailed information about unemployment rate for each sub major and also the trend of changing the highest paid salary during 2016 till 2020
Income and unemployment rate


---
layout: default
title: "Integrations | Fiix"
---
Connect software or hardware through our API or connect your maintenance and asset management
software with your NetSuite ERP If you build it, they will come. We offer a suite of platform tools that allow you to fully
leverage your CMMS by integrating it with any hardware device or software application in the
cloud through our API (Application Programming Interface). Whether importing data directly
from machine sensors, or exporting data to an ERP, our platform allows you to unlock the
full power of your business assets and infrastructure. Fiix CMMS integrates seamlessly with your Netsuite ERP, so you can manage and maintain
accurate inventory levels and keep your finance and maintenance teams in sync. Bidirectional
integration means you’ll see inventory updates from Netsuite reflected in Fiix, and when
your maintenance team uses or returns parts, they’ll automatically be posted back to
Netsuite. Plus, when your maintenance team needs replacements, purchase orders can be sent
through a Fiix workflow to Netsuite, with purchased parts being reflected back in your Fiix
CMMS. Like a well-oiled machine, bidirectional integration with Netsuite allows maintenance and
finance teams to optimize their inventory, improve productivity and eliminate redundancies.
Sync Fiix and Netsuite automatically Centralize knowledge across teams Adjust parts used in a work order Trigger purchase order workflows Maintain accurate inventory records View inventory dashboards and reports
Seamless connections and integrations
API integrations
Considering integrating your CMMS and ERP?
We created a complete guide that outlines the benefits and key items to consider with any CMMS and ERP
integration.
Super simple Netsuite ERP integration


R/importGeneSets.R
importGeneSetsFromCollection.Rd
Converts a list of gene sets stored in a GeneSetCollection object and stores it in the metadata of the SingleCellExperiment object. These gene sets can be used in downstream quality control and analysis functions in singleCellTK.
importGeneSetsFromCollection( inSCE, geneSetCollection, collectionName = "GeneSetCollection", by = "rownames" )
| inSCE | Input SingleCellExperiment object. |
|---|---|
| geneSetCollection | A GeneSetCollection object. See GeneSetCollection for more details. |
| collectionName | Character. Name of collection to add gene sets to.
If this collection already exists in |
| by | Character, character vector, or NULL. Describes the
location within |
The gene identifiers in gene sets in the
GeneSetCollection
will be mapped to the rownames of
inSCE
using the by
parameter and
stored in a GeneSetCollection object from package
GSEABase. This object is stored in
metadata(inSCE)$sctk$genesets
, which can be accessed in downstream
analysis functions such as runCellQC.
importGeneSetsFromList for importing from lists, importGeneSetsFromGMT for importing from GMT files, and importGeneSetsFromMSigDB for importing MSigDB gene sets.
#>#>#>#> #>#>#> #>


 Basically just that you have to make a git repo and github is a great place to do it!
- You’re going to make a git repo, gitlab service, or CI driven website (which is a git repo)
- You’re going to do a blog post explaining the concept in the option selected
- A matching video that demonstrates a concept from the option selected (like using Github Desktop to make a commit in the video as an example)
- Demonstrate the multiple ways that git can interface with a website through different UIs (at least 2)
- Use command line, VS Code git plugin, the github website, or Github Desktop as a backdrop for explaining version control and how a “commit” from each of these use git to keep the code changes in sync
- Do a blog post about how the video / these different methods of making commits is similar to a team all collaborating on a git repository
- Building a basic website with HAX11ty
- https://github.com/elmsln/hax11ty
- If you used dev.to you can copy and paste your old blog posts to make a site that has all of them in one place
- Need to use hax11ty as a template repo (it’s like forking)
- I’ll demo what to edit to make this possible, it's pretty easy
- Explain briefly what haxcms + 11ty is
- Use github actions to deploy your site to github pages
- Explain github actions and show it's steps running through when you make a change to your repo in your video (main point)
- Your blog post is the steps to setup hax11ty and your experience with making a simple blog to host all your posts using it
- This is a mash up of our tech + github CI + 11ty a static site system
- Setup a copy of gitlab on a local machine or hosting platform which we are using next week, wink wink.
- Play around and create a repo that you then commit to from command line and via the web interface in order to highlight the features of GitLab
- Your blog post / video should show how others can install it, and why you’d run this instead of GitHub as a company
- End with which one you like more / has more features
- Create the post, link to you video in the post
- Submit link to post in #lab-5-git
channel on Slack
- This is due by Sunday at 11:59pm
- Did you do the lab activity (34%)
- Did you do your blog post writing about your option (33%)
- Demonstration of technique in video (33%)
- Evaluation is contextual based on which option you pick.


EFL appeal against 'lenient' Bolton deduction
The EFL has appealed against Bolton’s suspended five-point penalty for failing to fulfil two league fixtures, declaring the sanction “too lenient”.
The League One side, who began the season on minus 12 points after entering administration, cancelled a game against Brentford at the end of the previous campaign and another against Doncaster in August.
An independent disciplinary commission concluded on Thursday that Wanderers should be penalised two points for the first transgression, which occurred after their relegation from the Championship was confirmed, and three for the second. Fines totalling £70,000 were also announced.
All penalties will only be activated if the club attract similar charges in the next 18 months, but the EFL believe stiffer action should be taken.
A spokesman said: “The EFL is disappointed by the conclusions reached by the independent Disciplinary Commission in respect of Bolton Wanderers and it is the firm view of the League that the sanction imposed is too lenient when consideration is given to all the circumstances of the case.
“Given the potential for postponements to have a significant impact on competition integrity and, following receipt of advice overnight on the reasons provided, the League will appeal the outcome in the strongest possible sense.”
The club acknowledged the EFL’s position but intend to fight their corner.
Chairman Sharon Brittan said: “We are naturally very disappointed by this outcome as we had hoped a line had been drawn and we’d be able to move on. We will vehemently defend any appeal.”
READ MORE
Graham Cummins: 'This is what happened when police banged on my door at 7am'


Hi! I am Muqtasida Fatima, a school-going girl who is fond of nature and loves taking pictures of beautiful sceneries or natural elements. Being a nature-lover, I also like to travel around and seek for adventures. Till now, I have done only couple activities that are adventurous. For example, I have gone for nature hike, canoeing, camping every summer, and ziplining. One of the daring activity in my adventure list is to do sky diving. Other than small adventures, I like to play piano in my spare time which gives peace to my heart and love playing and watching soccer. I am also very fond of animals and in future would like to have as many pets as possible.
All the ones mentioned above are some of the other hobbies that I have. From which, photography is my favourite hobby that I would like to continue in future. Please feel free to drop any comments or feedbacks for the posted photos.


Pianoafrik
2
Dashboard
Interface
Courses
Details
All Courses
Add New Course
Lessons
Details:
All Lessons
Add Lesson
Addons
Coupons
Details
All Coupons
Add Coupon
Create Coupon
Owner Name:*
Owner Email:
Owner PhoneNumber:
Set Days*
Price*:
Select Course(s) This Coupon Can Buy*:
Create Coupon
Ready to Leave?
×
Select "Logout" below if you are ready to end your current session.
Open modal for @getbootstrap
Add Course Modal
×
Title:
View Trailer Link:
Price
Description:
Add Course Modal
×
Title:
Video Link:
Choose A Course:
Description:


{% extends 'base.html' %} {% block content %} {% load static %}
*Only the files with .pdf and .docx extensions are accepted


Not enough people at my company think the way I do or understand innovation. It feels like a foreign concept.
The teams that need to sign off on my idea — compliance, operations, or leadership — start and stop at “no.”
Current metrics for success — and timelines for hitting ROI — preclude innovative thinking.


Tik-Tok of Oz
by L. Frank Baum
Chapter 25: “The Land of Love”
Additional Information
- Year Published: 1914
- Language: English
- Country of Origin: United States of America
- Source: Baum, L. F. (1914). Tik-Tok of Oz. Chicago: Reilly and Britton.
-
Readability:
- Flesch–Kincaid Level: 7.0
- Word Count: 2,047
- Genre: Fantasy
- Keywords: 20th century literature, american literature, books of oz, children's literature, fantasy, l. frank baum
- ✎ Cite This
Downloads
“Well, is ‘hee-haw’ all you are able to say?” inquired the Sawhorse, as he examined Hank with his knot eyes and slowly wagged the branch that served him for a tail.
They were in a beautiful stable in the rear of Ozma’s palace, where the wooden Sawhorse—very much alive—lived in a gold-paneled stall, and where there were rooms for the Cowardly Lion and the Hungry Tiger, which were filled with soft cushions for them to lie upon and golden troughs for them to eat from.
Beside the stall of the Sawhorse had been placed another for Hank, the mule. This was not quite so beautiful as the other, for the Sawhorse was Ozma’s favorite steed; but Hank had a supply of cushions for a bed (which the Sawhorse did not need because he never slept) and all this luxury was so strange to the little mule that he could only stand still and regard his surroundings and his strange companions with wonder and amazement.
The Cowardly Lion, looking very dignified, was stretched out upon the marble floor of the stable, eyeing Hank with a calm and critical gaze, while near by crouched the huge Hungry Tiger, who seemed equally interested in the new animal that had just arrived. The Sawhorse, standing stiffly before Hank, repeated his question:
“Is ‘hee-haw’ all you are able to say?”
Hank moved his ears in an embarrassed manner.
“I have never said anything else, until now,” he replied; and then he began to tremble with fright to hear himself talk.
“I can well understand that,” remarked the Lion, wagging his great head with a swaying motion. “Strange things happen in this Land of Oz, as they do everywhere else. I believe you came here from the cold, civilized, outside world, did you not?”
“I did,” replied Hank. “One minute I was outside of Oz—and the next minute I was inside! That was enough to give me a nervous shock, as you may guess; but to find myself able to talk, as Betsy does, is a marvel that staggers me.”
“That is because you are in the Land of Oz,” said the Sawhorse. “All animals talk, in this favored country, and you must admit it is more sociable than to bray your dreadful ‘hee-haw,’ which nobody can understand.”
“Mules understand it very well,” declared Hank.
“Oh, indeed! Then there must be other mules in your outside world,” said the Tiger, yawning sleepily.
“There are a great many in America,” said Hank. “Are you the only Tiger in Oz?”
“No,” acknowledged the Tiger, “I have many relatives living in the Jungle Country; but I am the only Tiger living in the Emerald City.”
“There are other Lions, too,” said the Sawhorse; “but I am the only horse, of any description, in this favored Land.”
“That is why this Land is favored,” said the Tiger. “You must understand, friend Hank, that the Sawhorse puts on airs because he is shod with plates of gold, and because our beloved Ruler, Ozma of Oz, likes to ride upon his back.”
“Betsy rides upon my back,” declared Hank proudly.
“Who is Betsy?”
“The dearest, sweetest girl in all the world!”
The Sawhorse gave an angry snort and stamped his golden feet. The Tiger crouched and growled. Slowly the great Lion rose to his feet, his mane bristling.
“Friend Hank,” said he, “either you are mistaken in judgment or you are willfully trying to deceive us. The dearest, sweetest girl in the world is our Dorothy, and I will fight anyone—animal or human—who dares to deny it!”
“So will I!” snarled the Tiger, showing two rows of enormous white teeth.
“You are all wrong!” asserted the Sawhorse in a voice of scorn. “No girl living can compare with my mistress, Ozma of Oz!”
Hank slowly turned around until his heels were toward the others. Then he said stubbornly:
“I am not mistaken in my statement, nor will I admit there can be a sweeter girl alive than Betsy Bobbin. If you want to fight, come on—I’m ready for you!”
While they hesitated, eyeing Hank’s heels doubtfully, a merry peal of laughter startled the animals and turning their heads they beheld three lovely girls standing just within the richly carved entrance to the stable. In the center was Ozma, her arms encircling the waists of Dorothy and Betsy, who stood on either side of her. Ozma was nearly half a head taller than the two other girls, who were almost of one size. Unobserved, they had listened to the talk of the animals, which was a very strange experience indeed to little Betsy Bobbin.
“You foolish beasts!” exclaimed the Ruler of Oz, in a gentle but chiding voice. “Why should you fight to defend us, who are all three loving friends and in no sense rivals? Answer me!” she continued, as they bowed their heads sheepishly.
“I have the right to express my opinion, your Highness,” pleaded the Lion.
“And so have the others,” replied Ozma. “I am glad you and the Hungry Tiger love Dorothy best, for she was your first friend and companion. Also I am pleased that my Sawhorse loves me best, for together we have endured both joy and sorrow. Hank has proved his faith and loyalty by defending his own little mistress; and so you are all right in one way, but wrong in another. Our Land of Oz is a Land of Love, and here friendship outranks every other quality. Unless you can all be friends, you cannot retain our love.”
They accepted this rebuke very meekly.
“All right,” said the Sawhorse, quite cheerfully; “shake hoofs, friend Mule.”
Hank touched his hoof to that of the wooden horse.
“Let us be friends and rub noses,” said the Tiger. So Hank modestly rubbed noses with the big beast.
The Lion merely nodded and said, as he crouched before the mule:
“Any friend of a friend of our beloved Ruler is a friend of the Cowardly Lion. That seems to cover your case. If ever you need help or advice, friend Hank, call on me.”
“Why, this is as it should be,” said Ozma, highly pleased to see them so fully reconciled. Then she turned to her companions: “Come, my dears, let us resume our walk.”
As they turned away Betsy said wonderingly:
“Do all the animals in Oz talk as we do?”
“Almost all,” answered Dorothy. “There’s a Yellow Hen here, and she can talk, and so can her chickens; and there’s a Pink Kitten upstairs in my room who talks very nicely; but I’ve a little fuzzy black dog, named Toto, who has been with me in Oz a long time, and he’s never said a single word but ‘Bow-wow!’”
“Do you know why?” asked Ozma.
“Why, he’s a Kansas dog; so I s’pose he’s different from these fairy animals,” replied Dorothy.
“Hank isn’t a fairy animal, any more than Toto,” said Ozma, “yet as soon as he came under the spell of our fairyland he found he could talk. It was the same way with Billina, the Yellow Hen whom you brought here at one time. The same spell has affected Toto, I assure you; but he’s a wise little dog and while he knows everything that is said to him he prefers not to talk.”
“Goodness me!” exclaimed Dorothy. “I never s’pected Toto was fooling me all this time.” Then she drew a small silver whistle from her pocket and blew a shrill note upon it.
Dorothy knelt down before him and shaking her finger just above his nose she said:
“Toto, haven’t I always been good to you?”

“Bow-wow!” he said, and Betsy knew at once that meant yes, as well as Dorothy and Ozma knew it, for there was no mistaking the tone of Toto’s voice.
 “How would you like it, Toto, if I said nothing to you but ‘bow-wow’?”
Toto’s tail was wagging furiously now, but otherwise he was silent.
“Really, Dorothy,” said Betsy, “he can talk with his bark and his tail just as well as we can.  “But Toto’s got to be more sociable. See here, sir!” she continued, addressing the dog, “I’ve just learned, for the first time, that you can say words—if you want to. Don’t you want to, Toto?”
“Woof!” said Toto, and that meant “no.”
“Not just one word, Toto, to prove you’re as any other animal in Oz?”
“Woof!”
“Just one word, Toto—and then you may run away.”
He looked at her steadily a moment.
“All right. Here I go!” he said, and darted away as swift as an arrow.
Dorothy clapped her hands in delight, while Betsy and Ozma both laughed heartily at her pleasure and the success of her experiment. Arm in arm they sauntered away through the beautiful gardens of the palace, where magnificent flowers bloomed in abundance and fountains shot their silvery sprays far into the air.
The two arose to bow respectfully as the Ruler of Oz approached them.
“How are you enjoying our Land of Oz?” Ozma asked the stranger.
“I am very happy here, Your Highness,” replied Shaggy’s brother. “Also I am very grateful to you for permitting me to live in this delightful place.”
“You must thank Shaggy for that,” said Ozma. “Being his brother, I have made you welcome here.”
“When you know Brother better,” said Shaggy earnestly, “you will be glad he has become one of your loyal subjects. I am just getting acquainted with him myself and I find much in his character to admire.”
Leaving the brothers, Ozma and the girls continued their walk. Presently Betsy exclaimed:
“Shaggy’s brother can’t ever be as happy in Oz as I am. Do you know, Dorothy, I didn’t believe any girl could ever have such a good time—anywhere—as I’m having now?”
“I know,” answered Dorothy. “I’ve felt that way myself, lots of times.”
“I wish,” continued Betsy, dreamily, “that every little girl in the world could live in the Land of Oz; and every little boy, too!”
Ozma laughed at this.
“It is quite fortunate for us, Betsy, that your wish cannot be granted,” said she, “for all that army of girls and boys would crowd us so that we would have to move away.”
“Yes,” agreed Betsy, after a little thought, “I guess that’s true.”
THE END


Posted by October 10, 2017
onTechdays The Netherlands is just two days away! There's some great Aurelia content for you, if you are attending this event. Read on to learn more about the upcoming talks.
Posted by October 3, 2017
onWe've just made a massive set of releases to Aurelia's core libraries and plugins. This set of releases includes perf optimizations, reduced memory utilization, removal of a memory leak, plenty of fixed bugs and adds some new features!
Posted by September 26, 2017
onToday, I'm pleased to introduce you to Daniel Radu. Dan is a member of our Aurelia community who has been building some pretty awesome stuff by combining Aurelia [http://aurelia.io] with Microsoft Azure [https://azure.microsoft.com]. I'll let Dan tell you about his experiences, in his own words...
Posted by August 30, 2017
onWe've got a number of bug fixes, enhancements and perf improvements this time around. In particular, we've made some substantial fixes to our CLI Webpack support.
Posted by August 18, 2017
onToday, I'm thrilled to announce that we've added support for Webpack 3 to the Aurelia CLI. With this addition, the CLI supports project generation equally for Webpack, SystemJS and RequireJS.
Posted by August 14, 2017
onToday, we have a small set of release to update you with. We're gearing up for some big releases next. Stay tuned for more...
Posted by July 13, 2017
onAurelia in Action [https://www.manning.com/books/aurelia-in-action] is a book targeted at teaching you what you need to build compelling, real-world applications in Aurelia from the ground up. The book centres around a fictional virtual bookshelf application (similar to Goodreads.com [https://www.goodreads.com/]) called my-books. We start off by creating a bare-bones application via the Aurelia CLI, then progressively layer on various features that users would want in a virtual bookshelf. By the end of the book we've built out a fully fledged SPA, giving you the chance to familiarise yourself with the many tools available in Aurelia's tool-belt along the way. Save 45% off Aurelia in Action [https://www.manning.com/books/aurelia-in-action] with discount code aureliash at Manning.com [https://www.manning.com/] today!


Lady Vols take down Stetson
The Lady Vols are on a 5-0 win streak after taking down Stetson on Tuesday night.
The Lady Vols beat Stetson 73-46. They led the other team 58-35 at halftime. At halftime last year against Stetson, the two teams were tied.
The team should either move up or remain the same in next week's rankings.


Terry Crews
G2 Productions
Wine Enthusiast
Carhartt
Monarch Reign
AR/VR/XR
We are a full service creative augmented reality and virtual reality studio based in Portland, Oregon with development offices in Cali, Colombia.
With over 40 years of combined real time development experience, we serve a multitude of clients in a myriad of industries, who want to and now, need to, take advantage of the new and interesting ways in which AR and VR can help their businesses evolve. From curious and fun AR/VR applications to complex 3D simulations, we are able to set you apart from your competition.
Enrique Sanchez-Rivera
Chief Executive Officer
CEO
Mauricio Fernandez M.
Art Director
AD
Guillermo A. Alvarez
Chief Technology Officer
CTO
Felipe Santamaria
3D Developer
3D
Kammil S. Carranza
Creative Director
CD
Juan C. Ramon
Creative Director
CD
Lala Londoño
2D Artist
UI
Jonathan Pulsara
3D Developer
3D
Whether you need to augment your clothing label’s hang tag, create a complex 3D environment for an event, or have us build a training tool for your company’s engineers, we have the talent and excitement to deliver a perfectly functioning project on time.
We are experts at creating impressive and accurate virtual environments. From real time architectural renderings to complex fictional worlds, we are able to develop immersive visual surroundings that captivate even the most discerning eyes and minds.
Sharing a quote from our client Terry Crews: "20 years ago, 1995 to be exact, Ken Harvey and I were teammates on the NFL’s Washington Redskins. Ken came to me with a brilliant idea of a book he wrote for his two very young sons, Anthony and Marcus. The book was to be a first time reader, and feature the boys in an imaginative game of hide and seek."
When G2 Productions reached out to us to create their first AR experience, they wanted an augmented reality easter egg that would take everyone by surprise at the end of each of the music videos they produced. The first music video we had to work with was Jennifer Lopez’s and Bad Bunny’s collaboration, “Te Gusté”.
We decided to elaborate a beautiful and shiny disco ball which has the ability to spin as the user swipes it with their finger. When the disco ball reaches a certain speed, it explodes, and confetti as well as G2’s logo and ours come out in real time 3D. To enjoy, watch “Te Gusté” and then at the end of the video, wait for the disco ball marker to come out. Pause the video and then launch the G2 Productions app. Point your device to the market and spin the disco ball!!
Wine Enthusiast Magazine asked us to build their first-ever Augmented Reality magazine cover. The task was to create an application that would launch a digital experience when the magazine cover was detected. In collaboration with the magazine and award-winning digital artist Pete Bollinger, we elected to choose a sci-fi interface that brought Peter’s video to life by creating a 3D version of it that is displayed in different layers as if they were coming right out of the magazine. The experience ends with a very futuristic hologram of the actual cover. Check out the full Wine Enthusiast article here
We partnered with the legendary Carhartt family and their beautiful winery, Carhartt Vineyard, to bring to life the first ever augmented reality wine application in Santa Barbara county. More specifically, in the beautiful Santa Ynez Valley. An idea surged within our company to change the wine tasting room experience and offer an innovative and informative application which could be enjoyed inside but also, outside the wine tasting room. A floating bottle of Sangiovese more than meets the eye.
Celebrity fashion designer Ashley Busch, wife of famed NASCAR champion Kurt Busch, chose us to launch the first AR project for her new brand, Monarch Reign (www.monarchreign.com). The luxurious swim and accessories brand needed us to bring her logo to life in a beautiful and entertaining way. The color rich butterfly interaction, mixed with the subtle softness of their flight deliver a brand message like no other; one of thoughtful design and love for clean and interesting aesthetics.
Get in touch and we'll get back to you as soon as we can. We look forward to hearing from you!


Objects can be initialized using new Object()
, Object.create()
, or using the literal notation (initializer notation). An object initializer is a list of zero or more pairs of property names and associated values of an object, enclosed in curly braces ({}
).
var o = {}; var o = { a: "foo", b: 42, c: {} }; var a = "foo", b = 42, c = {}; var o = { a: a, b: b, c: c }; var o = { property: function ([parameters]) {}, get property() {}, set property(value) {}, };
Please see the compatibility table for support for these notations. In non-supporting environments, these notations will lead to syntax errors.
// Shorthand property names (ES6) var a = "foo", b = 42, c = {}; var o = { a, b, c }; // Shorthand method names (ES6) var o = { property([parameters]) {}, get property() {}, set property(value) {}, * generator() {} }; // Computed property names (ES6) var prop = "foo"; var o = { [prop]: "hey", ["b" + "ar"]: "there", };
An object initializer is an expression that describes the initialization of an Object. Objects consist of properties, which are used to describe an object. Values of object properties can either contain primitive data types or other objects.
An empty object with no properties can be created like this:
var object = {};
However, the advantage of the literal or initializer notation is, that you are able to quickly create objects with properties inside the curly braces. You simply notate a list of key: value pairs delimited by comma. The following code creates an object with three properties and the keys are "foo", "age" and "baz". The values of these keys are a string "bar", a number 42 and the third property has another object as its value.
var object = { foo: "bar", age: 42, baz: { myProp: 12 }, }
Once you have created an object, you might want to read or change them. Object properties can be accessed by using the dot notation or the bracket notation. See property accessors for detailed information.
object.foo; // "bar" object["age"]; // 42 object.foo = "baz";
We have already learned how to notate properties using the initializer syntax. Oftentimes, there are variables in your code that you would like to put into an object. You will see code like this:
var a = "foo", b = 42, c = {}; var o = { a: a, b: b, c: c };
With ECMAScript 6, there is a shorter notation available to achieve the same:
var a = "foo", b = 42, c = {}; // Shorthand property names (ES6) var o = { a, b, c };
When using the same name for your properties, the second property will overwrite the first.
var a = {x: 1, x: 2}; console.log(a); // { x: 2}
In ECMAScript 5 strict mode code, duplicate property names were considered a SyntaxError. With the introduction of computed property names making duplication possible at runtime, ECMAScript 6 has removed this restriction.
function haveES6DuplicatePropertySemantics(){ "use strict"; try { ({ prop: 1, prop: 2 }); // No error thrown, duplicate property names allowed in strict mode return true; } catch (e) { // Error thrown, duplicates prohibited in strict mode return false; } }
A property of an object can also refer to a function or a getter or setter method.
var o = { property: function ([parameters]) {}, get property() {}, set property(value) {}, };
In ECMAScript 6, a shorthand notation is available, so that the keyword "function" is no longer necessary.
// Shorthand method names (ES6) var o = { property([parameters]) {}, get property() {}, set property(value) {}, * generator() {} };
In ECMAScript 6 There is a way to concisely define properties whose values are generator functions:
var o = { * generator() { ........... } };
In ECMAScript 5 you would write it like this (but note that ES5 has no generators):
var o = { generatorMethod: function *() { ........... } };
For more information and examples about methods, see method definitions.
Starting with ECMAScript 6, the object initializer syntax also supports computed property names. That allows you to put an expression in brackets []
, that will be computed as the property name. This is symmetrically to the bracket notation of the property accessor syntax, which you might have used to read and set properties already. Now you can use the same syntax in object literals, too:
// Computed property names (ES6) var i = 0; var a = { ["foo" + ++i]: i, ["foo" + ++i]: i, ["foo" + ++i]: i }; console.log(a.foo1); // 1 console.log(a.foo2); // 2 console.log(a.foo3); // 3 var param = 'size'; var config = { [param]: 12, ["mobile" + param.charAt(0).toUpperCase() + param.slice(1)]: 4 }; console.log(config); // { size: 12, mobileSize: 4 }
A property definition of the form __proto__: value
or "__proto__": value
does not create a property with the name __proto__
. Instead, if the provided value is an object or null
, it changes the [[Prototype]]
of the created object to that value. (If the value is not an object or null, the object is not changed.)
var obj1 = {}; assert(Object.getPrototypeOf(obj1) === Object.prototype); var obj2 = { __proto__: null }; assert(Object.getPrototypeOf(obj2) === null); var protoObj = {}; var obj3 = { "__proto__": protoObj }; assert(Object.getPrototypeOf(obj3) === protoObj); var obj4 = { __proto__: "not an object or null" }; assert(Object.getPrototypeOf(obj4) === Object.prototype); assert(!obj4.hasOwnProperty("__proto__"));
Only a single prototype mutation is permitted in an object literal: multiple prototype mutations are a syntax error.
Property definitions that do not use "colon" notation are not prototype mutations: they are property definitions that behave identically to similar definitions using any other name.
var __proto__ = "variable"; var obj1 = { __proto__ }; assert(Object.getPrototypeOf(obj1) === Object.prototype); assert(obj1.hasOwnProperty("__proto__")); assert(obj1.__proto__ === "variable"); var obj2 = { __proto__() { return "hello"; } }; assert(obj2.__proto__() === "hello"); var obj3 = { ["__prot" + "o__"]: 17 }; assert(obj3.__proto__ === 17);
The object literal notation is not the same as the JavaScript Object Notation (JSON). Although they look similar, there are differences between them:
"property": value
syntax. The property name must be double-quoted, and the definition cannot be a shorthand.true
, false
, null
, or another (JSON) object.Created by Mozilla Contributors, license: CC-BY-SA 2.5


| | |
- torch.optim.lr_scheduler._LRScheduler(builtins.object)
-
- EpochSetLR
class EpochSetLR(torch.optim.lr_scheduler._LRScheduler) |
| |
Sets the initial learning rate of each parameter group to decay by an
epoch-specific lambda. When last_epoch=-1, sets initial lr as lr.
Args:
optimizer (torch.nn.Optimizer): Wrapped optimizer.
epoch_lrs (iterable): An iterable of 2-tuples, where the first item
is an epoch number and the second item is a decay value.
last_epoch (int): The index of the last epoch. Default: -1.
Example:
>>> # The learning rate will decay by a factor of 0.5 at epoch 100,
>>> # and by 0.2 at epoch 200
>>> scheduler = EpochSetLR(optim, [[100, 0.5], [200, 0.2]])
>>> for epoch in range(300):
>>> scheduler.step()
>>> train(...)
>>> validate(...) |
| |
- Method resolution order:
- EpochSetLR
- torch.optim.lr_scheduler._LRScheduler
- builtins.object
Methods defined here:
- __init__(self, optimizer, epoch_lrs, last_epoch=-1)
- Initialize self. See help(type(self)) for accurate signature.
- get_lr(self)
Methods inherited from torch.optim.lr_scheduler._LRScheduler:
- load_state_dict(self, state_dict)
- Loads the schedulers state.
Arguments:
state_dict (dict): scheduler state. Should be an object returned
from a call to :meth:`state_dict`.
- state_dict(self)
- Returns the state of the scheduler as a :class:`dict`.
It contains an entry for every variable in self.__dict__ which
is not the optimizer.
- step(self, epoch=None)
Data descriptors inherited from torch.optim.lr_scheduler._LRScheduler:
- __dict__
- dictionary for instance variables (if defined)
- __weakref__
- list of weak references to the object (if defined)
| |


Add New Batch
Batch name is required.
Start date is required.
Batch Name:{{batchName}}
Start Date:{{startDate | date:"MM/dd/yyyy"}}
End Date:{{endDate | date:"MM/dd/yyyy"}}


Welcome to Coding Languages
Fill out the quiz below to see what Languages fit you the best.
What is your Favorite Gem?
Diamond
Sapphire
Ruby
What was your letter grade average in High School?

Red
Rust
Blue
Submit
Your code language is


You need to log in with Discord to use the dashboard.
An error occurred. Make sure to use the button below and grant permissions.
Please check the bot console and paste the ownership token here to initialize the bot.
An error occurred. Make sure the
ownership token is correct.
If you waited too long, click here to try
logging into Discord again.
Logging in...