X-Road: External Load Balancer Installation Guide
Version: 1.3
Doc. ID: IG-XLB
| Date | Version | Description | Author |
|---|---|---|---|
| 22.3.2017 | 1.0 | Initial version | Jarkko Hyöty, Olli Lindgren |
| 27.4.2017 | 1.1 | Added slave node user group instructions | Tatu Repo |
| 15.6.2017 | 1.2 | Added health check interface maintenance mode | Tatu Repo |
| 21.6.2017 | 1.3 | Added chapter 7 on upgrading the security server cluster | Olli Lindgren |
Table of Contents
- License
- 1. Introduction
- 2. Overview
- 3. X-Road Installation and configuration
- 4. Database replication setup
- 5. Configuring data replication with rsync over SSH
- 6. Verifying the setup
- 7. Upgrading a clustered X-Road security server installation
License
This document is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/.
1. Introduction
1.1 Target Audience
The intended audience of this installation guide are the X-Road security server administrators responsible for installing and configuring X-Road security servers to use external load balancing. The document is intended for readers with a good knowledge of Linux server management, computer networks, database administration, clustered environments and the X-Road functioning principles.
1.2 References
| Document Id | Document |
|---|---|
| [SS-CLUSTER] | Readme: Security server cluster setup with Ansible |
| [IG-SS] | X-Road: Security Server Installation Guide |
| [UG-SS] | X-Road 6 Security Server User Guide |
2. Overview
This document describes the external load balancing support features implemented by X-Road and the steps necessary to configure security servers to run as a cluster where each node has an identical configuration, including their keys and certificates. X-Road security server configuration changes are handled by a single master server and one or more slave servers.
Chapter 3. X-Road Installation and configuration describes the installation on a high level and as a whole. The later chapters cover the details of the different parts of the installation and configuration. The last chapter briefly describes how the configuration can be verified.
2.1 Goals and assumptions
The primary goal of the load balancing support is, as the name suggests, load balancing, not fault tolerance. A clustered environment increases fault tolerance but some X-Road messages can still be lost if a security server node fails.
The implementation does not include a load balancer component. It should be possible to use any external load balancer component that supports HTTP-based health checks for the nodes and load balancing at the TCP level (eg. haproxy, nginx, AWS ALB or Classic Load Balancer, or a hardware appliance). A health check service is provided for monitoring a node's status, this is described in more detail in section 3.4 Health check service configuration
The load balancing support is implemented with a few assumptions about the environment that users should be aware of. Carefully consider these assumptions before deciding if the supported features are suitable for your needs.
Basic Assumptions about the load balanced environment:
- Adding or removing nodes to or from the cluster is infrequent. New nodes need to be added manually and this takes some time.
- Changes to the configuration files are relatively infrequent and some downtime in ability to propagate the changes can be tolerated.
- The cluster uses a master-slave model and the configuration master is not replicated.
Consequences of the selected implementation model:
- Changes to the
serverconf
database, authorization and signing keys are applied via the configuration master, which is a member of the cluster. The replication is one-way from master to slaves and the slaves should treat the configuration as read-only. - The cluster nodes can continue operation if the master fails but the configuration can not be changed until:
- the master comes back online, or
- some other node is manually promoted to be the master.
- If a node fails, the messages being processed by that node are lost.
- It is the responsibility of the load balancer component to detect the failure and route further messages to other nodes. Because there potentially is some delay before the failure is noticed, some messages might be lost due to the delay.
- Recovering lost messages is not supported.
- Configuration updates are asynchronous and the cluster state is eventually consistent.
- If the master node fails or communication is interrupted during a configuration update, each slave should have a valid configuration, but the cluster state can be inconsistent (some members might have the old configuration while some might have received all the changes).
2.2 Communication with external servers and services: The cluster from the point of view of a client or service
When external security servers communicate with the cluster, they see only the public IP address of the cluster which is registered to the global configuration as the security server address. From the caller point of view, this case is analogous to making a request to a single security server.
When a security server makes a request to an external server (security server, OCSP, TSA or a central server), the external server sees only the public IP address. Note that depending on the configuration, the public IP address might be different from the one used in the previous scenario. It should also be noted that the security servers will independently make requests to OCSP and TSA services as well as to the central server to fetch the global configuration as needed.
2.3 State replication from the master to the slaves
2.3.1 Replicated state
<IP_ADDRESS> serverconf
database replication
| Data | Replication | Replication method |
|---|---|---|
| serverconf database | replication required | PostgreSQL streaming replication (Hot standby) |
The serverconf database replication is done using streaming replication with hot standby. Note that PostgreSQL replication is all-or-nothing: it is not possible to exclude databases from the replication. This is why the replicated serverconf and non-replicated messagelog databases need to be separated to different instances.
<IP_ADDRESS> Key configuration and software token replication from /etc/xroad/signer/*
| Data | Replication | Replication method |
|---|---|---|
| keyconf and the software token | replicated |
rsync+ssh (scheduled) |
Previously, any external modification to /etc/xroad/signer/keyconf.xml
was overwritten by the X-Road signer process if
it was running. Therefore, replicating the signer configuration without service disruptions would have required taking the
cluster members offline one-by-one. The load balancing support adds the possibility for external modifications to the
keyconf.xml to be applied on slave nodes without service disruptions. The actual state replication is done with a scheduled
rsync over ssh. This might take a few minutes so a slight delay in propagating the changes must be tolerated by the
clustered environment. A small delay should usually cause no problems as new keys and certificates are unlikely to be used
immediately for X-Road messaging. Changes to the configuration are also usually relatively infrequent. These were one of
the basic assumptions about the environment. Users should make sure this holds true for them.
The slave nodes use the keyconf.xml
in read-only mode: no changes made from the admin UI are persisted to disk. Slaves
reload the configuration from disk periodically and apply the changes to their running in-memory configuration.
<IP_ADDRESS> Other server configuration parameters from /etc/xroad/*
| Data | Replication | Replication method |
|---|---|---|
| other server configuration parameters | replicated |
rsync+ssh (scheduled) |
The following configurations are excluded from replication:
-
db.properties
(node-specific) -
postgresql/*
(node-specific keys and certs) -
globalconf/
(syncing globalconf could conflict withconfclient
) -
conf.d/node.ini
(specifies node type: master or slave)
2.3.2 Non-replicated state
<IP_ADDRESS> messagelog
database
The messagelog database is not replicated. Each node has its own separate messagelog database. However, in order to support PostgreSQL streaming replication (hot standby mode) for the serverconf data, the serverconf and messagelog databases must be separated. This requires modifications to the installation (a separate PostgreSQL instance is needed for the messagelog database) and has some implications on the security server resource requirements as a separate instance uses some memory.
<IP_ADDRESS> OCSP responses from /var/cache/xroad/
The OCSP responses are currently not replicated. Replicating them could make the cluster more fault tolerant but the replication cannot simultaneously create a single point of failure. A distributed cache could be used for the responses.
3. X-Road Installation and configuration
This chapter details the complete installation on a high level, with links to other chapters that go into the details.
You can set up the cluster manually, or use the provided Ansible playbook [SS-CLUSTER] if it suits your purposes.
3.1 Prerequisites
In order to properly set up the data replication, the slave nodes must be able to connect to:
- the master server using SSH (tcp port 22), and
- the master
serverconf
database (e.g. tcp port 5433).
3.2 Master installation
-
Install the X-Road security server packages using the normal installation procedure or use an existing standalone node.
-
Stop the xroad services.
-
Create a separate PostgreSQL instance for the
serverconf
database (see section 4. Database replication setup for details). -
Change
/etc/xroad/db.properties
to point to the separate database instance:-
serverconf.hibernate.connection.url
: Change the url port number from5432
to5433
(or the port you specified)
-
-
If you are using an already configured server as the master, the existing configuration was replicated to the slaves in step 3. Otherwise, proceed to configure the master server: install the configuration anchor, set up basic information, create authentication and signing keys and so on. See the security server installation guide [IG-SS] for help with the basic setup.
-
Set up the configuration file replication, see section 5. Configuring data replication with rsync over SSH
- Additionally,
rssh
shell can be used to to restrict slave access further, but note that it is not available on RHEL.
- Additionally,
-
Configure the node type as
master
in/etc/xroad/conf.d/node.ini
:[node] type=master
Change the owner and group of the file to
xroad:xroad
if it is not already. -
Disable support for client-side pooled connections (HTTP connection persistence) in
/etc/xroad/conf.d/local.ini
-
Because the load balancing works at TCP level, disabling persistent HTTP connections is recommended so that the load balancer can evenly distribute the traffic.
[proxy] server-support-clients-pooled-connections=false
-
-
Start the X-Road services.
3.3 Slave installation
-
Install security server packages using the normal installation procedure.
nginx
orxroad-jetty
packages are not required for slave nodes, but the admin graphical user interface (which requires these packages) can be handy for diagnostics. It should be noted that changing a slave's configuration via the admin gui is not possible. -
Stop the xroad services.
-
Create a separate PostgreSQL instance for the serverconf database (see section 4. Database replication setup for details)
-
Change
/etc/xroad/db.properties
to point to the separate database instance and change password to match the one defined in the master database (the password is part of the data that is replicated to the slaves).-
serverconf.hibernate.connection.url
: Change the url port number from5432
to5433
(or the port you specified) -
serverconf.hibernate.connection.password
: Change to match the master db's password (in plaintext).
-
-
Set up SSH between the master and the slave (the slave must be able to access
/etc/xroad
via ssh)- Create an SSH keypair for
xroad
user and copy the public key to authorized keys of the master node (/home/xroad-slave/.ssh/authorized_keys
)
- Create an SSH keypair for
-
Set up state synchronization using rsync+ssh. See section 5. Configuring data replication with rsync over SSH
- Make the inital synchronization between the master and the slave.
rsync -e ssh -avz --delete --exclude db.properties --exclude "/postgresql" --exclude "/conf.d/node.ini" --exclude "/nginx" xroad-slave@<master>:/etc/xroad/ /etc/xroad/
Where
<master>
is the master server's DNS or IP address. -
Configure the node type as
slave
in/etc/xroad/conf.d/node.ini
.[node] type=slave
Change the owner and group of the file to
xroad:xroad
if it is not already. -
Start the X-Road services.
-
If you wish to use the slave security server's admin user interface, you need to implement additional user group restrictions. As noted in step 1, changes to the slave node security server configuration must not be made through its admin user interface, as any such changes would be overwritten by the replication. To disable UI editing privileges for all users, remove the following user groups from the slave security server:
xroad-security-officer
xroad-registration-officer
xroad-service-administrator
xroad-system-administrator
After removing these groups, the super user created during the security server installation is a member of only one UI privilege group:
xroad-securityserver-observer
. This group allows read-only access to the admin user interface and provides a safe way to use the UI for checking the configuration status of the slave security server. Since admin UI users are UNIX users that are members of specific privilege groups, more users can be added to the read-only group as necessary. Security server installation scripts detect the node type of existing installations and modify user group creation accordingly so as to not overwrite this configuration step during security server updates.For more information on user groups and their effect on admin user interface privileges in the security server, see the Security Server User Guide [UG-SS].
The configuration is now complete. If you do not want to set up the health check service, continue to chapter 6 to verify the setup.
3.4 Health check service configuration
The load balancing support includes a health check service that can be used to ping the security server using HTTP to see if it is healthy and likely to be able to send and receive messages. The service is disabled by default but can be enabled via configuration options.
| Proxy service configuration option | Default value | Description |
|---|---|---|
| health-check-interface |
<IP_ADDRESS> (all network interfaces) |
The network interface this service listens to. This should be an address the load balancer component can use to check the server status |
| health-check-port |
0 (disabled) |
The tcp port the service listens to for HTTP requests. The default value 0 disables the service. |
Below is a configuration that can be added to /etc/xroad/conf.d/local.ini
on the master that would enable the health check
service on all the nodes once the configuration has been replicated. Changes to the settings require restarting the
xroad-proxy
service to take effect. This example enables listening to all available network interfaces (<IP_ADDRESS>
) on
port 5588.
[proxy]
health-check-interface=<IP_ADDRESS>
health-check-port=5588
The service can be accessed using plain HTTP. It will return HTTP 200 OK
if the proxy should be able to process messages
and HTTP 500 Internal Server Error
otherwise. A short message about the failure reason, if available, is added to the
body of the response. The service runs as a part of the xroad-proxy
service.
In addition to implicitly verifying that the xroad-proxy
service is running, the health checks verify that:
- The server authentication key is accessible and that the OCSP response for the certificate is
good
. This requires a runningxroad-signer
service in good condition. - The
serverconf
database is accessible.
Each of these status checks has a separate timeout of 5 seconds. If the status check fails to produce a response in this
time, it will be considered a health check failure and will cause a HTTP 500
response.
In addition, each status check result will be cached for a short while to avoid excess resource usage. A successful status check result will be cached for 2 seconds before a new verification is triggered. This is to make sure the OK results are as fresh as possible while avoiding per-request verification. In contrast, verification failures will be cached for 30 seconds before a new verification is triggered. This should allow for the security server to get up and running after a failure or possible reboot before the status is queried again.
Security server's health check interface can also be manually switched to a maintenance mode in order to inform the load balancing solution that the security server will be undergoing maintenance and should be removed from active use.
When in maintenance mode the health check interface will only respond with HTTP 503 Service unavailable
and the message
Health check interface is in maintenance mode
and no actual health check diagnostics will be run. Maintenance mode is disabled
by default and will automatically reset to its default when the proxy service is restarted.
Maintenance mode can be enabled or disabled by sending HTTP GET
-request from the target security server to its proxy admin port 5566
.
The intended new state can be defined using the targetState
HTTP-parameter:
| Command | URI |
|---|---|
| Enable maintenance mode | http://localhost:5566/maintenance?targetState=true |
| Disable maintenance mode | http://localhost:5566/maintenance?targetState=false |
Proxy admin port will respond with 200 OK
and a message detailing the actualized maintenance mode state change,
e.g. Maintenance mode set: false => true
. In case the maintenance mode state could not be changed, the returned
message will detail the reason.
3.4.1 Known check result inconsistencies vs. actual state
There is a known but rarely and not naturally occurring issue where the health check will report an OK condition for a limited time but sending some messages might not be possible. This happens when an admin user logs out of the keys.
The health check will detect if the tokens (the key containers) have not been signed into after xroad-signer
startup.
It will however, not detect immediately when the tokens are manually logged out of. The keys are cached by the xroad-proxy
process for a short while. As long as the authentication key is still cached, the health check will return OK, even though
the necessary signing context values for sending a message might no longer be cached. This means messages might fail to be sent
even if the health check returns OK. As the authentication key expires from the cache (after a maximum of 5 minutes), the
health check will start returning failures. This is a feature of caching and not a bug per se. In addition, logging out
of a security server's keys should not occur by accident so it should not be a surprise that the node cannot send messages
after not having access to it's keys.
3.4.2 Health check examples
Before testing with an actual load balancer, you can test the health check service with curl
, for example.
Below is an example response from the Health check service when everything is up and running and messages should go through this node:
$ curl -i localhost:5588
HTTP/1.1 200 OK
Content-Length: 0
Server: Jetty(8.y.z-SNAPSHOT)
And a health check service response on the same node when the service xroad-signer
is not running:
$ curl -i localhost:5588
HTTP/1.1 500 Server Error
Transfer-Encoding: chunked
Server: Jetty(8.y.z-SNAPSHOT)
Fetching health check response timed out for: Authentication key OCSP status
Continue to chapter 6 to verify the setup.
4. Database replication setup
For technical details on the PostgreSQL replication, refer to the official documentation. Note that the versions of PostgreSQL distributed with RHEL and Ubuntu are different. At the time of writing, RHEL 7 distributes PostgreSQL version 9.2 and Ubuntu 14.04 distributes version 9.3; the replication configuration is the same for both versions.
4.1 Setting up TLS certificates for database authentication
This section describes how to create and set up certificate authentication between the slave and master database instances.
For further details on the certificate authentication, see the PostgreSQL documentation.
-
Generate the Certificate Authority key and a self-signed certificate for the root-of-trust:
openssl req -new -x509 -days 7300 -nodes -sha256 -out ca.crt -keyout ca.key -subj '/O=cluster/CN=CA'
The subject name does not really matter here. Remember to keep the
ca.key
file in a safe place.Alternatively, an existing internal CA can be used for managing the certificates. A sub-CA should be created as the database cluster root-of-trust and use that for issuing the slave and master certificates.
-
Generate keys and certificates signed by the CA for each postgresql instance, including the master. Do not use the CA certificate and key as the database certificate and key.
Generate a key and the Certificate Signing Request for it:
openssl req -new -nodes -days 7300 -keyout server.key -out server.csr -subj "/O=cluster/CN=<nodename>"
Note: The
<nodename>
(the subject common name) will be used for identifying the cluster nodes. For slave nodes, it needs to match the replication user name that is added to the master database and the username that the slave node database uses to connect to the master. For example, in a system with one master and two slaves, the names of the nodes could bemaster
,slave1
andslave2
. Other parts of the subject name do not matter and can be named as is convenient.For more information on adding the replication user name to the master database, see chapter 4.3 Configuring the master instance for replication. Configuring the username into
recovery.conf
on the slave nodes is detailed in chapter 4.4 Configuring the slave instance for replication).Sign the CSR with the CA, creating a certificate:
openssl x509 -req -in server.csr -CAcreateserial -CA ca.crt -CAkey ca.key -days 7300 -out server.crt
Repeat the above steps for each node.
-
Copy the certificates and keys to the nodes:
First, prepare a directory for them:
sudo mkdir -p -m 0755 /etc/xroad/postgresql sudo chmod o+x /etc/xroad
Then, copy the certificates (ca.crt, and the instance's server.crt and server.key) to
/etc/xroad/postgresql
on each cluster instance.Finally, set the owner and access rights for the key and certificates:
sudo chown postgres /etc/xroad/postgresql/* sudo chmod 400 /etc/xroad/postgresql/*
4.2 Creating a separate PostgreSQL instance for the serverconf
database
4.2.1 on RHEL
Create a new systemctl
service unit for the new database. As root, execute the following command:
cat <<EOF >/etc/systemd/system/postgresql-serverconf.service
.include /lib/systemd/system/postgresql.service
[Service]
Environment=PGPORT=5433
Environment=PGDATA=/var/lib/pgsql/serverconf
EOF
Create the database and configure SELinux:
PGSETUP_INITDB_OPTIONS="--auth-local=peer --auth-host=md5" postgresql-setup initdb postgresql-serverconf
semanage port -a -t postgresql_port_t -p tcp 5433
systemctl enable postgresql-serverconf
4.2.2 on Ubuntu
sudo -u postgres pg_createcluster -p 5433 9.3 serverconf
In the above command, 9.3
is the postgresql version. Use pg_lsclusters
to find out what version(s) are available.
PostgreSQL configuration location:
On RHEL, PostgreSQL config files are located in the
PGDATA
directory/var/lib/pgql/serverconf
. Ubuntu keeps the config in/etc/postgresql/<version>/<cluster name>
, e.g./etc/postgresql/9.3/serverconf
4.3 Configuring the master instance for replication
Edit postgresql.conf
and set the following options:
ssl = on
ssl_ca_file = '/etc/xroad/postgresql/ca.crt'
ssl_cert_file = '/etc/xroad/postgresql/server.crt'
ssl_key_file = '/etc/xroad/postgresql/server.key'
listen_addresses = '*' # (default is localhost. Alternatively: localhost, <IP of the interface the slaves connect to>")
wal_level = hot_standby
max_wal_senders = 3 # should be ~ number of slaves plus some small number. Here, we assume there are two slaves.
wal_keep_segments = 8 # keep some wal segments so that slaves that are offline can catch up.
For more information about the streaming replication configuration options, see the PostgreSQL documentation.
Edit pg_hba.conf
and enable connections to the replication pseudo database using client certificates. See chapter
4.1 for the authentication setup.
hostssl replication +slavenode samenet cert
Note: The CN field in the certificate subject must match a replication user name in postgresql. See the PostgreSQL documentation for more details.
The samenet
above assumes that the slaves will be in the same subnet as the master.
Start the master instance:
Ubuntu:
/etc/init.d/postgresql start
RHEL:
systemctl start postgresql-serverconf
Create the replication user(s) with password authentication disabled:
sudo -u postgres psql -p 5433 -c "CREATE ROLE slavenode NOLOGIN";
sudo -u postgres psql -p 5433 -c "CREATE USER "<nodename>" REPLICATION PASSWORD NULL IN ROLE slavenode";
Create a user named serverconf
for local serverconf
database access:
sudo -u postgres psql -p 5433 -c "CREATE USER serverconf PASSWORD '<password>'";
Copy the serverconf
database from the default instance to the new instance:
sudo -u postgres pg_dump -C serverconf | sudo -u postgres psql -p 5433 -f -
To avoid confusion, the old serverconf
database on the master should be renamed, or even deleted.
sudo -u postgres psql -p 5432 -c "ALTER DATABASE serverconf RENAME TO serverconf_old";
4.4 Configuring the slave instance for replication
Prerequisites:
- A separate postgresql instance has been created.
- TLS keys and certificates have been configured in
/etc/xroad/postgresql
as described in section 4.1 Setting up TLS certificates for database authentication
Go to the postgresql data directory:
- RHEL:
/var/lib/pgsql/serverconf
- Ubuntu:
/var/lib/postgresql/9.3/serverconf
Clear the data directory:
rm -rf *
Then, do a base backup with pg_basebackup
:
sudo -u postgres PGSSLMODE=verify-ca PGSSLROOTCERT=/etc/xroad/postgresql/ca.crt PGSSLCERT=/etc/xroad/postgresql/server.crt PGSSLKEY=/etc/xroad/postgresql/server.key pg_basebackup -h <master> -p 5433 -U <nodename> -D .
Where <master>
is the DNS or IP address of the master node and <nodename>
is the node name (the replication user name added to the master database).
Note: This warning by pg_basebackup
can be ignored:
NOTICE: WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup
Next, add the following recovery.conf
to the data directory:
standby_mode = 'on'
primary_conninfo = 'host=<master> port=5433 user=<nodename> sslmode=verify-ca sslcert=/etc/xroad/postgresql/server.crt sslkey=/etc/xroad/postgresql/server.key sslrootcert=/etc/xroad/postgresql/ca.crt'
trigger_file = '/var/lib/xroad/postgresql.trigger'
Where, as above, <master>
is the DNS or IP address of the master node and <nodename>
is the node name (the replication user name added to the master database).
Then set the owner of the recovery.conf
to postgres:postgres
, mode 0600
.
Next, modify postgresql.conf
:
ssl = on
ssl_ca_file = '/etc/xroad/postgresql/ca.crt'
ssl_cert_file = '/etc/xroad/postgresql/server.crt'
ssl_key_file = '/etc/xroad/postgresql/server.key'
listen_addresses = localhost
# no need to send WAL logs
# wal_level = minimal
# max_wal_senders = 0
# wal_keep_segments = 0
hot_standby = on
hot_standby_feedback = on
Notice that on RHEL, during pg_basebackup
the postgresql.conf
was copied from the master node so the WAL sender
parameters should be disabled. Also check that listen_addresses
is localhost-only.
Finally, start the database instance
RHEL:
systemctl start postgresql-serverconf
Ubuntu:
/etc/init.d/postgresql start
Note that on Ubuntu, the command starts all configured database instances.
5. Configuring data replication with rsync over SSH
5.1 Set up SSH between slaves and the master
On the master, set up a system user that can read /etc/xroad
. A system user has their password disabled and can not log
in normally.
Ubuntu:
adduser --system --shell /bin/bash --ingroup xroad xroad-slave
RHEL:
useradd -r -m -g xroad xroad-slave
Create an .ssh
folder and the authorized keys file:
sudo mkdir -m 755 -p /home/xroad-slave/.ssh && sudo touch /home/xroad-slave/.ssh/authorized_keys
Warning: The owner of the file should be root
and xroad-slave
should not have write permission to the file.
On the slave nodes, create an ssh key (ssh-keygen
) without a passphrase for the xroad
user and add the public keys in
the /home/xroad-slave/.ssh/authorized_keys
of the master node. To finish, from slave nodes, connect to the master host
using ssh
and accept the host key.
5.2 Set up periodic configuration synchronization on the slave nodes
The following configuration, which will be set up on the slave nodes will synchronize the configuration in /etc/xroad
periodically (once per minute) and before the services are started. That means that during boot, if the master server is
available, the configuration will be synchronized before the xroad-proxy
service is started. If the master node is down,
there will be a small delay before the services are started.
Note that only modifications to the signer keyconf will be applied when the system is running. Changes to any other configuration files, like
local.ini
, require restarting the services, which is not automatic.
5.2.1 RHEL: Use systemd for configuration synchronization
First, add xroad-sync
as a systemd
service.
Create a new file /etc/systemd/system/xroad-sync.service
:
[Unit]
Description=X-Road Sync Task
After=network.target
Before=xroad-proxy.service
Before=xroad-signer.service
Before=xroad-confclient.service
Before=xroad-jetty.service
[Service]
User=xroad
Group=xroad
Type=oneshot
Environment=XROAD_USER=xroad-slave
Environment=MASTER=<master_host>
ExecStartPre=/usr/bin/test ! -f /var/tmp/xroad/sync-disabled
ExecStart=/usr/bin/rsync -e "ssh -o ConnectTimeout=5 " -aqz --timeout=10 --delete-delay --exclude db.properties --exclude "/conf.d/node.ini" --exclude "*.tmp" --exclude "/postgresql" --exclude "/nginx" --exclude "/globalconf" --exclude "/jetty" --delay-updates --log-file=/var/log/xroad/slave-sync.log ${XROAD_USER}@${MASTER}:/etc/xroad/ /etc/xroad/
[Install]
WantedBy=multi-user.target
WantedBy=xroad-proxy.service
Where <master_host>
is the DNS name or IP address of the master node.
The service will log rsync
events to /var/log/xroad/slave-sync.log
.
Then, add a timer for periodic updates.
Create a new file /etc/systemd/system/xroad-sync.timer
:
[Unit]
Description=Sync X-Road configuration
[Timer]
OnBootSec=60
OnUnitActiveSec=60
[Install]
WantedBy=timers.target
Next, configure SELinux to allow rsync
to be run as a systemd
service
setsebool -P rsync_client 1
setsebool -P rsync_full_access 1
Finally, enable the services:
systemctl enable xroad-sync.timer xroad-sync.service
systemctl start xroad-sync.timer
5.2.2 Ubuntu: Use upstart and cron for configuration synchronization
First, create the main upstart task for syncing.
Create a new file: /etc/init/xroad-sync.conf
:
# xroad-sync
env XROAD_USER=xroad-slave
env MASTER=<master_host>
task
pre-start script
test ! -f /var/tmp/xroad/sync-disabled || { stop; exit 0; }
end script
script
su -s /bin/sh -c 'exec "$0" "$@"' xroad -- rsync -e "ssh -o ConnectTimeout=5 " -aqz --timeout=10 --delete-delay --exclude db.properties --exclude "/conf.d/node.ini" --exclude "*.tmp" --exclude "/postgresql" --exclude "/nginx" --exclude "/globalconf" --exclude "/jetty" --delay-updates --log-file=/var/log/xroad/slave-sync.log ${XROAD_USER}@${MASTER}:/etc/xroad/ /etc/xroad/
end script
Where <master_host>
is the DNS name or IP address of the master node.
The task will log rsync
events to /var/log/xroad/slave-sync.log
.
Then, create a helper task that ensures that the sync task is executed before the services are started.
Create a new file /etc/init/xroad-sync-wait.conf
:
# wait for xroad-sync to complete before starting services
start on starting xroad-proxy or starting xroad-jetty or starting xroad-signer or starting xroad-confclient
stop on stopped xroad-sync
instance $JOB
normal exit 2
task
script
echo "$JOB"
start xroad-sync || :
sleep 360
end script
Next, add a cron job to periodically start the sync task as upstart does not have a timer facility.
Create a new file /etc/cron.d/xroad-state-sync
:
* * * * * root /sbin/initctl --quiet start xroad-sync
A note about the rsync
options:
--delay-updates
and--delete-delay
make the sync more atomic by delaying modifications until data has been downloaded. It is not fully atomic, however, since the files will be moved into place one by one. If the synchronization is disrupted, no modifications will be made.- low connect timeout (5 seconds) and receive timeout (10 seconds) ensure that the synchronization won't hang if e.g. a network connection fails.
5.3 Set up log rotation for the sync log on the slave nodes
The configuration synchronization will log events to /var/log/xroad/slave-sync.log
on the slave nodes. The following
configuration example rotates those logs daily and keeps them for 7 days which should be enough for troubleshooting.
 Verifying the setup
This chapter briefly describes how to check that the replication works. Message delivery is difficult to test without a connection to an X-Road instance test environment.
6.1 Verifying rsync+ssh replication
To test the configuration file replication, a new file can be added to /etc/xroad/
or /etc/xroad/signer/
on the
master node and verify it has been replicated to the slave nodes in a few minutes. Make sure the file is owned by
the group xroad
.
Alternatively, check the sync log /var/log/xroad/slave-sync.log
on the slave nodes and verify it lists successful
transfers. A transfer of an added test file called sync.testfile
to /etc/xroad/signer/
might look like this:
2017/03/10 11:42:01 [10505] receiving file list
2017/03/10 11:42:01 [10507] .d..t...... signer/
2017/03/10 11:42:01 [10507] >f..t...... signer/keyconf.xml
2017/03/10 11:42:01 [10507] >f+++++++++ signer/sync.testfile
2017/03/10 11:42:01 [10505] sent 264 bytes received 1,886 bytes total size 65,346
6.2 Verifying database replication
To see if the database replication is working, connect to the new serverconf
instance on the master node and verify
that the slave nodes are listed.
sudo -u postgres psql -p 5433 -c "select * from pg_stat_replication;"
A successful replication with two slave nodes could look like this:
| pid | usesysid | usename | application_name | client_addr | client_hostname | client_port | backend_start | state | sent_location | write_location | flush_location | replay_location | sync_priority | sync_state |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1890 | 16719 | hdev-ss3 | walreceiver | <IP_ADDRESS> | 45275 | 2017-03-10 06:30:50.470084+02 | streaming | 0/4058A40 | 0/4058A40 | 0/4058A40 | 0/4058A40 | 0 | async | |
| 1891 | 16718 | hdev-ss2 | walreceiver | <IP_ADDRESS> | 50174 | 2017-03-10 06:30:50.918481+02 | streaming | 0/4058A40 | 0/4058A40 | 0/4058A40 | 0/4058A40 | 0 | async |
For more information on the pg_stat_replication
view, see the PostgreSQL documentation.
6.3 Verifying replication from the admin user interface
Verifying the cluster setup via the admin interface requires the cluster to be part of an existing X-Road instance like
FI-DEV
or FI-TEST
or using a custom, configured X-Road environment with at least a central server and the security
server cluster behind a load balancer.
To test the configuration file replication from the admin user interface, a key can be created in the admin interface of the master node. In addition, a certificate signing request can be created for the key in the UI, downloaded, signed by an external CA and then uploaded back to the admin UI. For help on these tasks, see the Security Server User Guide [UG-SS].
The keys and certificate changes should be propagated to the slave nodes in a few minutes.
The serverconf
database replication can also be tested on the admin UI once the basic configuration, as mentioned in
3. X-Road Installation and configuration is done. A new subsystem can be added
to the master node. A registration request can be sent to the central server, but it is not required. The added subsystem
should appear on the slave nodes immediately.
7. Upgrading a clustered X-Road security server installation
This chapter briefly discusses ways of upgrading the X-Road software in a clustered environment. The offline option will disrupt message delivery while the online option should allow upgrades with minimal disruption.
7.1 Offline upgrade
If the X-Road security server cluster can be shut down for an offline upgrade, the procedure remains fairly simple:
- Stop the X-Road services (
xroad-proxy
,xroad-signer
,xroad-confclient
,xroad-jetty
andxroad-monitor
) on all the nodes. You can read more about the services in the Security Server User Guide [UG-SS] chapter on System services. - Upgrade the packages on the master node to the new software version.
- Let any database and configuration changes propagate to the cluster members.
- Upgrade the packages on the slave nodes.
- Start the X-Road services.
7.2 Online rolling upgrade
It is possible to upgrade the software in a cluster to a new version with minimal service disruption.
The steps are in more detail below, but in short, the procedure is:
- Pause the database and configuration synchronization on the slave nodes. Pausing the synchronization ensures that potentially incompatible changes are not propagated to slaves before they are upgraded.
- Set the master node to maintenance mode or manually disable it from the external load balancer, upgrade the software, then resume operation.
- One by one, set a slave node to maintenance mode or manually disable it from the external load balancer, re-enable synchronization, upgrade it, then resume operation.
7.2.1 Pausing the database and configuration synchronization
-
Pause the database synchronization. Assuming that the
serverconf
database is running in port5433
, issue the following command:sudo -u postgres psql -p 5433 -c 'select pg_xlog_replay_pause();'
-
Disable the configuration synchronization on the slave nodes:
sudo -u xroad touch /var/tmp/xroad/sync-disabled
Note: Check that the synchronization service is configured to honor the
sync-disabled
flag. See the chapter on Setting up periodic configuration synchronization on the slave nodes for more details.
7.2.2 Upgrading the master
-
Either use the health check maintenance mode or manually disable the master node from your external load balancer. A disabled node on the load balancer should be handled gracefully so that in-flight requests are allowed to finish while new requests are routed to other nodes (connection draining).
You can read more about the health check maintenance mode in the chapter about the health check service configuration.
In short, to enable the maintenance mode, on the master node, call the proxy admin port (default port
5566
) with:curl http://localhost:5566/maintenance?targetState=true
The admin port should respond with:
Maintenance mode set: false => true
-
Check that the master is no longer processing requests and stop the X-Road services (
xroad-proxy
,xroad-signer
,xroad-confclient
,xroad-jetty
,xroad-monitor
) on the master node. You can read more about the services in the Security Server User Guide [UG-SS] chapter on System services.To ensure that the node is no longer processing requests, you can monitor
/var/log/xroad/proxy.log
to verify that no more requests are arriving or check that there are no connections to the port 5500 with:watch -n1 ss -tn state established sport = :5500 or dport = :5500
-
Upgrade the packages on the master node to the new software version.
-
Start the X-Road services and wait until the master node is healthy.
-
a) If the maintenance mode was enabled, the maintenance status from the health check port was cleared on startup of the
xroad-proxy
service. The health check should start returning a200 OK
status as soon as security server can process messages.b) If the master node was disabled manually from the external load balancer, verify that the master node is working and enable it from the load balancer. To check if a node is healthy, you can use the health check service:
curl -i http://localhost:<health-check-port>
See 3.4 Health check service configuration for more details.
7.2.3 Upgrade a single slave node
Repeat this process for each slave node, one by one.
-
Gracefully disable the slave node from the load balancer, either manually or using the health check maintenance mode. See step 1 from the master update instructions for more details.
-
Stop the X-Road services once the slave has stopped processing requests. See step 2 from the master update instructions for more details.
-
Enable database synchronization on the slave:
sudo -u postgres psql -p 5433 -c 'select pg_xlog_replay_resume()'
Note that the above command assumes that the
serverconf
database is running in port5433
. -
Enable the shared configuration synchronization on the slave node:
sudo rm /var/tmp/xroad/sync-disabled
-
Wait for the master node changes to propagate to the slave node.
The configuration synchronization can be forced, if necessary.
Ubuntu:
sudo start xroad-sync
RHEL:
sudo systemctl start xroad-sync
Note: Before proceeding, make sure that the database is up to date. The following should return
t
:sudo -u postgres psql -p 5433 -c 'select pg_last_xlog_replay_location() = pg_last_xlog_receive_location()'
-
Upgrade the packages on the slave node to the new software version.
-
Start the X-Road services and wait until the slave node is healthy.
-
After the node is healthy, enable the slave node in the load balancer if you manually disabled it. If using the maintenance mode, it was cleared on
xroad-proxy
service restart. See step 5 from the master update instructions for more details.


LFE-Related History
Lisp
-
History of Lisp
- 1956 through 1962. The paper presented by John McCarthy at the
first HOPL conference
in 1978.
-
The Evolution of Lisp
- 1960 through 1992. The paper by Guy Steele and Richard Gabriel at
HOPL II in 1993
which picks up where McCarthy left off in his 1978 paper.
-
History of LISP
- This is an amazing resource which aims to preserve as much Lisp history
as possible. (The Software Preservation Group is backed by the world-class
Computer History Museum in Mountain View, California, USA.)
-
Herbert Stoyan collection on LISP programming
- The Herbert Stoyan collection on LISP programming contains materials
documenting the origins, evolution, and use of the LISP programming
language and many of its applications in artificial intelligence.
Actor Model
Erlang
-
A History of Erlang
- Joe Armstrong's 2007 paper which he presented at the
HOPL III
conference.
- Erlang Timeline, 1982 - 1993.
-
The True story about why we invented Erlang ...
[video |
slides]
- Mike Williams presents at Erlang Factory London 2011.
-
Video interview with Mike Williams
- History of Erlang, Modeling, and Large Scale Design (Erlang Factory London 2011).
-
A History of the Erlang VM
[video |
slides]
- Robert Virding talks about the various incarnations of the Erlang
Abstract Machine at Erlang Factory San Francisco 2011.
-
26 years with Erlang
- Joe Armstrong tells us how he got his grey hairs at a 2013 Chicago Erlang
Meetup.
-
A Brief History of Erlang
- an essay for a course on the Principles of Programming Languages.
LFE


Obliterate the following items from:
the past hour
the past day
the past week
the last 4 weeks
the beginning of time
Browsing history
Download history
Cookies and other site and plug-in data
Cahced images and files
Passwords
Autofull form data
Hosted app data
Save


The example shows two objects (person A and person B). You can add some info for person A and then copy it to person B with Deep Copy button.
After that you can edit person A info and hit second button that will show paerson A and person B after the update.
Person B should not be changed by the changes made to person A


Brandscan uses the camera on your phone to read barcodes and look up product information such as reviews.


Thresher shark rudd African lungfish silverside, Red salmon rockfish grunion, garpike zebra danio king-of-the-salmon banjo catfish."
Sea chub demoiselle whalefish zebra lionfish mud cat pelican eel. Minnow snoek icefish velvet-belly shark, California halibut round stingray northern sea robin. Southern grayling trout-perch
Sharksucker sea toad candiru rocket danio tilefish stingray deepwater stingray Sacramento splittail, Canthigaster rostrata. Midshipman dartfish Modoc sucker, yellowtail kingfish basslet.  Midshipman dartfish Modoc sucker, yellowtail kingfish
Gray eel-catfish longnose whiptail catfish smalleye squaretail queen danio unicorn fish shortnose greeneye fusilier fish silver carp
Rockweed gunnel; candlefish mail-cheeked fish, yellowtail snapper cuskfish elasmobranch seamoth triggerfish gar
Murray cod clownfish American sole rockfish dojo loach gulper, trout-perch footballfish, pelican eel. Spinefoot coelacanth eagle ray
Murray cod clownfish American sole rockfish dojo loach gulper, trout-perch footballfish, pelican eel. Spinefoot coelacanth eagle ray
Murray cod clownfish American sole rockfish dojo loach gulper, trout-perch footballfish, pelican eel. Spinefoot coelacanth eagle ray
Gray eel-catfish longnose whiptail catfish smalleye squaretail queen danio unicorn fish shortnose greeneye fusilier fish silver carp


Categories:
-
Our Picks
-
{{c.name}}
{{a.msg}}
All our combo meals include $1 OFF!
Kids' meals are FREE with order of entree. Note: You must have entree in the cart before ordering free kids meal.
{{i.name}}
${{i.price}}
Information:
Hearty Spicy Vegetarian Gluten Free


DetailView Binding
More...
|
| | DetailView (string userId, string itemId, DateTime?timestamp=null, long?duration=null, string recommId=null, Dictionary< string, object > additionalData=null) |
| |
| override bool | Equals (Object obj) |
| | Determines whether the specified object is equal to the current object More...
|
| |
| override int | GetHashCode () |
| | Hash function More...
|
| |
|
| string | UserId [get] |
| | User who viewed the item More...
|
| |
| string | ItemId [get] |
| | Viewed item More...
|
| |
| DateTime | Timestamp [get] |
| | UTC timestamp of the view as ISO8601-1 pattern or UTC epoch time. The default value is the current time. More...
|
| |
| long | Duration [get] |
| | Duration of the view More...
|
| |
| string | RecommId [get] |
| | If this detail view is based on a recommendation request, recommId is the id of the clicked recommendation. More...
|
| |
| Dictionary< string, object > | AdditionalData [get] |
| | A dictionary of additional data for the interaction. More...
|
| |
| Recombee.ApiClient.Bindings.DetailView.DetailView |
( |
string |
userId, |
|
|
string |
itemId, |
|
|
DateTime? |
timestamp = null , |
|
|
long? |
duration = null , |
|
|
string |
recommId = null , |
|
|
Dictionary< string, object > |
additionalData = null |
|
) |
| |
|
inline |
| override bool Recombee.ApiClient.Bindings.DetailView.Equals |
( |
Object |
obj | ) |
|
|
inline |
Determines whether the specified object is equal to the current object
- Parameters
-
| obj | The object to compare with the current object |
- Returns
- true if the specified object is equal to the current object; otherwise, false
| override int Recombee.ApiClient.Bindings.DetailView.GetHashCode |
( |
| ) |
|
|
inline |
Hash function
- Returns
- A hash code for the current object
| Dictionary<string, object> Recombee.ApiClient.Bindings.DetailView.AdditionalData |
|
get |
A dictionary of additional data for the interaction.
| long Recombee.ApiClient.Bindings.DetailView.Duration |
|
get |
| string Recombee.ApiClient.Bindings.DetailView.ItemId |
|
get |
| string Recombee.ApiClient.Bindings.DetailView.RecommId |
|
get |
If this detail view is based on a recommendation request, recommId
is the id of the clicked recommendation.
| DateTime Recombee.ApiClient.Bindings.DetailView.Timestamp |
|
get |
UTC timestamp of the view as ISO8601-1 pattern or UTC epoch time. The default value is the current time.
| string Recombee.ApiClient.Bindings.DetailView.UserId |
|
get |
The documentation for this class was generated from the following file:


Some Graphs on 2000 Elections comparing George W. Bush and Al Gore
The links to the interaction graphs
Bush & Gore for January 2000
Bush & Gore for February 2000
Bush & Gore for March 2000
Bush & Gore for July 2000
Bush & Gore for September 2000
Bush & Gore for First half of 2000
The links to the individual graphs
Bush for January 2000
Bush for February 2000
Bush for March 2000


Because, lets be honest, in today's world, we all know there are too many organizations who aren't being ethical. Click here to see ur commitment to civic responsibility.
Ethics is great and all, but that's not why you're here, is it? Click here to be relocated to examples of my work.
Maybe you came here looking for someone to make a website for you, and you didn't like what you see (ouch). No sweat, maybe fate brought you here for other reasons. Click here for inspiration.


Add Book
View All Books
Add New Book
Please fill all fields
Book Added
Title
Book author
Date
Image URL


、
We're sorry but xinfeg doesn't work properly without JavaScript enabled. Please enable it to continue.


Creativity is allowing yourself to make mistakes.
Design is knowing which one to keep.
Fundamentals of Design
(User Experience Design)
Navaneeth
UI/UX Designer, Founder.
www.alchidesignstudio.com
Agenda of this session
1. UI / UX / XD / U* / X*?
2. Design Principles
3. Layout and Composition
4. Color Theory
5. Experience Design
6. Design Process
7. Where the industry is going?
Creative and Artistic
Scope is at the aesthetic level.
Logical and Analytical
Scope is at the human experience level.
Holistic approach towards the entire
experience of the system.
We will discuss this in a bit.
1. UI / UX / XD / U* / X*?
2. Design Principles
3. Layout and Composition
4. Color Theory
5. Experience Design
6. Design Process
7. Where the industry is going?
Balance is the distribution of the visual weight of objects, colors, texture, and space.
Emphasis is the part of the design that catches the viewer’s attention.
Movement is the path the viewer’s eye takes through the design.
Unity is the feeling of harmony between all parts of the design, which creates a sense of completeness.
Helps build the trust.
The repetition of elements of design creates unity within the interface.
Proportion is the feeling of unity created when all parts (sizes, amounts, or number) relate well with each other.
1. UI / UX / XD / U* / X*?
2. Design Principles
3. Layout and Composition
4. Color Theory
5. Experience Design
6. Design Process
7. Where the industry is going?
Building Blocks of the Interface Design.
They give the UI element a structure and make it easier to navigate.
There are few parameters to keep in mind!
Objects that appear close to each other on a screen are related to each other
Right amount of whitespace between the UI elements can help highlight important content
Creates sharper, more visually-appealing design
Contrast simply means that one item is different from another.
In layout and composition, contrast can help you do many things, like catch the reader's eye, create emphasis, or call attention to something important.
Any secret formula?!
The golden ratio is a mathematical proportion between the elements of different sizes which is thought to be the most aesthetically pleasing for human eyes.
1. UI / UX / XD / U* / X*?
2. Design Principles
3. Layout and Composition
4. Color Theory
5. Experience Design
6. Design Process
7. Where the industry is going?
Each color band is deeply linked with human emotions
Choose the color band under which your product fits in right!
1. UI / UX / XD / U* / X*?
2. Design Principles
3. Layout and Composition
4. Color Theory
5. Experience Design
6. Design Process
7. Where the industry is going?
What's the difference between UX and XD?
focuses on “enhancing user satisfaction with a product by improving the usability, accessibility, and pleasure provided in the interaction with the product.”
follows a broader mandate. It focuses on “moments of engagement, or touch-points, between people and brands, and the ideas, emotions, and memories that these moments create.”
Which BRAND has the BEST EXPERIENCE DESIGN??!
Is there a formula for XD like Golden Ratio for layouts?
Yes. Basically its the pattern in which the BRAND story is told.
1. UI / UX / XD / U* / X*?
2. Design Principles
3. Layout and Composition
4. Color Theory
5. Experience Design
6. Design Process
7. Where the industry is going?
Rapid Wireframing helps test the product idea incurring minimal cost
1. UI / UX / XD / U* / X*?
2. Design Principles
3. Layout and Composition
4. Color Theory
5. Experience Design
6. Design Process
7. Where the industry is going?
1. UI / UX / XD / U* / X*?
2. Design Principles
3. Layout and Composition
4. Color Theory
5. Experience Design
6. Design Process
7. Where the industry is going?
www.navaneeth.in/SIH2019
Thank you!


Mum who died during 'Brazilian butt lift' surgery 'may not have known the risks'
A mother-of-three who died during a ‘Brazilian butt lift’ operation may not have been appropriately informed about the risks involved in the controversial procedure, an inquest heard.
Leah Cambridge, 29, saved up thousands to have the surgery done in Turkey last August, after feeling ‘paranoid about her body’.
But she died during the operation, which involves fat being removed from areas of the body such as the stomach and back, and transferred into the buttocks to achieve an hourglass figure.
An inquest into her death at Wakefield Coroners’ Court heard the beautician, from Leeds, booked the procedure through Elite Aftercare, a company which links patients to surgeons in Turkey.
Simon Withey, a consultant plastic and reconstructive surgeon at the Royal Free Hospital in London, told the court the procedure has been banned in the UK pending further information on its dangers.
The temporary moratorium followed a report by a US taskforce which suggested it could be up to 10 times as dangerous as the next riskiest cosmetic surgery.
Advertisement Advertisement
Discussing the dangers, Mr Withey said that it is still ‘not entirely clear’ why ‘surgeons who know what they are doing and are doing things very safely will still have deaths’.
Earlier in the inquest Ms Cambridge’s mother, Theresa Hall, said they arrived in Turkey together late on August 26 and were taken straight to the Izmir Private Can Hospital where various forms were thrust in front of her.
She described how it ‘all felt like such a rush’ and said she believed her daughter was pressured into reading and signing the papers, outlining some of the safety risks, as quickly as possible so the surgery could start.
Although Mr Withey was not directly involved in Ms Cambridge’s case, he told the inquest she may not have been fully aware of how dangerous the butt lift is.
‘She was a willing participant, but as to whether she was informed appropriately, I have my doubts that she was,’ he said.
The inquest continues.
Got a story for Metro.co.uk?
Get in touch with our news team by emailing us at<EMAIL_ADDRESS>For more stories like this, check our news page.


In this page, you can find:
The Space Awareness online course MOOC series. Free and open to anyone, the courses especially target primary and secondary school teachers and science communication professionals interested in developing their skills and use space for education.
Thematic guided lesson plans and support material allow education professionals to follow examples of activities with tips and guidelines.
Assessment tools to supporting student’s effective development, understand their current knowledge and confidence in the topic being taught. Go to Assessment tools.


Exports
item
Relations
| Name |
Role |
Cardinality |
Inherited |
Flags |
Description |
| comment |
comments |
one-to-many |
|
|
|
Relations
| Name |
Role |
Cardinality |
Inherited |
Flags |
Description |
| comment |
comments |
one-to-many |
|
|
|
| Element |
Tag |
Super |
Flags |
|
temp
|
temp |
commentable |
|
Description
The root tag of the temp schema.
Relations
| Name |
Role |
Cardinality |
Inherited |
Flags |
Description |
| item |
items |
one-to-many |
|
|
|
| comment |
comments |
one-to-many |
commentable |
|
|
| Element |
Tag |
Super |
Flags |
|
item
|
item |
commentable |
|
Description
A wizzi schema comment is considered a markdown text and
can contain markdown synthax
### Title 1
## Title 2
# Title 3
An element comment can be multiline in a single paragraph using the ittf continuation tag 'slash'b or '\b' or '\\b'.
Could have a second paragraph line ...
with an inner line ...
and more ...
and more deep lines.
And can embed an ittf ...
[*ittf
function hello
And embed code
```ruby
require 'redcarpet'
markdown = Redcarpet.new("Hello World!")
puts markdown.to_html
```
Relations
| Name |
Role |
Cardinality |
Inherited |
Flags |
Description |
| comment |
comments |
one-to-many |
commentable |
|
|


|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.google.ical.util.DTBuilder
public class DTBuilder
a mutable buffer that can be used to build DateValue
s and
DateTimeValue
s.
| Field Summary | |
|---|---|
int |
day
one indexed |
int |
hour
zero indexed in 24 hour time. |
int |
minute
zero indexed |
int |
month
one indexed. |
int |
second
zero indexed |
int |
year
in AD. |
| Constructor Summary | |
|---|---|
DTBuilder()
|
|
DTBuilder(DateValue dv)
|
|
DTBuilder(int year,
int month,
int day)
|
|
DTBuilder(int year,
int month,
int day,
int hour,
int minute,
int second)
|
| Method Summary | |
|---|---|
int |
compareTo(DateValue dv)
behavior undefined unless normalized. |
boolean |
equals(java.lang.Object o)
|
int |
hashCode()
|
void |
normalize()
makes sure that the fields are in the proper ranges, by e.g. |
DateValue |
toDate()
produces a normalized date. |
DateTimeValue |
toDateTime()
produces a normalized date time, using zero for the time fields if none were provided. |
java.lang.String |
toString()
|
| Methods inherited from class java.lang.Object |
|---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
| Field Detail |
|---|
public int year
public int month
public int day
public int hour
public int minute
public int second
| Constructor Detail |
|---|
public DTBuilder()
public DTBuilder(int year, int month, int day, int hour, int minute, int second)
public DTBuilder(int year, int month, int day)
public DTBuilder(DateValue dv)
| Method Detail |
|---|
public DateTimeValue toDateTime()
public DateValue toDate()
public int compareTo(DateValue dv)
toDateValue().compareTo(dv)
instead.
public void normalize()
public java.lang.String toString()
toString
in class java.lang.Object
public boolean equals(java.lang.Object o)
equals
in class java.lang.Object
public int hashCode()
hashCode
in class java.lang.Object
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


Quote: {{quote.description}}
Author: {{quote.name}}
This quote will be completed in {{quote.completeDate|dateCount}} days


The first step of algorithm is to load 3 years of trailing values of the Fama-French factors. We call the AddData method and provide the Fama-French data source URL from our Tutorials repo. We save the loaded data into a DataFrame in the alpha model.
In coarse universe selection, we return the first 400 symbols that have fundamental data. In fine universe selection, we rank the stocks by market cap and return the symbols that are in the top 10%. We only create ResidualMomentum objects for stocks added to the universe that have atleast 3 years of historical prices.
During construction of ResidualMomentum objects, we manually warmup the trailing 3 years of monthly returns for the security. We also set up a monthly consolidator to update the trailing returns each month and to recalculate the score. The score is calculated by fitting a linear regression model to the trailing 36 months of data, using the Fama-French factors as independent variables and the monthly returns of each stock as the dependent variable.
\[r_t = \alpha + \beta_1 * Mkt_t + \beta_2 * SMB_t + \beta_3 * HML_t + \epsilon_t \]Where \(r_t\) is the monthly return of the stock in month \(t\); \(Mkt_t\), \(SMB_t\), and \(HML_t\) are the Fama-French factor values in month \(t\); and \(epsilon_t\) is the residual return in month \(t\). After fitting, we test the model on the trailing 12 months of data (excluding the most recent month) to calculate the score. We simply sum the residuals and divide by the standard deviation of the residuals to get the score.
\[score = \frac{\sum{} \epsilon}{\sigma_\epsilon} \]If a stock's price is below $1 when calculating the score, it's score is set to None, excluding it from trading during the rebalance.
We rebalance the portfolio at the beginning of each month. After calculating a score for each security, we long the 10% of stocks with the greatest scores and short the 10% of stocks with the lowest scores, holding until the next rebalance.


File: ../src/away/core/traverse/RaycastCollector.ts
///<reference path="../../_definitions.ts"/> module away.traverse { /** * The RaycastCollector class is a traverser for scene partitions that collects all scene graph entities that are * considered intersecting with the defined ray. * * @see away3d.partition.Partition3D * @see away3d.partition.Entity */ export class RaycastCollector extends away.traverse.EntityCollector { private _rayPosition:away.geom.Vector3D = new away.geom.Vector3D(); private _rayDirection:away.geom.Vector3D = new away.geom.Vector3D(); /** * Creates a new RaycastCollector object. */ constructor() { super(); } /** * Provides the starting position of the ray. */ public get rayPosition():away.geom.Vector3D { return this._rayPosition; } public set rayPosition(value:away.geom.Vector3D) { this._rayPosition = value; } /** * Provides the direction vector of the ray. */ public get rayDirection():away.geom.Vector3D { return this._rayDirection; } public set rayDirection(value:away.geom.Vector3D) { this._rayDirection = value; } /** * Returns true if the current node is at least partly in the frustum. If so, the partition node knows to pass on the traverser to its children. * * @param node The Partition3DNode object to frustum-test. */ public enterNode(node:away.partition.NodeBase):boolean { return node.isIntersectingRay(this._rayPosition, this._rayDirection); } /** * @inheritDoc */ public applySkyBox(renderable:away.base.IRenderable) { } /** * Adds an IRenderable object to the potentially visible objects. * @param renderable The IRenderable object to add. */ public applyRenderable(renderable:away.base.IRenderable) { } /** * @inheritDoc */ public applyUnknownLight(light:away.lights.LightBase) { } } }


General Dynamics wins $732 million U.S. defense contract: Pentagon
WASHINGTON (Reuters) - General Dynamics Corp (GD.N) has been awarded a $732 million U.S. defense contract for sustainment of the Mobile User Objective System ground system, a narrowband military satellite communications system, the Pentagon said on Friday.


G C G D
G C G D G
C G G A D
G C G D G
The news is out - all over town
That you've been seen - out runnin round
I know that I - should leave, but then
I just can't go - you win a - gain.
Bridge:
This heart of mine - could never see
What everybody - knew but me
Just trusting you - was my great sin
What can I do - you win a- gain.
2nd verse:
Im sorry for - your victim now
Cause soon his head - like mine will bow
Hell give his heart - but all in vain
And someday say - you win again.
2nd bridge:
You have no heart - you have no shame
You take true love - and give the blame
I guess that I - should not complain
I love you still - you win again.


Joining Can Can - the casino where you always win !
Rules & Regulations
{% endblock %}
{% block content %}
This notice and series of games are copyright and all rights are reserved.
For all other purposes, nothing here is real.
No liability is created and none intended.
Everything is by way of example.
All transactions are fictional.

Anyone fooling around with the code, gets sent to Siberia.
No money is being won or lost.
A prize may be awarded to the twenty highest scoring players each month, based on half the notional income from banner ads, whenever such arrives, but nobody should count on it.
Further rules will be posted whenever it makes sense to do so.


[gecode-users] I need get informacion during search process
Guido Tack
tack at ps.uni-sb.de
Thu Jun 7 11:10:32 CEST 2007
Hi.
Ivan Carvajal wrote:
> Hi, i use Gecode/J and need get information during the search
> process, this information is: amount propagation, clones, commit,
> and depth of three.
Both DFSSearch and BABSearch have a method "statistics". The returned
object contains nearly all the information you require, just have a
look at the documentation. The only thing that's missing is the depth
of the tree. If you need that, you will have to implement your own
search engine that keeps track of this information.
Cheers,
Guido
--
Guido Tack
Programming Systems Lab, Saarland University, Germany
http://www.ps.uni-sb.de/~tack
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ps.uni-sb.de/pipermail/users/attachments/20070607/c66a5ae8/attachment.htm>
More information about the gecode-users
mailing list


| error |
0 |
No summary was found for this file |
| error |
57 |
No summary for method tableName() |
| error |
75 |
No summary for method rules() |
| error |
93 |
No summary for method attributeLabels() |
| error |
121 |
Argument $id is missing from the Docblock of findIdentity |
| error |
121 |
No summary for method findIdentity() |
| error |
129 |
Argument $token is missing from the Docblock of findIdentityByAccessToken |
| error |
129 |
Argument $type is missing from the Docblock of findIdentityByAccessToken |
| error |
129 |
No summary for method findIdentityByAccessToken() |
| error |
222 |
No summary for method getId() |
| error |
227 |
No summary for method getCompanyId() |
| error |
235 |
No summary for method getAuthKey() |
| error |
243 |
Argument $authKey is missing from the Docblock of validateAuthKey |
| error |
243 |
No summary for method validateAuthKey() |
| error |
294 |
No summary for method isRecruiter() |
| error |
299 |
Argument $q is missing from the Docblock of getAutocompleteUser |
| error |
299 |
No summary for method getAutocompleteUser() |
| error |
314 |
No summary for method getFavourites() |
| error |
319 |
No summary for method getJobContacts() |
| error |
324 |
No summary for method getMessages() |
| error |
329 |
No summary for method getResumeJobs() |
| error |
334 |
No summary for method getResumeSchools() |
| error |
342 |
No summary for method getPicture() |
| error |
347 |
No summary for method getCompany() |
| error |
353 |
Argument $thumbnail is missing from the Docblock of getProfilePicture |
| error |
353 |
No summary for method getProfilePicture() |


Think
The Changing Face of Heroin
America's prescription painkiller epidemic has fueled an unexpected rise in another addictive drug: heroin. See how the demographics of heroin users have shifted over time as the demand for this drug has skyrocketed.
View ProjectThe State of Syringe Exchange
The availability of needle exchanges has the potential to mitigate the spread of diseases transmitted by injection drug use and needle sharing. Given that between 2011 and 2013 the estimated number of new cases of hepatitis C rose from 16,500 to 29,700, this issue is as important as ever.
View ProjectTweeting About Heroin
Heroin use in the United States has been growing at an alarming rate in recent years, and the prevalence of this drug is reflected in the conversations being held on Twitter. We found over 16,000 tweets from a recent 12-month period that mentioned heroin, and examined the data to find out more about who these people are and what they are saying about this deadly drug.
View Project


Change Username
Enter your username and password to change your username.
Change Password
Enter your current password and new password below.
Enter your username and password to change your username.
Enter your current password and new password below.


Raptors’ Nick Nurse: Serge Ibaka could be ready to return on weekend
by Sportsnet StaffToronto Raptors forward Serge Ibaka has a shot at being ready to play by the weekend, head coach Nick Nurse told reporters on Wednesday.
Ibaka has been sidelined since Nov. 8 with a right ankle sprain after limping off the court in a game against the New Orleans Pelicans. He flew to Toronto to rehab the injury two days later as the team proceeded to Los Angeles on their road trip.
The Raptors will play the Atlanta Hawks on Saturday at State Farm Arena.
Ibaka, 30, has averaged 14 points, 6.5 rebounds and 1.3 blocks through eight games with Toronto this season.


Fnalyzer
Fnalyzer is a web-based utility focusing on stat projections and correlations for fantasy team creators
Currently only analyzing daily NBA game statline correlations and projections
Sample table (arbitrary numbers):
| Player Name: | Team: | Opp: | Avg FanDuel: | Avg DraftKings: | Avg ESPN: | Avg Yahoo: |
| Lebron James | CLE | GS | 30.0 | 25.0 | 27.0 | 29.0 |
| Stephen Curry | GS | CLE | 35.0 | 31.0 | 32.0 | 33.0 |


A novel coronavirus is a new coronavirus that has not been previously identified. The virus causing coronavirus disease 2019 (COVID-19), is not the same as the coronaviruses that commonly circulate among humans and cause mild illness, like the common cold.
A diagnosis with coronavirus 229E, NL63, OC43, or HKU1 is not the same as a COVID-19 diagnosis. Patients with COVID-19 will be evaluated and cared for differently than patients with common coronavirus diagnosis.
On February 11, 2020 the World Health Organization announced an official name for the disease that is causing the 2019 novel coronavirus outbreak, first identified in Wuhan China. The new name of this disease is coronavirus disease 2019, abbreviated as COVID-19. In COVID-19, ‘CO’ stands for ‘corona,’ ‘VI’ for ‘virus,’ and ‘D’ for disease. Formerly, this disease was referred to as “2019 novel coronavirus” or “2019-nCoV”.
There are many types of human coronaviruses including some that commonly cause mild upper-respiratory tract illnesses. COVID-19 is a new disease, caused be a novel (or new) coronavirus that has not previously been seen in humans. The name of this disease was selected following the World Health Organization (WHO) best practice for naming of new human infectious diseases.
Current symptoms reported for patients with COVID-19 have included mild to severe respiratory illness with fever, cough, and difficulty breathing. Read About COVID-19 Symptoms
Based upon available information to date, those at high-risk for severe illness from COVID-19 include:
Generally, pregnant women do not appear to be more likely to be severely unwell than other healthy adults if they develop the new coronavirus. It is expected the large majority of pregnant women will experience only mild or moderate cold/flu like symptoms.
More severe symptoms such as pneumonia appear to be more common in older people, those with weakened immune systems or long-term conditions. As yet, there is no evidence that pregnant women who get this infection are more at risk of serious complications than any other healthy individuals.
If you think you may have symptoms of COVID-19 you should use the online service for information. If you develop more severe symptoms or your recovery is delayed this may be a sign that you are developing a more significant chest infection that requires enhanced care. Our advice remains that if you feel your symptoms are worsening or if you are not getting better you should contact your maternity care team or use the online service for further information and advice.
As this is a very new virus we are just beginning to learn about it. There is no evidence to suggest an increased risk of miscarriage.
There is also no evidence that the virus can pass to your baby while you are pregnant or during birth (this is called vertical transmission). Two cases of possible vertical transmission have been reported. In both cases, it remains unclear whether transmission was prior to or soon after birth. Another recent report from China of four women with coronavirus infection when they gave birth found no evidence of the infection in their newborn babies. Expert opinion is that the baby is unlikely to be exposed during pregnancy. It is also therefore considered unlikely that if you have the virus it would cause problems with the baby’s development, and none have been observed currently.
Some babies born to women with symptoms of coronavirus in China have been born prematurely. It is unclear whether coronavirus caused early labour, or whether it was recommended that the baby was born early in order to preserve the mother’s health.
The UK is conducting near-real-time surveillance of all women who develop COVID-19 during pregnancy and their newborn babies, through well-established systems already used by all maternity units. We will update this information if and as soon as there is any change in the evidence.
The most important thing to do is to follow government guidance. For pregnant women, this includes:
Pregnant woman were placed in a vulnerable group by the Chief Medical Officer on 16th March. This means you have been advised to reduce social contact through social distancing measures.
Based on the evidence we have so far, pregnant women are still no more likely to contract coronavirus than the general population. What we do know is that pregnancy in a small proportion of women can alter how your body handles severe viral infections. This is something that midwives and obstetricians have known for many years and are used to dealing with. As yet, there is no evidence that pregnant women who get this infection are more at risk of serious complications than any other healthy individuals.
What has driven the decisions made by officials to place pregnant women in the vulnerable category is caution. We know that some viral infections are worse in pregnant women. At the moment, there’s no evidence that this is the case for coronavirus infection, but the amount of evidence available is still quite limited.
As a precaution, you should follow government advice about social distancing; stay away from public places and avoid anyone who has symptoms suggestive of coronavirus.
If you are in your third trimester (more than 28 weeks pregnant) you should be particularly attentive to social distancing and minimising contact with others.
We understand that it must be an anxious time if you are pregnant and you work in a public facing role, following the Chief Medical Officer’s advice on 16 March 2020 that all pregnant women are in a vulnerable group.
Pregnant women who can work from home should do so. If you can’t work from home, if you work in a public-facing role that can be modified appropriately to minimise your exposure, this should be considered and discussed with your occupational health team or employer.
The guidance was updated on 26 March to emphasize that pregnant women of any gestation should be offered the choice of whether to work in direct patient-facing roles during the coronavirus pandemic. Your choices on whether you continue to work in direct patient-facing roles during the coronavirus pandemic should be respected and supported by your employers.
If you are in your first or second trimester (less than 28 weeks pregnant), with no underlying health conditions, you should practise social distancing but can choose to continue to work in a patient-facing role. If you choose to continue working, it is strongly recommended the necessary precautions are taken. You should avoid, where possible, caring for patients with suspected or confirmed coronavirus infection. If this is not possible, you should use personal protective equipment (PPE) and ensure a thorough risk assessment is undertaken.
Some working environments, such as operating theatres, respiratory wards and intensive care/high dependency units, carry a higher risk for all pregnant women of exposure to the virus and all healthcare workers in these settings are recommended to use appropriate PPE.
If you are in your third trimester (more than 28 weeks pregnant), or have an underlying health condition – such as heart or lung disease – we strongly recommend you avoid direct patient contact. It is better to work from home where possible, avoid contact with anyone with symptoms of coronavirus, and significantly reduce unnecessary social contact.
We encourage employers to seek opportunities for pregnant healthcare workers in their third trimester to work flexibly in a different capacity, to avoid roles where they are working directly with patients.

The evidence base for this new virus is growing rapidly and, as and when new information emerges, the Government and professional bodies will update the guidance.
Attending antenatal and postnatal care when you are pregnant and have a new baby is really important to ensure the wellbeing of you and your baby.
If you are well, you should attend your antenatal care as normal. If you have symptoms of possible coronavirus infection, you should contact your community midwife to postpone routine visits until after the isolation period is over.
At this time, it is particularly important that you help your maternity team take care of you. If you have had an appointment cancelled or delayed, and are not sure of your next contact with your maternity team, please let them know by using the contact numbers provided to you at booking.
The following practical advice may be helpful:


{% extends "base.html" %} {% block content %}
Placeholder for usage tips, troubleshooting, etc
Usage information placeholder
Select a file for analysis and ensure it's in one of the following formats: .docx, .odt, or .txt. Microsoft Word, LibreOffice, and Google Docs can all "export" or "download as" to one of these formats. Be sure of the location of the prepared document on your local storage.
Once you have your document prepared and ready, it's time to upload the document. Click the Select File... button on the upload page. Once you've selected the file, simply click the Submit button beneath the file dialog on the same uploads page.


This is a website that will show and tell you why I love each season. While they are so different, each one has such unique features that make it special for one reason or another. You can click on each tab up above to learn more about each specific season. You can always click on the home button to take you back to this specific page. Enjoy the website and enjoy whatever season you are currently in while reading this!
My name is Noelle and this website was created for the purpose of turning it in to my college class as an assignment. Everything I write about here is to the best of my knowledge. I do love each season for different reasons and will explain more in each of the different tabs.


Deribit options visualizer
Chart:
Interval:
Option expirations:
Instrument
Order type
Quantity
Remainder
Total price
Scroll over axis to control individual axis scale.
Click on strike price on center axis to see CALL and PUT orderbooks.
Remainder shows amount left over when order book is depleted.
×
Quantity:
Calls
Total
bidSize
bidPrice
askPrice
askSize
Total
Puts
Total
bidSize
bidPrice
askPrice
askSize
Total
Total call bid price:
Sell Call
Total call ask price:
Buy Call
Total put bid price:
Sell Put
Total put ask price:
Buy Put


Please reflect on the following questions, and write about your day.
1. How do you feel today?
2. What went really well today?
3. What didn't go well today?
😀 😍 😎


《你为生存做些什么，我不关心》
2021-11-16
The Invitation by Oriah
It doesn’t interest me
what you do for a living.
I want to know
what you ache for
and if you dare to dream
of meeting your heart’s longing.
你为生存做了些什么，我不关心；
我想知道，
你的追求，
你是否敢于梦想去触碰你那内心的渴望。
It doesn’t interest me
how old you are.
I want to know
if you will risk
looking like a fool
for love
for your dream
for the adventure of being alive.
你的年龄多大，我不关心；
我想知道，
你是否愿意像傻瓜一样不顾风险，
为了爱，梦想还有活着就该有的冒险。
It doesn’t interest me
what planets are
squaring your moon…
I want to know
if you have touched
the centre of your own sorrow
if you have been opened
by life’s betrayals
or have become shrivelled and closed
from fear of further pain.
我不关心，是什么行星牵引着你的月亮，
我想知道，
你是否已触及自己悲伤的中心，
是否因生活的种种背叛而心胸开阔，
抑或因为害怕更大的痛苦而消沉封闭！
I want to know if you can sit with pain mine or your own
without moving to hide it
or fade it
or fix it.
我想知道，
你是否能面对痛苦——我的或者你自己的，
而不必去隐藏、涂抹或修饰。
I want to know
if you can be with joy
mine or your own
if you can dance with wildness
and let the ecstasy fill you
to the tips of your fingers and toes
without cautioning us
to be careful
to be realistic
to remember the limitations
of being human.
我想知道，
你是否能享受快乐——我的或者你自己的，
你是否能充满野性地舞蹈，让你从指端到足尖都被狂喜所充满，
而不会告诫我们要小心、要现实、要记住做人的禁忌。
It doesn’t interest me
if the story you are telling me
is true.
I want to know if you can
disappoint another
to be true to yourself.
If you can bear
the accusation of betrayal
and not betray your own soul.
If you can be faithless
and therefore trustworthy.
我并不关心你告诉我的故事是否真实，
我想知道，
你是否能为了真实地对待自己而不怕别人失望，
你是否能承受背叛的指责而不出卖自己的灵魂。
我想知道，你是否能抛弃曾经的信念，而因此值得信赖。
I want to know if you can see Beauty
even when it is not pretty
every day.
And if you can source your own life
from its presence.
我想知道，
你是否能发现美，即使它每天都不漂亮，
你是否能从它的存在中追寻你自己生命的源头。
I want to know
if you can live with failure
yours and mine and still stand at the edge of the lake
and shout to the silver of the full moon,
“Yes.”
我想知道，
你是否能与失败相伴——你的和我的，
却依然可以站立在湖边对着银色的满月放生大喊
“是的，就是这样！”
It doesn’t interest me
to know where you live
or how much money you have.
I want to know if you can get up after the night of grief and despair
weary and bruised to the bone
and do what needs to be done
to feed the children.
我不关心你在哪里生活或者你拥有多少金钱，
我想知道，
在一个悲伤、绝望、厌世和痛彻骨髓的夜晚之后，
你是否能起床，为养育孩子做那些需要的事情。
It doesn’t interest me
who you know
or how you came to be here.
I want to know if you will stand
in the centre of the fire
with me
and not shrink back.
我不关心你是谁，你是如何来到这里，
我想知道，你是否愿同我一起站在烈焰的中心，毫不退缩。
It doesn’t interest me
where or what or with whom
you have studied.
I want to know
what sustains you
from the inside
when all else falls away.
我不关心你在哪里受到教育、你学了什么或者你同谁一起学习，
我想知道，
当一切都背叛了你，是什么在内心支撑着你前行。
I want to know
if you can be alone
with yourself
and if you truly like
the company you keep
in the empty moments.
我想知道，
你是否能孤独地面对你自己，
你是否真正喜欢那个你独自一人时交谈的声音。


I try to contain compiler differences in as few places as possible. The header as_config.h was created for that purpose. Here you will find some #defines that allow different compilers to work. You'll probably not have to change this file, but if you're using a compiler not previously used and you're getting compiler errors it might be worth it to take a look at this file.
There are also a couple of other #defines used in the code to alter the compilation. When compiling the library you might want to define ANGELSCRIPT_EXPORT so that library functions are exported. If you include the library source code directly in your application project you shouldn't have to define this flag.
If AS_DEPRECATED is defined then some backwards compatibility is maintained, this can help you do the upgrade to the latest version a little more smoothly. There is no guarantee that the backwards compatibility will be maintained though so try to upgrade as soon as possible.
There are four ways of compiling and linking with AngelScript in order to use it. I recommend linking with a static library. Note that all four ways are interchangable with only a small change in your code, i.e a defined flag before including the header file, and possibly a routine for manually loading the dll. The rest of your code should look exactly the same for each of the alternatives.
You can take the source files for AngelScript and include them directly in your own project. The advantage of this is that you can be sure that the same compiler options are used for the library and the host applications, e.g. multi-threaded or single-threaded CRT. The disadvantage is that your project will be poluted with the library files.
The files that need to use the library should include the angelscript.h header with no need for any special settings.
// Include the library interface #include "angelscript.h" ... Start using the library
The most recommended way is to compile a static library that your project will link with. When compiling the static library you have to make sure that the correct compiler settings are used so that you don't get conflicts in linkage with the CRT functions. This happens if you for example compile the library with dynamically linked multi-threaded CRT and you application with statically linked single-threaded CRT.
To use the library you only need to include the angelscript.h header file.
// Include the library interface #include "angelscript.h" ... Start using the library
With Microsoft Visual C++ it is possible to compile a dynamically loaded library with an import library. The import library will then take care of the work needed to load the dll and bind the functions. A possible disadvantage of this method is that you are not able to give any user-friendly error messages in case loading the library fails.
To use the library you'll have to define ANGELSCRIPT_DLL_LIBRARY_IMPORT before including the angelscript.h header file.
// Include the library interface #define ANGELSCRIPT_DLL_LIBRARY_IMPORT #include "angelscript.h" ... Start using the library
If you want to use a dll, e.g. to share code between applications, I recommend loading the library manually as you can treat any failures to load or bind functtions graciously.
To use manually loaded dll, you should define ANGELSCRIPT_DLL_MANUAL_IMPORT before including the angelscript.h header file. This will insure that the header file doesn't declare the function prototypes, as you will most likely want to use these names for the function pointers.
// Include the library interface #define ANGELSCRIPT_DLL_MANUAL_IMPORT #include "angelscript.h" // Declare the function pointers typedef asIScriptEngine * AS_CALL t_asCreateScriptEngine(int); t_asCreateScriptEngine *asCreateScriptEngine = 0; ... Declare the rest of the functions // Load the dll and bind the functions (error handling left out for clarity) HMODULE dll = LoadLibrary("angelscript.dll"); asCreateScriptEngine = (t_asCreateScriptEngine*)GetProcAddress(dll, "_asCreateScriptEngine"); ... Bind the other functions ... Start using the library


[gecode-users] Reification of the extensional constraint
Guido Tack
tack at gecode.org
Sun Jun 15 04:05:51 CEST 2014
Hi,
you're right that you'd have to implement your own propagator for that. Before you do that you should check if you actually need full reification (i.e. b <-> c) or if an implication would be enough (b -> c). In the latter case, you don't need to implement the negation of c (where c is your extensional constraint).
If you implement the full version, negating a DFA is (in principle) easy, just make all accepting states rejecting and all rejecting states accepting. In the Gecode representation the rejecting states aren't represented directly so you'll have to work around that a bit.
Cheers,
Guido
--
Guido Tack
http://www.csse.monash.edu/~guidot/
On 14 Jun 2014, at 8:35 pm, Amina Kemmar <kemmar.amina at gmail.com> wrote:
> Hi all,
>
> I want to use a reification version of the extensional constraint, but I think that it is not implemented in Gecode.
> The chapter 24 explains how to implement a reification version of a constraint, I understand that we need the negation of the automata DFA. So, I want to know if there is an easy way to do this with extensional constraint? If you have any details about this, it will be very helpful for me.
>
> Thanks.
>
> Best regards,
> ---
> Amina
>
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gecode.org/pipermail/users/attachments/20140615/ded773e5/attachment.html>
More information about the users
mailing list


Allows to store the covisibility graph between keyframes. This storage component can be accessed by processing components to share persistent data. UUID: 15455f5a-0e99-49e5-a3fb-39de3eeb5b9b
More...
|
|
| ICovisibilityGraph ()=default |
| | ICovisibilityGraph default constructor.
|
| |
|
virtual | ~ICovisibilityGraph ()=default |
| | ICovisibilityGraph default destructor.
|
| |
| virtual FrameworkReturnCode | increaseEdge (const uint32_t node1_id, const uint32_t node2_id, const float weight)=0 |
| | This method allow to increase edge between 2 nodes. More...
|
| |
| virtual FrameworkReturnCode | decreaseEdge (const uint32_t node1_id, const uint32_t node2_id, const float weight)=0 |
| | This method allow to decrease edge between 2 nodes. More...
|
| |
| virtual FrameworkReturnCode | removeEdge (const uint32_t node1_id, const uint32_t node2_id)=0 |
| | This method allow to remove an edge between 2 nodes. More...
|
| |
| virtual FrameworkReturnCode | getEdge (uint32_t node1_id, uint32_t node2_id, float &weight) const =0 |
| | This method allow to get edge between 2 nodes. More...
|
| |
| virtual bool | isEdge (const uint32_t node1_id, const uint32_t node2_id) const =0 |
| | This method allow to verify that exist an edge between 2 nodes. More...
|
| |
| virtual FrameworkReturnCode | getAllNodes (std::set< uint32_t > &nodes_id) const =0 |
| | This method allow to get all nodes of the graph. More...
|
| |
| virtual FrameworkReturnCode | suppressNode (const uint32_t node_id)=0 |
| | This method allow to suppress a node of the graph. More...
|
| |
| virtual FrameworkReturnCode | getNeighbors (const uint32_t node_id, const float minWeight, std::vector< uint32_t > &neighbors) const =0 |
| | This method allow to get neighbors of a node in the graph. More...
|
| |
| virtual FrameworkReturnCode | minimalSpanningTree (std::vector< std::tuple< uint32_t, uint32_t, float >> &edges_weights, float &minTotalWeights)=0 |
| | This method allow to get minimal spanning tree of the graph. More...
|
| |
| virtual FrameworkReturnCode | maximalSpanningTree (std::vector< std::tuple< uint32_t, uint32_t, float >> &edges_weights, float &maxTotalWeights)=0 |
| | This method allow to get maximal spanning tree of the graph. More...
|
| |
| virtual FrameworkReturnCode | getShortestPath (uint32_t node1_id, uint32_t node2_id, std::vector< uint32_t > &path)=0 |
| | This method allow to get the shortest (by number of vertices) path between 2 nodes. More...
|
| |
|
virtual FrameworkReturnCode | display () const =0 |
| | This method allow to display all vertices and weighted edges of the covisibility graph.
|
| |
| virtual FrameworkReturnCode | saveToFile (const std::string &file) const =0 |
| | This method allows to save the graph to the external file. More...
|
| |
| virtual FrameworkReturnCode | loadFromFile (const std::string &file)=0 |
| | This method allows to load the graph from the external file. More...
|
| |
Allows to store the covisibility graph between keyframes. This storage component can be accessed by processing components to share persistent data. UUID: 15455f5a-0e99-49e5-a3fb-39de3eeb5b9b


--- layout: page title: About header-img: "img/about-bg.png" ---
I used to operate with embedded malware but today I constantly refactor my source code to have a smooth running program.


Vanilla JSF rendered: Lost after being hidden
rendered
Vanilla JSF rendered with update on parent container: Side effects because every child is updated
CrudFaces a:stealth: Works
a:stealth


| Enum Constant and Description |
|---|
ATTACK |
ATTACK_MOVE |
DEFEND |
EDIT_CONTINENT |
EDIT_COUNTRY |
EDIT_MAP |
EDIT_NEIGHBOR |
EXCHANGE_CARDS |
EXIT_GAME |
FORTIFY |
GAME_HELP
Creates commands (validated with RegEx) and links them to their methods.
|
GAME_PLAYER |
LOAD_GAME |
LOAD_MAP |
PLACE_ALL |
PLACE_ARMY |
POPULATE_COUNTRIES |
REINFORCE |
SAVE_GAME |
SAVE_MAP |
SHOW_MAP |
SHOW_MAP_OWNERSHIP |
START_TOURNAMENT |
VALIDATE_MAP |
| Modifier and Type | Field and Description |
|---|---|
(package private) java.util.function.BiPredicate<GameMap,String> |
operation
Holds the operation for the command (the signature remains the same for every command).
|
(package private) String |
regex
Holds the Regex for the command.
|
(package private) String |
usage
Holds the usage text.
|
| Modifier and Type | Method and Description |
|---|---|
java.util.function.BiPredicate<GameMap,String> |
getOperation()
getter for operation
|
String |
getRegex()
Getter for regex
|
String |
getUsage()
Getter for usage of a command
|
boolean |
runOperation(GameMap gameMap,
String riskCommand)
Runs an operation on a gamestate and a command
|
boolean |
validate(String riskCommand)
Validates a command with a patter
|
static Command |
valueOf(String name)
Returns the enum constant of this type with the specified name.
|
static Command[] |
values()
Returns an array containing the constants of this enum type, in
the order they are declared.
|
public static final Command GAME_HELP
public static final Command EXIT_GAME
public static final Command EDIT_MAP
public static final Command EDIT_CONTINENT
public static final Command EDIT_COUNTRY
public static final Command EDIT_NEIGHBOR
public static final Command VALIDATE_MAP
public static final Command SAVE_MAP
public static final Command START_TOURNAMENT
public static final Command GAME_PLAYER
public static final Command LOAD_MAP
public static final Command POPULATE_COUNTRIES
public static final Command PLACE_ARMY
public static final Command PLACE_ALL
public static final Command REINFORCE
public static final Command EXCHANGE_CARDS
public static final Command FORTIFY
public static final Command ATTACK
public static final Command DEFEND
public static final Command ATTACK_MOVE
public static final Command SHOW_MAP
public static final Command SHOW_MAP_OWNERSHIP
public static final Command SAVE_GAME
public static final Command LOAD_GAME
String regex
java.util.function.BiPredicate<GameMap,String> operation
String usage
public static Command[] values()
for (Command c : Command.values()) System.out.println(c);
public static Command valueOf(String name)
name
- the name of the enum constant to be returned.IllegalArgumentException
- if this enum type has no constant with the specified nameNullPointerException
- if the argument is nullpublic String getRegex()
public java.util.function.BiPredicate<GameMap,String> getOperation()
public boolean validate(String riskCommand)
riskCommand
- command to validatepublic String getUsage()
public boolean runOperation(GameMap gameMap, String riskCommand)
gameMap
- contains game stateriskCommand
- command from the cli


wpp2017: World Population Prospects 2017
Provides data from the United Nation's World Population Prospects 2017.
| Version: |
1.2-0 |
| Depends: |
R (≥ 2.14.2), plyr |
| Published: |
2018-03-17 |
| Author: |
United Nations Population Division |
| Maintainer: |
Hana Sevcikova <hanas at uw.edu> |
| License: |
GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| URL: |
http://esa.un.org/wpp |
| NeedsCompilation: |
no |
| Materials: |
ChangeLog |
| CRAN checks: |
wpp2017 results |
Downloads:
Reverse dependencies:
Linking:
Please use the canonical form
https://CRAN.R-project.org/package=wpp2017
to link to this page.


Search City
Enter name of the city or zip code you wish to locate campgrounds nearby.
Welcome to Camp Finder
Camp Finder is an app for people who love camping and getting outdoors. Camp Finder uses information from National Parks based on the nearest city location. This application will provide users with information about the closest state parks located nearest to the chosen city. Includes directions and local weather for the area.


TFW your OS is misbehaving with how it shows scrollbars, but you're writing a GUI library so you think it's your code. 😰
11/27/2016, 9:58:56 PM
Favs: 3
Retweets: 0
link--- layout: tweet ---
TFW your OS is misbehaving with how it shows scrollbars, but you're writing a GUI library so you think it's your code. 😰
11/27/2016, 9:58:56 PM
Favs: 3
Retweets: 0
link


Modern Research Essential For Development Of Livestock Sector: CM Balochistan
by APPQUETTA: Balochistan Chief Minister Mir Jam Kamal Khan on Tuesday said the main purpose of holding Livestock Expo 2019 was to raise awareness about the importance of the livestock sector and investors were being provided a platform to invest in the same sector to improve province’s economy.
He said while addressing at a seminar on the first Livestock Expo at Balochistan University.
The chief minister said Balochistan had vast areas of natural pastures and it would take advantage of exporting halal meat according to the world’s demand, saying the systematic processing and packing would move the sector towards development.
He said, “Present government is endeavoring to develop all sectors in the province’s interest.”
He said modern research was need of the hour to develop the livestock sector as in other countries, agriculture and livestock had played a major role in improving the economy.
Jam Kamal said now the time had come that we should also utilise modern style of farming and technology to achieve the required result.
“Confidence of foreign investors had been boosted to invest in Balochistan by holding Livestock Expo successfully”, he said.
Later, the chief minister also inspected various stalls of Expo.
Adviser to Chief Minister for Livestock Mitha Khan Kakar, Chief Secretary Balochistan Captain Fazeel Asghar, Deputy Governor Sistant Balochistan Iran Majid Mehbuba, various companies’ CEOs and a large number of people were present on the occasion.


- Relations and Functions: 2-3%
- Inverse Trigonometric Functions: 3-4%
- Matrices: 3-4%
- Determinants: 3-4%
- Continuity and Differentiability: 8-9%
- Applications of Derivatives: 3-4%
- Integrals: 9-10%
- Applications of Integrals: 3-4%
- Differential Equations: 6-7%
- Vector Algebra: 6-7%
- Three Dimensional Geometry: 4-5%
- Linear Programming: 1-2%
- Probability: 6-7%
It is important to note that the
weightage can vary every year and these are just approximate values. Therefore, it is
recommended to cover all the topics thoroughly to increase the chances of scoring well
in
JEE Main Physics.


Svelte REPL Meister
Run me on a
svelte.dev/repl/
site
Injects code on https://svelte.dev/repl pages to:
Auto save all tabs (on each tab switch event)
Search in processed tabs
Maintain Scroll position when switching tabs
Track last error Tab ID (not on first page load)
Content History per Tab