The Common Simulation Framework (CSF) -
User Guide
Author: Jorge Calderon
Release 0.1.0
Feb 21, 2015
Introduction
The Common Simulation Framework has several goals:
- Create a common interface to support Agent-based Modeling and Simulation
tools such as Repast Simphony
to communicate with agents that exist outside of the simulation runtime.
These distributed agents could be software agents that are part of a
multi-agent system such as JADE. In
this release we only support integration of JADE agents into
Repast-Simphony-administered simulations.
In the future it is expected that tools to model agents and other
ABM-simulation software systems will be supported. For example, JADE or JaCaMo agents, among other types
of agents, could be used in Repast
Simphony, Repast HPC, MASON, or NetLogo simulations.
- Support the creation of competitive simulations/programming games for
teaching and research. For example, participants can create their own JADE
agents that participate in a CSF-administered Prisoner's Dilemma simulation
built with Repast Simphony. The framework handles the pairing of
participants and scorekeeping. In many ways, the Common Simulation
Framework acts as a game server in a video game, protecting the integrity
of the simulation by programmatically limiting access to the global
environment by individual agents.
Requirements
- JDK
1.7+
- Windows, MacOSX, or *nix. There are some scripts/batch files for
starting the simulation, that have been created only for Windows so far.
Each contains a small number of simple commands, which could be easily
copied and pasted into a Linux/MacOS shell.
Installation
It's essential that all of the steps in the Installation Instructions be followed to
ensure proper installation of the CSF. The installation instructions are at the
root directory of the overall CSF project.
Basic Concepts - Agent-based Modeling and Simulation
It is recommended that the user starts with learning the basic concepts of
Agent-based modeling and simulation. A good introductory guide
is here. Creating simulations for the Common Simulation Framework will
require knowledge of Repast Simphony. The Repast Java Getting Started
Guide on this page is a recommended starting place for Repast Simphony. The
reader should also familiarize him/herself with JADE, a multi-agent system for Java. Finally,
the user may want to read the abstract and introduction of the thesis upon
which this work is based. The location is in the Thesis subdirectory of this
git repository:
git@code.seas.harvard.edu:jcalderon-thesis/jcalderon-thesis-design.git (To be
moved to GitHub)
Beyond the basic general agent-based modeling background and specific
background for RepastS and JADE, we present a few concepts here that are
important for understanding how the CSF works.
Basic Concepts - The Common Simulation Framework
There is much overlap in the areas of Agent-based modeling and simulation and
Multi-agent Systems. In an effort to prevent misunderstandings of terms, we
define a common terminology here used throughout the common simulation
framework.
How does the Common Simulation Framework
define and use the term "agent"?
In ABM, agents are autonomous actors in a model. In multi-agent systems,
the term "agents" refers to autonomous software agents. From a multi-agent systems
standpoint, the agents in Repast Simphony are not truly autonomous software agents as they are not autonomous
at the software implementation level, even though they represent autonomous
entities in an ABM model. JADE agents, however, are truly autonomous software
agents. They send out messages at will, receive messages, can even decide not
respond to messages received, and execute in their own threads of control. They
are subservient only to the administrative agents that are controlled by the
MAS administrator. Sometimes Repast has been incorrectly referred to as
multi-agent system and it is important that we be precise here in our
terminology as we are attempting to combine both types of systems and wish to
avoid confusion.
Terms in the Common Simulation
Framework
In the Common Simulation Framework, we try to always specify what type of agent
we are talking about. We use the term "simulation agent" to mean
an agent that runs in the simulation runtime, such as Repast agents. Outside
of the simulation runtime, we have one to manydistributed systems. Distributed
systems can be thought of as synonymous with Multi-agent systems (MAS). The
distinction in terms here is due to the fact that we are in the future striving
to support distributed systems that are not necessarily a MAS, in addition to
MASs like JADE. Each distributed system/MAS may contain one to many distributed
autonomous software agents or distributed
autonomous agents for short.
In JADE, these would be the individual JADE agents. We call them
"distributed" even if they are running on the same host as the Repast runtime.
They are distributed from the perspective of the simulation runtime (they are
running as separate non-Repast processes). The reason we use the term
"distributed autonomous (software) agent" instead of "JADE agent" is that the
CSF will be supporting other types of MASs/distributed systems in the future
besides JADE, and so we prefer to use a standard term from the beginning.
Typically, a distributed autonomous software agent or JADE agent would
correspond to one (simulation) agent on the Repast side. For example, in a
Prisoner's Dilemma, a participants creates a JADE agent to represent a Human
prisoner. Repast doesn't understand JADE agent terminology and so there is a
representation of the JADE agent, implemented as a Human Repast (simulation)
agent object instance. This Repast agent object instance must receive its
instructions from its distributed JADE agent counterpart. So in this case
there is a one-to-one relationship between the Repast agent and the JADE
agent.
However, we are building the Common Simulation Framework to be more robust than
this. Instead of a competitive simulation/programming game such as Prisoner's
Dilemma, let's say that we wish to run a very large distributed ABM simulation
that's not a programming game and involves 100,000 simulation agents. Creating
100,000 JADE agents would be too resource-intensive as each runs in a thread.
Instead, we may wish each JADE agent to run or contain many agents
corresponding to simulations agents in the Repast/ABM. Therefore, we use the
term "agent model" or "distributed agent model" to precisely identify the part
of the distributed autonomous agent/JADE agent that corresponds to a single
simulation agent in the ABM.
From this perspective, a distributed autonomous software agent is simply
container for one to many agent models (usually it is just one agent
model). The distributed autononmous agent itself is not of importance to the
ABM/Common Simulation Framework, other than being necessary to identify the
messages so that they may be routed to the appropriate agent model.
Relationship between the Distributed Agent Model
and the Simulation Agent
We can think of these two entities as jointly composing the agent in an ABM. In a Common Simulation
Framework simulation, the simulation agent is dependent on its corresponding
distributed agent model for the decision making part of its behavior. The
distributed autonomous agent model is dependent on its corresponding simulation
agent to retrieve the local environment information from the simulation
runtime, and to interact with other entities in the simulation runtime.
Therefore, the simulation agent and the distributed autonomous agent model on
their own form an incomplete ABM agent in CSF simulations. On the other hand,
in a non-CSF simulation (JADE is not used), the simulation agent contains all
information in the model and is therefore a complete ABM agent.
For a more thorough discussion of these concepts and the theoretical basis of
the Common Simulation Framework, please see the master's thesis proposal here.
(to be added as a link from GitHub)
Redis - The Common Interface and XML - The Platform Independent Data Format
for Message Exchange
One of the key benefits of the Common Simulation Framework over other
previously created agent-based systems integration efforts is that a common
platform and language independent interface has been created. Instead of
having the various agent-based systems communicate directly with each other,
instead they must all communicate to the common interface. This sets the stage
for greater interoperability in the future. For example, it would it theory be
possible to run multiple MASs at the same time communicating with an ABM
toolkit. In addition, it would be possible to swap out one ABM toolkit for
another.
Currently, only one interface option has been implemented. It is the Redis
in-memory database, which allows storage of key-value pairs and lists. XML is
used to encode and transmit data between the distributed systems and the
simulation runtime. We therefore avoid use of direct Java references. This
has a few benefits. First, simulation authors are able to protect the
integrity of the simulation runtime in a competitive simulation or programming
game. The view of the global environment is
programmatically hidden from the distributed agents. ABM tools are not typically written with
this requirement in mind. Simulation authors must programmatically limit the
view of the global environment within each agent. But what happens in a game
theory competition where the agent authors have an incentive to use as much
information as possible? In the CSF, by creating a barrier between the
distributed agents and the simulation runtime, simulation authors are able to
easily create a level playing field in a competitive simulation such as a game
theory competitions for all (distributed) agent authors.
Limitations and Recommendations in the Current Release
- A single distributed autonomous agent/JADE agent may only contain a
single agent model, which corresponds to a single Repast agent.
- There can only be a single distributed system/MAS connected to the
framework at any given time for any given simulation run.
- All JADE agents must reside on a single JADE platform. This doesn't mean
that all agents must be on the same host. The framework currently uses
local JADE names (AID or agent ID) for agent addressing and that is the
reason for the single JADE Platform limitation.
- The JADE Controller Agent, which comes with the CSF, must be running on
the same host as the Repast Simphony runtime. This is because the two
sides (RepastS and JADE) share information over a Redis in-memory
database. Future releases may include other interfaces such as web
services, which would allow easing of this restriction.
- If the JADE agents are to be run in either separate processes or separate
hosts from the JADE Controller Agent, The JADE Controller Agent must have
permission to accept TCP connections from wherever the distributed JADE
agents are running, typically on port 1099 although that value can be
changed. The JADE Controller Agent must also be able to establish TCP
connections to each of the distributed JADE agents on separate TCP
ports. The security restrictions will vary widely but in one campus
settings, it was found that the JADE agents could communicate with each
other when the students ran their agents on their laptops while on the
secure campus wireless network, instead of while on the insecure or visitor
campus network. The agents were also able to communicate with each other
when being run on different computers in the same computer lab. Finally,
when running the agents on shared student Linux servers, the agents could
communicate with each other only if the students first SSHed to the same
Linux host. Of course this is not guaranteed to be the case for all
environments, but the scenarios above may provide the reader with some
options.
- Note on running the JADE agents on shared Linux hosts, if each
student were to run his/her agent under his/her own account, a new
JVM/JADE container would be created and the server may quickly run out
of memory. It may be best for one person such as the professor or TF
to run all of the agents under a single container, when using the
option of running the agents on a shared server. The JADE
documentation contains some information on networking issues and
solutions.
- The Common Simulation Framework currently only works while running the
Repast simulation programmatically, using a version of TestMain as
described in the Repast
FAQ. We call this application the Repast Simulation Runner. Because
the simulation is run programmatically, a GUI will not be displayed. The
simulation author should set up a data sink file (ModelOutput*.txt) to
retrieve the results of the simulation runs. The sample CSF Repast
Simphony simulations already have the data sink files set up. The
ModelOutput files will be written to the Repast Simulation Runner
directory, unlike when the simulations are run with the GUI, in which case
the ModelOutput files are written to the Repast Simphony simulation project
directory. The same Repast simulation, if it not using the tournament
feature of the framework, can be run as a regular Repast GUI simulation,
assuming the Repast simulation code is set up to skip the common simulation
framework functionality.
- All JADE agents must correspond to a single Repast class (different
object instance of a single Repast class). In the future we may support
JADE agents corresponding to different Repast classes.
- Multithreading of the Common Simulation Framework is not supported.
However, support for concurrent executions of the Common Simulation
Framework as separate processes using the same Redis cache will be
supported in the future.
- The number of JADE agents that need matching representations in Repast
is fixed. No such agents can be added after the CSF simulation has
initialized and simulation execution started. This does not apply to
Repast agents that do not have matching JADE agents or JADE agents with no
representations in Repast.
- The Common Simulation Framework Repast Simulation Runner uses a single
thread to execute the simulations. Messages are pulled from the Redis
cache using polling. Future releases may add an administrative thread per
Redis key/channel so that true event-driven messaging can take place on the
simulation side.
- No assurances are made about the use of the Common Simulation Framework
with JADE LEAP.
- Limited error checking is provided by the framework. It is suggested
that the Repast Simulation Runner and JADE Controller Agents be run with
assertions on. Assertions have been added in a few places in the code
(RepastS Simulation Runner, JADE Controller Agent, RepastS agents-reference
implementations, JADE agents-reference implementations) as placeholders for
better validation and error handling. These processes should be run with
the "-ea" JVM argument set to enable assertion checking, especially during
the testing phase. All of the Eclipse launchers for the CSF applications
have this option set by default.
- The JADE Controller agent should be run either in the same JADE Container
as the other JADE agents, or it should be run first. (Only the first
scenario has been tested)
- The JADE Controller agent should run on in the main JADE container. (Only
the first scenario has been tested)
- In programming game tournaments, if all JADE agents will be run in the
same container, then each agent must use a different Java class name,
otherwise there will be collision with the other players' JADE agents.
- Limitations to be removed shortly post March 2015:
- The number of corresponding JADE and Repast agents is fixed at 6 for
JZombies and 8 for the Prisoner's Dilemma Tournament.
- Only the JZombies and Prisoner's Dilemma simulations are
supported.
Important Information for Simulation Authors (Developers)
The Common Simulation Framework uses a default namespace (namespace at the root
element with no namespace qualifier/prefix) in the message exchange document.
The root element is CsfMessageExchange. The value of the default namespace is
currently:
http://www.simulationsystems.org/csf/schemas/CsfMessageExchange/0.1.0 as
specified in the xmlns attribute in the root element. Most elements, including
the root element, do not have a namespace qualifier or prefix (such as
"csf:"). CSF uses XPath to query the XML messages, however, XPath has no
support for default namespaces. Therefore, CSF programmatically adds a "x:"
qualifier before querying and
all queries of the XML must contain the "x:" namespace qualifier. This becomes
important when creating methods to query or populate simulation-specific
elements. If you follow the sample simulations examples, there should not be a
problem.
While most elements do not have a namespace qualifier, at times, when CSF
populates sections of the XML,
it does add an "x:" qualifier and repeats the default namespace. While this is
unnecessary in XML as it is semantically equivalent to leaving off the
qualifier and repeated namespace attribute, because all elements already belong
to the default namespace by default. Again, if you follow the examples in the
sample simulations, you should be fine. If you choose to use your own parsing
library, make sure your library is set to be namespace-aware. CSF uses JDOM 2
for XML creation and parsing.
Next Steps
- Execute the two reference implementations. Study the code in the RepastS
simulation and JADE agents to understand how to combine the two using the
CSF.
- Refer to the Javadocs in the Documentation directory
under the overall CSF project repository.


Sweet Free Stuff
///////////////////////////////////////////
Free Highway 50 Survival Kit
Posted: 04 Jan 2015 11:27 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Highway 50 Survival Kit
The post Free Highway 50 Survival Kit appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Meal at Steak and Shake on Your Birthday
Posted: 04 Jan 2015 05:37 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Meal at Steak and Shake on Your Birthday
The post Free Meal at Steak and Shake on Your Birthday appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Pantene Pro-V Smooth & Sleek Shampoo and Conditioner Samples
Posted: 04 Jan 2015 05:00 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Pantene Pro-V Smooth Sleek Shampoo and Conditioner Sample
The post Free Pantene Pro-V Smooth Sleek Shampoo and Conditioner Samples
appeared first on SweetFreeStuff.com.
Commentslove this by lily gillelandI would love to try this shampoo and
conditioner. by Tamara CollumI’d love a sample! !???? by Savanna RottaI
wold love a sample by Debbie Schultzi would love a sample by Debbie
SchultzPlus 16 more…
///////////////////////////////////////////
Free Pretzel at Auntie Annes
Posted: 04 Jan 2015 03:47 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Download the Auntie Annes iOS or Android app and register to receive a
coupon for a free pretzel! Will arrive within 24 hours. Free Pretzel at
Auntie Anne’s
The post Free Pretzel at Auntie Anne’s appeared first on SweetFreeStuff.com.
CommentsI like pretzels they are so good by Taylor
///////////////////////////////////////////
Free Berger Hunting DVD
Posted: 04 Jan 2015 01:34 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Berger Hunting DVD
The post Free Berger Hunting DVD appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Nivea Lotion Samples
Posted: 04 Jan 2015 01:18 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Samples of Nivea Cocoa Butter and Nourishing In-Shower Body Lotion.
Free Nivea Lotion Samples
The post Free Nivea Lotion Samples appeared first on SweetFreeStuff.com.
Commentseverything worked but at the end it stated only 1 sample per …
by CARL BARNETTEVideo is not working!!! by DanielleSite doesn’t work for me
either. by Gwyn BlackwoodSite didn’t work for me either! by JoyLove your
products by Michelle floresPlus 20 more…
///////////////////////////////////////////
Free Let Your Library Card Be Your Passport Poster (For Libraries)
Posted: 04 Jan 2015 12:29 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Let Your Library Card Be Your Passport Poster (Requires Library Name)
The post Free Let Your Library Card Be Your Passport Poster (For Libraries)
appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Sample of Depend with Fit-Flex Protection
Posted: 04 Jan 2015 12:00 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Sign up to get a free sample of Depend underwear for men or women. Will
arrive in a discreet package.
The post Free Sample of Depend with Fit-Flex Protection appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Yogi Tea Samples
Posted: 03 Jan 2015 09:00 PM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Send 2 free Yogi Teas to a friend! Free Yogi Tea Samples
The post Free Yogi Tea Samples appeared first on SweetFreeStuff.com.
CommentsHaving started a new diet with my stepmom, I’d love to try
out … by Danielaii like Tea by Larry bongiovanniWould love to try your
tea,heard and read it relaxes you. I … by Danielle FutchThank you my
husband had a stroke and has been feeling and not … by Debbie LoveHappy
Birthday 60 year old man. by Michael W. SmithPlus 3 more…
///////////////////////////////////////////
Free Diabetic Recipe Book
Posted: 03 Jan 2015 03:00 AM PST
http://feedproxy.google.com/&edburner&utm_medium=email
Free Diabetic Recipe Book
The post Free Diabetic Recipe Book appeared first on SweetFreeStuff.com.
CommentsDiabetic recipes are good for “normal” folks, too. U.S. … by
CORAL J.My dad has diabetes and I want to get him something. by Caitlyn
LafeverThanks by DellaTanks in advance for any thing you can sent to help
with th … by CONNIEMy husbsnd snd I are ready to try new foods. we seem
to be in a … by CONNIEPlus 9 more…


| 8000 |
No |
Vessel, type unknown |
9 |
9 |
| 8010 |
V |
Motor freighter |
7 |
9 |
| 8020 |
V |
Motor tanker |
8 |
9 |
| 8021 |
V |
Motor tanker, liquid cargo, type N |
8 |
0 |
| 8022 |
V |
Motor tanker, liquid cargo, type C |
8 |
0 |
| 8023 |
V |
Motor tanker, dry cargo as if liquid (e.g. cement) |
8 |
9 |
| 8030 |
V |
Container vessel |
7 |
9 |
| 8040 |
V |
Gas tanker |
8 |
0 |
| 8050 |
C |
Motor freighter, tug |
7 |
9 |
| 8060 |
C |
Motor tanker, tug |
8 |
9 |
| 8070 |
C |
Motor freighter with one or more ships alongside |
7 |
9 |
| 8080 |
C |
Motor freighter with tanker |
8 |
9 |
| 8090 |
C |
Motor freighter pushing one or more freighters |
7 |
9 |
| 8100 |
C |
Motor freighter pushing at least one tank-ship |
8 |
9 |
| 8110 |
No |
Tug, freighter |
7 |
9 |
| 8120 |
No |
Tug, tanker |
8 |
9 |
| 8130 |
C |
Tug freighter, coupled |
3 |
1 |
| 8140 |
C |
Tug, freighter/tanker, coupled |
3 |
1 |
| 8150 |
V |
Freightbarge |
9 |
9 |
| 8160 |
V |
Tankbarge |
9 |
9 |
| 8161 |
V |
Tankbarge, liquid cargo, type N |
9 |
0 |
| 8162 |
V |
Tankbarge, liquid cargo, type C |
9 |
0 |
| 8163 |
V |
Tankbarge, dry cargo as if liquid (e.g. cement) |
9 |
9 |
| 8170 |
V |
Freightbarge with containers |
8 |
9 |
| 8180 |
V |
Tankbarge, gas |
9 |
0 |
| 8210 |
C |
Pushtow, one cargo barge |
7 |
9 |
| 8220 |
C |
Pushtow, two cargo barges |
7 |
9 |
| 8230 |
C |
Pushtow, three cargo barges |
7 |
9 |
| 8240 |
C |
Pushtow, four cargo barges |
7 |
9 |
| 8250 |
C |
Pushtow, five cargo barges |
7 |
9 |
| 8260 |
C |
Pushtow, six cargo barges |
7 |
9 |
| 8270 |
C |
Pushtow, seven cargo barges |
7 |
9 |
| 8280 |
C |
Pushtow, eigth cargo barges |
7 |
9 |
| 8290 |
C |
Pushtow, nine or more barges |
7 |
9 |
| 8310 |
C |
Pushtow, one tank/gas barge |
8 |
0 |
| 8320 |
C |
Pushtow, two barges at least one tanker or gas barge |
8 |
0 |
| 8330 |
C |
Pushtow, three barges at least one tanker or gas barge |
8 |
0 |
| 8340 |
C |
Pushtow, four barges at least one tanker or gas barge |
8 |
0 |
| 8350 |
C |
Pushtow, five barges at least one tanker or gas barge |
8 |
0 |
| 8360 |
C |
Pushtow, six barges at least one tanker or gas barge |
8 |
0 |
| 8370 |
C |
Pushtow, seven barges at least one tanker or gas barge |
8 |
0 |
| 8380 |
C |
Pushtow, eight barges at least one tanker or gas barge |
8 |
0 |
| 8390 |
C |
Pushtow, nine or more barges at least one tanker or gas barge |
8 |
0 |
| 8400 |
V |
Tug, single |
5 |
2 |
| 8410 |
No |
Tug, one or more tows |
3 |
1 |
| 8420 |
C |
Tug, assisting a vessel or linked combination |
3 |
1 |
| 8430 |
V |
Pushboat, single |
9 |
9 |
| 8440 |
V |
Passenger ship, ferry, cruise ship, red cross ship |
6 |
9 |
| 8441 |
V |
Ferry |
6 |
9 |
| 8442 |
V |
Red cross ship |
5 |
8 |
| 8443 |
V |
Cruise ship |
6 |
9 |
| 8444 |
V |
Passenger ship without accomodation |
6 |
9 |
| 8450 |
V |
Service vessel, police patrol, port service |
9 |
9 |
| 8460 |
V |
Vessel, work maintainance craft,
floating derrick, cable-ship, buoy-ship, dredge |
3 |
3 |
| 8470 |
C |
Object, towed, not otherwise specified |
9 |
9 |
| 8480 |
V |
Fishing boat |
3 |
0 |
| 8490 |
V |
Bunkership |
9 |
9 |
| 8500 |
V |
Barge, tanker, chemical |
8 |
0 |
| 8510 |
C |
Object, not otherwise specified |
9 |
9 |
| 1500 |
V |
General cargo Vessel maritime |
7 |
9 |
| 1510 |
V |
Unit carrier maritime |
7 |
9 |
| 1520 |
V |
bulk carrier maritime |
7 |
9 |
| 1530 |
V |
tanker |
8 |
0 |
| 1540 |
V |
liquified gas tanker |
8 |
0 |
| 1850 |
V |
pleasure craft, longer than 20 metres |
3 |
7 |
| 1900 |
V |
fast ship |
4 |
9 |
| 1910 |
V |
hydrofoil |
4 |
9 |
| 1920 |
V |
catamaran fast |
4 |
9 |


{% extends 'layouts/layout.html' %} {% block pageTitle %} Do you have the following 3 registration details for the online services you use? {% endblock %} {% block content %}
If you do not have these 3 details or your details do not work, you can either:


Policies.Aggregator module¶
My Aggregated bandit algorithm, similar to Exp4 but not exactly equivalent.
The algorithm is a master A, managing several “slave” algorithms, \(A_1, ..., A_N\).
At every step, the prediction of every slave is gathered, and a vote is done to decide A’s decision.
The vote is simply a majority vote, weighted by a trust probability. If \(A_i\) decides arm \(I_i\), then the probability of selecting \(k\) is the sum of trust probabilities, \(P_i\), of every \(A_i\) for which \(I_i = k\).
The trust probabilities are first uniform, \(P_i = 1/N\), and then at every step, after receiving the feedback for one arm \(k\) (the reward), the trust in each slave \(A_i\) is updated: \(P_i\) increases if \(A_i\) advised \(k\) (\(I_i = k\)), or decreases if \(A_i\) advised another arm.
The detail about how to increase or decrease the probabilities are specified below.
Reference: [[Aggregation of Multi-Armed Bandits Learning Algorithms for Opportunistic Spectrum Access, Lilian Besson and Emilie Kaufmann and Christophe Moy, 2017]](https://hal.inria.fr/hal-01705292)
Note
Why call it Aggregator ? Because this algorithm is an efficient aggregation algorithm, and like The Terminator, he beats his opponents with an iron fist!
Note
I wanted to call it Aggragorn. Because this algorithm is like Aragorn the ranger, it starts like a simple bandit, but soon it will become king!!
-
Policies.Aggregator.
UNBIASED
= True¶ A flag to know if the rewards are used as biased estimator, i.e., just \(r_t\), or unbiased estimators, \(r_t / p_t\), if \(p_t\) is the probability of selecting that arm at time \(t\). It seemed to work better with unbiased estimators (of course).
-
Policies.Aggregator.
UPDATE_LIKE_EXP4
= False¶ Flag to know if we should update the trusts proba like in Exp4 or like in my initial Aggregator proposal
First choice: like Exp4, trusts are fully recomputed,
trusts^(t+1) = exp(rate_t * estimated mean rewards upto time t)
,Second choice: my proposal, trusts are just updated multiplicatively,
trusts^(t+1) <-- trusts^t * exp(rate_t * estimate instant reward at time t)
.
Both choices seem fine, and anyway the trusts are renormalized to be a probability distribution, so it doesn’t matter much.
-
Policies.Aggregator.
USE_LOSSES
= False¶ Non parametric flag to know if the Exp4-like update uses losses or rewards. Losses are
1 - reward
, in which case therate_t
is negative.
-
Policies.Aggregator.
UPDATE_ALL_CHILDREN
= False¶ Should all trusts be updated, or only the trusts of slaves Ai who advised the decision
Aggregator[A1..AN]
followed.
-
class
Policies.Aggregator.
Aggregator
(nbArms, children=None, learningRate=None, decreaseRate=None, horizon=None, update_all_children=False, update_like_exp4=False, unbiased=True, prior='uniform', lower=0.0, amplitude=1.0, extra_str='')[source]¶ Bases:
Policies.BasePolicy.BasePolicy
My Aggregated bandit algorithm, similar to Exp4 but not exactly equivalent.
-
__init__
(nbArms, children=None, learningRate=None, decreaseRate=None, horizon=None, update_all_children=False, update_like_exp4=False, unbiased=True, prior='uniform', lower=0.0, amplitude=1.0, extra_str='')[source]¶ New policy.
-
nbArms
= None¶ Number of arms
-
lower
= None¶ Lower values for rewards
-
amplitude
= None¶ Larger values for rewards
-
unbiased
= None¶ Flag, see above.
-
horizon
= None¶ Horizon T, if given and not None, can be used to compute a “good” constant learning rate, \(\sqrt{\frac{2 \log(N)}{T K}}\) for N slaves, K arms (heuristic).
-
extra_str
= None¶ A string to add at the end of the
str(self)
, to specify which algorithms are aggregated for instance.
-
update_all_children
= None¶ Flag, see above.
-
nbChildren
= None¶ Number N of slave algorithms.
-
t
= None¶ Internal time
-
update_like_exp4
= None¶ Flag, see above.
-
learningRate
= None¶ Value of the learning rate (can be decreasing in time)
-
decreaseRate
= None¶ Value of the constant used in the decreasing of the learning rate
-
children
= None¶ List of slave algorithms.
-
trusts
= None¶ Initial trusts in the slaves. Default to uniform, but a prior can also be given.
-
choices
= None¶ Keep track of the last choices of each slave, to know whom to update if update_all_children is false.
-
children_cumulated_losses
= None¶ Keep track of the cumulated loss (empirical mean)
-
index
= None¶ Numerical index for each arms
-
property
rate
¶ Learning rate, can be constant if self.decreaseRate is None, or decreasing.
if horizon is known, use the formula which uses it,
if horizon is not known, use the formula which uses current time \(t\),
else, if decreaseRate is a number, use an exponentionally decreasing learning rate,
rate = learningRate * exp(- t / decreaseRate)
. Bad.
-
getReward
(arm, reward)[source]¶ Give reward for each child, and then update the trust probabilities.
-
_makeChildrenChoose
()[source]¶ Convenience method to make every children chose their best arm, and store their decision in
self.choices
.
-
choice
()[source]¶ Make each child vote, then sample the decision by importance sampling on their votes with the trust probabilities.
-
choiceWithRank
(rank=1)[source]¶ Make each child vote, with rank, then sample the decision by importance sampling on their votes with the trust probabilities.
-
choiceFromSubSet
(availableArms='all')[source]¶ Make each child vote, on subsets of arms, then sample the decision by importance sampling on their votes with the trust probabilities.
-
__module__
= 'Policies.Aggregator'¶
-
choiceMultiple
(nb=1)[source]¶ Make each child vote, multiple times, then sample the decision by importance sampling on their votes with the trust probabilities.
-
choiceIMP
(nb=1, startWithChoiceMultiple=True)[source]¶ Make each child vote, multiple times (with IMP scheme), then sample the decision by importance sampling on their votes with the trust probabilities.
-
estimatedOrder
()[source]¶ Make each child vote for their estimate order of the arms, then randomly select an ordering by importance sampling with the trust probabilities. Return the estimate order of the arms, as a permutation on
[0..K-1]
that would order the arms by increasing means.
-
estimatedBestArms
(M=1)[source]¶ Return a (non-necessarily sorted) list of the indexes of the M-best arms. Identify the set M-best.
-
computeIndex
(arm)[source]¶ Compute the current index of arm ‘arm’, by computing all the indexes of the children policies, and computing a convex combination using the trusts probabilities.
-


Home
Sales
Location name:
What is the Maximum number of customers predicted per hour?:
What is the Minimum number of customers predicted per hour?:
What is the average number of cookies bought per customer?:
Submit


Simon Game
Repeat 20 steps to win.
sentiment_very_satisfied
You won!!!
sentiment_very_satisfied
--
Start
Strict
thumb_down
Written and coded by
hutstep
.


Colin Kaepernick spends 32nd birthday feeding, helping the homeless, reports say
by Michelle Ewing, Cox Media Group National Content DeskOAKLAND, Calif. -
Activist and former 49ers quarterback Colin Kaepernick reportedly kicked off his 32nd birthday by giving back to those in need.
According to KPIX-TV and the East Bay Times, the ex-NFL star and his nonprofit foundation, Know Your Rights Camp, partnered with the San Francisco-based Al Pastor Papi food truck Sunday to provide free meals to the homeless in Oakland.
"What an amazing way to give back and spend our Sunday morning," the restaurant wrote in an Instagram post Sunday afternoon.
Kaepernick and other volunteers also gave out backpacks containing food, air masks, socks and hygiene items, the outlets reported.
In 2016, Kaepernick protested racial inequality by "taking a knee" before games as the national anthem played. He opted out of his contract with the 49ers the following year.


Scope
In JavaScript scope determines the visibility of a variable. There are two types of scope: local and global scope.
Local scope
Each function in JavaScript creates its own scope or environment. So if you declare a variable inside a function, this variable will only be visible or accessible inside the environment of this function. This means that variables with the same name can be used in different functions because that's where they stay and that's what they are bound to. Let's look at an example:
function makeSoup = new function(){
let ingredients = ["onions", "bacon", "lentils"];
// ingredients is only visible within this function
...
}
// if you tried to use ingredients here outside the function,
// the program will return undefined
Global scope
When you are declaring a variable outside of any function, this variable can literally be accessed from anywhere in your code.
let ingredients = ["onions", "bacon", "lentils"];
//ingredients can be used here outside of any function
function makeSoup = new function(){
for (var i = 0; i < ingredients.length; i++){
// ingredients can also be used within this function
addToSoup(ingredients[i]);
}
...
}
Block statements
Block statements are things like if or switch statements or loops, such as for or while loops. They don't create their own scope, so variables that are declared in the block statement belong to the same scope as the block statement itself.
ES6 introduced some new keywords for variables: let and const. They are used just like the keyword var. But unlike var, these two keywords can create a local scope inside a block statement.
if ( 10 < 11){
var smallest = 10;
let biggest = 11;
}
console.log(smallest) // this will print 10
console.log(biggest) // this will not print because biggest is undefined
What's the point of scope in JavaScript?
So, what's the point in limiting the visibility or accessibility of variables and not having everything available everywhere in the code you write? The answer is that scope provides some level of security to your code. By using scope users only have access to the stuff they really need to at a time. It will help improve efficiency and hopefully reduces bugs.


Hi,
I'm new to OpenEnergyMonitor but I quite like the project. Whilst exploring the site I had the idea of a direct RaspberryPi Emon shield without taking the diversion through a RFM tranceiver pair.
Where it has advantages using a wireless transmitter if multiple measurement boards are required IMHO it just adds complexity if only one central fuseboard needs to be monitored, let alone the additional power consumption and RF air pollution.
Unfortunately I didn't find a lot about this, maybe it has already been discussed in the forums.
When I talk about a RaspberryPi shield I'm thinking of a AVR powered (Arduino compatible) shield with at least 3 CT Clamp inputs and maybe a onewire temp and AC-AC measurement input.
The RaspberryPi could then host the emoncms, directly writing to a NFS share on a NAS many of us call their own anyway these days, either via Ethernet or an USB WLAN dongle (works very nicely on my rPI).
If someone is interested or has seen something similar or tried building this or any comments or possible obstacles and reasons not to do it please let me know.
Lightning
Re: Raspberry Pi Emon Shield
Hi Lightning and welcome to OEM,
I think a EmonTX shield for Raspberry Pi would be a great idea. It's something I've been thinking about for a while and would like to pursue it further.
My initial thoughts were basically to copy the EmonTX designs minus the RFM and power regulation circuits onto a shield-like board that plugs directly onto the GPIO connector on the Raspberry Pi using a stackable header so I can still use the GPIO for other connections (or possibly the rfm2pi when I add remote nodes).
I was also considering using SPI rather than serial uart for data as this method can be used with multiple AVRs stacked if more inputs required and can also be used to upload sketches to the AVRs directly rather than using the external usb programmer.
So I am still very much at the idea's stage and as yet I haven't seen any posts specifically on this type of project either but I believe there are a lot more Raspberry Pi based systems out there now and I'm sure others have considered similar ideas :-)
Paul
Re: Raspberry Pi Emon Shield
If I can chip in with some encouragement - there have been several comments (I haven't been counting but I think it's in the half-dozen area) about using a direct connection, rather than radio, to the RPi in these forums so there is definitely some interest in such a design.
Re: Raspberry Pi Emon Shield
There is a post of someone who has made a direct connection to the Rpi.
I can't post links it seems but search
Direct connection, original post was by Nubble and Chacal has the connection in the for sale thread.
Josh
Re: Raspberry Pi Emon Shield
I have been thinking on that a lot.
I believe it will be a wonderful alternative for small houses and some people can`t pay a lot for sensors. It was the main idea of OEM: Open this world to mainstream.
We are leading a European Efficiency Project:
http://www.renov.proyectoedea.com/
And we are developing Arduino devices in our neighborhood to monitorize houses.
Nowadays we are spending 300€ per home because we don't have internet in the most.
We want to develop a local system in order to advise dwellers about how to save energy and money at home
Also we want to install the cheapest system as possible in order to change the mind about energy wasting.
I have been spoken with OEM staff and they don't think this idea could be so good. Here you are tweets between us:
https://twitter.com/bernamorillo
We will develop some sensors nodes as CO2 plugged sensor and Solar Radiation wireless sensor. We are working on them nowadays.
We believe a cheaper alternative to OEM could be "Raspberry EOM shield" because you can offer less than 100$ systems. A really cheap OEM system costs 150€. Here you are the parts:
https://drive.google.com/file/d/0B8y3BAmNpRTWcFg2akUxVi01Mlk/edit?usp=sh...
Finally I want to congratulate Glyn and Trystan because their work is amazing. I have been dreaming with this marvellous idea every day in my career as an Architect and finally there are a solid alternative to commercial systems. I didn't know anything about programming or hardware and I am learning day by day because of their work.
Thanks and keep ahead!!!
Re: Raspberry Pi Emon Shield
So a bargain basement basic "shield" would be very easy to implement as the pair of RF boards would be replaced by using 1 reset and 2 serial pins, which would require only minimal changes to any existing EmonTX sketch and no change to the EmonCMS or Raspberry Pi software.But as there is no longer any rf and the serial port is now used there would be little scope for flexibility or expansion. This is the method used here ( http://openenergymonitor.org/emon/node/2327 ) but as this would be all 3volt the level converter wouldn't be needed. This is the simplest cheapest method to connect a single node directly.
What I believe would be a better solution is to have the ability to "just stack" the shields and the same communication lines are piggy-backed. I could be wrong but I believe the serial port is not suitable for this, so maybe I2C should be used to allow 2 directional comms between several devices ie raspberry pi as master and each AVR as a slave,
MartinR has used I2C to interconnect 3 EmonTXs ( http://openenergymonitor.org/emon/node/1170 ), of which one is a master and uses an RFM to connect to the base, this method like the serial port method only requires changes to the sketches but not to the RPi/EmonCMS software. To use I2C direct to the Pi would involve making changes to the gateway or an additional software interface. This is where I need a little help....well alotta help actually!
In addition to this set up it is also possible to use the Pi's 3 SPI pins to each AVR along with 1 pin per AVR (as an SS/reset) to set up an in circuit programmer to upload sketches to multiple AVRs direct from the PI over ssh. This eliminates the need to use the usb programmer and therefore can be done totally remotely with out any physical contact. This part I have had up and running on breadboard but further research leads me to believe that the SPI is less suitable and harder to implement than I2C for the normal comm lines, so a combination is the way forward I believe :-)
I hope I've made sense and would love some feedback on these thoughts. I am keen to sort the software side of things as then I can try some hardware configurations eg a basic simple low cost single phase board which can then be stacked three times to serve a 3phase install without any modifications or additions and/or then still be able to plug an rfm2pi in on top of them for further remote nodes as the serial port is still available.
Can I call upon the expertise of someone to assist or advise with the I2C, at both the avr and the pi ends? assuming my conclusions are correct of course :-)
Re: Raspberry Pi Emon Shield
Hi again,
as it looks like there is nothing available to date I've created a Raspberry Pi shield.
https://www.dropbox.com/s/wnpb7wtafnezyeo/EmonRPi_V1.0.sch
https://www.dropbox.com/s/myjievvsi0lqlyx/EmonRPi_V1.0.brd
It features:
Partnumbers and suppliers can be found in the part attributes for special devices.
The basic current measurement circuitry is taken from the EmonTx V3.2 schematic.
The Software would need some adoptions to feature both, a RFM12B gateway as well as local measurements, but lets cross that bridge when I get to it, the important feature for me currently is only the current sensing part, the other components are only added for more future options.
I've not yet built a prototype but maybe the community has some helpful comments or corrections to add, otherwise I'll build a first sample board within the next few weeks.
regards
Lightning
Re: Raspberry Pi Emon Shield
Hi guys, just found this thread. Great stuff.
I think there has been a miss understanding between myself and bernamorillo in our conversation on twitter. I was under the impression bernamorillo was asking if we had some sort of shield for the Pi available at the moment, which we don't. I suggested an emonTxShield and Arduino Yun combo which would perform the same task but it not nearly as powerful as the Pi (and costs more). I think a shield board for the Pi would be a great idea.
I have already been thinking about developing a shield board for the beaglebone black since it's got a decent onboard ADC which the Pi does not. However it seems at the moment the Beagelbone's community is not as active as is for the raspberry pi. However having an AVR onboard the shield to perform the ADC conversion task would not add much cost. If we used the ATmega328 the firmware onboard could easily be updated directly from the Pi using the Arduino serial bootloader as we do on the RFM12Pi.
I've started work on such a board combining the RFM12Pi with the emonTx shield. I think a footprint for an RFM12B / RFM68 / SRF / OKK would be useful as this would allow the board to receive data from other senor nodes around the house such as the emonTH and send RF control signals to boiler / relay / plug control modules
What's people experience with wifi adapters on the Pi? I've tried a couple with varying results, obviously using an adapter which can hold a solid connection and reconnect if connection is dropped would be important for monitoring applications.
Re: Raspberry Pi Emon Shield
Glyn, you are the best, there were a miss understanding because I am so noob, but I believe in your knoledge and criteria.
I am using http://www.amazon.es/gp/product/B008B7PZU4/ref=oh_details_o00_s00_i00?ie... with great results.
We still speaking here about it because I am thinking is a good idea too.
Thanks,
Re: Raspberry Pi Emon Shield
I am running my PV monitor off the pi - see here amd its working fine - Can can send setup details no probs
Combining this with the EmonTx is a perfect solution for me, and then I can move onto building an OpenHAB based solution, which is my long term goal
Re: Raspberry Pi Emon Shield
Hello all
How are we going with the raspberry pi shield for EmonTx V3 ??, really interested in using such a device, as it
would be a perfect adjunct to my solar panel monitor. I have run out of usb ports (1 for RS485 and another for WiFi).
Not sure whether another module would overpower the little pi though
keep up the great work
cheers
Re: Raspberry Pi Emon Shield
Michael,
If you look to the right, you should see a forum posting entitled "EmonPi early prototype - ideas"
http://openenergymonitor.org/emon/node/3937
Re: Raspberry Pi Emon Shield
See also MK802 - it may actually be cheaper and easier to use an inexpensive Android-Mini-PC + your favorite Arduino with USB. ( http://openenergymonitor.org/emon/node/5570 ) You can wipe off the Android and run a another version of Linux.
Or if you really like the one board idea - pcDuino ( http://openenergymonitor.org/emon/node/5551 )
Or Arduino Tre - which is is a dual processor board - approximatelyan Arduino Mega + Raspberry ( http://arduino.cc/en/Main/ArduinoBoardTre )
Re: Raspberry Pi Emon Shield
I'm a noobie here but joined because I would like to be able to monitor solar potential and demonstrate this at fetes around the Eastbourne area in the UK. Myself and a few others have started a community energy group with the idea of generating renewable energy and using any profit to reduce energy use through advice and help.
Having the ability to accurately monitor and display energy generation would be a very useful tool. I don't know if Michaeljquinn is still active but I would be very interested in understanding your setup
Paul
Re: Raspberry Pi Emon Shield
http://openenergymonitor.org/emon/node/3937 ?


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/Is.20mathlib.20broken.3F.html ---
I do not expect mathlib to be working 24/7 but I am wondering if it currently broken for everyone or just me. I have problems in prod.lean with prod.mk.eta
on line 21 -- invalid definition, a declaration named 'prod.mk.eta' has already been declared
The reason I ask is that I have a file which reaches unreachable code
and it probably it would be better if this were the only error rather than all the sorrys which currently come with it
which may or may not be part of the problem
current version is here : https://gist.github.com/kbuzzard/50a650e6df7e712138456facb5a81f22 but I also have 4 sorrys from mathlib so I'll try to remove mathlib
Broken for me as well.
It should work again.
@Sebastian Ullrich the generalization of the do
-notation resulted in the following work around: https://github.com/leanprover/mathlib/commit/ec9dac3ada9aa2107d5f3fceb3d28eee113278b8#diff-d49a7b7cdfea7e016e137ab7be5dc597L65
I don't know what exactly is happening, it claims to expect a name
, but gets a tactic _
. Is there a way to see what overloaded bind
is used in the error message? pp.full_names
etc didn't work for me.
Urgh, pretty sure it's trying to do a recursive call
Could you post the error?
Ah yes, looks like this (now I also added pp.locals_full_name
:
type mismatch at application <bind.0._fresh.31.20685> (<c₁.0._fresh.31.20672> <r.0._fresh.31.20695> <e.0._fresh.31.20699>) term <c₁.0._fresh.31.20672> <r.0._fresh.31.20695> <e.0._fresh.31.20699> has type tactic (old_conv_result <α.0._fresh.31.20670>) but is expected to have type name
Would it make sense to force the namespace of bind
, like the begin [m]
notation does? But it gets a ambiguous with do [c] <- l, ...
The real issue is that the local for recursive calls ignores the protected
specifier, imo
Or this!
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


National Outdoor 10,000m Champions for Serbia
Men (10 runnings) 14 May 2017 Sremska Mitrovica 30:32.87 Elzan Bibic 15 May 2016 Kruševac 31:37.9 Saša Stolić 17 May 2015 Užice 31:08.08 Muamer Hasanović 01 Jul 2014 Užice 31:43.98 Darko Zivanovic 24 May 2013 Užice 30:12.21 Jasmin Ljajić 16 Jun 2012 Novi Sad 33:10.08 Kristijan Stošić 06 Aug 2011 Kragujevac 32:28.04 Mirko Petrovic 17 Jul 2010 Sremska Mitrovica 32:45.78 Goran Milicic 01 Aug 2009 Sremska Mitrovica 32:15.51 Sreten Ninkovic 08 Jun 2008 Novi Sad 30:21.09 Dusan Markesevic
Non-champion winners 2017 29:45.54 Osman Junuzović (BIH) 2015 30:50.65 Stanley Kipruto-2 2014 31:34.85 Stanley Kipruto (KEN)
Women (7 runnings) 14 May 2017 Sremska Mitrovica 36:09.50 Teodora Simovic-2 15 May 2016 Kruševac 33:56.37 Teodora Simovic 17 May 2015 Užice 33:31.72 Sonja Stolic 01 Jul 2014 Užice 34:50.29 Olivera Jevtic-2 24 May 2013 Užice 32:58.80 Olivera Jevtic 16 Jun 2012 Novi Sad 35:47.76 Ana Subotic-2 06 Aug 2011 Kragujevac 35:47.30 Ana Subotic
Most Titles
Men
(2008-date)
No man has won more than once.
Women
(2011-date)
2
Notes:
Ana Subotic
20011-12
Olivera Jevtic
2013-14
Teodora Simovic
2016-17
For 1918 to 1941, Serbia was part of Yugoslavia
For 1941 to 1945, Serbia was a puppet state under German occupation
For 1945 to 1992, Serbia was part of Yugoslavia
For 1992 to 2003, Serbia was part of the Federal Republic of Yugoslavia (with
Montenegro)
For 2003 to 2006, Serbia was part of the confederation of Serbia and Montenegro
For 2006 to date, Serbia has been an independent state
Click here for the list of champions for Yugoslavia.
Click here for the list of champions for Serbia &
Montenegro.
Contributors: Juraj Gasparovic (15), Ozren Karamata (30)


{% extends "base.html" %} {% block content %}
By d4rkc0de
About:
HackCon is a one day Capture The Flag contest conducted online where teams from across the world will participate and try to solve questions based on cryptography, reverse engineering, binary exploits, steganography, and web vulnerabilities. Each question will have points assigned to them based on the difficulty level. Grab the most points to win!
Rules:
Event Structure:
The event will consist of one online round where the team that scores the most points will be deemed the winner. In case of a tie, the team that solved the questions worth the tied number of points first will be deemed the winner. There will be 4 awards. 1st place, 2nd place, 3rd place and Best Indian School Team. Awards are only for Indian Teams


rake guide
4 days Rake Guide
- Day 1: Introduction to Rake
- Day 2: Dependencies
- Day 3: Rails and Rake
- Day 4: Use Rake to build project
The 4 days Rake Guide
Day 1: Introduction to Rake
What is rake?
Rake is a Rubygem written by Jim Weirich. He built the ruby version of make (the C build tool) and over time Rake became a popular tool to create command line Ruby applications and automation scripts. It has an easy to follow DSL and some very powerful features like task dependencies, but more on these later.
What can I use Rake for?
If you know Ruby on Rails you use Rake very often because most of the command line Rails features are Rake tasks. Namely rake db:migrate, rake test etc. If you need a custom command line script for your Rails application (running an import, periodically updating something in the database) Rake is your friend. Also anytime you want to automate something with a script, Rake is a very powerful tool to rely on.
Install rake
Rake is distributed as a Rubygem so all you need to do is enter gem install rake in your console to install it.
Rakefile
Rake reads the task from a Rakefile and in additionally you can separate your tasks into multiple files and put them into the rakelib folder with the .rake extension. Let’s create a Rakefile with a simple task:
“by
Rakefile
desc “Hello world” task :hello_world do puts “Hello world!” end
“ow we know how to make ‘Hello world’ with Rake. Let’s break down this code. First we give a description to the task than we set the name of the task to a symbol(we could you strings too) than passing a block and Rake will evaluate that block when we call this task.
Let’s call the task:
“ rake hello_world Hello world!
“f you enter rake -T
in your console you will get a list of available tasks:
“ rake -T rake hello_world # Hello world
“he Rakefile is basically a ruby file so you can write any ruby code inside.
Task types
Rake has four types of tasks:
task
is a generic taskdirectory
creates a directoryfile
creates a file with the result of the block we passmultitask
calls its dependencies in parallel
That’s it for today, tomorrow you will learn about dependencies.
Day 2: Dependencies
Today I will teach you how Rake handles the dependencies. I will use code examples but instead of repeating the whole code everytime I will just show you the important parts, then at the bottom of the email you can view the full example. Rake makes it easy to define dependent tasks. Let’s say we want to import a dataset from a remote source into our application. We want to make separate tasks for importing the categories, products and the orders so we can run those bits separately:
“by desc “Import categories” task :categories do puts “import categories” end
desc “Import products” task :products do puts “import products” end
desc “Import orders” task :orders do puts “import orders” end
“o far so good but we need to get the remote data before each of these tasks so we will define another task and set that as a dependency for these:
“by desc “Download data” task :download do puts “download data from source” end
desc “Import categories” task :categories => :download do puts “import categories” end
desc “Import products” task :products => :download do puts “import products” end
desc “Import orders” task :orders => :download do puts “import orders” end
“
As you see you can set a dependency with the hashrocket and you can pass one task or an array of tasks. If you call rake with the -P switch it will display the dependency tree:
“ rake -P rake categories download rake download rake orders download rake products download
“
In our example, when we import the products, we want to make sure we have the latest categories so let’s make the products task depend on categories:
“by desc “Download data” task :download do puts “download data from source” end
desc “Import categories” task :categories => :download do puts “Import categories” end
desc “Import products” task :products => :categories do puts “Import products” end
desc “Import orders” task :orders => :download do puts “import orders” end
“
This looks great but we would like to have a task to run a full import too so let’s make a task for that:
“by desc “Import everything” task :all => [:categories, :products, :orders] do puts “Imported everything” end
“
You might think: “But wait… this will run download 3 times and categories 2 times, won’t it?” Nope. Rake disables a task after the first invocation. If you want to run a dependent task even if it is already invoked you can reenable it. If you call the task you should see this result:
“ rake all download data from source import categories import products import orders Imported everything
“f you want to import the products only:
“ rake products download data from source import categories import products
“f you need to reenable
a task:
“by desc “Import categories” task :categories => :download do puts “Import categories” Rake::Task[categories].reenable end
“
Note that it imported the categories first because products depends on categories. We can also set a default task with rake so when you call only rake it will run the default task. Let’s set the all task to be the default:
task :default => [:all]
As I promised here is how the Rakefile should look now:
“by desc “Download data” task :download do puts “download data from source” end
desc “Import categories” task :categories => :download do puts “Import categories”
end
desc “Import products” task :products => :categories do puts “Import products” end
desc “Import orders” task :orders => :download do puts “import orders” end
desc “Import eveything” task :all => [:categories, :products, :orders] do puts “Imported everything” end
task :default => [:all]
“
That’s it for today. Tomorrow we will look at how Rails uses Rake and how can we add custom Rake tasks to a Rails application.
Day 3: Rails and rake
As I already mentioned Rails uses Rake for various tasks like running the database migrations. Today we are going to look at these tasks. If you enter rake -T you will get a list of Rake tasks but this only displays the ones with a description, so the ones intended to be internal are not on this list. If you want to see those too you can use the -A switch:
“ rake -T -A rake about # List versions of all Rai.. rake assets:clean[keep] # Remove old compiled assets rake assets:clobber # Remove compiled assets rake assets:environment # Load asset compile enviro. rake assets:precompile # Compile all the assets … rake cache_digests:dependencies # Lookup first-level depen.. rake db:_dump # rake db:charset # …
“
If you want to make a custom Rake task in your Rails application you can create a file with the .rakeextension in the lib/tasks folder. For instance if you would like to make that import inside a Rails application, you would add the code from yesterday to lib/tasks/import.rake. One important part we haven’t talked about yet is namespacing. There might be another task callled download in your Rails application which would cause some unexpected results. Important to note here the fact, if Rake finds a task definition for an already defined task it will extend not override it. To make sure our tasks are safe and also to make them nicely grouped we will move them into a namespace:
“by
lib/tasks/import.rake
namespace :import desc “Download data” task :download do puts “download data from source” end
desc “Import categories” task :categories => :download do puts “import categories” end
desc “Import products” task :products => :categories do puts “import products” end
desc “Import orders” task :orders => :download do puts “import orders” end
desc “Import eveything” task :all => [:categories, :products, :orders] do puts “Imported everything” end end
“
From now on we can call the tasks with the colon syntax: rake import:all
. When you write a task which interacts with Rails you should set the environment task to a dependency. Since the download task is called in each case we can make that depending on environment:
“by … task :download => :environment do puts “download data from source” end …
“his task basically loads your app for you in the environment you had set. It is good to know Rails sets eager_load to false in this task so if you want to use multiple threads in a task it is better to not use this task as a dependency, rather just load the environment yourself:
“by …
if you use multiple threads
task :download do Rails.application.require_environment! puts “download data from source” end …
“
This was a short one but tomorrow we will do some really interesting stuff when I will share you how I build this newsletter with the help of Rake. Here is the full Rakefile of what we have done today:
“by
lib/tasks/import.rake
namespace :import desc “Download data” task :download => :environment do puts “download data from source” end
desc “Import categories” task :categories => :download do puts “import categories” end
desc “Import products” task :products => :categories do puts “import products” end
desc “Import orders” task :orders => :download do puts “import orders” end
desc “Import eveything” task :all => [:categories, :products, :orders] do puts “Impor#Imported everything” end end
“
Day 4: Use Rake to build a project
Taking it to the next level As I already mentioned Rake is intended to be a build tool, but it is used to do a lot of other things and many Rake users don’t even know the features makes Rake a powerful build system. Actually I am using Rake to build this course. I write all the content in markdown, and I have a Rake task which converts that to HTML. I have a directory structure like this:
source
- day1.md
- day2.md
- day3.md
- day4.md
...
Rakefile
As you see, I store my markdown files in the source folder, and I want to have an output folder where I want my HTML files to be created. Rake has a directory method which I can use:
directory "output"
Next, I will create a Filetask, which is a bit different from normal tasks. Filetasks doesn’t trigger all the time, only if the target file doesn’t exist or the source file is changed since the target was created. Because of this Rake will save some time on rebuilds. Let’s see some code for this:
“by
Rakefile
directory “output”
desc “build day1” file “output/day1.html” => [output, source/day1.md] do |task| rendered = redcarpet.render( File.read(task.prerequisites.first) ) File.new(task.name, ‘w+’).write(rendered) puts “Built #{task.name}” end
“hen you define a Filetask, the name of the task is the target file and you can pass an array of prerequisites with the hashrocket and do the work in the block. The prerequisites are the output
folder and the source file in this case. With the file task I have access to the Task object in the block which holds the name of the task and the prerequisites. I print the name of the task at the end of the block which helps to see when the file is actually built. If I call rake output/day1.html
twice in a row, the second time it won’t print the output because it will not generate the file again. Two more things to note about Filetasks:
- the naming convention is to use strings but you can use symbols if you would like
- Filetasks ignore the namespaces
If I would go this way I should repeat this code for each day and I am too lazy to do that. Instead I use Rake’s FileList and I create an array of arrays with the target and the source:
“by
Rakefile
directory “output”
source_files = FileList[source/.md] target_files = source_files.pathmap(output/%n.html)]
target_files.zip(source_files).each do |target, source| desc “build #{target}” file target => [output, source] do |task| rendered = redcarpet.render( File.read(task.prerequisites.first) ) File.new(task.name, ‘w+’).write(rendered) puts “Built #{task.name}” end end
“f I list the tasks now I get the following result:
“ rake -T rake output/day1.html # build output/day1.html rake output/day2.html # build output/day2.html rake output/day3.html # build output/day3.html rake output/day4.html # build output/day4.html
“ince I don’t want to trigger these individually, I have a task to build all of the source files:
“by desc “Build all files” task :build => target_files
“s you I see I just simply set target_files as a dependency and Rake will call all the dynamically generated tasks for me. This isn’t a bad solution but if I had hundreds of files it wouldn’t be optimal. Instead Rake has another way of achieving the same result. It is called Rules.
Rules
This feature of Rake is a little bit like method_missing in Ruby. If Rake couldn’t find a Filetask it will look at the rules defined and if it finds a match, it will call it. When we define a rule we pass the target as either a string or a regular expression, and we also pass the source, but since that is dynamic we will use a lambda to get the source name from the target. Then in the block we will do the work:
“by
Rakefile
directory “output” source = lambda { |fn| fn.pathmap(“source/%n.md”) } rule /^output\/..html/ => [source] do |task| rendered = redcarpet.render(File.read(task.source)) File.new(task.name, ‘w+’).write(rendered) puts “Built #{task.name}” end
task :build => [output] + target_files
“ow we have a few lines of code which covers almost all my needs. One more thing I’d like to have is a way to get a clean state, so I will use Rake’s built in clean task:
“by require ‘rake/clean’ CLEAN.include(“output”)
“
Summary
That’s all I wanted to share with you about Rake. I hope you enjoyed the series of emails and you learned a few tricks. If you have aboutny questions of feedback about what you’ve read don’t hesitate to contact me at<EMAIL_ADDRESS>Copyright © 2015 Gergely Molnar, All rights reserved.


Add packages to Arbor
Adding new R packages or python libraries to Arbor is not difficult, but the method you use depends on the type of Arbor instance you are using.
New packages on Arbor AWS instances
If you are using one of our AWS instances, then the only way to add new R packages is to contact us. We can get things installed for you quickly and easily, but it requires administrative access to the instance.
New packages on locally installed AWS instances
Local installation using ssh
If you have an Arbor instance on a local machine, you have two options. First, you can ssh into the instance and install the R package.
To get into the vagrant machine use:
vagrant ssh
You should see something like:
Lukes-MacBook-Pro:flow lukeharmon$ vagrant ssh
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-117-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Wed May 31 20:12:04 UTC 2017
System load: 0.0 Processes: 95
Usage of /: 9.1% of 39.34GB Users logged in: 0
Memory usage: 10% IP address for eth0: <IP_ADDRESS>
Swap usage: 0%
Graph this data and manage this system at:
https://landscape.canonical.com/
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
28 packages can be updated.
16 updates are security updates.
New release '16.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Last login: Wed May 31 20:12:05 2017 from <IP_ADDRESS>
vagrant@vagrant-ubuntu-trusty-64:~$
Now start R.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
Natural language support but running in an English locale
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
>
Now I can install any package I want. For example:
install.packages("ouch")
You should get something like:
> install.packages("ouch")
Installing package into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)
trying URL 'https://cran.cnr.berkeley.edu/src/contrib/ouch_2.9-2.tar.gz'
Content type 'application/x-gzip' length 37358 bytes (36 KB)
==================================================
downloaded 36 KB
* installing *source* package ‘ouch’ ...
** package ‘ouch’ successfully unpacked and MD5 sums checked
** libs
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG -fpic -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c covar-matrix.c -o covar-matrix.o
gcc -std=gnu99 -I/usr/share/R/include -DNDEBUG -fpic -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c weight-matrix.c -o weight-matrix.o
gcc -std=gnu99 -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o ouch.so covar-matrix.o weight-matrix.o -L/usr/lib/R/lib -lR
installing to /usr/local/lib/R/site-library/ouch/libs
** R
** data
** inst
** preparing package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (ouch)
The downloaded source packages are in
‘/tmp/RtmpCawCDV/downloaded_packages’
>
Now you can use this package in your Arbor functions!
If you use this method, then the packages will be installed on that virtual machine for as long as it lasts. However, if you destroy or reprovision that machine, then the packages will have to be reinstalled. For something more permanent, try the next method.
Adding new packages to the virtual machine
You can determine which R packages are installed on an Arbor instance using Vagrant and ansible.
When you launch a new Arbor instance, one step involves cloning the github repository that holds Kitware’s “flow” software.
In your local clone of that repository, find the file ./devops/ansible/roles/arbor/tasks/main.yml. The Kitware default version is here.
R packages to be installed are listed starting on line 42 of that file:
- name: install packages
command: /usr/bin/Rscript --slave --no-save --no-restore-history -e "if (! ('' %in% installed.packages()[,'Package'])) install.packages(pkgs='', repos=c('http://cran.cnr.Berkeley.edu'))"
become: yes
with_items:
- rgl
- ape
- geiger
- nlme
- codetools
- devtools
- diversitree
- phytools
- dplyr
environment:
DISPLAY: :7
- name: install github packages
command: /usr/bin/Rscript --slave --no-save --no-restore-history -e "parts<-unlist(strsplit('', '/'));options(repos='http://cran.cnr.Berkeley.edu');library(devtools);install_github(parts[2], parts[1])"
become: yes
with_items:
- hafen/cardoonTools
- tangelo-hub/romanescoTools
- arborworkflows/aRbor
environment:
New packages can be added to that list and will be installed when the machine is provisioned.
So, add ouch:
- name: install packages
command: /usr/bin/Rscript --slave --no-save --no-restore-history -e "if (! ('' %in% installed.packages()[,'Package'])) install.packages(pkgs='', repos=c('http://cran.cnr.Berkeley.edu'))"
become: yes
with_items:
- rgl
- ape
- geiger
- nlme
- codetools
- devtools
- diversitree
- phytools
- dplyr
- ouch
environment:
DISPLAY: :7
And reprovision:
> vagrant provision


Welcome!
This example shows how to use HTML5 semantic markup tags, such as section, article, header, and footer.
This page looks much better if you link it to the stylesheet!
This example shows how to use HTML5 semantic markup tags, such as section, article, header, and footer.
This page looks much better if you link it to the stylesheet!


Lagrange is a minimalist Jekyll blog theme that I built from scratch. The purpose of this theme is to provide a simple, clean, content-focused blogging platform for your personal site or blog.
Feel free to check out the demo, where you’ll also find instructions on how to use install and use the theme.
Millennial is a minimalist Jekyll blog theme that I built from scratch. The purpose of this theme is to provide a simple, clean, content-focused publishing platform for a publication or blog.
Feel free to check out the demo, where you’ll also find instructions on how to use install and use the theme.
The Jekyll Starter Kit is a simple framework for starting your own Jekyll project using all of the best practices that I learned from building my other Jekyll themes.
Feel free to check out the GitHub repository, where you’ll also find instructions on how to use install and use the theme.


Contact us
For any questions you might have regarding your seminar in Rio de la Miel do not hesitate to contact us by phone or by email. We will answer as quickly as we possibly can.
We also help you to the best of our knowledge organising your travel and inform you about additional points of interest close to Rio de la Miel.
Do not hesitate to contact us - we are glad to help.
Organiser
Godea Vida S.L.U.
C.I.F. ESB93426559
Plaza Cavana 5
29780 Nerja
Spain
<EMAIL_ADDRESS>Address of the seminar house
Rio de la Miel, Province of Malaga, Spain.
(36.762506, -3.853557)
How to get to us by car
Route description
Here you find a route description to download as there is no mobile connection on the way from the valley to Rio de la Miel.
Postal address
Karin & Andreas Gies
Apartado 1082
E18697 La Herradura
Spain
Busses to and from Nerja
This is the official website with all the buses to and from Nerja:
Telephone:
Spain |
||
Germany |
||
Telefax |
Share this page


Rugby World Cup prize money: How much England will pocket with 2019 Final victory
There is a lucrative bonus system on offer to England players for the Rugby World Cup 2019
by Aaron Flanagan, https://www.mirror.co.uk/authors/aaron-flanagan/England players are set to pocket £2.5million between them if they win the Rugby World Cup.
The Red Rose take on South Africa in Saturday morning's showpiece event, looking to avenge the 2007 loss at the same stage to the same opposition.
Rugby chiefs have handed England a mammoth financial incentive for victory, with the bonus payouts thought to be the largest ever on offer for a Test match.
It comes on top of the £1.2m payout that England players bagged for beating New Zealand in the semi-finals.
The prize money comes as part of a laddering system, with England earning more money for each knockout round that they progress.
A bonus payment of £768,150 was distributed between the squad for beating Australia in the quarter-finals.
That then went up to £1.2m for the New Zealand game - and now has more than doubled for victory in the final.
Nothing additional will be paid to England players if they fail to beat South Africa.
It means that every member of the England squad has already taken home £66,077 for their exploits in the knockout stages alone.
There was a payment of £13,656 per player for the group games.
If England are to go on to win the World Cup, it will mean that almost £7million will have been paid out to the England squad in total throughout the competition - approximately £225,000 per player.
From the World Cup itself, a fee of £325,000 is paid out to the winning nation.
Buy the official programme for the Rugby World Cup final for just £10 at reachsportshop.com


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.threed.jpct.BufferedMatrix com.threed.jpct.Camera
The Camera represents the position and direction of the camera/viewer in the current scene. It also contains information about the current field of view (FOV). This class extends BufferedMatrix, so the methods for rotating the camera can be found there. One should keep in mind that the rotation matrix of the camera is actually a rotation matrix which will be aplied to all objects in the world. This is important when chosing the rotation angle for the camera: A (virtual) rotation of the camera around an axis using the angle w leads to the same results as if the world would rotate around this axis using -w. So the angle given to the rotate?()-methods is actually the angle by which the world rotates around the camera when the camera is viewed as static. If you dislike this behaviour, you may use the rotateCamera?()-methods instead which will take care of it.
| Field Summary | |
static int |
CAMERA_DONT_MOVE
Don't move the camera before checking for a collision. |
static int |
CAMERA_MOVEDOWN
Move the camera down (relative to its current direction) |
static int |
CAMERA_MOVEIN
Move the camera forward (relative to its current direction) |
static int |
CAMERA_MOVELEFT
Move the camera left (relative to its current direction) |
static int |
CAMERA_MOVEOUT
Move the camera backwards (relative to its current direction) |
static int |
CAMERA_MOVERIGHT
Move the camera right (relative to its current direction) |
static int |
CAMERA_MOVEUP
Move the camera up (relative to its current direction) |
static boolean |
DONT_SLIDE
Camera stops in front of obstacles |
static int |
ELLIPSOID_ALIGNED
The camera's ellipsoid won't be transformed when performing collision detection (default). |
static int |
ELLIPSOID_TRANSFORMED
The camera's ellipsoid will be transformed when performing collision detection. |
static boolean |
SLIDE
Camera slides along obstacles. |
| Constructor Summary | |
Camera()
Creates a new Camera with default viewing direction (along the z-axis) and position (at the origin) as well as default FOV (as configured, 1.25 is default). |
| Method Summary | |
void |
adjustFovToNearPlane()
Adjusts the fov so that a changed near plane doesn't cause a zoom-in/zoom-out effect. |
void |
align(Object3D object)
Aligns the camera with the (transformed) positive z-axis of an Object3D. |
float |
convertDEGAngleIntoFOV(float angle)
Converts an angle in degrees into a FOV value that jPCT can handle. |
float |
convertRADAngleIntoFOV(float angle)
Converts an angle in radians into a FOV value that jPCT can handle (=2*tan(angle/2)). |
void |
decreaseFOV(float dec)
Decreases the FOV. |
Matrix |
getBillBoardMatrix()
Returns the bill board matrix or null if none has been set. |
SimpleVector |
getDirection()
Returns the direction vector of the camera in world space. |
SimpleVector |
getDirection(SimpleVector toFill)
Returns the direction vector of the camera in world space and fills the given SimpleVector with the result. |
int |
getEllipsoidMode()
Returns the current ellipsoid mode. |
float |
getFOV()
Returns the FOV. |
float |
getMaxFOV()
Gets the highest possible FOV. |
float |
getMinFOV()
Gets the lowest possible FOV. |
SimpleVector |
getPosition()
Gets the current position of the camera. |
SimpleVector |
getPosition(SimpleVector toFill)
Gets the current position of the camera and fill the given SimpleVector with the result. |
Matrix |
getProjectionMatrix(FrameBuffer buffer)
Returns the projection matrix. |
Matrix |
getProjectionMatrix(FrameBuffer buffer,
float nearPlane,
float farPlane)
Returns the projection matrix with arbitrary values for near and far clipping plane. |
SimpleVector |
getSideVector()
Returns the side vector of the camera in world space. |
SimpleVector |
getUpVector()
Returns the up vector of the camera in world space. |
SimpleVector |
getXAxis()
Returns the (virtual) x-axis of the camera. |
SimpleVector |
getYAxis()
Returns the (virtual) y-axis of the camera. |
float |
getYFOV()
Returns the fov in y-direction. |
SimpleVector |
getZAxis()
Returns the (virtual) z-axis of the camera. |
void |
increaseFOV(float inc)
Increases the FOV. |
void |
lookAt(SimpleVector lookAt)
Rotates the camera so that is looks at the given position in world-space. |
void |
moveCamera(int mode,
float speed)
Moves (translates) the camera with a given speed into "mode" direction relative to its current direction. |
void |
moveCamera(SimpleVector direction,
float speed)
Moves (translates) the camera with a given speed in an arbitrary direction (should be a normalized vector). |
void |
rotateCameraAxis(SimpleVector axis,
float angle)
Rotates the camera around an arbitrary axis. |
void |
rotateCameraX(float angle)
Rotates the camera around the x-axis. |
void |
rotateCameraY(float angle)
Rotates the camera around the y-axis. |
void |
rotateCameraZ(float angle)
Rotates the camera around the z-axis. |
void |
setBillBoardMatrix(Matrix billBoardMatrix)
Sets a special matrix used for the bill board calculations. |
void |
setEllipsoidMode(int mode)
When doing ellipsoid collision detection with a camera, the ellipsoid can be transformed according to the camera's transformation in camera space or it remains static in object space (i.e. |
void |
setFOV(float tanFOV)
Sets the FOV (within the limits set by setFOVLimits). |
void |
setFovAngle(float radians)
An alternative to setFOV, which works directly with the angle. |
void |
setFOVLimits(float lower,
float higher)
Sets the limits for FOV jPCT should permit. |
void |
setFOVtoDefault()
Resets the FOV to the default value configured in Config. |
void |
setOrientation(SimpleVector dir,
SimpleVector up)
Sets the orientation of the camera by giving a direction and an up-vector. |
void |
setPosition(float x,
float y,
float z)
Sets the camera to a position in worldspace. |
void |
setPosition(SimpleVector pos)
Sets the camera to a position in worldspace. |
void |
setPositionToCenter(Object3D object)
Sets the camera to the position of the transformed center of an Object3D. |
void |
setYFOV(float tanFOV)
Sets the FOV in y-direction (within the limits set by setFOVLimits). |
void |
setYFovAngle(float radians)
An alternative to setYFOV, which works directly with the angle. |
SimpleVector |
transform(SimpleVector vertex)
Transforms a vertex from world into camera space. |
| Methods inherited from class com.threed.jpct.BufferedMatrix |
copyBackToFront, getBack, getFront, matMul, rotateAxis, rotateX, rotateY, rotateZ, setBack |
| Methods inherited from class java.lang.Object |
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
public static final int CAMERA_MOVEIN
public static final int CAMERA_MOVEOUT
public static final int CAMERA_MOVEDOWN
public static final int CAMERA_MOVEUP
public static final int CAMERA_MOVELEFT
public static final int CAMERA_MOVERIGHT
public static final int CAMERA_DONT_MOVE
public static final boolean SLIDE
public static final boolean DONT_SLIDE
public static final int ELLIPSOID_ALIGNED
public static final int ELLIPSOID_TRANSFORMED
| Constructor Detail |
public Camera()
| Method Detail |
public SimpleVector getPosition()
public SimpleVector getPosition(SimpleVector toFill)
toFill
- the vector that should contain the position
public SimpleVector getXAxis()
public SimpleVector getYAxis()
public SimpleVector getZAxis()
public SimpleVector getDirection()
public SimpleVector getDirection(SimpleVector toFill)
toFill
- the vector that should contain the position
public SimpleVector getUpVector()
public SimpleVector getSideVector()
public float convertRADAngleIntoFOV(float angle)
angle
- the angle in radians
public float convertDEGAngleIntoFOV(float angle)
angle
- the angle in degrees
public void setFOVLimits(float lower, float higher)
lower
- the lowest possible FOV (default is 0.5)higher
- the highest possible FOV (default is 1.5)public float getMaxFOV()
public float getMinFOV()
public void setFOV(float tanFOV)
tanFOV
- the FOV (default is 1.25).setFOVLimits(float,float)
public void setFovAngle(float radians)
radians
- the fov angle (between 0 and PI/2)public void setYFOV(float tanFOV)
tanFOV
- the y-FOV (default is -1, which means that its derived from
the x-FOV)setFOVLimits(float,float)
public void setYFovAngle(float radians)
radians
- the fov angle (between 0 and PI/2)public float getFOV()
public float getYFOV()
public void adjustFovToNearPlane()
public void increaseFOV(float inc)
inc
- the amount by which FOV should be increasedpublic void decreaseFOV(float dec)
dec
- the amount by which FOV should be decreasedpublic void setFOVtoDefault()
Config.defaultCameraFOV
public void lookAt(SimpleVector lookAt)
lookAt
- the position vector to look atpublic void align(Object3D object)
object
- the object the camera should be aligned withpublic void setPositionToCenter(Object3D object)
object
- the objectpublic void setPosition(SimpleVector pos)
pos
- the position vectorpublic void setPosition(float x, float y, float z)
x
- the x component of the position vectory
- the y component of the position vectorz
- the z component of the position vectorpublic void setOrientation(SimpleVector dir, SimpleVector up)
dir
- the directionup
- the up-vectorpublic SimpleVector transform(SimpleVector vertex)
vertex
- the vertex in world space
public void moveCamera(int mode, float speed)
mode
- the directionspeed
- the speed (positional change in units)CAMERA_MOVEDOWN
,
CAMERA_MOVEUP
,
CAMERA_MOVEIN
,
CAMERA_MOVEOUT
,
CAMERA_MOVELEFT
,
CAMERA_MOVERIGHT
public void moveCamera(SimpleVector direction, float speed)
direction
- the directionspeed
- the speed (positional change in units)public void rotateCameraAxis(SimpleVector axis, float angle)
axis
- a direction-vector pointing into the axis directionangle
- the angle of the rotationpublic void rotateCameraX(float angle)
angle
- the anglepublic void rotateCameraY(float angle)
angle
- the anglepublic void rotateCameraZ(float angle)
angle
- the anglepublic void setEllipsoidMode(int mode)
mode
- int the modeELLIPSOID_ALIGNED
,
ELLIPSOID_TRANSFORMED
public int getEllipsoidMode()
ELLIPSOID_ALIGNED
,
ELLIPSOID_TRANSFORMED
public Matrix getProjectionMatrix(FrameBuffer buffer)
buffer
- the framebuffer
public Matrix getProjectionMatrix(FrameBuffer buffer, float nearPlane, float farPlane)
buffer
- the framebuffernearPlane
- the near planefarPlane
- the far plane
public void setBillBoardMatrix(Matrix billBoardMatrix)
billBoardMatrix
- the new matrix, set it to null to erase it.public Matrix getBillBoardMatrix()
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


#include <char_array_symbol.h>
Data Fields | |
| char * | char_array |
| int | array_length |
| unsigned int | hash_val |
| void * | data |
| CHAR_ARRAY_Symbol_Table * | table |
| CHAR_ARRAY_Symbol * | next_hash |
| CHAR_ARRAY_Symbol * | prev_hash |
| CHAR_ARRAY_Symbol * | next_symbol |
| CHAR_ARRAY_Symbol * | prev_symbol |
Definition at line 66 of file char_array_symbol.h.
Definition at line 69 of file char_array_symbol.h.
Referenced by CHAR_ARRAY_add_symbol(), CHAR_ARRAY_find_symbol(), CHAR_ARRAY_find_symbol_data(), and CHAR_ARRAY_print_symbol_table_hash().
Definition at line 68 of file char_array_symbol.h.
Referenced by CHAR_ARRAY_add_symbol(), CHAR_ARRAY_delete_symbol(), CHAR_ARRAY_delete_symbol_table(), CHAR_ARRAY_find_symbol(), CHAR_ARRAY_find_symbol_data(), and CHAR_ARRAY_print_symbol_table_hash().
| void* CHAR_ARRAY_Symbol::data |
Definition at line 71 of file char_array_symbol.h.
Referenced by CHAR_ARRAY_add_symbol(), CHAR_ARRAY_delete_symbol(), CHAR_ARRAY_delete_symbol_table(), and CHAR_ARRAY_find_symbol_data().
| unsigned int CHAR_ARRAY_Symbol::hash_val |
Definition at line 70 of file char_array_symbol.h.
Referenced by CHAR_ARRAY_add_symbol(), CHAR_ARRAY_delete_symbol(), CHAR_ARRAY_find_symbol(), CHAR_ARRAY_find_symbol_data(), and CHAR_ARRAY_resize_symbol_table().
Definition at line 73 of file char_array_symbol.h.
Referenced by CHAR_ARRAY_add_symbol(), CHAR_ARRAY_delete_symbol(), CHAR_ARRAY_find_symbol(), CHAR_ARRAY_find_symbol_data(), CHAR_ARRAY_print_symbol_table_hash(), and CHAR_ARRAY_resize_symbol_table().
Definition at line 75 of file char_array_symbol.h.
Referenced by CHAR_ARRAY_add_symbol(), CHAR_ARRAY_delete_symbol(), CHAR_ARRAY_delete_symbol_table(), and CHAR_ARRAY_resize_symbol_table().
Definition at line 74 of file char_array_symbol.h.
Referenced by CHAR_ARRAY_delete_symbol(), and CHAR_ARRAY_resize_symbol_table().
Definition at line 76 of file char_array_symbol.h.
Referenced by CHAR_ARRAY_add_symbol(), and CHAR_ARRAY_delete_symbol().
Definition at line 72 of file char_array_symbol.h.
Referenced by CHAR_ARRAY_add_symbol(), and CHAR_ARRAY_delete_symbol().


Add a user{% if group %} to {{ group.plural_name|lower }}{% endif %}
{% form_error_banner form %}
{% url 'users:manage_users' as manage_users_url %}
{% include "users/partials/user_search_form.html" with cancel_url=manage_users_url %}
{% include "users/partials/user_search_results.html" %}


The whole bunch of libraries has been published on NuGet.org
and can be obtained from there. On that page search for plexdata
and you will find all packages,
including all logging writer packages.
How to install the logging writer libraries manually is explained on NuGet.org. But for sure it doesn’t make any sense to just download the libraries. It’s indeed a better idea to include them in your C# projects.
Below find the steps necessary to use the logging writer libraries together with Visual Studio.
plexdata
.
[Install]
at the right and confirm the dialog box. That’s it.
All dependent libraries are installed automatically.
All sources as well as all binary files are available on GitHub. Thus, please feel free to browse the logging writer project on GitHub.


residuals temperature grid fldgen ESM precipitation data training cell distribution climate generated new {border-style version native px;} #ffffff;} input Fig realizations time variable NetCDF emulator field fields joint mean package residual Earth normal used extreme function impacts normally future global generating log(precipitation) method variables Research Table change distributed files matrix transform transformation use values Climate Sciences algorithm cell. different empirical gridded log( properties provided px; {font-family Paper Writing data. described font-size included scenarios spatial statistical trained variability ..), CDF Environmental N(, National addition analysis continuous, correlation double; editing events extension list model process produce researchers review series software string transformed variance water (arrow Atmospheric Conceptualization Physical Validation basis border-color border-width coordinate covariance data, directory distributions emulation example files. generate invertible, mapping number precipitation, precipitation. prerelease solid; space step testing using {font-style {font-weight Change Change. Fldgen Fourier Global Link Model NEOF] Normally P)) Science Sciences. Snyder Software [Ntime bold cell, coefficients community courier; cross-variable daily distribution. does em; events. follow generates important includes jointly large multiple necessary output preserve preserved projection pt;} pvarconvert_fcn quantile rank-order run sampled simply single spatiotemporal state steps temporal tvarconvert_fcn user


1. Rectangles. How does SVG understand coordinates?
2. Paths. This is the most complicated SVG element, but also one of the most useful. It contains a tiny programming language. In-class project: Make a plot like Minard's.
3. Transformations are another useful (but a bit tricky) tool. How do we stretch, rotate, and shift elements, and how does the order of these operations affect the result? Challenge: add rotate() and scale() to the transform block to make the "movable" circle match the "target" circle. Does the order of operations matter?


|
|
KMK-1
|
Update tune2tube to Python 2/3 compatible code
|
|
To Do |
Unassigned
|
Actions
|
|
|
KMK-2
|
Finish ascr first version
|
|
Done |
Michiel Sikma
|
Actions
|
|
|
KMK-3
|
KMK-2
Finalize Tumblr code
|
|
Done |
Unassigned
|
Actions
|
|
|
KMK-4
|
KMK-2
Finalize Pixiv code
|
|
Done |
Unassigned
|
Actions
|
|
|
KMK-5
|
KMK-2
Finalize Twitter code
|
|
Done |
Unassigned
|
Actions
|
|
|
RUBY-1
|
Design and implement search results page
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
CAP-1
|
Make landing page
|
|
To Do |
Unassigned
|
Actions
|
|
|
CAP-2
|
Improve Area Guide
|
|
To Do |
Unassigned
|
Actions
|
|
|
CDB-2
|
Add Ekizo scraping code to mdrscr
|
|
Done |
Unassigned
|
Actions
|
|
|
CDB-1
|
Create webcomic tasks
|
|
Done |
Michiel Sikma
|
Actions
|
|
|
KMK-6
|
Fix Quieter command line tool
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-7
|
Finish new Tumblr design/theme
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-9
|
Make script for summarizing Mandarake buy lists
|
|
Done |
Michiel Sikma
|
Actions
|
|
|
KMK-10
|
Write article about video game music covers
|
|
In Progress |
Michiel Sikma
|
Actions
|
|
|
CDB-3
|
Mandarake task sometimes reports duplicates
|
|
To Do |
Unassigned
|
Actions
|
|
|
CDB-4
|
Create Marktplaats scraper
|
|
To Do |
Unassigned
|
Actions
|
|
|
JUL-1
|
Remove all legacy code
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-11
|
Write article about screen scraping using Cheerio
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-12
|
Make repo containing a basic Babel setup (dev + prod build)
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
RUBY-2
|
Set up Ruby Discord server
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
CDB-5
|
Make proper config examples, per task
|
|
Done |
Michiel Sikma
|
Actions
|
|
|
KMK-13
|
Finalize Pokésprite PR to unify icons
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
JUL-2
|
Build a converter for IPB 4.0 to Jul
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-14
|
Create first version of musicpack spec
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-15
|
Write a Midi to .MUS (Adlib Visual Composer) converter
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-16
|
Develop Wingdings keyboard
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-17
|
Update mdrscr auction code to include the English site
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
CDB-6
|
Add error handling for common retry-able HTTP errors
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-18
|
Install Mastodon and look at its customizability
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-19
|
Rip the music from Tomba 2
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-20
|
Make a midi re-timer program
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-21
|
pkmn-seen script
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
CAP-3
|
Add capsule hotel video by TheTravelingClatt to site
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-22
|
Make a walkthrough video for 78641
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-23
|
Check out nes-starter-kit
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-24
|
Fix "bidding hasn't started yet" in mdrscr
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-25
|
Create 'buyee' scraper
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-26
|
Rewrite Pokesprite in JS
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-27
|
Run check and print warning if update scripts haven't run in a while
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-28
|
Consolidate CLI utilities into a monorepo
|
|
To Do |
Michiel Sikma
|
Actions
|
|
|
KMK-29
|
Fix the Pokemon count in Pokeseen
|
|
To Do |
Michiel Sikma
|
Actions
|


Video 1
Subs credits
Video 2
Subs credits
Context of this page:
http://ineed.coffee/3201/how-to-dynamically-change-video-js-videos-and-captions-with-javascript/
, by Daniel Graziotin


| Filter |
|---|
|
Show: |
| Message | Class | Method | Time |
|---|---|---|---|
| Setting up NuBot version : 0.1.5b | com.nubits.nubot.launch.NuBot | execute | Apr 07 2015 14:12:04.601 UTC |
| Init logging system | com.nubits.nubot.launch.NuBot | execute | Apr 07 2015 14:12:04.631 UTC |
| Set up SSL certificates | com.nubits.nubot.launch.NuBot | execute | Apr 07 2015 14:12:04.632 UTC |
| Load options from 1 files : /tmp/tmpJIXJ6v | com.nubits.nubot.launch.NuBot | execute | Apr 07 2015 14:12:04.634 UTC |
| Wrap the keys into a new ApiKeys object | com.nubits.nubot.launch.NuBot | execute | Apr 07 2015 14:12:04.635 UTC |
| Creating an Exchange object | com.nubits.nubot.launch.NuBot | execute | Apr 07 2015 14:12:04.637 UTC |
| Create e ExchangeLiveData object to accomodate liveData from the exchange | com.nubits.nubot.launch.NuBot | execute | Apr 07 2015 14:12:04.660 UTC |
| Create a new TradeInterface object | com.nubits.nubot.launch.NuBot | execute | Apr 07 2015 14:12:04.662 UTC |
| Swapped pair mode : false | com.nubits.nubot.launch.NuBot | execute | Apr 07 2015 14:12:04.663 UTC |
| CCEDK uses global TX fee, currency pair not supported.now calling getTxFee() | com.nubits.nubot.trading.wrappers.CcedkWrapper | getTxFee | Apr 07 2015 14:12:04.664 UTC |
| Create a TaskManager | com.nubits.nubot.launch.NuBot | execute | Apr 07 2015 14:12:04.666 UTC |
| Starting task : Check connection with exchange | com.nubits.nubot.launch.NuBot | execute | Apr 07 2015 14:12:04.678 UTC |
| Waiting a for the connectionThreads to detect connection | com.nubits.nubot.launch.NuBot | execute | Apr 07 2015 14:12:04.679 UTC |
| Configuring NuBot for Dual-Side strategy | com.nubits.nubot.launch.NuBot | execute | Apr 07 2015 14:12:07.685 UTC |
| Start trading Strategy specific for nbtbtc | com.nubits.nubot.launch.NuBot | execute | Apr 07 2015 14:12:07.691 UTC |
| Options : { dualSide=true submitLiquidity=false executeOrders=true verbose=false sendHipchat=false apiKey=2CQ4QB8AHNKT96QE0G6Y51YI7WOG0H6L2955KWR86TPU4R0KCVJY4LYWHGWLPE74 nubitAddress= rpcUser= nudIp=<IP_ADDRESS> nudPort=9091 priceIncrement=3.0E-4 txFee=0.2 exchangeName=ccedk pair=nbtbtc executeStrategyInterval=41 sendLiquidityInterval=130 sendMails=false mailRecipient=null emergencyTimeoutMinutes 60 keepProceeds=0.0 aggregate=false SecondaryPegOptionsJSON : backupFeedNames [blockchain, coinbase, bitstamp] distanceThreshold 10.0 mainFeed bitfinex spread 0.0 wallchangeThreshold 0.3} |
com.nubits.nubot.launch.NuBot | execute | Apr 07 2015 14:12:07.692 UTC |
| Forcing a 0.9% minimum spread to protect from collisions | com.nubits.nubot.launch.NuBot | execute | Apr 07 2015 14:12:07.703 UTC |
| Problem with timeserver ntp.xs4all.nl java.net.SocketTimeoutException: Receive timed out | com.nubits.nubot.NTP.NTPClient | getTime | Apr 07 2015 14:12:17.826 UTC |
| Trying next server | com.nubits.nubot.NTP.NTPClient | getTime | Apr 07 2015 14:12:17.828 UTC |
| Problem with timeserver nist1-pa.ustiming.org java.net.SocketTimeoutException: Receive timed out | com.nubits.nubot.NTP.NTPClient | getTime | Apr 07 2015 14:12:27.878 UTC |
| Trying next server | com.nubits.nubot.NTP.NTPClient | getTime | Apr 07 2015 14:12:27.880 UTC |
| Problem with timeserver nist-time-server.eoni.com java.net.SocketTimeoutException: Receive timed out | com.nubits.nubot.NTP.NTPClient | getTime | Apr 07 2015 14:12:38.168 UTC |
| Trying next server | com.nubits.nubot.NTP.NTPClient | getTime | Apr 07 2015 14:12:38.171 UTC |
| Liquidity is not being sent : orders are not yet initialized | com.nubits.nubot.tasks.SubmitLiquidityinfoTask | checkOrders | Apr 07 2015 14:12:46.686 UTC |
| Problem with timeserver time.nist.gov java.net.SocketTimeoutException: Receive timed out | com.nubits.nubot.NTP.NTPClient | getTime | Apr 07 2015 14:12:48.969 UTC |
| Trying next server | com.nubits.nubot.NTP.NTPClient | getTime | Apr 07 2015 14:12:48.971 UTC |
| Problem with timeserver utcnist.colorado.edu java.net.SocketTimeoutException: Receive timed out | com.nubits.nubot.NTP.NTPClient | getTime | Apr 07 2015 14:12:59.094 UTC |
| Trying next server | com.nubits.nubot.NTP.NTPClient | getTime | Apr 07 2015 14:12:59.096 UTC |
| Problem with timeserver nist.time.nosc.us java.net.SocketTimeoutException: Receive timed out | com.nubits.nubot.NTP.NTPClient | getTime | Apr 07 2015 14:13:09.166 UTC |
| Cannot update time after querying 6 timeservers. | com.nubits.nubot.NTP.NTPClient | getTime | Apr 07 2015 14:13:09.167 UTC |
| Bot shutting down.. | com.nubits.nubot.launch.NuBot | run | Apr 07 2015 14:13:09.169 UTC |
| Clearing out active orders ... | com.nubits.nubot.launch.NuBot | run | Apr 07 2015 14:13:09.170 UTC |


--- layout: post title: Concept illustration date: '2019-01-07 20:24:48 +0100' categories: - Concept Art ---
Concept illustration for the Abdullah al Salem Cultural Center opening show, Kuwait.


{include file="common/sidenav" /}
{include file="user/userinfo" /}
{:__('Home page')}
{:__('Dynamic state')}
{:__('Photo album')}
{:__('Returns')}
{:__('Add photos')}