Fixtures are a way of organizing data that you want to test against; in short, sample data. They come in 3 flavours:
1. YAML fixtures 2. CSV fixtures 3. Single-file fixtures
YAML fixtures
This type of fixture is in YAML format and the preferred default. YAML is a file format which describes data structures in a non-verbose, humanly-readable format. It ships with Ruby 1.8.1+.
Unlike single-file fixtures, YAML fixtures are stored in a single file per model, which are placed in the directory appointed by Test::Unit::TestCase.fixture_path=(path) (this is automatically configured for Rails, so you can just put your files in <your-rails-app>/test/fixtures/). The fixture file ends with the .yml file extension (Rails example: "<your-rails-app>/test/fixtures/web_sites.yml"). The format of a YAML fixture file looks like this:
rubyonrails: id: 1 name: Ruby on Rails url: http://www.rubyonrails.org google: id: 2 name: Google url: http://www.google.com
This YAML fixture file includes two fixtures. Each YAML fixture (ie. record) is given a name and is followed by an indented list of key/value pairs in the "key: value" format. Records are separated by a blank line for your viewing pleasure.
Note that YAML fixtures are unordered. If you want ordered fixtures, use the omap YAML type. See yaml.org/type/omap.html for the specification. You will need ordered fixtures when you have foreign key constraints on keys in the same table. This is commonly needed for tree structures. Example:
--- !omap - parent: id: 1 parent_id: NULL title: Parent - child: id: 2 parent_id: 1 title: Child
CSV fixtures
Fixtures can also be kept in the Comma Separated Value format. Akin to YAML fixtures, CSV fixtures are stored in a single file, but instead end with the .csv file extension (Rails example: "<your-rails-app>/test/fixtures/web_sites.csv")
The format of this type of fixture file is much more compact than the others, but also a little harder to read by us humans. The first line of the CSV file is a comma-separated list of field names. The rest of the file is then comprised of the actual data (1 per line). Here’s an example:
id, name, url 1, Ruby On Rails, http://www.rubyonrails.org 2, Google, http://www.google.com
Should you have a piece of data with a comma character in it, you can place double quotes around that value. If you need to use a double quote character, you must escape it with another double quote.
Another unique attribute of the CSV fixture is that it has no fixture name like the other two formats. Instead, the fixture names are automatically generated by deriving the class name of the fixture file and adding an incrementing number to the end. In our example, the 1st fixture would be called "web_site_1" and the 2nd one would be called "web_site_2".
Most databases and spreadsheets support exporting to CSV format, so this is a great format for you to choose if you have existing data somewhere already.
Single-file fixtures
This type of fixtures was the original format for Active Record that has since been deprecated in favor of the YAML and CSV formats. Fixtures for this format are created by placing text files in a sub-directory (with the name of the model) to the directory appointed by Test::Unit::TestCase.fixture_path=(path) (this is automatically configured for Rails, so you can just put your files in <your-rails-app>/test/fixtures/<your-model-name>/ — like <your-rails-app>/test/fixtures/web_sites/ for the WebSite model).
Each text file placed in this directory represents a "record". Usually these types of fixtures are named without extensions, but if you are on a Windows machine, you might consider adding .txt as the extension. Here’s what the above example might look like:
web_sites/google web_sites/yahoo.txt web_sites/ruby-on-rails
The file format of a standard fixture is simple. Each line is a property (or column in db speak) and has the syntax of "name => value". Here’s an example of the ruby-on-rails fixture above:
id => 1 name => Ruby on Rails url => http://www.rubyonrails.org
Using Fixtures
Since fixtures are a testing construct, we use them in our unit and functional tests. There are two ways to use the fixtures, but first let’s take a look at a sample unit test found:
require 'web_site' class WebSiteTest < Test::Unit::TestCase def test_web_site_count assert_equal 2, WebSite.count end end
As it stands, unless we pre-load the web_site table in our database with two records, this test will fail. Here’s the easiest way to add fixtures to the database:
... class WebSiteTest < Test::Unit::TestCase fixtures :web_sites # add more by separating the symbols with commas ...
By adding a "fixtures" method to the test case and passing it a list of symbols (only one is shown here tho), we trigger the testing environment to automatically load the appropriate fixtures into the database before each test. To ensure consistent data, the environment deletes the fixtures before running the load.
In addition to being available in the database, the fixtures are also loaded into a hash stored in an instance variable of the test case. It is named after the symbol… so, in our example, there would be a hash available called @web_sites. This is where the "fixture name" comes into play.
On top of that, each record is automatically "found" (using Model.find(id)) and placed in the instance variable of its name. So for the YAML fixtures, we’d get @rubyonrails and @google, which could be interrogated using regular Active Record semantics:
# test if the object created from the fixture data has the same attributes as the data itself def test_find assert_equal @web_sites["rubyonrails"]["name"], @rubyonrails.name end
As seen above, the data hash created from the YAML fixtures would have @web_sites["rubyonrails"]["url"] return "www.rubyonrails.org" and @web_sites["google"]["name"] would return "Google". The same fixtures, but loaded from a CSV fixture file, would be accessible via @web_sites["web_site_1"]["name"] == "Ruby on Rails" and have the individual fixtures available as instance variables @web_site_1 and @web_site_2.
If you do not wish to use instantiated fixtures (usually for performance reasons) there are two options.
- to completely disable instantiated fixtures: self.use_instantiated_fixtures = false - to keep the fixture instance (@web_sites) available, but do not automatically 'find' each instance: self.use_instantiated_fixtures = :no_instances
Even if auto-instantiated fixtures are disabled, you can still access them by name via special dynamic methods. Each method has the same name as the model, and accepts the name of the fixture to instantiate:
fixtures :web_sites def test_find assert_equal "Ruby on Rails", web_sites(:rubyonrails).name end
Dynamic fixtures with ERb
Some times you don’t care about the content of the fixtures as much as you care about the volume. In these cases, you can mix ERb in with your YAML or CSV fixtures to create a bunch of fixtures for load testing, like:
<% for i in 1..1000 %> fix_<%= i %>:
id: <%= i %> name: guy_<%= 1 %>
<% end %>
This will create 1000 very simple YAML fixtures.
Using ERb, you can also inject dynamic values into your fixtures with inserts like <%= Date.today.strftime("%Y-%m-%d") %>. This is however a feature to be used with some caution. The point of fixtures are that they’re stable units of predictable sample data. If you feel that you need to inject dynamic values, then perhaps you should reexamine whether your application is properly testable. Hence, dynamic values in fixtures are to be considered a code smell.
Transactional fixtures
TestCases can use begin+rollback to isolate their changes to the database instead of having to delete+insert for every test case. They can also turn off auto-instantiation of fixture data since the feature is costly and often unused.
class FooTest < Test::Unit::TestCase self.use_transactional_fixtures = true self.use_instantiated_fixtures = false fixtures :foos def test_godzilla assert !Foo.find(:all).empty? Foo.destroy_all assert Foo.find(:all).empty? end def test_godzilla_aftermath assert !Foo.find(:all).empty? end end
If you preload your test database with all fixture data (probably in the Rakefile task) and use transactional fixtures, then you may omit all fixtures declarations in your test cases since all the data’s already there and every case rolls back its changes.
In order to use instantiated fixtures with preloaded data, set +self.pre_loaded_fixtures+ to true. This will provide access to fixture data for every table that has been loaded through fixtures (depending on the value of use_instantiated_fixtures)
When not to use transactional fixtures:
1. You're testing whether a transaction works correctly. Nested transactions don't commit until all parent transactions commit, particularly, the fixtures transaction which is begun in setup and rolled back in teardown. Thus, you won't be able to verify the results of your transaction until Active Record supports nested transactions or savepoints (in progress.) 2. Your database does not support transactions. Every Active Record database supports transactions except MySQL MyISAM. Use InnoDB, MaxDB, or NDB instead.
- allow_identity_inserts
- create_fixtures
- delete_existing_fixtures
- insert_fixtures
- insert_fixtures
- instantiate_all_loaded_fixtures
- instantiate_fixtures
- new
- original_insert_fixtures
| DEFAULT_FILTER_RE | = | /\.ya?ml$/ |
| [R] | table_name |
[ show source ]
# File vendor/rails/activerecord/lib/active_record/fixtures.rb, line 245 245: def self.create_fixtures(fixtures_directory, table_names, class_names = {}) 246: table_names = [table_names].flatten.map { |n| n.to_s } 247: connection = block_given? ? yield : ActiveRecord::Base.connection 248: ActiveRecord::Base.silence do 249: fixtures_map = {} 250: fixtures = table_names.map do |table_name| 251: fixtures_map[table_name] = Fixtures.new(connection, File.split(table_name.to_s).last, class_names[table_name.to_sym], File.join(fixtures_directory, table_name.to_s)) 252: end 253: all_loaded_fixtures.merge! fixtures_map 254: 255: connection.transaction do 256: fixtures.reverse.each { |fixture| fixture.delete_existing_fixtures } 257: fixtures.each { |fixture| fixture.insert_fixtures } 258: 259: # Cap primary key sequences to max(pk). 260: if connection.respond_to?(:reset_pk_sequence!) 261: table_names.each do |table_name| 262: connection.reset_pk_sequence!(table_name) 263: end 264: end 265: end 266: 267: return fixtures.size > 1 ? fixtures : fixtures.first 268: end 269: end
[ show source ]
# File vendor/rails/activerecord/lib/active_record/fixtures.rb, line 236 236: def self.instantiate_all_loaded_fixtures(object, load_instances=true) 237: all_loaded_fixtures.each do |table_name, fixtures| 238: Fixtures.instantiate_fixtures(object, table_name, fixtures, load_instances) 239: end 240: end
[ show source ]
# File vendor/rails/activerecord/lib/active_record/fixtures.rb, line 221 221: def self.instantiate_fixtures(object, table_name, fixtures, load_instances=true) 222: object.instance_variable_set "@#{table_name.to_s.gsub('.','_')}", fixtures 223: if load_instances 224: ActiveRecord::Base.silence do 225: fixtures.each do |name, fixture| 226: begin 227: object.instance_variable_set "@#{name}", fixture.find 228: rescue FixtureClassNotFound 229: nil 230: end 231: end 232: end 233: end 234: end
[ show source ]
# File vendor/rails/activerecord/lib/active_record/fixtures.rb, line 274 274: def initialize(connection, table_name, class_name, fixture_path, file_filter = DEFAULT_FILTER_RE) 275: @connection, @table_name, @fixture_path, @file_filter = connection, table_name, fixture_path, file_filter 276: @class_name = class_name || 277: (ActiveRecord::Base.pluralize_table_names ? @table_name.singularize.camelize : @table_name.camelize) 278: @table_name = ActiveRecord::Base.table_name_prefix + @table_name + ActiveRecord::Base.table_name_suffix 279: read_fixture_files 280: end
[ show source ]
# File vendor/rails/activerecord/lib/active_record/connection_adapters/sybase_adapter.rb, line 678 678: def allow_identity_inserts(table_name, enable) 679: @connection.execute "SET IDENTITY_INSERT #{table_name} #{enable ? 'ON' : 'OFF'}" rescue nil 680: end
[ show source ]
# File vendor/rails/activerecord/lib/active_record/fixtures.rb, line 282 282: def delete_existing_fixtures 283: @connection.delete "DELETE FROM #{@table_name}", 'Fixture Delete' 284: end
[ show source ]
# File vendor/rails/activerecord/lib/active_record/connection_adapters/sybase_adapter.rb, line 670 670: def insert_fixtures 671: values.each do |fixture| 672: allow_identity_inserts table_name, true 673: @connection.execute "INSERT INTO #{@table_name} (#{fixture.key_list}) VALUES (#{fixture.value_list})", 'Fixture Insert' 674: allow_identity_inserts table_name, false 675: end 676: end
[ show source ]
# File vendor/rails/activerecord/lib/active_record/fixtures.rb, line 286 286: def insert_fixtures 287: values.each do |fixture| 288: @connection.execute "INSERT INTO #{@table_name} (#{fixture.key_list}) VALUES (#{fixture.value_list})", 'Fixture Insert' 289: end 290: end
Alias for insert_fixtures


Keucereus:
Are you an adventurer from Aden? Many of your comrades have already traveled here. I am truly grateful. Despite our lands' ancient hostility towards each other, it warms my heart to see these new bonds of friendship form between us. With your help, I hope to restore Gracia to its former glory...
Ask about the current situation in Gracia.
Ask about the Seed.
Ask about the occupation status of the Seed.
Quest


val contentAPath: String
The file path to the content A of the pack
contentAPath - The file path to the content A of the pack
contentAPath


Projects
Various programming projects I'm working on and others that I've already finished.
About me
A little bit of information about me.
Various programming projects I'm working on and others that I've already finished.
A little bit of information about me.


--- layout: default title: Latest Posts excerpt: "A simple and clean responsive Jekyll theme for words and photos." ---


Welcome to Sindhu's Earrings Shop
From studs to hangings, jewellery shopping will now be easy in our site. Take a moment to browse our earrings and see which of our lovely earrings are soon to arrive to arrive on your doorstep.
From studs to hangings, jewellery shopping will now be easy in our site. Take a moment to browse our earrings and see which of our lovely earrings are soon to arrive to arrive on your doorstep.


| pgpool-II 3.7.0 Documentation | |||
|---|---|---|---|
| Prev | Up | Chapter 7. Configuration Examples | Next |
This section shows an example of streaming replication configuration using Pgpool-II. In this example, we use 3 Pgpool-II servers to manage PostgreSQL servers to create a robust cluster system and avoid the single point of failure or split brain.
We assume that all the Pgpool-II servers and the PostgreSQL servers are in the same subnet.
We use 2 PostgreSQL servers and 3 Pgpool-II servers with CentOS7. Let these servers be osspc16, osspc17, osspc18, osspc19 and osspc20.
Note: The roles of Active, Standy, Primary, Standby are not fixed and may be changed by further operations.
In this example, we install Pgpool-II and PostgreSQL by using RPM packages.
Table 7-2. Pgpool-II, PostgreSQL version informations and Configuration
| Server | Version | Host Name | Port | $PGDATA Directory |
|---|---|---|---|---|
| PostgreSQL server (primary) | PostgreSQL 9.6.1 | osspc19 | 5432 | /var/lib/pgsql/9.6/data |
| PostgreSQL server (standby) | PostgreSQL 9.6.1 | osspc20 | 5432 | /var/lib/pgsql/9.6/data |
| Pgpool-II server | Pgpool-II 3.6.1 | osspc16 | 9999 | - |
| Pgpool-II server | Pgpool-II 3.6.1 | osspc17 | 9999 | - |
| Pgpool-II server | Pgpool-II 3.6.1 | osspc18 | 9999 | - |
Install Pgpool-II by using Pgpool-II YUM repository.
# yum install http://www.pgpool.net/yum/rpms/3.6/redhat/rhel-7-x86_64/pgpool-II-release-3.6-1.noarch.rpm # yum install pgpool-II-pg96 # yum install pgpool-II-pg96-debuginfo # yum install pgpool-II-pg96-devel # yum install pgpool-II-pg96-extensions
Install PostgreSQL by using PostgreSQL YUM repository.
# yum install https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm # yum install postgresql96 postgresql96-devel postgresql96-server
Before you start the configuration process, please check the following prerequisites.
Set up PostgreSQL streaming replication on the primary server. In this example, we use WAL archiving.
First, we create the directory /var/lib/pgsql/archivedir to store WAL segments on both PostgreSQL servers (osspc19 and osspc20).
[PostgreSQL server]$ mkdir /var/lib/pgsql/archivedir
Then we edit the configuration file $PGDATA/postgresql.conf on osspc19 (primary) as follows.
listen_addresses = '*' wal_level = hot_standby max_wal_senders = 2 archive_mode = on archive_command = 'cp "%p" "/var/lib/pgsql/archivedir/%f"'
We use the online recovery functionality of Pgpool-II to setup standby server after the primary server is started.
Because of the security reasons, we create a user repl solely used for replication purpose, and a user pgpool for streaming replication delay check and health check of Pgpool-II. Assuming that all the Pgpool-II servers and the PostgreSQL servers are in the network of <IP_ADDRESS>/24, and edit pg_hba.conf to enable md5 authentication method.
host all pgpool <IP_ADDRESS>/24 md5 host all all <IP_ADDRESS>/0 md5 host replication repl <IP_ADDRESS>/24 md5
To use the failover and online recovery of Pgpool-II, the settings that allow SSH without passowrd to other servers (osspc16 - osspc20) are necessary.
To allow repl user without specifying password for streaming replication and online recovery, we create the .pgpass file in postgres user's home directory and change the permisson to 600 on both postgreSQL servers osspc19 and osspc20.
[osspc19]$ cat /var/lib/pgsql/.pgpass osspc20:5432:replication:repl:<password of repl user>
[osspc20]$ cat /var/lib/pgsql/.pgpass osspc19:5432:replication:repl:<passowrd of repl user>
$ chmod 600 /var/lib/pgsql/.pgpass
When Pgpool-II connects to other Pgpool-II servers or PostgreSQL servers, the target port must be accessible by enabling firewall management softwares. Following is an example for CentOS/RHEL7.
[PostgreSQL server]# firewall-cmd --permanent --zone=public --add-service=postgresql [PostgreSQL server]# firewall-cmd --reload
The following commands are to enable Pgpool-II and PostgreSQL start on system boot.
[Pgpool-II server]# systemctl enable pgpool.service
[PostgreSQL server]# systemctl enable postgresql.service
Here are the common settings on osspc16, osspc17 and osspc18.
When installing Pgpool-II from RPM, all the Pgpool-II configuration files are in /etc/pgpool-II. In this example, we copy the sample configuration file for streaming replicaton mode.
# cp /etc/pgpool-II/pgpool.conf.sample-stream /etc/pgpool-II/pgpool.conf
To allow Pgpool-II to accept all incoming connections, we set listen_addresses = '*'.
listen_addresses = '*'
Specifiy replication delay check user and password.
sr_check_user = 'pgpool' sr_check_password = 'pgpool'
Enable health check so that pgpool-II performs failover. Also, if the network is unstable, the health check fails even though the backend is running properly, failover or degenerate operation may occur. In order to prevent such incorrect detection of health check, we set health_check_max_retries = 10.
health_check_period = 5 # Health check period # Disabled (0) by default health_check_timeout = 20 # Health check timeout # 0 means no timeout health_check_user = 'pgpool' health_check_password = 'pgpool' health_check_max_retries = 10
Specify the backend informations with osspc19 and osspc20.
# - Backend Connection Settings - backend_hostname0 = 'osspc19' # Host name or IP address to connect to for backend 0 backend_port0 = 5432 # Port number for backend 0 backend_weight0 = 1 # Weight for backend 0 (only in load balancing mode) backend_data_directory0 = '/var/lib/pgsql/9.6/data' # Data directory for backend 0 backend_flag0 = 'ALLOW_TO_FAILOVER' # Controls various backend behavior # ALLOW_TO_FAILOVER or DISALLOW_TO_FAILOVER backend_hostname1 = 'osspc20' backend_port1 = 5432 backend_weight1 = 1 backend_data_directory1 = '/var/lib/pgsql/9.6/data' backend_flag1 = 'ALLOW_TO_FAILOVER'
Specify failover_command to execute failover.sh script. The special characters %d %P %H %R in failover_command are replcaed with DB node ID of the detached node, Old primary node ID, Hostname of the new master node, Database cluster directory of the new master node.
failover_command = '/etc/pgpool-II/failover.sh %d %P %H %R'
Create /etc/pgpool-II/failover.sh, and set the file permisson to 755.
# vi /etc/pgpool-II/failover.sh # chmod 755 /etc/pgpool-II/failover.sh
/etc/pgpool-II/failover.sh
#! /bin/sh -x # Execute command by failover. # special values: %d = node id # %h = host name # %p = port number # %D = database cluster path # %m = new master node id # %M = old master node id # %H = new master node host name # %P = old primary node id # %R = new master database cluster path # %r = new master port number # %% = '%' character falling_node=$1 # %d old_primary=$2 # %P new_primary=$3 # %H pgdata=$4 # %R pghome=/usr/pgsql-9.6 log=/var/log/pgpool/failover.log date >> $log echo "failed_node_id=$falling_node new_primary=$new_primary" >> $log if [ $falling_node = $old_primary ]; then if [ $UID -eq 0 ] then su postgres -c "ssh -T postgres@$new_primary $pghome/bin/pg_ctl promote -D $pgdata" else ssh -T postgres@$new_primary $pghome/bin/pg_ctl promote -D $pgdata fi exit 0; fi; exit 0;
Next, in order to perform online recovery with Pgpool-II we specify the PostgreSQL user name and online recovery command recovery_1st_stage. Then, we create recovery_1st_stage and pgpool_remote_start in database cluster directory of PostgreSQL primary server, and set the file permissions to 755.
recovery_user = 'postgres' # Online recovery user recovery_password = 'postgres' # Online recovery password recovery_1st_stage_command = 'recovery_1st_stage'
$ vi /var/lib/pgsql/9.6/data/recovery_1st_stage $ vi /var/lib/pgsql/9.6/data/pgpool_remote_start $ chmod 755 /var/lib/pgsql/9.6/data/recovery_1st_stage $ chmod 755 /var/lib/pgsql/9.6/data/pgpool_remote_start
/var/lib/pgsql/9.6/data/recovery_1st_stage
#!/bin/bash -x # Recovery script for streaming replication. pgdata=$1 remote_host=$2 remote_pgdata=$3 port=$4 pghome=/usr/pgsql-9.6 archivedir=/var/lib/pgsql/archivedir hostname=$(hostname) ssh -T postgres@$remote_host " rm -rf $remote_pgdata $pghome/bin/pg_basebackup -h $hostname -U repl -D $remote_pgdata -x -c fast rm -rf $archivedir/* cd $remote_pgdata cp postgresql.conf postgresql.conf.bak sed -e 's/#*hot_standby = off/hot_standby = on/' postgresql.conf.bak > postgresql.conf rm -f postgresql.conf.bak cat > recovery.conf << EOT standby_mode = 'on' primary_conninfo = 'host="$hostname" port=$port user=repl' restore_command = 'scp $hostname:$archivedir/%f %p' EOT "
/var/lib/pgsql/9.6/data/pgpool_remote_start
#! /bin/sh -x pghome=/usr/pgsql-9.6 remote_host=$1 remote_pgdata=$2 # Start recovery target PostgreSQL server ssh -T $remote_host $pghome/bin/pg_ctl -w -D $remote_pgdata start > /dev/null 2>&1 < /dev/null &
In order to use the online recovery functionality, the functions of pgpool_recovery
, pgpool_remote_start
, pgpool_switch_xlog
are required, so we need install pgpool_recovery
on template1 of PostgreSQL server osspc19.
# su - postgres $ psql template1 =# CREATE EXTENSION pgpool_recovery;
Because in the section Before Starting, we already set PostgreSQL authentication method to md5, it is necessary to set a client authentication by Pgpool-II to connect to backend nodes. When installing from RPM, the Pgpool-II configuration file pool_hba.conf is in /etc/pgpool-II. By default, pool_hba authentication is disabled, and set enable_pool_hba = on to enable it.
enable_pool_hba = on
The format of pool_hba.conf file follows very closely PostgreSQL's pg_hba.conf format. Set pgpool and postgres user's authentication method to md5.
host all pgpool <IP_ADDRESS>/0 md5 host all postgres <IP_ADDRESS>/0 md5
To use md5 authentication, we need to register the user name and password in file pool_passwd. Execute command pg_md5 --md5auth --username=<user name> <password> to regist user name and MD5-hashed password in file pool_passwd. If pool_passwd doesn't exist yet, it will be created in the same directory as pgpool.conf.
# pg_md5 --md5auth --username=pgpool <password of pgpool user> # pg_md5 --md5auth --username=postgres <password of postgres user>
Enable watchdog functionality on osspc16, osspc17, osspc18.
use_watchdog = on
Specify virtual IP address that accepts connections from clients on osspc16, osspc17, osspc18. Ensure that the IP address set to virtual IP isn't used yet.
delegate_IP = '<IP_ADDRESS>'
Specify the hostname and port number of each Pgpool-II server.
osspc16
wd_hostname = 'osspc16' wd_port = 9000
osspc17
wd_hostname = 'osspc17' wd_port = 9000
osspc18
wd_hostname = 'osspc18' wd_port = 9000
Specify the hostname, Pgpool-II port number, and watchdog port number of monitored Pgpool-II servers on each Pgpool-II server.
osspc16
# - Other pgpool Connection Settings - other_pgpool_hostname0 = 'osspc17' # Host name or IP address to connect to for other pgpool 0 # (change requires restart) other_pgpool_port0 = 9999 # Port number for othet pgpool 0 # (change requires restart) other_wd_port0 = 9000 # Port number for othet watchdog 0 # (change requires restart) other_pgpool_hostname1 = 'osspc18' other_pgpool_port1 = 9999 other_wd_port1 = 9000
osspc17
# - Other pgpool Connection Settings - other_pgpool_hostname0 = 'osspc16' # Host name or IP address to connect to for other pgpool 0 # (change requires restart) other_pgpool_port0 = 9999 # Port number for othet pgpool 0 # (change requires restart) other_wd_port0 = 9000 # Port number for othet watchdog 0 # (change requires restart) other_pgpool_hostname1 = 'osspc18' other_pgpool_port1 = 9999 other_wd_port1 = 9000
osspc18
# - Other pgpool Connection Settings - other_pgpool_hostname0 = 'osspc16' # Host name or IP address to connect to for other pgpool 0 # (change requires restart) other_pgpool_port0 = 9999 # Port number for othet pgpool 0 # (change requires restart) other_wd_port0 = 9000 # Port number for othet watchdog 0 # (change requires restart) other_pgpool_hostname1 = 'osspc17' other_pgpool_port1 = 9999 other_wd_port1 = 9000
Specify the hostname and port number of destination for sending heartbeat signal on osspc16, osspc17, osspc18.
osspc16
heartbeat_destination0 = 'osspc17' # Host name or IP address of destination 0 # for sending heartbeat signal. # (change requires restart) heartbeat_destination_port0 = 9694 # Port number of destination 0 for sending # heartbeat signal. Usually this is the # same as wd_heartbeat_port. # (change requires restart) heartbeat_device0 = '' # Name of NIC device (such like 'eth0') # used for sending/receiving heartbeat # signal to/from destination 0. # This works only when this is not empty # and pgpool has root privilege. # (change requires restart) heartbeat_destination1 = 'osspc18' heartbeat_destination_port1 = 9694 heartbeat_device1 = ''
osspc17
heartbeat_destination0 = 'osspc16' # Host name or IP address of destination 0 # for sending heartbeat signal. # (change requires restart) heartbeat_destination_port0 = 9694 # Port number of destination 0 for sending # heartbeat signal. Usually this is the # same as wd_heartbeat_port. # (change requires restart) heartbeat_device0 = '' # Name of NIC device (such like 'eth0') # used for sending/receiving heartbeat # signal to/from destination 0. # This works only when this is not empty # and pgpool has root privilege. # (change requires restart) heartbeat_destination1 = 'osspc18' heartbeat_destination_port1 = 9694 heartbeat_device1 = ''
osspc18
heartbeat_destination0 = 'osspc16' # Host name or IP address of destination 0 # for sending heartbeat signal. # (change requires restart) heartbeat_destination_port0 = 9694 # Port number of destination 0 for sending # heartbeat signal. Usually this is the # same as wd_heartbeat_port. # (change requires restart) heartbeat_device0 = '' # Name of NIC device (such like 'eth0') # used for sending/receiving heartbeat # signal to/from destination 0. # This works only when this is not empty # and pgpool has root privilege. # (change requires restart) heartbeat_destination1 = 'osspc17' heartbeat_destination_port1 = 9694 heartbeat_device1 = ''
Because user authentication is required to use the PCP command, we specify user name and md5 encrypted password in pcp.conf. Here we create the encrypted password for user postgres, and add <username: encrypted password≷ in /etc/pgpool-II/pcp.conf.
# pg_md5 -p Password: (input password) (paste the md5 encrypted password to pcp.conf) # vi /etc/pgpool-II/pcp.conf (add password entry) user name:md5 encrypted password
The settings of Pgpool-II is completed.
Next we start Pgpool-II. Before starting Pgpool-II, please start PostgreSQL servers first. Also, when stopping PostgreSQL, it is necessary to stop Pgpool-II first.
Starting Pgpool-II
In section Before Starting, we already set the auto-start of Pgpool-II. To start Pgpool-II, restart the whole system or execute the following command.
# systemctl start pgpool.service
Stopping Pgpool-II
# systemctl stop pgpool.service
Let's start to use Pgpool-II. First, let's start Pgpool-II on osspc16, osspc17, osspc18 by using the following command.
# systemctl start pgpool.service
First, we should set up PostgreSQL standby server by using Pgpool-II online recovery functionality. Ensure that recovery_1st_stage and pgpool_remote_start scripts used by pcp_recovery_node command are in database cluster directory of PostgreSQL primary server (osspc19).
# pcp_recovery_node -h <IP_ADDRESS> -p 9898 -U postgres -n 1
After executing pcp_recovery_node command, vertify that osspc20 is started as a PostgreSQL standby server.
# psql -h <IP_ADDRESS> -p 9999 -U pgpool postgres postgres=> show pool_nodes; node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay ---------+----------+------+--------+-----------+---------+------------+-------------------+------------------- 0 | osspc19 | 5432 | up | 0.500000 | primary | 0 | true | 0 1 | osspc20 | 5432 | up | 0.500000 | standby | 0 | false | 0
Confirm the watchdog status by using pcp_watchdog_info. The Pgpool-II server which is started first run as MASTER.
# pcp_watchdog_info -h <IP_ADDRESS> -p 9898 -U postgres Password: 3 YES osspc16:9999 Linux osspc16 osspc16 osspc16:9999 Linux osspc16 osspc16 9999 9000 4 MASTER #The Pgpool-II server started first becames "MASTER". osspc17:9999 Linux osspc17 osspc17 9999 9000 7 STANDBY #run as standby osspc18:9999 Linux osspc18 osspc18 9999 9000 7 STANDBY #run as standby
Stop active server osspc16, then osspc17 or osspc18 will be promoted to active server. To stop osspc16, we can stop Pgpool-II service or shutdown the whole system. Here, we stop Pgpool-II service.
[root@osspc16 ~]# systemctl stop pgpool.service [root@osspc16 ~]# pcp_watchdog_info -h <IP_ADDRESS> -p 9898 -U postgres Password: 3 YES osspc17:9999 Linux osspc17 osspc17 osspc17:9999 Linux osspc17 osspc17 9999 9000 4 MASTER #osspc17 is promoted to MASTER osspc16:9999 Linux osspc16 osspc16 9999 9000 10 SHUTDOWN #osspc16 is stopped osspc18:9999 Linux osspc18 osspc18 9999 9000 7 STANDBY #osspc18 runs as STANDBY
Start Pgpool-II (osspc16) which we have stopped again, and vertify that osspc16 runs as a standby.
[root@osspc16 ~]# systemctl start pgpool.service [root@osspc16 ~]# pcp_watchdog_info -h <IP_ADDRESS> -p 9898 -U postgres Password: 3 YES osspc17:9999 Linux osspc17 osspc17 osspc17:9999 Linux osspc17 osspc17 9999 9000 4 MASTER osspc16:9999 Linux osspc16 osspc16 9999 9000 7 STANDBY osspc18:9999 Linux osspc18 osspc18 9999 9000 7 STANDBY
First, use psql to connect to PostgreSQL via virtual IP, and verify the backend informations.
# psql -h <IP_ADDRESS> -p 9999 -U pgpool postgres postgres=> show pool_nodes; node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay ---------+----------+------+--------+-----------+---------+------------+-------------------+------------------- 0 | osspc19 | 5432 | up | 0.500000 | primary | 0 | true | 0 1 | osspc20 | 5432 | up | 0.500000 | standby | 0 | false | 0
Next, stop primary PostgreSQL server osspc19, and verify automatic failover.
$ pg_ctl -D /var/lib/pgsql/9.6/data -m immediate stop
After stopping PostgreSQL on osspc19, failover occurs and PostgreSQL on osspc20 becomes new primary DB.
# psql -h <IP_ADDRESS> -p 9999 -U pgpool postgres postgres=> show pool_nodes; node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay ---------+----------+------+--------+-----------+---------+------------+-------------------+------------------- 0 | osspc19 | 5432 | down | 0.500000 | standby | 0 | false | 0 1 | osspc20 | 5432 | up | 0.500000 | primary | 0 | true | 0
Here, we use Pgpool-II online recovery functionality to restore osspc19 (old primary server) as a standby. Before restoring the old primary server, please ensure that recovery_1st_stage and pgpool_remote_start scripts exist in database cluster directory of current primary server osspc20.
# pcp_recovery_node -h <IP_ADDRESS> -p 9898 -U postgres -n 0
Then verify that osspc19 is started as a standby.
# psql -h <IP_ADDRESS> -p 9999 -U pgpool postgres postgres=> show pool_nodes; node_id | hostname | port | status | lb_weight | role | select_cnt | load_balance_node | replication_delay ---------+----------+------+--------+-----------+---------+------------+-------------------+------------------- 0 | osspc19 | 5432 | up | 0.500000 | standby | 0 | false | 0 1 | osspc20 | 5432 | up | 0.500000 | primary | 0 | true | 0


Absolute Power (1997, R)
Produced and Directed by Clint Eastwood.
Written by William Goldman
Starring Clint Eastwood, Gene Hackman, Scott Glenn, Ed Harris, and Laura Linney
As Reviewed by James Brundage
Let me start off saying two things to two people. Number one, to William Goldman: I'm not saying this because I'm supporting or defending Clinton (which I'm NOT), but do please stop writing political thrillers. Number two, to Ed Harris: well, at least it was better than Stepmom.
Number three actually would have gone to Clint Eastwood: pleas stop starring, producing, and directing your own movies but he obviously got the point as nary a frame of the intriguing Midnight in the Garden of Good and Evil shows him.
That said, let's go on to my review of Absolute Power, which is twenty notches above Murder at 1600, which I saw being filmed, but a hundred notches below Six Days in May, In the Line of Fire, or about any other political thriller you can name.
Absolute Power is pleasantly mediocre. You don't expect much, and you don't get much.  Absolute Power is the story of a President who has sex with a girl and, whoops, ends up killing her. Unlike Murder at 1600, which shows the girl being done right in the opening credits, Absolute Power waits a nice ten to fifteen minutes before getting down to business.
When it gets down to business, Luther (Clint Eastwood ) is breaking into an estate to steal millions.  Things get a little rough, one thing leads to another, and the girl ends up shot by secret service agents seconds before she's going to give President Al (Gene Hackman) a Lorraina Bobbit.
Of course, since we live in the wonderful democracy where everyone is free to make a dumbly plotted and cliche film as they want, the Chief of Staff decides its for the best if the girl stumbled upon a burglary and was shot. Forget for a second that her dress has been ripped, the President's fingerprints are all over her, and a secret service agent (Scott Glenn) made sure he hadn't done a Bill Clinton.
Now, going out of the character of a jewel thief who just witnessed a murder from a secret room and stole $5,000,000 worth of material, Clint grows a heart, picks up the piece of evidence left behind, and leaves. Of course secret service agents chase him. Of course he runs into a cop (Ed Harris) who believes him because the facts don't add up, and of course his daughter (Laura Linney) grows closer to the old man through a complicated process of stocking her fridge at just the right time and saving her life.
The only really redeeming aspects to the film, the saving graces against terrible performances by the ensemble cast and William Goldman's piss-poor script is the steely direction by Clint Eastwood. Mixing in just the right amount of light, the right tone and time of the music and working with such a terrible script, Clint Eastwood does directing up to par with A Perfect World and Midnight in the Garden of Good and Evil. He's as good of a director as he always was, and that alone makes the film enjoyable. He gives as much that he can to a movie with such a bad script, as do the actors. This will be on the movie's gravestone: "They tried, they really tried".
Now, from all of this, you'd expect that I'm telling you to skip Absolute Power. I'm not. I'm just saying don't drive to rent it. Should Absolute Power be on TMC or ShowTime, like it was for me, go ahead and watch it. You'll have fun. If you're a Clint Eastwood, Dirty Harry jag, see it. It's just up in the air.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


2022-01-09
I have finally finished reading the excellent Eloquent JavaScript, and some of the exercises were fun enough that I don’t want them to just collect dust in GitHub.
First up: mouse trails! This was in the chapter about event handling.
The program (see source, or GitHub)
models two masses attached to the mouse cursor with (invisible) springs;
c
is the damping coefficient.


|
dynamic_graph_manager
|
There is no real convention about the naming of these package, certain groups will call them robot_properties_[robot name] others [robot name]_description.
Lab convention:
In the following we will talk about creating of these packages which are typically called robot_properties_[robot name] in our case. The following description is valid for both name conventions.
First of all these packages are catkin packages, so they follow the classic packaging from the Continuous Integration. Typically follow the packaging of the python package located in https://git-amd.tuebingen.mpg.de/amd-clmc/ci_example. The folder structure is the following:


A cyclic number with n digits has a very interesting property:
When it is multiplied by 1, 2, 3, 4, ... n, all the products have exactly the same digits, in the same order, but rotated in a circular fashion!
The smallest cyclic number is the 6-digit number 142857 :
142857 1 = 142857
142857 2 = 285714
142857 3 = 428571
142857 4 = 571428
142857 5 = 714285
142857 6 = 857142
The next cyclic number is<PHONE_NUMBER>117647 with 16 digits :
0588235294117647 1 =<PHONE_NUMBER>117647
0588235294117647 2 =<PHONE_NUMBER>235294
0588235294117647 3 =<PHONE_NUMBER>352941
...
0588235294117647 16 =<PHONE_NUMBER>882352
Note that for cyclic numbers, leading zeros are important.
There is only one cyclic number for which, the eleven leftmost digits are<PHONE_NUMBER>7 and the five rightmost digits are 56789 (i.e., it has the form<PHONE_NUMBER>7...56789 with an unknown number of digits in the middle). Find the sum of all its digits.


Reports and Feedback
Report From : {{userEmail}}
Reporting : {{reportedEmail}}
Not happy with : {{reportedProdut}}
Message:
{{reportmsg}}
Go Back
Delete


It is web based and is available
anywhere at anytime. Sign up
and get ready to start.
It is intuitive as it can be
Configured to the system without
any complicated procedures.
The simple to use UI helps you to
add a logo, configure and manage
the email domains.
Protecting your data is our top
priority an all personal data is
handle in confidentially.
It is intuitive as it can be configured to the systems without any
complicated procedures.
Feel free to
contact us at


Defines a native function that the program can call.
Public Member Functions | |
| NativeFunction (const char *nameAndArgumentTypes, ImplementationFunction fn) | |
| Creates a NativeFunction from its signature and an implementation function. More... | |
Static Public Member Functions | |
| static FunctionID | createID (const char *nameAndArgTypes) |
| Converts a function signature to its hashed ID. More... | |
Public Attributes | |
| const char * | nameAndArguments |
| This signature must have the form "name/[return type][arg1][arg2..]". More... | |
| ImplementationFunction | function |
| A static function that will be called. More... | |
| FunctionID | functionID |
| The ID is a hash of the name + arguments, but not the return type. More... | |
| Type | returnType |
| The function's return type. More... | |
| uint8 | numArgs |
| The number of arguments that the function takes. More... | |
Public Types | |
| using | ImplementationFunction = int32(*)(void *, const int32 *) |
| littlefoot::NativeFunction::NativeFunction | ( | const char * | nameAndArgumentTypes, |
| ImplementationFunction | fn | ||
| ) |
Creates a NativeFunction from its signature and an implementation function.
The format of nameAndArgumentTypes is "name/[return type][arg1][arg2..]" So for example "int foobar (float, bool)" would be "foobar/ifb"
References numArgs, and returnType.
|
static |
Converts a function signature to its hashed ID.
| using littlefoot::NativeFunction::ImplementationFunction = int32 (*) (void*, const int32*) |
| const char* littlefoot::NativeFunction::nameAndArguments |
This signature must have the form "name/[return type][arg1][arg2..]".
| ImplementationFunction littlefoot::NativeFunction::function |
A static function that will be called.
| FunctionID littlefoot::NativeFunction::functionID |
The ID is a hash of the name + arguments, but not the return type.
| Type littlefoot::NativeFunction::returnType |
The function's return type.
Referenced by NativeFunction().
| uint8 littlefoot::NativeFunction::numArgs |
The number of arguments that the function takes.
Referenced by NativeFunction().


|
Copyright 2013-01-06 Werner Randelshofer | ||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
See:
Description
| Interface Summary | |
|---|---|
| Animator | Animator executes multiple Interpolator's on a worker thread. |
| Codec | A Codec processes a Buffer and stores the result in another
Buffer . |
| ColorCyclePlayer | A Player which supports a second layer of animation by cycling colors
in the color palette of the current image in the video track. |
| Demultiplexer | A Demultiplexer takes a data source with multiplexed media
as an input and outputs the media in individual tracks. |
| Movie | A movie provides an editable container for media data in a time and
tracks coordinate system. |
| MovieControl | A @code MovieControl} can be used to control a movie using a user interface. |
| MovieReader | A simple API for reading movie data (audio and video) from a file. |
| MovieWriter | A simple API for writing movie data (audio and video) into a file. |
| Multiplexer | A Multiplexer can write multiple media tracks into a
single output stream. |
| Player | Player is a media handler for rendering and controlling time based
media data. |
| StateListener | Event for state changes. |
| StateModel | Generic interface for Objects with state. |
| Track | A Track refers to media data that can be interpreted in a time
coordinate system. |
| Class Summary | |
|---|---|
| AbstractAudioCodec | AbstractAudioCodec . |
| AbstractCodec | AbstractCodec . |
| AbstractMovie | AbstractMovie . |
| AbstractPlayer | Generic interface for media players. |
| AbstractSplineInterpolator | AbstractSplineInterpolator . |
| AbstractVideoCodec | AbstractVideoCodec . |
| AbstractVideoCodecCore | AbstractVideoCodecCore . |
| AudioFormatKeys | Defines common format keys for audio media. |
| BezierInterpolator | A bezier interpolator for use in conjunction with an Animator object. |
| Buffer | A Buffer carries media data from one media processing unit to another. |
| DefaultAnimator | DefaultAnimator. |
| DefaultMovie | DefaultMovie . |
| DefaultRegistry | DefaultRegistry . |
| Format | Specifies the format of a media, for example of audio and video. |
| FormatFormatter | FormatFormatter . |
| FormatKey<T> | A FormatKey provides type-safe access to an attribute of
a Format . |
| FormatKeys | Defines common FormatKey 's. |
| Interpolator | A linear interpolator for use in conjunction with an Animator object. |
| Registry | The Registry for audio and video codecs. |
| SplineInterpolator | A spline interpolator for use in conjunction with an Animator object. |
| StateEvent | Event for state changes. |
| StateTracker | Tracks state changes in a StateModel. |
| SynchronousAnimator | SynchronousAnimator. |
| VideoFormatKeys | Defines common format keys for video media. |
| Enum Summary | |
|---|---|
| BufferFlag | BufferFlag . |
| FormatKeys.MediaType |
| Exception Summary | |
|---|---|
| AbortException | This exception is thrown when the production of an image has been aborted. |
| ParseException | Exception thrown by IFFParse. |
Defines a framework for media processing and provides default implementations.
Warning: This is work in progress. The framework and the classes are subject to substantial changes between releases.
The framework is defined by the following interfaces and classes.
Media writers follow the following design
|
Copyright 2013-01-06 Werner Randelshofer | ||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |


The Friends:Invite_Form function is a referral system that allows your users to invite other people to the site. All invites are recorded in the database and if the invited person registers on the website, a rereferral credit will be given to the inviter. Consequently, the Friends:Referral_Count tag is available to output referral stats for any given member.
Additionally, a user can also invite the person(s) to one of the groups they own in the same submission. In the event an email address of an already existing site member is invited, the usual friend request proceedure will take place instead of sending an invitation request.
Upon registration from a person with the invited email address, the inviter receives a credit for the successful referral.
{exp:friends:invite_form} content {/exp:friends:invite_form}
Parameters
The following parameters are available for use:
- return
- notification_invite
- notification_request
- notification_confirm
- notification_group_invite
- subject_invite
- subject_request
- subject_confirm
- subject_confirm
return=
return="template_group/template"
This parameter allows you to return the user to a specified template upon successful submittal of form.
notification_invite=
notification_invite="friends_notifications/site_invite"
This parameter controls which EE template to use for your website invite notification template.
notification_request=
notification_request="friends_notifications/friend_request"
This parameter controls which EE template to use for your friend request notification template. Available in the event the invited email address belongs to an already registered site member.
notification_confirm=
notification_confirm="friends_notifications/friend_confirm"
This parameter controls which EE template to use for your friend confirm notification template. Available in the event the invited email address belongs to an already registered site member.
notification_group_invite=
notification_group_invite="friends_notifications/group_invite"
This parameter controls which EE template to use to format a notification to the user who is being invited to join a group. Available in the event the invited email address belongs to an already registered site member.
subject_invite=
subject_invite="{friends_inviter_screen_name} would like you to join the {site_name} site!"
This parameter outputs the subject line for the notification email sent out to recipients of the website invitation.
subject_request=
subject_request="{friends_inviter_screen_name} has added you as a Friend!"
This parameter outputs the subject line for the notification email when a user is initiating a friend request. Available in the event the invited email address belongs to an already registered site member.
subject_confirm=
subject_confirm="{friends_inviter_screen_name} has confirmed you as a Friend!"
This parameter outputs the subject line for the notification email when a user is confirming a friend request. Available in the event the invited email address belongs to an already registered site member.
subject_group_invite=
subject_group_invite="{friends_owner_screen_name} would like you to join the {friends_group_title} group"
This parameter outputs the subject line for the notification email to the user who is being invited to join a group. Available in the event the invited email address belongs to an already registered site member.
Variable Pairs
The following variable pairs are available for use:
groups
{groups} {/groups}
This variable pair allows you to display a list of all groups the currently logged in user owns, convenient for created a select menu for including a group invite along with the site invites. Within it, the following variables are available:
- {friends_group_description} - displays the description of the group
- {friends_group_id} - displays the ID of the group.
- {friends_group_name} - displays the name (AKA short name) of the group.
- {friends_group_title} - displays the title of the group.
Form Fields
The following form fields are available for use:
friends_emails
<textarea name="friends_emails"></textarea>
This form field is where the user will enter a list of emails they'd like to invite to your site. Multiple values can be separated by commas or line breaks.
friends_group_id
<select name="friends_group_id"> <option>Select Group</option> {groups} <option value="{friends_group_id}">{friends_group_title}</option> {/groups} </select>
This form field allows the user to attach a group invite along with the site invitation. Only 1 group invite can be specified, and can only groups the user has created can be sent.
Examples
The following code should be a complete example for using this function regularly:

Invite your friends to this site!

Enter the email addresses of your friends in the field below separated by commas or line breaks.
 {exp:friends:invite_form return="friends/invite/success" notification_invite="friends_notifications/site_invite" subject_invite="{friends_inviter_screen_name} would like you to join the {site_name} site!" notification_request="friends_notifications/friend_request" notification_confirm="friends_notifications/friend_confirm" subject_request="{friends_inviter_screen_name} has added you as a Friend!" subject_confirm="{friends_inviter_screen_name} has confirmed you as a Friend!" notification_group_invite="friends_notifications/group_invite" subject_group_invite="{friends_owner_screen_name} would like you to join their group!" }
 Emails: <textarea name="friends_emails"></textarea>

 Group: <select name="friends_group_id"> <option>Select Group</option> {groups} <option value="{friends_group_id}">{friends_group_title}</option> {/groups} </select>

 <input type="submit" name="submit" value="Invite Friends!" />
 {/exp:friends:invite_form}
Notification Templates
For your notification templates, you use regular EE templates, and just add code like this:
Site Invitation Notification ("friends_notifications/site_invite")
Hello, You have just received an invitation from {friends_inviter_screen_name} to join the "{site_name}" website. Click the link below to accept this invitation and create an account: {path='member/register'} To view {friends_inviter_screen_name}'s profile, click here: {path='members/profile'}/{friends_inviter_member_id}/
All Other Notifications
To view examples of all other available notification email templates, see Friends:Add and Friends:Group_Add documentation.


ALWAYS GROOMING
Schedule
Service
Assignments
Parents
Search
Schedule
Service
Assignments
Parents
Search


Random phrase
Click to see a random phrase appear below
click above to see a quote
Tweet #greatquotes


Shortly after college I owned and operated a small retail business for two years, realizing the grueling hours and feeling unchallenged I looked for a change. Being drawn to technology, I started to look into web development, which is what ultimately brought me to the software development bootcamp Actualize. I currently work part-time at The Difference Engine as an apprentice.
Throughout the course of the bootcamp I gained many useful skills, but I feel as though the greatest skill I acquired is adapting to various languages at a quick pace, which allows me to be more diverse. I look forward to finding a development position that allows me to further my growth as a developer and learn from others, just as I learned from Actualize.


--- title: Normalize a matrix or nd-array type: docs repo: https://github.com/rstudio/keras menu: main: name: Normalize a matrix or nd-array - keras parent: keras-reference aliases: - /reference/keras/normalize.html - /keras/reference/normalize.html - /guide/keras/reference/normalize.html - /tools/tools/keras/reference/normalize.html - /installation/keras/reference/normalize.html - /tutorials/keras/reference/normalize.html - /guide/tools/keras/reference/normalize.html - /deploy/keras/reference/normalize.html - /tools/keras/reference/normalize.html - /tutorials/tools/keras/reference/normalize.html ---
Normalize a matrix or nd-array
normalize(x, axis = -1, order = 2)
| x | Matrix or array to normalize |
| axis | Axis along which to normalize. Axis indexes are 1-based (pass -1 to select the last axis). |
| order | Normalization order (e.g. 2 for L2 norm) |
A normalized copy of the array.


Notes App
Take notes and never forget
Sort alphabetically
Sort by last edited
Sort by recently created
Create Note


You can now upload HTML5 creatives as easily as other creatives in DFP - by using the new HTML5 creative type. You can select the HTML5 creative type when you add a creative and quickly upload HTML5 zip bundles or standalone HTML files.
Learn more by clicking on "Premium" or "Small Business" according to the DFP version you are using, or continue using HTML5-to-DFP by clicking the close button.


Online Zoo
about
map
zoos
contact us
design
find where are the animals live
name: Bald Eagle
Range: Continental United States
name: Western lowland gorillas
Range: Western Africa
name: Ring-Tailed Lemur
Range: Southeast Asia
Name: Giant Panda
Range: Eastern Asia


This addon generates a variable which contains a list of all html5 input types that render as text-based inputs, excluding textarea. In other words, it allows for easy targeting of all inputs that mimic input[type="text"]
.
Note: You must use interpolation with the variable—#{}
.


This is a variant of MiniML which has integer division and a special error value. Division by zero results in error, which then acts as an exception. There is no way to intercept error or to throw it directly.
error


The CS109 final is coming up: it is next Wednesday (Dec 12th) from 3:30 to 6:30pm in CEMEX Auditorium. The final is open notes, open book, closed calculator.
The best way to study is with the practice exams.
The final problem set is now availible. You will derive update equations for a simple deep learning architecture and will implement two machine learning algorithms, Naive Bayes and Logistic Regression. You will then use these algorithms to make predictions on Heart tomography, Netflix movies and Ancestry.
Because of smoke from the Camp Fire, all classes and sections were cancelled for Nov 16th. For students with section on Friday, we will have a makeup section after the break. You can read the lecture notes for Naive Bayes to help you get started on the last pset. On the Monday after Thanksgiving we will resume class where we last left off (just about to get into Machine Learning with Naive Bayes, Logistic Regression and Deep Learning).
This quarter we are going to hold the second ever Stanford Probability for Computer Scientists Contest. The contest is completely optional. See the contest handout for more details.
The penultimate problem set is now availible. The problem set includes problems such as evaluating peer grading, a/b testing.
The midterm solutions are now availible. If you have any questions about how to solve these problems, go talk to a TA or Chris. We would love to explain how to approach these (and similar) problems.
In class we chatted about how if $Y$ is the sum of $n$ iid random variables (which all have expectation $\mu$ and variance $\sigma^2$) then:
The proof is beyond the scope of the class. A friendly CS109 student from last quarter (Sophia Furfine) made a video of the proof in case you are curious!
The CS109 midterm is coming up: it is next Tuesday (Oct 30th) from 7 to 9pm in Dinkelspiel Auditorium. The midterm is open notes, open book, closed calculator.
The best way to study is by working through the practice exams and section problems. On Saturday at 12:30 pm we are going to hold a midterm review session in 420-040. Notes from the session will be published.
TAs will also be hosting extra office hours and conceptual office hours from now until the midterm. Check out the office hours page for times, locations, and the specific focus for each particular OH. Some OH will be focusing specifically on conceptual questions in preparation for the midterm, and all OH will prioritize homework problems "above the line" from problem set 4 over those "below the line".
OAE and alternate midterm assignments (request here by Friday at 1 pm) will be finalized in the coming days; look out for an email with your specific logistics. Email Julia (jdaniel7) if you requested an alternate midterm and haven't received your information by Monday.
PSet #4 has been released! It has you predict users based on biometric keystrokes. The pset clearly delineates the questions that you should do before the midterm :-).
PSet #3 has been released! It uses real probability density functions from the IPCC Climate Change report, has you predict elections and analyze a bloom filter (a probabilistic datastructure). On Tuesday (Oct/16) it was updated with some minor changes.
A Galton board is a physical Binomial distribution where the bucket index that a ball falls into R ~ Bin(n,p) where n is the number of levels and p is the probability of going right each time the ball hits a pin. Check out the JavaScript demo, and the cool video bellow:
PSet #2 has been released! Calculate the updated belief of the locaiton of a cell phone and hypothesize the genetic relationship between bats and whether they carry Ebola.
Stanford offers a free tutoring service for CS109 students called VPTL tutoring! It is ideal if you want to ask about a question/topic/problem in more detail than we have time for in OH. Book appointments here.
For pset submission in CS109 we are using gradescope. The entry code is MK3EGN.
If you're new to Gradescope, you can join the class by going to https://gradescope.com/ and clicking the button in the top right marked "Sign Up for Free." Select "Student," then enter the entry code, your full name, email address, and 8 digit student id.
Once you have a Gradescope account, click "Enroll in Course" button on the bottom right and enter our course code.
If you have any questions, feel free to post on Piazza.
Please sign up for section by filling out this form:
https://goo.gl/forms/JntAP56m9xFXcIfx1.
Once a week you are going to meet in a small group section. We are going to find the best weekly time for everyone. Section sign ups will close on Saturday at 11:59pm. Preferences are not first come first serve.
PSet #1 has been released! It is due next Firday, Oct 5th at 1:00pm. Submission will be via gradescore. Further submission instructions will come out next week. Office hours will start tomorrow, and the office hour calendar will have times and locations.
You can optionally write up your problem sets using LaTex. See this intro to LaTex, and the LaTex code used to generate it. Though you may install LaTeX, it is often much easier to use an online LaTeX editor. A great option is: overleaf.com.
Welcome to CS109! We are looking forward to a fun quarter. Class starts Monday Sept 24th at 1:30pm in 420-040.
We put together some handouts to help you understand where we are going to go in CS109 and how we plan to get there.
The Administrivia handout has details on course logistics. Read this to get a sense for what CS109 is going to entail.
The Course Schedule page shows you the topics that we are going to cover in CS109 and the corresponding readings. We will also post materials from lecture on the schedule page.
The Staff / Office Hour page has contact information for TAs and the office hour calendar. Office hours will start this Thursday.


-
BILL GROSS: 'Janus Is The Right Fit'
www.businessinsider.com
Bill Gross: "I am announcing that I have decided to join Janus Capital Group and end my association with PIMCO."
-
GOLDMAN: That Fed Official Who Secretly Recorded Us Desperately Wanted To ...
www.businessinsider.com
She applied for a job three times in the past.
-
Russia Is Considering A Crazy New Law That Would Allow The State To Seize ...
www.businessinsider.com
Russia continues its policy of self-inflicted damage.
-
Richard Branson Hates Public Speaking — Here's How He Gets Over It
www.businessinsider.com
VIDEO: In his new book "The Virgin Way," the British billionaire reveals that he loathes speaking in public.
-
This Chart Shows The Major Problems Bill Gross Was Having At PIMCO Before ...
www.businessinsider.com
The bond king's throne is at risk.
-
China Is Finally Doing Something About Its Ghost Cities
www.businessinsider.com
China will more strictly police the expansion of cities to stop the spread of highly developed but sparsely populated cities or districts known as ...
-
HIRING BILL GROSS JUST MADE JANUS SHAREHOLDERS $830 MILLION
www.businessinsider.com
Janus shares are surging after news Bill Gross is joining the firm.
-
BILL GROSS LEAVES PIMCO - JOINING JANUS CAPITAL
www.businessinsider.com
Bill Gross has left PIMCO for Janus Capital...
-
QATAR SHEIKH: Failure To Get Rid Of Both Assad And ISIS Will Repeat The ...
www.businessinsider.com
The U.S.-led fight against Islamic State militancy will not succeed as long as Syrian President Bashar al-Assad remains in power.
-
GDP GROWTH REVISED UP TO 4.6%
www.businessinsider.com
The third estimate for Q2 GDP is expected to show economic growth of 4.6% during the quarter.
-
US Airstrikes Are Pressuring Al Qaeda's Syria Group To Rejoin ISIS
www.businessinsider.com
The strikes are having an unintended consequence.
-
This Man Escaped North Korea By Biking For 12 Days Straight Through China
www.businessinsider.com
Now, he's singing at Harvard.
-
Study Finds That Up To Half Of Antibiotics Fail Due To 'Superbugs'
www.businessinsider.com
They studied 22 years of data.
-
Ukraine Prime Minister: Putin Is Using Winter As A Weapon
www.businessinsider.com
He says Russia wants Ukraine to "freeze."
-
5 Things The Most Productive People Do Every Day
www.businessinsider.com
VIDEO: Learn to balance and prioritize your tasks.
-
MICHAEL LEWIS: The 'Ray Rice Video' Of Wall Street Has Arrived
www.businessinsider.com
Secret recordings provide a look inside The New York Fed.
-
Chief Exec Of Italian Bank UniCredit: Sanctions Are Hurting Europe More ...
www.businessinsider.com
The sanctions are restricting Russian companies access to Europe.
-
World Health Organization: Experimental Ebola Vaccine Doses Will Be Ready ...
www.businessinsider.com
This could turn the tide on Ebola.
-
10 Things You Need To Know Before The Opening Bell
www.businessinsider.com
India is making a major move on manufacturing.
-
One Of The World's Most Influential Sheiks Has Issued A Fatwā Against ISIS
www.businessinsider.com
He says ISIS is not the path to paradise.
-
Russia Reportedly Says That The EU Can't Re-Export Gas To Ukraine
www.businessinsider.com
Frankfurt (AFP) - Russian Energy Minister Alexander Novak warned Friday that Europe is contractually not allowed to re-export gas to Ukraine and ...
-
Another Misguided UK Housing Scheme Ignores The Real Problem
www.businessinsider.com
The latest in a series of policies to boost the UK's terrible house building.
-
Britain Gets Humiliated In New Michelin Star Restaurant Rankings
www.businessinsider.com
London's two Nobu restaurants were both stripped of their stars.
-
UK Independence Leader Nigel Farage Has Made An Anti-American Golf Ad For ...
www.businessinsider.com
Farage puts his euroscepticism aside to get behind Team Europe.
-
Germany: We've Never Been So Close To Nuclear Deal With Iran
www.businessinsider.com
The final phase of the negotiations will be the hardest.
-
Hyundai-Led Group Will Pay $10 Billion For This Plot Of Land In Seoul
www.businessinsider.com
Union members disapprove of the purchase.
-
Mayhem Breaks Out In Ferguson Again After Police Arrest Protestors
www.businessinsider.com
After the police chief apologized.
-
The 10 Most Important Things In The World Right Now
www.businessinsider.com
The FBI says it knows the identity of the jihadist who murdered three hostages.
-
Here's What Really Happens In The 'Family Guy' Writing Process — And Why ...
www.businessinsider.com
An interview with showrunner Steve Callaghan.
-
One Of The Biggest Bulls For The Past Few Years Has An Ominous New Tone
www.businessinsider.com
David Zervos sounding a note of caution.


Neil & Francke here and we make
awesome freaking apps
Francke’s the creative and Neil’s the coder. Together, we’ve made some really neat stuff.


REST TEST
Base URL
Base URL should not end with "/"
Path
Relative path should start with "/"
Method
GET
GET
POST
PATCH
DELETE
PUT
OPTIONS
Bearer Auth
Body
Prettify
Send
Check the output in developer tools: networking and console


the and with patients COVID- acute for {background []. al. â€" ACE margin myocardial {border-style px;} #ffffff;} coronavirus from respiratory doi: that are cardiac syndrome associated enzyme heart higher kidney injury novel severe these SARS-CoV- angiotensin risk The Wuhan, data fulminant myocarditis renal this [], after angiotensin-converting cardiovascular disease have may patients, px; studies viral was {font-family China. Heart However, SARS-CoV factors font-size human mortality not versus Kidney SARS between cardiorenal double; expression failure increase increased infection lung patients. pulmonary American Cardiol; Clinical Med; University border-color border-width death direct hypertension including infarction levels might more most pneumonia protein recent solid; treatment {font-style {font-weight (COVID-) AKI China: Circulation; Coll Hypertension RRT Society activity also analysis any based bold both can care chronic clinical compared converting courier; during dysfunction early em; haemodynamic ill infected infections myocarditis. observed one-third pre-existing presence pt;} receptor reported statement study. syndrome. therapy there using ventricular


WITNESS LIST State, Federal & International Relations Committee May 4, 1999-8:00A SB 1375 Registering, but not testifying: For: Cain, Randy (City of El Paso) Erben, Randy (Texas Border Infrastructure Coalition) Velasquez, Sally (City of Eagle Pass) SCR 59 For: Scribner, John C. (Adjutant General's Department)


| Package | net.yahoo.fireeagle.data |
| Class | public class JSONUser |
| Inheritance | JSONUser JSONObject |
| Implements | IFireEagleUser |
| Property | Defined by | ||
|---|---|---|---|
| bestGuess : IFireEagleLocation
[read-only]
Fire Eagle's "best guess" form this User's Location.
| JSONUser | ||
| data : Object
The raw data object.
| JSONObject | ||
| hierarchyString : String [read-only]
The hierarchy string.
| JSONUser | ||
| locatedAt : Date [read-only]
The date/time of the user's location update.
| JSONUser | ||
| locations : Array [read-only]
An Array containing all Location granularity that the Client has been allowed to
see for the User.
| JSONUser | ||
| timezone : String [read-only]
The timezone.
| JSONUser | ||
| token : String [read-only]
The user-specific token for this application.
| JSONUser |
| Property | Defined by | ||
|---|---|---|---|
| _data : Object
The JSON data object.
| JSONObject | ||
| _locatedAt : Date
The date/time of the user's location update.
| JSONUser | ||
| _locations : Array
An array of
JSONLocation object if parsed from the user location_hierarchy. | JSONUser |
| Method | Defined by | ||
|---|---|---|---|
|
JSONUser(obj:Object)
Creates a new
JSONUser object. | JSONUser | ||
|
parseToArray(obj:Object, propertyName:String, classToConstruct:Class):Array
[static]
Parses a JSON object with numeric properties to a typed
Array . | JSONObject | ||
|
parseToBoundingBox(obj:Object):BoundingBox
[static]
Parses a JSON geo bounding box object to a
BoundingBox . | JSONObject | ||
|
parseToDate(obj:Object):Date
[static]
Parses a JSON date/time object to a
Date . | JSONObject | ||
|
parseToLatLon(obj:Object):LatLon
[static]
Parses a JSON geo point object to a
LatLon . | JSONObject | ||
|
toString():String
String representation. | JSONUser |
| bestGuess | property |
bestGuess:IFireEagleLocation
[read-only]Fire Eagle's "best guess" form this User's Location. This best guess is derived as the most accurate level of the hierarchy with a timestamp in the last half an hour or as the most accurate level of the hierarchy with the most recent timestamp.
Implementation public function get bestGuess():IFireEagleLocation
| hierarchyString | property |
hierarchyString:String
[read-only]The hierarchy string.
Implementation public function get hierarchyString():String
| _locatedAt | property |
protected var _locatedAt:Date
The date/time of the user's location update.
| locatedAt | property |
locatedAt:Date
[read-only]The date/time of the user's location update.
Implementation public function get locatedAt():Date
| _locations | property |
protected var _locations:Array
An array of JSONLocation
object if parsed from the user location_hierarchy.
| locations | property |
locations:Array
[read-only]An Array containing all Location granularity that the Client has been allowed to see for the User. The Location elements returned are arranged in hierarchy order consisting of: Country, State, County, Large Cities, Neighbourhoods/Local Area, Postal Code and exact location. The Application should therefore be prepared to receive a response that may consist of (1) only country, or (2) country & state or (3) country, state & county and so forth.
Implementation public function get locations():Array
| timezone | property |
timezone:String
[read-only]The timezone.
Implementation public function get timezone():String
| token | property |
token:String
[read-only]The user-specific token for this application.
Implementation public function get token():String
| JSONUser | () | constructor |
public function JSONUser(obj:Object)
Creates a new JSONUser
object.
obj:Object — JSON object to parse
|
| toString | () | method |
public function toString():String
String
representation.
String |


Module OCX.OCImage
Library for loading, editing (scaling, color changes) and displaying raster and displayed (OC-adapted) images with OCDraw.
The difference between the two types of image is that a DisplayableImage uses characters, while a RasterImage is all pixels.
Functions
| registerImageFormat (format) | Register a new image format |
| getFormat (file) | Detects the image format the given file is in or returns null if it corresponds to no registered image format |
| create (width, height[, bpp[, alpha]]) | Creates a displayable image with the given parameters |
| convertFromRaster (image, opts) | Converts a raster image into a displayable image. |
| scale (image, tw, th) | Scales a raster image to the given dimensions, this uses nearest neighbour scaling. |
| load (path) | Loads a displayable image from the given path. |
| loadRaster (path) | Loads a raster image from the given path. |
| getAspectRatio (image) | Returns the aspect ratio of the given image. |
| drawGPU (image, gpu, x, y) | Draws a displayable image using the given GPU driver or component instance. |
| drawImage (image, ctxn) | Draws a displayable image to the given OCDraw context |
Functions
- registerImageFormat (format)
-
Register a new image format
Parameters:
- format format The image format to register
- getFormat (file)
-
Detects the image format the given file is in or returns null if it corresponds to no registered image format
Parameters:
- file file The file containing an image
Returns:
-
optional format
The detected image format
- create (width, height[, bpp[, alpha]])
-
Creates a displayable image with the given parameters
Parameters:
- width int The width of the image, or 1
- height int The height of the image, or 1
- bpp int The number of bits per pixel in the image, or 8 (optional)
- alpha bool The presence of an alpha channel, or false (optional)
Returns:
-
DisplayableImage
the newly created image
- convertFromRaster (image, opts)
-
Converts a raster image into a displayable image. This is necessary in order to display a raster image.
Parameters:
- image RasterImage The image to convert
- opts Image conversion options
- advancedDithering bool Whether to dither using the current GPU palette or by assuming all RGB colors are available. Enabling this will result in a major slow down! (optional)
- dithering string The dithering method to use. Either "floyd-steinberg", "basic" or nil. (optional)
Returns:
-
DisplayableImage
the converted image
- scale (image, tw, th)
-
Scales a raster image to the given dimensions, this uses nearest neighbour scaling.
Parameters:
- image RasterImage The image to be scaled
- tw int The new width of the image
- th int The new height of the image
Returns:
-
RasterImage
The scaled image
- load (path)
-
Loads a displayable image from the given path. If the file actually contains
a raster image, it will be converted to a displayable image. Returns an error if
the image type is not recognised.
Parameters:
- path string The path of the image to load
Returns:
-
DisplayableImage
The loaded image
- loadRaster (path)
-
Loads a raster image from the given path. Returns an error if
the image type is not recognised or if it is a displayable image type.
(while it is technically possible to convert a displayable image to a raster
image, it would require packing in OpenComputers's font which would make the
library size huge for a feature that's gonna be rarely used)
Parameters:
- path string The path of the image to load
Returns:
-
RasterImage
The loaded image
- getAspectRatio (image)
-
Returns the aspect ratio of the given image.
Parameters:
- image RasterImage or DisplayableImage
- drawGPU (image, gpu, x, y)
-
Draws a displayable image using the given GPU driver or component instance. This can be useful
for using OCImage on OpenOS or other operating systems, and it's also used during boot for the
Concert splash screen.
Parameters:
- image DisplayableImage The image to draw
- gpu driver or component Instance of the GPU driver or component to use
- x int The X position where the image will be drawn
- y int The Y position where the image will be drawn
- drawImage (image, ctxn)
-
Draws a displayable image to the given OCDraw context
Parameters:
- image DisplayableImage The image to draw
- ctxn int The ID of the draw context


Some Quick Tips for Using Scala Futures
The Gilt engineering team has been transitioning to the latest version of our in-house library–a move that involves migrating from Guava ListenableFutures to Scala Futures. Futures are a key building block of reactive applications, and offer a really nice API for writing fast, efficient, non-blocking code. However, using them requires some skills that are a bit outside the scope of “traditional” programming.
For all of you who are new to Scala, or not-so-new but unfamiliar with futures, I thought it was worth sharing some thoughts on important things to watch out for when working with them.
Your code should be non-blocking
The easy .get()
option, which is available on ListenableFuture, is not available on Scala Future. Instead, you are required to use the deliberately less elegant Await API. This is actually a good thing, as it gives you plenty of time to reconsider the fact that you’re blocking, while you’re typing it out :) Blocking is strongly discouraged, as it defeats the whole purpose of futures–and there is almost always a better, more efficient way to write the code in a non-blocking way.
Having said all that, there may be times when you have no choice but to block. If you find yourself in this situation, you need to think carefully about which threads you are holding onto while you are blocking. For example, if you’re writing a Play application and decide to block the main request thread, then your application will very quickly run out of threads, and throughput will slow to a trickle. This is because the thread you are blocking on is from a very small thread pool that Play makes available for handling incoming requests.
One case where blocking may be acceptable, or even desired, is a background thread–perhaps one that is refreshing a cache. In this case, you can create a fixed-size thread pool for handling the cache refresh and block on this. Since the use of the thread pool is isolated, there is no harm holding onto threads while you wait for a Future to resolve.
Which execution context you use matters
More and more APIs require an execution context to be passed either implicitly or explicitly. For example, the Scala Future.onComplete
function is defined as:
def onComplete[U](f: Try[T] => U)(implicit executor: ExecutionContext): Unit
The callback function (f) is executed on a thread from the passed-in execution context. It’s very important to consider what type of operations are executed in f.
For CPU-bound (i.e. non-blocking) operations, you can follow the guidance of the Scala compiler error that you get when you forget to provide the context–namely, importing scala.concurrent.ExecutionContext.Implicits.global
. Alternatively, it may be desirable to use a “same thread” execution context.–i.e., the callback executes on the same thread that completes the Future, rather than forcing a hand-off to another thread.
For I/O-bound (i.e. blocking) operations, you should consider providing a different context. The global context by default has only N threads, where N is the number of processors available to the JVM. If you call Await.result
on one of the global execution context threads, it will create another thread to compensate. (Its main goal in life is to keep the CPU busy–check out this post for more info.) However, if you’re doing a lot of blocking it’s better to create your own context with an appropriately-sized Executor and leave the global context available to everybody else for what it was intended for–small CPU-bound tasks.
What happens if a Future fails?
Futures will fail for a variety of reasons: timeouts calling a service, deserialization exceptions, etc. You need to think about what the behaviour should be when this happens. For comprehensions and the operators map, flatMap and foreach may be nice to use, but they can also lull you into a false sense of security. And since Scala doesn’t have checked exceptions, you won’t get any help from the compiler. Somebody is going to have to deal with the exception at some point. Luckily a Scala Future has really nice APIs like .recover
, .recoverWith
and .onFailure
for handling exceptions and providing fallback behavior.
Futures are a really powerful tool for building fast, efficient, non-blocking applications. The APIs are elegant and simple to use. However, behind the simple APIs lies a world of complexity. It’s important to think carefully about how you are using futures and get a good understanding of the basic concepts behind them.


Fine Dining, Delivered
shopping_basket Shop Online
local_shipping Fast Delivery
local_atm Great Deals
Using our convenient web app, you'll get all the power of gFood without having to call your order in. Order in your pajamas, order 24 hours a day, order on Christmas, we're here to serve you.
You've never seen ordering this quick.  We'd ask what that is, but gFood respects your privacy
Money: You've got it, we want it. But let it never be said we're not incredibly fair! Burger sales? Check. Pizza sales? Check. Burger and pizza sales?? Check, check, check! We seriously can't stop making deals.


Search For Volunteer Opportunity
To get started, provide us with the following information:
By task:
Food sorting
After school nutrition program
Summer nutrition program
Pick up and transport
By time:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
AM 6:30 - 9:30 (3 hrs)
AM: 9:00 - 12:00 (3 hrs)
PM: 1:00 - 4:00 (3 hrs)
PM: 6:00 - 9:00 (3 hrs)
Afternoon pickup
Evening pickup
By Location:
City:
Zipcode:
Within:
5 miles
10 miles
15 miles
By Skill:
Cooking
Organization
Computer support


After trying Salvia leaves and having a trip, I figured I would be ready to experience 10X. How mistaken was I?
There was five of us, I had just bought the vile of 10X and we decided to begin. We put a table infront of the door (to stop us running out and getting killed our something) and thought that we would pass around a pipe with the salvia on it. We weren't sure how much of the extract you were meant to use, so I took a guess and filled the pipe about one third, or maybe a little less, of the salvia. I was in a way the guinnea pig, I was the only one who had experienced anything from Salvia before.
I was excited, and very much hoping for a fantastic experience. I took a huge flame to the pipe and inhaled quickly. It seemed to burn up in a second. I held it in, noticing almost immediately the strange dreamy feeling of being distanced, as I had felt with the Salvia leaves in the past. My eyes started to roll around, then my eye-lids fell down and began to flicker. Then I fell, straight to the left hand side, I just fell and everything went black. I came back up again because my friend had taken the pipe from me and I wanted more, and because of this I had managed to raise my body slightly and grab it rather violently from her, giving her awful looks.
My friends didn't know what to do, whether they should try it or see what happened to me, but really, they didn't have any choice but to look after me. They laughed, thinking it was hilarious that I didn't quite know what I was doing. I smirked and went to laugh for one second, not actually thinking that the drug was working, even after falling and not being able to see I just didn't think that the drug was working.
I fell again onto my side again. My body just stopped working. I hit the floor and then suddenly I was on a conveyor belt, just rolling alone as though it was the norm. Although it was the norm, and I knew nothing else, I was ABSOLUTELY PETRIFIED. I knew that being here was a bad thing, but I felt as though that was my life, just being on a conveyor belt. I wasn't alone, quite far away from me, yet on the same belt, were others who were having a bad time with Salvia. Their spirits were riding along, just like me, and they were all miserable.
There was a woman standing next to the conveyor belt pointing at me and condemning me.  You will never be able to leave.' I got so frightened by her and her overwhelming prescence that I got up and screamed. My friends say it was a low gutteral scream. I couldn't remove myself from the belt, and I was getting motion sickness.  I was screaming at the top of my voice, just screaming and shouting, shouting for somebody to hear me and help me. No matter how much I screamed nobody replied. My breathing became very rapid and repetative, this breathing was to continue for the next fifteen minutes.
My friends had been laughing at the beginning, but now their faces dropped and they began to realise that this was very serious and I needed help.  I can't believe what she is doing to me!' I cried at the top of my voice. By this point, I was burning up. My skin had went completely red and my clothes were soaking through with sweat. I was crying and screaming for somebody to hear me and help me over and over. I was no longer on the conveyor belt but in a living hell. My friends were trying to ask me who was being so nasty to me, but I still couldn't hear them and continued to scream. I couldn't see, my eyes were failing. Everything was just one mass of colour, yet the colour just wasn't colour, it was just awful. I was still screaming and I was boiling hot, on fire, and my body was being prickled and stabbed, I could feel the needles going into my skin.
My friends, being so close to me, couldn't bare to see me in the state I was in I guess. They had sat in complete and utter shock up until now, feeling very sorry for me. My friend got up and grabbed hold of me, hugging me and not letting go. He particulary felt bad for me and I think he became rather emotional over it. People say not to touch somebody on Salvia, but if he hadn't have hugged me like that I probably would have went insane. I began to squeeze him, still screaming but beginning to calm a little. I realised that others DID exist, and I was no longer having an out of body experience. I squeezed onto him so tighly, comletely covered in sweat. I began just grabbing at my friends, anybody around me and hugging them asking for help, asking them not to leave me. This went on for a little while.
They opened the window to let cold air in for me. 'Let's get you to the window,' they said, and expected me to walk. I just couldn't move, they tried to drag me, but their hands were slipping off me I think. Another one of my friends took my top of me and ran out to get a sponge of cold water. She came back and passed it to me, and I began just rubbing the sponge everywhere I could, although it didn't seem to be cooling me down. I became even more wet.
Suddenly, I had to move, and I was able to. I threw my body into the air, as one would in a panick-stricken state. I walked around the room, bumping into things and not really knowing why I was walking, I just needed to. I was shouting 'If I run around will it make it go away?' I just wanted to do anything to make it go away so that I could be normal again. I was coming back to reality now, and I was crying my eyes out at the fact that I did not have any idea what was going on, and I had complete amnesia.
 I felt such a relief when it finished finally. To me, I wasn't on a drug. This whole time, I didn't know I was on a drug. I cannot explain it properly, but this feeling is awfully decieving and makes everything worse than is. I cannot use words to describe how intense it is. I think I must have taken too much for my first time on an extract.
Thank God for the friends I have.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Technology
- Web (HTML, ARIA)
- Applications (iOS, Android, MacOS, Windows)
- Documents (eidtable PDF and word processing documents)
Summary
- Instructions that are persistent remain visible as users enter data
- Instructions that display at the source of input are visible as users enter data
- Instructions that display in a predictable location improve ease of use
- Instructions that are programmatically defined and associated with inputs can be conveyed by assistive technology as users enter data.
How it solves user need
- People need instructions that are available as they enter data in inputs
- People need instructions that display at the source of input so they can read and follow the instructions while entering data at input
- People benefit from instructions that appear in a predictable location so they are easy to find and follow
- People who use screen magnification need input instructions that display next to inputs so they can see the instructions while focused on the input
- People who use assistive technology need instructions that are programmatically defined and associated so thay can use their technology to access the instructions while focused on the input


I wasn't going to include this, as my progress at the moment is woefully slow, that's why it's at the very bottom of the projects page. Everyone always seems to make some kind of resolution to learn a language, but never follow through with it. This has been me year in and year out, but I managed to start reading the Genki textbook at the beginning of this year (very slowly I might add, due to being busy freelancing some stuff). In three months I managed to get to a point where the university accepted me on to the Stage 2 Japanese course, meaning I'd managed to crunch through the equivalent of stage 1 (almost a year of teaching) in just three months, which I was happy with. You apparently can't start a language course at SHU as your elective module at Stage 1, that's why I had to crunch down and get to something at least loosely resembling Stage 2 level as quickly as I did.
-Return to Projects-
The best way for me to start all this was to slowly read the Genki 1 textbook and make notes, as well as doing all the end of chapter activities diligently.  This is my current self taught course plan of action, as well as a bit of Remembering the Kanji, which I use a Memrise course for. Be wary if you visit /r/learnjapanese for advice, you can get equal parts solid, study changing advice and elitist "holier than thou" ramblings.
Very minimal at the moment, especially since the website development I've been doing has made it so I've had gaps of months in my language study, I'm hoping the course at SHU will help a great deal, even if it is just bouncing around questions I can't find answers to on Google.
Made with by Max Ingham