Get started with Docker Cluster on AWS
Estimated reading time: 8 minutesPrerequisites
- Completed installation of Docker Desktop Enterprise on Windows or Mac, or the Docker Enterprise Engine on Linux.
- Access keys to an AWS subscription. You can provide these credentials in many ways, but the recommended way is to create an
~/.aws/credentials
file. Refer to AWS CLI configuration for details on creating one.
Create a cluster
When you create a docker cluster in AWS, the created cluster has:
- 3 UCP Managers
- 3 Workers
- 3 DTR Replicas
Create a cluster.yml
file with the following information:
variable:
domain: "YOUR DOMAIN, e.g. docker.com"
subdomain: "A SUBDOMAIN, e.g. cluster"
region: "THE AWS REGION TO DEPLOY, e.g. us-east-1"
email<EMAIL_ADDRESS>ucp_password:
type: prompt
provider:
acme:
email: ${email}
server_url: https://acme-staging-v02.api.letsencrypt.org/directory
aws:
region: ${region}
cluster:
dtr:
version: docker/dtr:2.6.5
engine:
version: ee-stable-18.09.5
ucp:
username: admin
password: ${ucp_password}
version: docker/ucp:3.1.6
resource:
aws_instance:
managers:
instance_type: t2.xlarge
os: Ubuntu 16.04
quantity: 3
registry:
instance_type: t2.xlarge
os: Ubuntu 16.04
quantity: 3
workers:
instance_type: t2.xlarge
os: Ubuntu 16.04
quantity: 3
aws_lb:
apps:
domain: ${subdomain}.${domain}
instances:
- workers
ports:
- 80:8080
- 443:8443
dtr:
domain: ${subdomain}.${domain}
instances:
- registry
ports:
- 443:443
ucp:
domain: ${subdomain}.${domain}
instances:
- managers
ports:
- 443:443
- 6443:6443
aws_route53_zone:
dns:
domain: ${domain}
subdomain: ${subdomain}
In this example, the cluster takes on the following topology:
Provide values for the variable section. For example:
domain: "docker.notreal"
subdomain: "quickstart"
region: "us-east-1"
email<EMAIL_ADDRESS>The values are substituted in the cluster definition, which makes it easy to define a re-usable cluster definition and then change the variables to create multiple instances of a cluster.
Run docker cluster create --file cluster.yml --name quickstart
.
$ docker cluster create --file cluster.yml --name quickstart
Please provide a value for ucp_password
Docker Enterprise Platform 3.0
Preparing quickstart [OK]
Planning cluster on aws [OK]
Creating: [=========================== ] 44%
After approximately 10 minutes, resources are provisioned, and Docker Enterprise installation is started:
$ docker cluster create --file cluster.yml --name quickstart
Please provide a value for ucp_password
Docker Enterprise Platform 3.0
Preparing quickstart [OK]
Planning cluster on aws [OK]
Creating: [==============================================================] 100%
Installing Docker Enterprise Platform Requirements [OK]
docker-ee : Ensure old versions of Docker are not installed. [-]
After approximately 20 minutes, Docker Enterprise installation completes:
$ docker cluster create -f examples/docs.yml -n quickstart
Please provide a value for ucp_password
Docker Enterprise Platform 3.0
Preparing quickstart [OK]
Planning cluster on aws [OK]
Creating: [==============================================================] 100%
Installing Docker Enterprise Platform Requirements [OK]
Installing Docker Enterprise Engine [OK]
Installing Docker Universal Control Plane [OK]
Installing Docker Trusted Registry [OK]
Successfully created context "quickstart"
Connect to quickstart at:
https://ucp.quickstart.docker.notreal
911c882340b2
After all operations complete succesfully, the cluster ID is the last statement to print. You can now log in to the URL and begin interacting with the cluster.
View cluster information
To view an inventory of the clusters you created, run docker cluster ls
:
$ docker cluster ls
ID NAME PROVIDER ENGINE UCP DTR STATE
911c882340b2 quickstart acme, aws ee-stable-18.09.5 docker/ucp:3.1.6 docker/dtr:2.6.5 running
For detailed information about the cluster, run docker cluster inspect quickstart
.
$ docker cluster inspect quickstart ```yaml name: quickstart shortid: 911c882340b2 variable: domain: docker.notreal email<EMAIL_ADDRESS>region: us-east-1 subdomain: quickstart provider: acme:
server_url: https://acme-staging-v02.api.letsencrypt.org/directory aws:
region: us-east-1
version: ~> 1.0 cluster: dtr:
version: docker/dtr:2.6.5 engine:
storage_volume: /dev/xvdb
version: ee-stable-18.09.5 registry:
url: https://index.docker.io/v1/
username: user ucp:
username: admin
version: docker/ucp:3.1.6 resource: aws_instance:
managers:
instance_type: t2.xlarge
os: Ubuntu 16.04
quantity: 3
role: manager
registry:
instance_type: t2.xlarge
os: Ubuntu 16.04
quantity: 3
role: dtr
workers:
instance_type: t2.xlarge
os: Ubuntu 16.04
quantity: 3
role: worker aws_lb:
apps:
domain: quickstart.docker.notreal
path: /data/ssl-certs/
ports:
- 80:8080
- 443:8443
dtr:
domain: quickstart.docker.notreal
path: /data/ssl-certs/
ports:
- 443:443
ucp:
domain: quickstart.docker.notreal
path: /data/ssl-certs/
ports:
- 443:443
- 6443:6443 aws_route53_zone:
dns:
domain: docker.notreal
subdomain: quickstart ``` The information displayed by `docker cluster inspect` can be used as a cluster definition to clone the cluster.
Use context
docker cluster
creates a context on your local machine. To use this context and interact with the cluster, run docker context use quickstart
:
$ docker context use quickstart
quickstart
Current context is now "quickstart"
To verify that the client is connected to the cluster, run docker version
:
$ docker version
Client: Docker Engine - Enterprise
Version: 19.03.0-beta1
API version: 1.39 (downgraded from 1.40)
Go version: go1.12.1
Git commit: 90dbc83
Built: Fri Apr 5 23:35:58 2019
OS/Arch: darwin/amd64
Experimental: false
Server: Docker Enterprise 2.1
Engine:
Version: 18.09.5
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
Git commit: be4553c
Built: Thu Apr 11 06:19:48 2019
OS/Arch: linux/amd64
Experimental: false
Universal Control Plane:
Version: 3.1.6
ApiVersion: 1.39
Arch: amd64
BuildTime: Wed Apr 10 22:35:22 UTC 2019
GitCommit: 944388b
GoVersion: go1.10.6
MinApiVersion: 1.20
Os: linux
Kubernetes:
Version: 1.11+
buildDate: 2019-03-26T02:54:43Z
compiler: gc
gitCommit: 2d582ce995b1ff65b89ad851e8b09b6bc1a84c85
gitTreeState: clean
gitVersion: v1.11.9-docker-1
goVersion: go1.10.8
major: 1
minor: 11+
platform: linux/amd64
Calico:
Version: v3.5.3
cni: v3.5.3
kube-controllers: v3.5.3
node: v3.5.3
To change the context back to your local machine, run docker context use default
:
$ docker context use default
default
Current context is now "default"
Scale a cluster
Open cluster.yml
. Change the number of workers to 6:
workers:
instance_type: t2.xlarge
os: Ubuntu 16.04
quantity: 6
Since the cluster is already created, the next step is to update
the cluster’s
desired state. Run docker cluster update quickstart --file cluster.yml
:
$ docker cluster update quickstart --file cluster.yml
Docker Enterprise Platform 3.0
Preparing quickstart [OK]
Planning cluster on aws [OK]
Updating: [================== ] 30%
After approximately 10 minutes, use the update
operation to add the new nodes and join them to the cluster:
$ docker cluster update quickstart --file examples/docs.yml
Please provide a value for ucp_password
Docker Enterprise Platform 3.0
Preparing quickstart [OK]
Planning cluster on aws [OK]
Updating: [==============================================================] 100%
Installing Docker Enterprise Platform Requirements [OK]
Installing Docker Enterprise Engine [OK]
Installing Docker Universal Control Plane [OK]
Installing Docker Trusted Registry [OK]
911c882340b2
To view the new nodes in the cluster:
$ docker --context quickstart node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
mpyk5jxkvgnh75cqmfdzddp7g ip-172-31-0-116.us-east-2.compute.internal Ready Active 18.09.5
s0pd7kqjg8ufelwa9ndkbf1k5 ip-172-31-6-9.us-east-2.compute.internal Ready Active Leader 18.09.5
ddnvnasq8wibtz9kedlvnxru0 ip-172-31-7-9.us-east-2.compute.internal Ready Active 18.09.5
vzta920dhpke9nf4vipqtkuuw ip-172-31-15-210.us-east-2.compute.internal Ready Active 18.09.5
tk98g0tfsb9kzri4slqdh2d2x ip-172-31-18-95.us-east-2.compute.internal Ready Active 18.09.5
g1kwut63oule9v0x245ms7wsw ip-172-31-21-212.us-east-2.compute.internal Ready Active 18.09.5
04jgx94jwscgnac2afdzcd9hp * ip-172-31-25-45.us-east-2.compute.internal Ready Active Reachable 18.09.5
5ubqk4mojz198sr72m9zegeew ip-172-31-29-201.us-east-2.compute.internal Ready Active 18.09.5
32rthfhjpm9gaz7n5608k5coj ip-172-31-33-183.us-east-2.compute.internal Ready Active 18.09.5
zqg81yv81auy7eot3a1kson2g ip-172-31-42-49.us-east-2.compute.internal Ready Active 18.09.5
qu84bv2zytv5nubcuntkzwbu5 ip-172-31-43-6.us-east-2.compute.internal Ready Active 18.09.5
j6kzzog8a2yv4ragpx826juyv ip-172-31-43-108.us-east-2.compute.internal Ready Active Reachable 18.09.5
Back up a cluster
Before performing operations on the cluster, perform a full backup of the running cluster by running docker cluster backup quickstart --file "backup-$(date '+%Y-%m-%d').tar.gz"
.
Provide a passphrase to encrypt the UCP backup.
$ docker cluster backup quickstart --file "backup-$(date '+%Y-%m-%d').tar.gz"
Passphrase for UCP backup:
Docker Enterprise Platform 3.0
Create archive file. [OK]
Backup of 911c882340b2 saved to backup-2019-05-07.tar.gz
Save the backup on external storage for disaster recovery.
To restore a cluster, run docker cluster restore quickstart --file backup-2019-05-07.tar.gz
.
Provide the passphrase from the backup step to decrypt the UCP backup.
Upgrade a cluster
Open cluster.yml
. Change the cluster versions:
cluster:
dtr:
version: docker/dtr:2.7.0
engine:
version: ee-stable-19.03
ucp:
version: docker/ucp:3.2.0
Run docker cluster update quickstart --file cluster.yml
:
$ docker cluster update quickstart --file examples/docs.yml
Please provide a value for ucp_password
Docker Enterprise Platform 3.0
Preparing quickstart [OK]
Planning cluster on aws [OK]
Updating: [==============================================================] 100%
Installing Docker Enterprise Platform Requirements [OK]
Upgrading Docker Enterprise Engine [OK]
Upgrading Docker Universal Control Plane [OK]
Upgrading Docker Trusted Registry [OK]
911c882340b2
Destroy a cluster
When the cluster has reached end-of-life, run docker cluster rm quickstart
:
$ docker cluster rm quickstart
Removing quickstart [OK]
Removing: [==============================================================] 100%
quickstart
911c882340b2
All provisioned resources are destroyed and the context for the cluster is removed.
Where to go next
- View the quick start guide for Azure or vSphere
- Explore the full list of Cluster commands
- Cluster configuration file reference


Life can be challenging at times and cause us to feel stuck, unhappy, and overwhelmed. We sometimes may feel confused and discouraged on how to improve our lives. In the midst of these difficult periods, we may benefit from having a supportive space to explore what makes us unhappy, challenge ourselves, gain insight, learn new skills, and explore new ways of being. I am happy to meet with you to figure out if I can be the person who can support you in this journey.
I follow an integrative, relational, psychodynamic approach, incorporating cognitive-behavioral, systemic, multicultural/feminist, and experiential concepts. I strive to provide a safe, respectful, and empowering space to my clients to help them overcome their barriers to experience life in more fulfilling ways.
I have extensive experience working with issues including depression, anxiety, relationships and conflict resolution, identity development, cultural and diversity issues, complex trauma, stress management, and career-related concerns.
Please feel free to reach out to me for the opportunity to chat on the phone for 15-20 minutes before we meet to determine if we would be a good match. I look forward to accompanying you on your journey back to a more functional and happier life.
All photography provided by Jared Chambers
I received my Ph.D. in Counseling Psychology from University of Massachusetts Boston following a terminal master’s degree in Mental Health Counseling. I completed my APA Accredited internship at University of Connecticut Counseling and Mental Health Services and fulfilled my post-doctoral fellowship at Boston College University Counseling Services. Upon completing my training, I worked as a staff psychologist at Tufts University Counseling and Mental Health Service. I have over five years of clinical experience.
I have extensive clinical experience at college counseling centers that have helped me develop my identity as a generalist, with skills in brief and long-term individual therapy, group therapy, diverse populations, crisis management, outreach, and assessment. I have been providing long-term and short-term individual therapy to a diverse population with respect to race/ethnicity, sexual orientation, gender identity, nationality, and socioeconomic status. I work with a variety of presenting issues such as depression, anxiety, eating disorders, identity issues, relationship problems, vocational issues, developmental concerns, and stress management. I also have experience working with underserved youth who presented with a wide range of behavioral, social, and emotional challenges. This experience contributed to my understanding of adolescent development and helped me gain knowledge and experience in substance abuse issues.
I have special interest in issues of cultural and diversity issues; complex trauma and resilience; identity development; attachment; interpersonal conflict and close relationships; and personal, social, emotional, and vocational development during emerging adulthood and beyond.
My approach emphasizes genuineness, respect for the individual, and compassion. I strive to provide a safe and empowering environment for my clients.
As an international person/immigrant myself, I am particularly interested in working with immigrants and international people. I also provide therapy in Turkish.
Besides my clinical experiences, I have also been actively involved in teaching and research. I teach master’s level abnormal psychology, assessment, vocational counseling, research, and ethics courses as Adjunct Faculty at UMass Boston. I have conducted extensive research on developmental issues and well-being of emerging adults (ages 18-29). These experiences tremendously contribute to my clinical work.
I am a member of the American Psychological Association.
Doctorate of Philosophy in Counseling Psychology, 08/2017
University of Massachusetts Boston
Master of Science in Mental Health Counseling, 08/2012
University of Massachusetts Boston
Master of Science in Psychological Counseling and Guidance, 08/2010
Middle East Technical University, Ankara, Turkey
Integrated Bachelor and Masters of Science in Chemistry, 06/2007
Bogazici University, Istanbul, Turkey
Staff Psychologist, 08/2018 - 06/2019
Tufts University Counseling and Mental Health Service(CMHS) Medford, MA
Adjunct Lecturer, 2013 - Present
University of Massachusetts Boston Boston MA
Courses Taught
Post-Doctoral Fellow, 08/2017 – 07/2018
Boston College, University Counseling Center (UCS) Newton, MA
Pre-Doctoral Internship – APA Accredited, 08/2016 – 07/2017
University of Connecticut, Counseling and Mental Health Services (CMHS) Storrs, CT
Assessment and Outreach Practicum, 09/2015 – 05/2016
University of Massachusetts Boston Boston, MA
Pre-Doctoral Practicum, 08/2015 – 05/2016
Emerson College, Counseling and Psychological Services Boston, MA
Pre-doctoral Practicum, 09/2013-05/2015
Brandeis University, Psychological Counseling Center (PCC) Waltham, MA
Co-Editor, 11/2013 - 05/2016
International Psychology Bulletin of APA Division 52 Student Column
Ad-Hoc Reviewer:
Journal of Counseling Psychology, 9/2016; 10/2015
Journal of Career Development , 05/2016
Journal of Human Development and Capabilities, 06/2015
Educational Research and Reviews , 12/2012
Program Proposal Reviewer, 10/2013
Counseling Psychology Conference, Atlanta 2014
In my clinical practice, I believe in the power of constructive relationships, which provide unconditional positive regard, genuineness and empathy, in promoting the well-being of individuals and society. I follow an integrative relational psychodynamic approach, which integrates cognitive-behavioral, systemic, multicultural/feminist, and experiential concepts. The relational approach sets the foundation of my interactions with my clients and facilitates the therapeutic alliance, which I believe, is the catalyst of change and healing.
To be effective therapists, we must engage in continuous self-reflection of our reactions, assumptions, and beliefs, since all human interactions are a dynamic two-way process. Thus, I consider what is happening in the therapy room and the interaction between my clients and myself as an integral part of the process.
Furthermore, problems do not occur exclusively within the individual; they emerge in a context through the interaction between internal and external influences. The meaning-making processes embedded in one’s culture and systems that make up the individual’s context are the core of psychological difficulties. In the process of change, I try to understand the meaning of my clients’ behaviors, emotions, and thoughts from a contextual perspective.
Change occurs when we embrace and experience our difficult emotions and work through them. My goal is to facilitate my clients to retell their stories with newly constructed insights and meanings, so that they integrate newly constructed behavior, emotions, and cognitions. In this realm, my role is to join my client’s experience; provide genuine curiosity in their stories; trust their capacity to gain insight and to change; and establish a safe space in which we co-construct experience.
I have extensive clinical experience at college counseling centers that have helped me develop my identity as a generalist, with skills in brief and long-term individual therapy, group therapy, diverse populations, crisis management, outreach, and assessment. I have been providing long-term and short-term individual therapy to a diverse population with respect to race/ethnicity, sexual orientation, gender identity, nationality, and socioeconomic status. I work with a variety of presenting issues such as depression, anxiety, eating disorders, identity issues, relationship problems, vocational issues, developmental concerns, and stress management. I also have experience working with underserved youth who presented with a wide range of behavioral, social, and emotional challenges. This experience contributed to my understanding of adolescent development and helped me gain knowledge and experience in substance abuse issues.
Close relationships are complicated. We start relationships with hope that we will partner in life with all of its challenges. However, both our personal patterns and our relational patterns can interfere with our relationship satisfaction. This may result in resentment, disappointment, and overall dissatisfaction with our lives. I facilitate my clients to identify patterns in their relationship, improve their ways of communication, and find ways to experience a more fulfilling relationship. I am particularly interested in facilitating my clients to preserve their sense of self, “I”, while developing a “We".
In some cases, couples might find themselves at a crossroads to decide what they would like to do with their relationship. Making a decision about continuing or ending a relationship can also be challenging. Couples therapy can also help with making a decision about your relationship.
You can make payments with cash, check and all major credit cards.
If you have an insurance plan that offers out-of-network benefits, you may be able to receive reimbursement for sessions. I will provide you with a master bill, which has the necessary requirements so that you can receive reimbursement for services.
Please contact your insurance provider to understand the conditions of your plan regarding reimbursement rate, deductible and behavioral health coverage.
If you would like to have a 15 min. phone consultation to determine if we would be a good match feel free to contact me via email or phone.
If I am not available via phone, please leave a voice message and I will return your call latest in 24 hours.
Email<EMAIL_ADDRESS>Phone:<PHONE_NUMBER>


Tailin Wu is a fourth-year graduate student at MIT Physics, doing research on quantum computing and artificial intelligence. He is interested in undertanding the various aspects of intelligence, and building intelligent systems that can learn and cooperate with human. If you want to catch him at MIT, the best chance are in the study room, library, board game room playing poker, or the sailing boats on the Charles river.
Peter is a 4th year PhD student at MIT ChemE department and a data science enthusiast. His research centered around partial differential equation and predictive modeling for industrial chemical systems. He is interested in pursuing a career in creating data-driven model for applications drawn from engineering, operation and management.
Peter loves exploring new places and has lived on three continents and visited more than 20 countries.


--- layout: post title: Multiplying project files… date: '2008-10-06T11:15:00.001+01:00' tags: [rant] modified_time: '2008-10-06T11:15:10.024+01:00' blogger_id: tag:blogger.com,1999:blog-4015568221071268916.post-8364173625026571788 comments: true blogger_orig_url: http://serialseb.blogspot.com/2008/10/multiplying-project-files.html ---
I was going to have yet another rant on separating everything in a ridiculous amount of project files, to ensure separation, and started venting to one of my colleague, at which point he mentioned Jeremy just posted on the issue: Separate Assemblies != Loose Coupling. Amen.
Thanks Jeremy, that saves me a post.


Hello everyone, my name is {{name}}, I am a mini {{lang}} framework for just {{work}}. I can bind data from {{supports.0}}, {{supports.1}} and {{supports.2}}. What's more, I was created by {{info.author}}, and was written in {{info.jsVersion}}. My motto is "{{motto}}".


Implements the actual wrapper around the api. For more information about this design, see the RVM module.
Gets the default option or the current environment variable for a given env var.
# File lib/rvm/environment/configuration.rb, line 40 def self.config_value_for(value) value = value.to_s config[value] || ENV[value] end
Returns the currentl environment. Note that when the ruby is changed, this is reset - Also, if the gemset is changed it will also be reset.
# File lib/rvm/environment/utility.rb, line 42 def self.current @current_environment ||= Environment.new(current_environment_id) end
Returns the environment identifier for the current environment, as determined from the GEM_HOME.
# File lib/rvm/environment/utility.rb, line 13 def self.current_environment_id @current_environment_id ||= begin gem_home = ENV['GEM_HOME'].to_s.strip if !gem_home.empty? && gem_home =~ /rvm\/gems\// File.basename(gem_home) else matching_path = $:.select { |item| item =~ /rvm\/rubies/ }.first matching_path.to_s.gsub(/^.*rvm\/rubies\//, '').split('/')[0] || "system" end end end
Returns the ruby string that represents the current environment.
# File lib/rvm/environment/utility.rb, line 26 def self.current_ruby_string identifier_to_ruby_string(current_environment_id) end
# File lib/rvm/environment/utility.rb, line 6 def self.default_rvm_path value = `bash '#{File.expand_path('../shell/calculate_rvm_path.sh', File.dirname(__FILE__))}'`.strip $?.success? && !value.empty? ? File.expand_path(value) : nil end
Define the config accessor, which basically uses config_value_for and the linke to set the env variable.
# File lib/rvm/environment/configuration.rb, line 6 def self.define_config_accessor(*args) singleton = (class << self; self; end) args.each do |arg| singleton.send(:define_method, arg) { RVM::Environment.config_value_for(arg) } singleton.send(:define_method, :"#{arg}=") { |v| RVM::Environment.merge_config! arg => v } end end
# File lib/rvm/environment/utility.rb, line 35 def self.identifier_to_gemset_name(identifier) identifier.gsub(/^.*@/, '') end
Converts a ruby identifier (string + gemset) to just the ruby string.
# File lib/rvm/environment/utility.rb, line 31 def self.identifier_to_ruby_string(identifier<EMAIL_ADDRESS>'') end
Creates a new environment with the given name and optionally a set of extra environment variables to be set on load.
# File lib/rvm/environment.rb, line 22 def initialize(environment_name = "default", options = {}) merge_config! options @environment_name = environment_name @shell_wrapper = Shell.default_wrapper.new @shell_wrapper.setup do |s| source_rvm_environment use_rvm_environment end end
Given an environment identifier, it will add the the given gemset to the end to form a qualified identifier name.
# File lib/rvm/environment/utility.rb, line 116 def self.environment_with_gemset(environment, gemset) environment_name, gemset_name = environment.split("@", 2) environment_name = "default" if environment_name.to_s.empty? environment_name << "@#{gemset}" unless gemset.to_s.empty? environment_name end
Creates an alias with the given name.
# File lib/rvm/environment/alias.rb, line 27 def alias_create(name, ruby_string) rvm(:alias, :create, name.to_s, ruby_string.to_s).successful? end
Deletes an alias and returns the exit status.
# File lib/rvm/environment/alias.rb, line 22 def alias_delete(name) rvm(:alias, :delete, name.to_s).successful? end
Returns a hash of aliases.
# File lib/rvm/environment/alias.rb, line 5 def alias_list lines = normalize_array(rvm(:alias, :list).stdout) lines.inject({}) do |acc, current| alias_name, ruby_string = current.to_s.split(" => ") unless alias_name.empty? || ruby_string.empty? acc[alias_name] = ruby_string end acc end end
Shows the full ruby string that a given alias points to.
# File lib/rvm/environment/alias.rb, line 17 def alias_show(name) normalize rvm(:alias, :show, name.to_s).stdout end
Returns an aliases proxy which can be used in a more Ruby-like manner.
# File lib/rvm/environment/alias.rb, line 32 def aliases @aliases ||= AliasWrapper.new(self) end
Run commands inside the given directory.
# File lib/rvm/environment/utility.rb, line 78 def chdir(dir) run_silently :pushd, dir.to_s result = Dir.chdir(dir) { yield } run_silently :popd result end
Returns the ruby-like interface defined by CleanupWrapper
# File lib/rvm/environment/cleanup.rb, line 12 def cleanup @cleanup_wrapper ||= CleanupWrapper.new(self) end
Returns the value for a configuration option (mapping to an environment variable). If check_live is true (which it is by default), it will also check the environment for a value.
# File lib/rvm/environment/configuration.rb, line 48 def config_value_for(key, default = nil, check_live = true) key = key.to_s value = check_live ? self[key.to_s] : nil value || config[key] || self.class.config_value_for(key) || default end
Generates the default wrappers.
# File lib/rvm/environment/wrapper.rb, line 11 def default_wrappers(ruby_string, *binaries) wrapper ruby_string, '', *binaries end
Returns a hash of all of the user defined configuration.
# File lib/rvm/environment/configuration.rb, line 55 def defined_config self.class.config.merge(self.config) end
Returns a ruby-like wrapper for the env functions
# File lib/rvm/environment/env.rb, line 22 def env @env_wrapper ||= EnvWrapper.new(self) end
Returns the contents of the env file.
env.env_contents # => [‘export PATH= .…’, …]
# File lib/rvm/environment/env.rb, line 8 def env_contents rvm(:env, environment_name).stdout.split end
Returns the path to the env file Suppose that you are in the 1.9.2 environment.
env.env_path # => “~/.rvm/environments/ruby-1.9.2-p0”
# File lib/rvm/environment/env.rb, line 17 def env_path normalize_array rvm(:env, environment_name, :path => true).stdout end
Executes a command, replacing the current shell. exec is a bit of an odd ball compared to the others, since it has to use the Kernel.exec builtin.
# File lib/rvm/environment/sets.rb, line 63 def exec(command, *args) command = @shell_wrapper.build_cli_call(:exec, [command] + args) Kernel.exec "bash", "-c", "source '#{env_path}'; #{command}" end
Returns the expanded name, using the same method as used by the rvm command line.
Suppose that you are in the 1.9.2 patchlevel Environment.
env.expanded_name # => “ruby-1.9.2-p0”
# File lib/rvm/environment.rb, line 42 def expanded_name @expanded_name ||= tools_identifier.to_s end
Returns the Ruby-like wrapper for gemset operations.
# File lib/rvm/environment/gemset.rb, line 107 def gemset @gemset_wrapper ||= GemsetWrapper.new(self) end
Copies the gems between two different gemsets.
# File lib/rvm/environment/gemset.rb, line 31 def gemset_copy(from, to) rvm(:gemset, :copy, from, to).successful? end
Creates a new gemset with the given name.
# File lib/rvm/environment/gemset.rb, line 25 def gemset_create(*names) names = names.flatten rvm(:gemset, :create, *names).successful? end
Deletes the gemset with a given name.
# File lib/rvm/environment/gemset.rb, line 36 def gemset_delete(name) run("echo 'yes' | rvm", :gemset, :delete, name.to_s).successful? end
Removes all gem-related stuff from the current gemset.
# File lib/rvm/environment/gemset.rb, line 41 def gemset_empty run("echo 'yes' | rvm", :gemset, :empty).successful? end
Exports a gemset.
# File lib/rvm/environment/gemset.rb, line 14 def gemset_export(gemset_or_file = nil) args = [gemset_or_file].compact rvm(:gemset, :export, *args).successful? end
Enable or disable the rvm gem global cache.
# File lib/rvm/environment/gemset.rb, line 66 def gemset_globalcache(enable = true) case enable when "enabled", :enabled run(:__rvm_using_gemset_globalcache).successful? when true, "enable", :enable rvm(:gemset, :globalcache, :enable).successful? when false, "disable", :disable rvm(:gemset, :globalcache, :disable).successful? else false end end
Loads a gemset into the current environment. If an argument is given, it will load it from file_prefix.gems
# File lib/rvm/environment/gemset.rb, line 7 def gemset_import(file_prefix = nil) args = [file_prefix].compact rvm(:gemset, :import, *args).successful? end
Initializes gemsets for a given ruby.
# File lib/rvm/environment/gemset.rb, line 61 def gemset_initial rvm(:gemset, :initial).successful? end
# File lib/rvm/environment/gemset.rb, line 20 def gemset_list normalize_array rvm(:gemset, :list).stdout end
Resets the current gemset to a pristine state.
# File lib/rvm/environment/gemset.rb, line 46 def gemset_pristine rvm(:gemset, :pristine).successful? end
Prunes the gem cache for the current ruby.
# File lib/rvm/environment/gemset.rb, line 56 def gemset_prune rvm(:gemset, :prune).successful? end
Updates all gems in the current gemset.
# File lib/rvm/environment/gemset.rb, line 51 def gemset_update rvm(@environment_name, :gemset, :update).successful? end
Changes the current environments gemset. If :replace_env is passed and the ruby is compatible, it will attempt to replace the current processes gem home and path with the one requested.
# File lib/rvm/environment/gemset.rb, line 82 def gemset_use(gemset, options = {}) replace_env = options.delete(:replace_env) result = rvm(:gemset, :use, gemset, options) if result.successful? gemset_name = self.class.identifier_to_gemset_name(result[:GEM_HOME] || result[:rvm_env_string]) @environment_name = self.class.environment_with_gemset(@environment_name, gemset_name) @expanded_name = nil self.class.reset_current! use_env_from_result! result if replace_env true end end
Like gemset_use, but replaces the env by default.
# File lib/rvm/environment/gemset.rb, line 96 def gemset_use!(name, options = {}) gemset_use name, {:replace_env => true}.merge(options) end
Return a Hash with the same output that command:
$ rvm info
# File lib/rvm/environment/info.rb, line 10 def info(*ruby_strings) ruby_string = normalize_ruby_string(ruby_strings) res = rvm(:info, ruby_string) res.successful? ? YAML.load(res.stdout) : {} end
# File lib/rvm/environment.rb, line 32 def inspect "#<#{self.class.name}<EMAIL_ADDRESS>end
Installs the given ruby
# File lib/rvm/environment/rubies.rb, line 5 def install(rubies, opts = {}) rvm(:install, normalize_ruby_string(rubies), opts).successful? end
Returns an interface to a more Ruby-like interface for list.
# File lib/rvm/environment/list.rb, line 49 def list @list_helper ||= ListWrapper.new(self) end
Lists the default ruby (minus gemset) Suppose that Ruby 1.9.2 patchlevel 0, is the default:
env.list_default # => “ruby-1.9.2-p0”
# File lib/rvm/environment/list.rb, line 25 def list_default normalize rvm(:list, :default, :string).stdout end
Returns a raw array list of ruby + gemset combinations.
env.list_gemsets # => [‘ruby-1.9.2-p0@my_gemset’, ‘jruby@my_gemset’, …]
# File lib/rvm/environment/list.rb, line 8 def list_gemsets normalize_listing_output rvm(:list, :gemsets, :strings).stdout end
Lists all known ruby strings (raw, filtered output)
# File lib/rvm/environment/list.rb, line 31 def list_known normalize_listing_output rvm(:list, :known).stdout end
Lists all known ruby strings
# File lib/rvm/environment/list.rb, line 37 def list_known_strings normalize_listing_output rvm(:list, :known_strings).stdout end
Returns a raw array list of installed ruby strings, including aliases.
env.list_strings # => [“ruby-1.9.2-p0”, “jruby-1.5.3”]
# File lib/rvm/environment/list.rb, line 16 def list_strings normalize_listing_output rvm(:list, :strings).stdout.tr(' ', "\n") end
Returns the path for the given command
Suppose that you are in the 1.9.2 environment.
env.path_for(:rspec) # => ‘~/.rvm/gems/ruby-1.9.2-p0/bin/rspec’ env.path_for(:ruby) # => ‘~/.rvm/rubies/ruby-1.9.2-p0/bin/ruby’
# File lib/rvm/environment/env.rb, line 33 def path_for(command) run(:command, "-v", command).stdout.strip end
Execute rake (optionally taking the path to a rake file), then change back.
# File lib/rvm/environment/sets.rb, line 31 def rake(file = nil, options = {}) if file.nil? perform_set_operation :rake, options else file = File.expand_path(file) chdir(File.dirname(file)) do perform_set_operation(:rake, options.merge(:rakefile => file)) end end end
Removes a given ruby from being managed by rvm.
# File lib/rvm/environment/rubies.rb, line 15 def remove(rubies, opts = {}) rvm(:remove, normalize_ruby_string(rubies), opts).successful? end
Passed either something containing ruby code or a path to a ruby file, will attempt to exectute it in the current environment.
# File lib/rvm/environment/sets.rb, line 7 def ruby(runnable, options = {}) if runnable.respond_to?(:path) # Call the path ruby_run runnable.path, options elsif runnable.respond_to?(:to_str) runnable = runnable.to_str File.exist?(runnable) ? ruby_run(runnable, options) : ruby_eval(runnable, options) elsif runnable.respond_to?(:read) ruby_run runnable.read end end
Eval the given code within ruby.
# File lib/rvm/environment/sets.rb, line 20 def ruby_eval(code, options = {}) perform_set_operation :ruby, "-e", code.to_s, options end
Run the given path as a ruby script.
# File lib/rvm/environment/sets.rb, line 25 def ruby_run(path, options = {}) perform_set_operation :ruby, path.to_s, options end
Lets you build a command up, without needing to see the output. Examples:
rvm :use, "ree@rails3", :install => true > rvm use ree@rails3 --install rvm :install, "ree@rails3", :rvm_by_path => true > $rvm_path/bin/rvm install ree@rails3
# File lib/rvm/environment/utility.rb, line 61 def rvm(*args) options = extract_options!(args) silent = options.delete(:silent) rvm_by_path = options.delete(:rvm_by_path) rearrange_options!(args, options) args += hash_to_options(options) args.map! { |a| a.to_s } program = rvm_by_path ? "#{self.class.default_rvm_path}/bin/rvm" : "rvm" if silent run_silently(program, *args) else run(program, *args) end end
Use the rvm spec runner for specs.
# File lib/rvm/environment/sets.rb, line 48 def specs(options = {}) perform_set_operation :specs, options end
Like Kernel.system, but evaluates it within the environment. Also note that it doesn’t support redirection etc.
# File lib/rvm/environment/sets.rb, line 54 def system(command, *args) identifier = extract_identifier!(args) args = [identifier, :exec, command, *args].compact rvm(*args).successful? end
Use the rvm test runner for unit tests.
# File lib/rvm/environment/sets.rb, line 43 def tests(options = {}) perform_set_operation :tests, options end
Return the tools wrapper.
# File lib/rvm/environment/tools.rb, line 34 def tools @tools_wrapper ||= ToolsWrapper.new(self) end
Gets the full name for the current env.
# File lib/rvm/environment/tools.rb, line 5 def tools_identifier normalize rvm(:tools, :identifier).stdout end
Gets the identifier after cd’ing to a path, no destructive.
# File lib/rvm/environment/tools.rb, line 10 def tools_path_identifier(path) path_identifier = rvm(:tools, "path-identifier", path.to_s) if path_identifier.exit_status == 2 error_message = "The rvmrc located in '#{path}' could not be loaded, likely due to trust mechanisms." error_message << " Please run 'rvm rvmrc {trust,untrust} \"#{path}\"' to continue, or set rvm_trust_rvmrcs_flag to 1." raise ErrorLoadingRVMRC, error_message end return normalize(path_identifier.stdout) end
# File lib/rvm/environment/tools.rb, line 20 def tools_strings(*rubies) rubies = rubies.flatten.join(",").split(",").uniq names = {} value = rvm(:tools, :strings, *rubies) if value.successful? parts = value.stdout.split rubies.each_with_index do |key, index| names[key] = normalize(parts[index]) end end names end
Uninstalls a ruby (remove but keeps src etc)
# File lib/rvm/environment/rubies.rb, line 10 def uninstall(rubies, opts = {}) rvm(:uninstall, normalize_ruby_string(rubies), opts).successful? end
Changes the ruby string for the current environment.
env.use ‘1.9.2’ # => nil env.use ‘ree’ # => nil
# File lib/rvm/environment/rubies.rb, line 24 def use(ruby_string, opts = {}) ruby_string = ruby_string.to_s result = rvm(:use, ruby_string) if result.successful? @environment_name = ruby_string @expanded_name = nil use_env_from_result! result if opts[:replace_env] end end
Like use but with :replace_env defaulting to true.
# File lib/rvm/environment/rubies.rb, line 35 def use!(ruby_string, opts = {}) use ruby_string, opts.merge(:replace_env => true) end
Will get the ruby from the given path. If there is a compatible ruby found, it will then attempt to use the associated gemset. e.g. RVM::Environment.current.use_from_path! Dir.pwd
# File lib/rvm/environment/rubies.rb, line 43 def use_from_path!(path) use! tools.path_identifier(path) end
Generates wrappers with the specified prefix, pointing to ruby_string.
# File lib/rvm/environment/wrapper.rb, line 6 def wrapper(ruby_string, wrapper_prefix, *binaries) rvm(:wrapper, ruby_string, wrapper_prefix, *binaries).successful? end
Checks whether the given environment is compatible with the current ruby interpeter.
# File lib/rvm/environment/utility.rb, line 110 def compatible_with_current?(result) ruby_string(result) == self.class.current_ruby_string end
From an options hash, extract the environment identifier.
# File lib/rvm/environment/sets.rb, line 89 def extract_environment!(options) values = [] [:environment, :env, :rubies, :ruby].each do |k| values << options.delete(k) end values.compact.first end
Shorthand to extra an identifier from args. Since we
# File lib/rvm/environment/sets.rb, line 99 def extract_identifier!(args) options = extract_options!(args) identifier = normalize_set_identifier(extract_environment!(options)) args << options identifier end
Extract options from a hash.
# File lib/rvm/environment/utility.rb, line 135 def extract_options!(args) args.last.is_a?(Hash) ? args.pop : {} end
Converts a hash of options to an array of command line argumets. If the value is false, it wont be added but if it is true only the key will be added. Lastly, when the value is neither true or false, to_s will becalled on it and it shall be added to the array.
# File lib/rvm/environment/utility.rb, line 143 def hash_to_options(options) result = [] options.each_pair do |key, value| real_key = "--#{key.to_s.gsub("_", "-")}" if value == true result << real_key elsif value != false result << real_key result << value.to_s end end result end
Returns a value, or nil if it is blank.
# File lib/rvm/environment/utility.rb, line 124 def normalize(value) value = value.to_s.strip value.empty? ? nil : value end
Normalizes an array, removing blank lines.
# File lib/rvm/environment/utility.rb, line 130 def normalize_array(value) value.split("\n").map { |line| line.strip }.reject { |line| line.empty? } end
Takes a list of rubies / items, 1 per line and strips comments and blank lines.
# File lib/rvm/environment/list.rb, line 129 def normalize_listing_output(results) lines = [] results.each_line do |line| line = line.gsub(/#.*/, '').strip lines << line unless line.empty? end lines.sort end
Recursively normalize options.
# File lib/rvm/environment/utility.rb, line 158 def normalize_option_value(value) case value when Array value.map { |option| normalize_option_value(option) }.join(",") else value.to_s end end
# File lib/rvm/environment/rubies.rb, line 49 def normalize_ruby_string(rubies) Array(rubies).join(",") end
Converts the given identifier to a rvm-friendly form. Unlike using sets directly, a nil identifier is set to mean the current ruby (not all). :all or “all” will instead return the a blank identifier / run it against all rubies.
# File lib/rvm/environment/sets.rb, line 75 def normalize_set_identifier(identifier) case identifier when nil, "" @environment_name when :all, "all" nil when Array identifier.map { |i| normalize_set_identifier(i) }.uniq.join(",") else identifier.to_s end end
Performs a set operation. If the :env or :environment option is given, it will return a yaml summary (instead of the stdout / stderr etc via a Result object.
# File lib/rvm/environment/sets.rb, line 109 def perform_set_operation(*args) options = extract_options!(args) environment = extract_environment!(options) identifier = normalize_set_identifier(environment) # Uses yaml when we have multiple identifiers. uses_yaml = !environment.nil? options.merge!(:yaml => true) if uses_yaml args.unshift(identifier) unless identifier.nil? args << options result = rvm(*args) uses_yaml ? YAML.load(result.stdout) : result end
Moves certain options (e.g. yaml, json etc) to the front of the arguments list, making stuff like sets work.
# File lib/rvm/environment/utility.rb, line 89 def rearrange_options!(args, options) prefix_options = {} (PREFIX_OPTIONS + PREFIX_OPTIONS.map { |o| o.to_s }).each do |k| if options.has_key?(k) value = options.delete(k) prefix_options[k.to_sym] = value end end hash_to_options(prefix_options).reverse.each { |o| args.unshift(o) } end
# File lib/rvm/environment/utility.rb, line 100 def ruby_string(result) if result && result[:rvm_env_string] Environment.identifier_to_ruby_string result[:rvm_env_string] else self.class.identifier_to_ruby_string(expanded_name) end end
Automatically load rvm config from the multiple sources.
# File lib/rvm/environment.rb, line 53 def source_rvm_environment rvm_path = config_value_for(:rvm_path, self.class.default_rvm_path, false) actual_config = defined_config.merge('rvm_path' => rvm_path) config = [] actual_config.each_pair do |k, v| config << "#{k}=#{escape_argument(v.to_s)}" end run_silently "export #{config.join(" ")}" run_silently :source, File.join(rvm_path, "scripts", "rvm") end
# File lib/rvm/environment/utility.rb, line 167 def use_env_from_result!(result) if compatible_with_current?(result) ENV['GEM_HOME'] = result[:GEM_HOME] ENV['GEM_PATH'] = result[:GEM_PATH] Gem.clear_paths if defined?(Gem) else raise IncompatibleRubyError.new(result, "The given ruby environment requires #{ruby_string(result)} (versus #{self.class.current_ruby_string})") end end
Generated with the Darkfish Rdoc Generator 2.


The Tintri APIs provide a way to manage Tintri's virtual aware storage. APIs provide a developer tools to create applications and automation workflows.
Functionality includes obtaining information on:
As well as obtaining information, the APIs control the following:
The REST APIs are over HTTP with JSON payloads. The download includes documentation and code samples.
| Documentation | Samples | GitHub Samples |
The Python SDK (PySDK) is a pythonic interface to the Tintri REST APIs. Samples are located on GitHub.
| Documentation | GitHub Samples |
The PowerShell Toolkit is a high level interface ot the Tintri REST APIs. Samples are located on GitHub.
| Documentation | Samples |


Ninja Spect
Sign Up
Log In
Home
Versions
Progress
Welcome to Ninja Spect
Create a username
Create a password
Continue
Already have an account?
Login
Documentation
Welcome to the Ninja Spect Docs. Here you will find updates and developer information stored in the documentation.
Get Hired
Versions
Latest
Beta
Alpha
Progress
Beta Release
No information.


University of Maryland, Department of Astronomy
1113 PSC Bldg. 415
College Park, MD<EMAIL_ADDRESS>https://chongchonghe.github.io/
Ph.D., Astronomy; University of Maryland
Thesis (proposed): Simulating Compact Star Clusters and Growth of the Seed Black Holes in the First Galaxies
M.S., Astronomy; University of Maryland
Thesis: Simulating Star Clusters Across Cosmic Time
Non-degree Visiting Honors Student Program; Georgia Institute of Technology
B.S., Physics, With Highest Honor; Jilin University
Upper Division GPA: 3.92/4 Cumulative GPA 3.91/4
Department of Astronomy, University of Maryland
Advisor: Massimo Ricotti & Cole Miller (co-advisor)
Center for Theoretical Physics, Jilin University
Advisor: Ping He
Center for Relativistic Astrophysics, Georgia Institute of Technology
Advisor: Laurens Keek
He, C.-C., Ricotti, M., & Geen, S., 2020, “Simulating Star Clusters Across Cosmic Time - II. Fraction of Ionizing Photons Escaping from Molecular Clouds”, Monthly Notices of the Royal Astronomical Society, 492, 4858.
He, C.-C., Ricotti, M., & Geen, S., 2019, “Simulating Star Clusters Across Cosmic Time - I. Initial Mass Function, Star Formation Rates, and Efficiencies”, Monthly Notices of the Royal Astronomical Society, 489, 1880-1898.
He, C.-C. & Keek, L., 2016, “Anisotropy of X-Ray Bursts from Neutron Stars with Concave Accretion Disks”, The Astrophysical Journal, 819, 47.
Dean’s Honored Graduates, Jilin University
The highest honor awarded to graduating seniors in the college
Tang-Ao Qing Supreme Award for Excellence in Research & Practice, Jilin University
Scholarship for Overseas Study, China Scholarship Council
Graduate Teaching Assistant; University of Maryland
Programming Languages & Softwares
High-Performance Computing
Data Science
Operating Systems
MacOS, Unix/Linux; proficient
Windows; basic


Hello,
This demo website was implemented by Innokentiy Enikeev as part of application process.
The timeline of implementation is available via github: https://github.com/enikesha/box-demo/commits/master
{% extends "base.html" %} {% block content %}
Hello,
This demo website was implemented by Innokentiy Enikeev as part of application process.
The timeline of implementation is available via github: https://github.com/enikesha/box-demo/commits/master


Start Workout!
Start Workout! Schedule for Later


{% extends "webpage/base.html" %} {% load staticfiles %} {% load webpage_extras %} {% block title %} Imprint {% endblock %} {% block content %}
Unless stated otherwise, all A Dokuplattform Thunau online data is licensed by OREA ÖAW under the CC BY 4.0 license. As such, you are free to share, use and remix Dokuplattform Thunau data, as long as you attribute the source data accordingly.
When citing Dokuplattform Thunau records please refer to the URL of the site and the date accessed.
Example of citation:
Dokuplattform Thunau, https://thunau.acdh.oeaw.ac.at/site, (29/09/2018).


Sweet Free Stuff
///////////////////////////////////////////
Free Iams Cat Treats at Kroger & Affiliate Stores
Posted: 25 Mar 2016 11:51 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Load the coupon to your shoppers card today only (3/25) and use by 4/10.
Free Iams Cat Treats at Kroger Affiliate Stores
The post Free Iams Cat Treats at Kroger Affiliate Stores appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Burton Stickers
Posted: 25 Mar 2016 03:53 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Free Burton Stickers
The post Free Burton Stickers appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Philosophy Take a Deep Breath Oil-Free Oxygenating Gel Cream Sample
Posted: 25 Mar 2016 03:49 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Click on the Free Sample link. Free Philosophy Take a Deep Breath Oil-Free
Oxygenating Gel Cream Sample
The post Free Philosophy Take a Deep Breath Oil-Free Oxygenating Gel Cream
Sample appeared first on SweetFreeStuff.com.
CommentsThank you for giving samples before we purchase the products by Jay


--- layout: post title: Android Studio date: 2013-05-16 11:10:00.000000000 +05:30 type: post published: true status: publish categories: - Android - Google tags: [] meta: blogger_blog: www.technoruler.com blogger_author: VISWAPRASATH KS blogger_cb097c283b9bbfde97b4822e7250157d_permalink: '4869869964003693620' author: login: viswaprasath email<EMAIL_ADDRESS>display_name: Vitchu first_name: '' last_name: '' ---
At the same time there was another excitement new IDE for Android application developers. It is new, fast and easy to use by most of Java developers can is called as Android Studio. An new IDE for Android based on IntelliJ
What are the things it will be providing
"This is a fully featured IDE right from the get go" said Hugo Barra,vice president of Android product management.
There are some other new features improvement to its Google Play developer console. Now for the developers it will be easy to rollout and monetize their apps.
Now we also have support for beta testing and rollouts within the Google play itself.


Once idle starts it’ll launch a Python Shell (also known as a Repl).
Type the following in the shell.
import urllib.request
import urllib.parse
import urllib.error
import json
import getpass
These are the three modules we’ll use throughout our Workshop.


Preparation time
over 2 hours
Cooking time
over 2 hours
Serves
Serves 4-6
Preheat the oven to 150C/300F/Gas 2.
For the yoghurt sorbet, mix all the ingredients and churn in an ice cream maker.
To make the crumble dough, mix all the ingredients together and divide the mix into nugget-sized pieces. Put on a baking tray and put in the oven for 8-10 minutes.
For the jelly, put the strawberries and sugar in a bain marie and heat gently for 2 hours.
Let the juice strain through a muslin cloth into a bowl for 2 hours.
Melt the gelatine and add to the juice. Leave to set in the fridge.
Wash the fruit, cut into bite-size pieces and dust with vanilla sugar. Add the pistachios, crumble and strawberry jelly. Top with sorbet.


Welcome to the Great Number Game!
I am thinking of a number between 1 and 100
Take a Guess!
{{session['try']}}
{{session['butt']}}
SUBMIT


--- layout: page title: "Calendar" description: "Forthcoming Campaign Events" header-img: "img/banner.jpg" ---


I wrote about it on the Paste blog but I thought I'd note Paste Deploy here as well (release page). It's still a very young project (like three days old), but I'm feeling optimistic about it, and in various forms I've been thinking about it for some time.
Basically it's a way to configure WSGI applications. For applications that support this (or where you write some very minimal glue) you could do things like this (note that I haven't made any of these Paste tools available yet, this is an example only):
[DEFAULT] admin_email =<EMAIL_ADDRESS># pipeline puts some filtering middleware in front of an app [composit:main] use = egg:Paste#pipeline pipeline = login urldispatch # Put one login system in front of entire site [filter:login] use = egg:Paste#login database = mysql://localhost/userdb table = users # Then this passes different path prefixes to different apps [composit:urldispatch] use = egg:Paste#urlmap / = static /cms = filebrowser /blog = blog # a very simple app... [app:static] use = egg:Paste#static document_root = /home/me/htdocs # this puts the auth in front of the app [composit:filebrowser] use = egg:Paste#pipeline pipeline = auth filebrowser_app # the login filter should give us a username; this just restricts # who can access [filter:auth] use = egg:Paste#auth require_role = admin # this application is distributed [app:filebrowser_app] use = egg:FileBrowser document_root = /home/me/htdocs [app:blog] # In this case the app isn't distributed as an Egg with # entry_points, so we manually create a glue function blog_app paste.app_factory1 = myglue.apps:blog_app
Well... that's a fairly involved configuration, really. You can move parts of this to other files fairly easily, substituting config:config_file.ini for the references to sections (blog, static, etc). While many of the pieces (like egg:Paste#auth) don't work now, they will very soon -- many of these things exist in Paste or elsewhere, and just need a configuration shell. There's a few other outstanding issues, but I'm very optimistic.
I'm also optimistic about breaking Paste up into smaller chunks that are easier to integrate into other projects; this package is my first attempt at distributing one piece of the project in isolation.
After writing that example, I realized the use of egg:Paste#pipeline was too complex, so I added a couple constructs to make applying filters easier. Now it could be written like:
[DEFAULT] admin_email =<EMAIL_ADDRESS># Put one login system in front of entire site [filter-app:main] use = egg:Paste#login database = mysql://localhost/userdb table = users # This defines what the filter wraps: next = urldispatch .... # the login filter should give us a username; this just restricts # who can access [filter-app:filebrowser] use = egg:Paste#auth require_role = admin next = filebrowser_appRemoving the [composit:main] and [composit:filebrowser] sections.
# Ian Bicking
Looks almost like Perl... Not sure if that's a good thing. Scary.
Why invent new syntax rather than use Python? class DEFAULT: admin_email =<EMAIL_ADDRESS># pipeline puts some filtering middleware in front of an app class composit_main: use = "egg:Paste#pipeline" pipeline = "login", "urldispatch"# Oren T


Tap O The Brae swoop the Ayrshire Post's Pub of the Year award
The popular Annbank boozer is family-run and owned by Danny and Marion Sloan.
by Gary Fanning, https://www.dailyrecord.co.uk/authors/gary-fanning/Triumphant Tap O The Brae staff toasted being named Ayrshire Post’s Pub of the Year 2019.
They raised a glass to all their customers who voted for them in their numbers to be crowned this year’s proud winner of the King of the pubs in Ayrshire.
The popular Annbank boozer is family-run and owned by Danny and Marion Sloan. Danny’s brother is Auchinleck Talbot manager Tommy Sloan and their mum, Nessie, who is in her 80s, and the couple’s daughter Alex Fisher, work behind the bar.
The Tap O The Brae beat off some strong competition to lift the title after almost 200 pubs and bars across the county entered this year’s competition.
The owners were on a visit to York last week when Ayrshire Post visited their premises to award them their coveted prize.
Danny’s sister, Karen Hamilton, who also works behind the bar, was delighted to pick up their prize on the couple’s behalf.
After receiving the glass trophy from Ayrshire Post editor Gary Fanning, Karen beamed: “It feels great to be named Ayrshire Post Pub of the Year. I still can’t believe we won.
“I am very happy. I must admit I was surprised.”
Tap O The Brae was described as a popular spot for aficionados of the Ayrshire pub scene.
One fan wrote, “Amazing atmosphere, the staff go above and beyond to welcome everyone in this wee haven”.
And it is not the first time that Tap of the Brae have won the Ayrshire Post’s Pub of the year competition.
In 2014, it was named been named as Pub of the Year by the Ayrshire Post and later that year a finalist in the Sunday Mail Pub of the Year
Karen added: “I would just like to thank all our customers for voting for us.
“We will celebrate this win. It was fun competition and our customers enjoyed taking part. It just shows all their efforts were worthwhile.”
Over the last four weeks we asked our readers to vote for their local to be named Ayrshire Pub of the Year.
In the running for the prestigious title were also The Wee Windaes, The Twa Dugs, Billy Bridges Bar, The Bell Rock, McKays, Matha Dickies, The Tam O’Shanter, The Brig and Willie Wastles.
Runners up this year were The Bellrock in Prestwick who were closely followed in their place by the Wee Windaes in Ayr’s Newmarket Street.
And we gave one lucky regular who voted in the competition the chance of winning a £40 tab on us.
Former British Aerospace worker David Gerrard, of Auchinleck, was picked out the hat to win the prize.
The 73-year-old grandad of five said: “It’s brilliant to win this.
“I didn’t believe it at first, I thought it was a wind up.
“It is a great pub. The staff are brilliant and friendly and always make you feel welcome.
“I have been coming here for about 30 years.”


12 Phylogenetic Regression
This chapter will show you how to perform phylogenetically correct regression analyses on continuous data in R. As usual, remember to set your working directory to wherever you have saved the necessary files.
12.1 Data
Let’s load up some example primate data. You should see the dataframe appear in your environment. If you inspect the object, you will find a number of continuous variables in there for us to investigate.
[1] "Order" "Family" "Binomial" "AdultBodyMass_g"
[5] "GestationLen_d" "HomeRange_km2" "MaxLongevity_m" "SocialGroupSize"
12.2 Linear Regression
Simple linear regression will be familiar to you from LIFE223. The principle is to find out what the relationship is between two or more variables.
To see if body mass and gestation length are related in primate, the best way to go would seem to be a traditional linear regression. The function to perform an ordinary least squares linear regression is lm(). The first argument is our model, stating in this case that body mass predicts gestation length. Then we specify the data object to tell R where to find the data.
You can use the summary function to see the output of your regression.
Call:
lm(formula = GestationLen_d ~ log10(AdultBodyMass_g), data = primate.data)
Residuals:
Min 1Q Median 3Q Max
-66.665 -15.762 -3.987 16.869 67.121
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 31.775 13.927 2.281 0.0249 *
log10(AdultBodyMass_g) 38.319 4.031 9.505 3.37e-15 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 27.31 on 89 degrees of freedom
Multiple R-squared: 0.5038, Adjusted R-squared: 0.4982
F-statistic: 90.35 on 1 and 89 DF, p-value: 3.374e-15
The key parts of our output are the coefficients table and the three lines of output below which contain the R2 value. Here, it’s telling us that our model is a significant fit to the data as we might expect. Also, the mid-range R2 (0.50) is what we’d expect given the spread of data in the plot.
We can also plot this line with ggplot (Wickham 2016) with the following code. To plot the regression line, add the function geom_smooth amd used the method “lm” to specify that I want a linear model plotted.
12.3 Phylogenetic Signal
As you know, the fact that comparative data points are not statistically independent is a problem for these kind of analyses. Therefore we need to run a phylogenetically corrected analysis.
Phylogenetic regression dates back a while and there have been many different ways to do it (Grafen 1989, Nunn 2011). To understand the logic behind the method, we will first consider the concept of phylogenetic signal.
12.3.1 Phylogenetic signal
Phylogenetic signal is defined as the tendency for closely related species to resemble each other more than distantly related species.
For example, body mass is (usually) a trait with a strong phylogenetic signal. What this means in primates is that although there is a broad range of body sizes from a few tens of grams up to around 200kg, the distribution of body masses closely follows the pattern of relatedness. Large primates like orangutan, gorillas, chimps and humans are all closely related for example.
The degree of phylogenetic signal in a trait is often described using the scaling parameter \(\lambda\). \(\lambda\) varies between 0 and 1 and is used to multiply the internal branch lengths so that the tree describes the pattern of variation in the trait.
For example, take the case on the left, where \(\lambda = 1\). In this case the tree is untransformed because the variation in the trait follows the structure of the tree. On the right, where \(\lambda = 0\), all the internal branch lengths have been multiplied by 0 and therefore collapsed. This “star phylogeny” describes a pattern of variation in which the trait varies at random with respect to the phylogeny. The trait is not equal across the tree but rather the variation in the trait does not correlate to the pattern of relatedness.
12.3.2 caper
Let’s run through some examples. There are a few packages that can run phylogenetic regressions in R but the one I usually go with is called caper (Comparative Analysis of Phylogenetics and Evolution in R) (Orme et al. 2018). So first we’ll need to load caper.
Now we can load up our phylogeny using read.nexus from the ape package (Paradis and Schliep 2018).
The regression command in caper (along with some other functions) requires the data and tree to be combined in a comparative data object. This type of object is simply a tree and comparative data set concatenated and is created using the function comparative.data. We need to specify the tree object, data object, column name in the data where species names are stored and whether we want a variance-covariance matrix included (we do).
primates <- comparative.data(phy = primate.tree, #Our tree
data = primate.data, #Our data
names.col = Binomial, #Data column with the species names
vcv = TRUE, #Variance-covariance matrix
na.omit = FALSE, #We don't want to drop missing data
warn.dropped = TRUE)
Warning in comparative.data(phy = primate.tree, data = primate.data, names.col =
Binomial, : Data dropped in compiling comparative data object
This warning message isn’t really a problem. If you look at the tree and data I provided, you’ll see that the tree has about 200 species but the datafile contains data for only 91. Therefore we expected R to drop some species when compiling the comparative data object. In fact, we asked it warn us if it did so!
We can inspect the structure of the comparative data object using str if necessary. You should see that the object contains both the tree and the data. Either one of these (pruned from the larger objects we specified) can be extracted again if needed.
List of 7
$ phy :List of 5
..$ edge : int [1:163, 1:2] 84 85 86 87 88 89 90 91 92 93 ...
..$ edge.length: num [1:163] 4.95 17.69 19.65 8.12 4.82 ...
..$ Nnode : int 81
..$ tip.label : chr [1:83] "Cercopithecus_ascanius" "Cercopithecus_cephus" "Cercopithecus_mitis" "Cercopithecus_neglectus" ...
..$ node.label : int [1:81] 84 85 86 87 88 89 90 91 92 93 ...
..- attr(*, "class")= chr "phylo"
..- attr(*, "order")= chr "cladewise"
$ data :'data.frame': 83 obs. of 7 variables:
..$ Order : Factor w/ 1 level "Primates": 1 1 1 1 1 1 1 1 1 1 ...
..$ Family : Factor w/ 15 levels "Aotidae","Atelidae",..: 4 4 4 4 4 4 4 5 5 6 ...
..$ AdultBodyMass_g: num [1:83] 3540 3445 5041 5325 5257 ...
..$ GestationLen_d : num [1:83] 148 170 138 172 170 ...
..$ HomeRange_km2 : num [1:83] 0.16 0.24 0.1 0.06 1.15 ...
..$ MaxLongevity_m : num [1:83] 340 276 325 316 276 ...
..$ SocialGroupSize: num [1:83] 26.3 11 16 4.5 16 28 91.2 1 1 1 ...
$ data.name: chr "primate.data"
$ phy.name : chr "primate.tree"
$ dropped :List of 2
..$ tips : chr [1:143] "Allenopithecus_nigroviridis" "Cercopithecus_cephus_cephus" "Cercopithecus_cephus_ngottoensis" "Cercopithecus_diana" ...
..$ unmatched.rows: chr [1:8] "Cercopithecus_campbelli" "Cercopithecus_pogonias" "Chiropotes_albinasus" "Chiropotes_satanas" ...
$ vcv : 'VCV.array' num [1:83, 1:83] 72.3 69 64 62.4 64 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:83] "Cercopithecus_ascanius" "Cercopithecus_cephus" "Cercopithecus_mitis" "Cercopithecus_neglectus" ...
.. ..$ : chr [1:83] "Cercopithecus_ascanius" "Cercopithecus_cephus" "Cercopithecus_mitis" "Cercopithecus_neglectus" ...
$ vcv.dim : num 2
- attr(*, "class")= chr "comparative.data"
12.3.3 Estimating Phylogenetic Signal
Let’s estimate the phylogenetic signal of gestation length in primates. The key is to remember that we need to call our comparative data object and not the data file we loaded up at the start. We’re running the trait on its own (hence the ~ 1) and estimating lambda by maximum likelihood.
Call:
pgls(formula = log10(GestationLen_d) ~ 1, data = primates, lambda = "ML")
Residuals:
Min 1Q Median 3Q Max
-0.035946 -0.007060 -0.001217 0.008039 0.049662
Branch length transformations:
kappa [Fix] : 1.000
lambda [ ML] : 0.957
lower bound : 0.000, p = < 2.22e-16
upper bound : 1.000, p = 0.050633
95.0% CI : (0.879, NA)
delta [Fix] : 1.000
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.175175 0.051457 42.272 < 2.2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.01462 on 82 degrees of freedom
Multiple R-squared: 0, Adjusted R-squared: 0
F-statistic: NaN on 0 and 82 DF, p-value: NA
This output has a lot in common with a basic regression output. That’s because it is one! We used the pgls function which performs a regression with phylogenetic correction. Because we included no predictors, the value of \(\lambda\) we estimate here corresponds only to this one trait.
The key part for us is the Branch length transformations section of the output. \(\kappa\) and \(\delta\) are fixed at 1 and so we aren’t concerned with those for now. \(\lambda\) is estimated at 0.957. That’s a pretty strong phylogenetic signal.
We also have lower bound and upper bound tests. We can see that \(\lambda\) is significantly different from the lower bound of 0 (p < 2.2 x 10-16).
The upper bound test shows us that \(\lambda\) is (narrowly) not significantly different from 1 (p = 0.051). This means that we can assume that gestation length has evolved by Brownian motion, in which case \(\lambda\) would equal 1 and the variation in trait would simply reflect the pattern of relatedness amongst species.
12.4 Phylogenetic Regression
Now let’s have a go at performing a PGLS regression!
Let’s say we have a hypothesis that larger species of primate have longer gestations. Our plot seems to back this up but how strong is this relationship?
We found earlier that there does seem to be a relationship but ordinary least squares linear regression can’t be relied upon in this situation. This is because of the statistical non-independence of data points due to shared evolutionary history!
A phylogenetic generalised least squares regression (PGLS) uses a covariance matrix to correct the analysis for this statistical non-independence. Put simply, the PGLS assumes the residuals are more similar in more closely related species rather than being randomly distributed as in linear regression.
As you’ve already seen, the function we need here is pgls. The model is constructed exactly as before but this time, we need to construct a full model. We’ll be estimating \(\lambda\) by maximum likelihood again.
Call:
pgls(formula = GestationLen_d ~ log10(AdultBodyMass_g), data = primates,
lambda = "ML")
Residuals:
Min 1Q Median 3Q Max
-13.0979 -2.4301 -0.8407 1.7269 6.9863
Branch length transformations:
kappa [Fix] : 1.000
lambda [ ML] : 0.805
lower bound : 0.000, p = 2.6579e-12
upper bound : 1.000, p = 1.042e-06
95.0% CI : (0.607, 0.920)
delta [Fix] : 1.000
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 53.6444 20.9100 2.5655 0.01215 *
log10(AdultBodyMass_g) 33.7532 5.8487 5.7710 1.394e-07 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3.513 on 81 degrees of freedom
Multiple R-squared: 0.2914, Adjusted R-squared: 0.2826
F-statistic: 33.3 on 1 and 81 DF, p-value: 1.394e-07
As you can see, our model is a significant fit to the data (F = 33.3, R2 = 0.29, p = 1.39 x 10-7). More importantly, We’ve confirmed that body size has a positive effect on gestation length (\(\beta\) = 33.75, s.e. = 5.85, p = 1.39 x 10-7). Time to plot!
A brief note here. The syntax to get ggplot to do this is a little more complex than base graphics (where we can just use abline(m2)!). Here I’ve plotted both the OLS (blue) and PGLS (red) lines so you can see how they differ.
library(dplyr)
primates$data %>%
mutate(my_model = predict(m2)) %>%
ggplot() +
geom_point(aes(log10(AdultBodyMass_g), GestationLen_d)) +
geom_line(aes(log10(AdultBodyMass_g), my_model),
colour = "red", lwd = 1) +
geom_smooth(aes(log10(AdultBodyMass_g), GestationLen_d),
method = 'lm', se = FALSE) +
labs(x = "Log Body Mass", y = "Gestation Length") +
geom_text(x = 2, y = 230, label = "PGLS", colour = "red", size = 4) +
geom_text(x = 2, y = 218, label = "OLS", colour = "blue", size = 4)
12.4.1 Model Checking
That’s the basic model run nicely. Now, we need to run some diagnostic checks. We should start with the likelihood surface of \(\lambda\) since we estimated it by maximum likelihood.
We begin by using the pgls.profile function to extract the likelihoods and then simply plot them. What we are looking for is a single peak around our estimated value. If we get a flat surface or multiple peaks, there might be an issue somewhere.
This plot describes the log likelihood of \(\lambda\) across its possible range of values (0 - 1). We can clearly see that the likelihood is highest around a single point around 0.8. Check back against the model output earlier to see if this is what we would expect.
Next we need to identify any outliers in the model residuals. The first step here is to extract the residuals from the model, making sure to tell R that we want the phylogenetic residuals. The model output of pgls actually stores both phylogenetic and non-phylogenetic residuals. We can then standardise the residuals by dividing through by the square root of the variance.
The general rule of thumb is that any standardised residual with an absolute value greater than 3 is an outlier and needs to be removed from the analysis. Here, I’m just assigning the species names to the res object so we can tell which species are the outliers (if any).
[1] "Microcebus_murinus" "Prolemur_simus"
Outliers! Maybe they’re causing problems and maybe they aren’t. We need to check that by re-running our analysis without them. A simple line of code will take our existing comparative data object and drop out the named outliers.
Now simply re-run the model, remembering to direct R to the new data object.
m3 <- pgls(GestationLen_d ~ log10(AdultBodyMass_g),
data = primates.nooutliers, lambda = "ML")
summary(m3)
Call:
pgls(formula = GestationLen_d ~ log10(AdultBodyMass_g), data = primates.nooutliers,
lambda = "ML")
Residuals:
Min 1Q Median 3Q Max
-10.2217 -2.0473 -0.4166 1.3041 11.2824
Branch length transformations:
kappa [Fix] : 1.000
lambda [ ML] : 0.800
lower bound : 0.000, p = 1.6399e-11
upper bound : 1.000, p = 1.2064e-06
95.0% CI : (0.595, 0.918)
delta [Fix] : 1.000
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 54.8023 21.1816 2.5873 0.01151 *
log10(AdultBodyMass_g) 33.3672 5.9418 5.6156 2.815e-07 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3.53 on 79 degrees of freedom
Multiple R-squared: 0.2853, Adjusted R-squared: 0.2762
F-statistic: 31.54 on 1 and 79 DF, p-value: 2.815e-07
The results have barely changed. So it seems that although those two lemurs were outliers, they weren’t effecting the analysis too much. Let’s check for outliers in this new model.
res <- residuals(m3, phylo = TRUE)
res <- res/sqrt(var(res))[1]
rownames(res) <- rownames(m3$residuals)
rownames(res)[abs(res)>3]
[1] "Microcebus_rufus"
Another one! Don’t worry. This can happen. We need to drop the new outlier again to run the same checks.
Finally, we can check the diagnostic plots of the model. I’ve included some lines to help arrange the plots. To view the plots for model diagnostics, we can simply plot the model object!
par.default <- par(no.readonly = T) #Save default plotting parameters
par(mfrow=c(2,2)) #Set the plot window to show 4 different plots
plot(m3)
The top left panel shows the distribution of our residuals. We can see a bump near +3. That will be our outlier that needs to be dropped before we proceed any further. The top right plot closely approximates a straight line so that’s good. The bottom left shows no real pattern which is also good. The bottom right graph should show a correlation (and it seems to) with the points more or less equally scattered above and below the 45o diagonal. Along that line, the observed and fitted values would be exactly equal.
12.5 Conclusion
So that’s how to perform a simple PGLS analysis. This kind of analysis is great for attempting make causal connections between traits of extant species, thus inferring a connection over evolutionary history. For example, we hypothesised that the reason some primates have longer gestation periods is that they have larger body sizes and the PGLS confirmed our suspicion. More complex regressions can include multpile predictors and that’s what we’ll look at next.
By the way, always make sure to check your models for outliers! In this analysis the gray mouse lemur was an outlier and we had to drop it.  If we hadn’t checked, we would have presented the analysis in a paper and then had it invalidated when someone checked up on it. Fortunately in this case, the outliers didn’t really change the outcome so the gray mouse lemur is off the hook. Look how relieved he is!
Bibliography
Grafen, A. (1989) ‘The Phylogenetic Regression’. Philosophical Transactions of the Royal Society of London. B, Biological Sciences [online] 326 (1233), 119–157. available from <https://doi.org/10.1098/rstb.1989.0106>
Nunn, C.L. (2011) The Comparative Approach in Evolutionary Anthropology and Biology [online] University of Chicago Press. available from <https://books.google.co.uk/books?id=qj4cSzJGQJAC>
Orme, D., Freckleton, R., Thomas, G., Petzoldt, T., Fritz, S., Isaac, N., and Pearse, W. (2018) Caper: Comparative Analyses of Phylogenetics and Evolution in R [online] available from <https://CRAN.R-project.org/package=caper>
Paradis, E. and Schliep, K. (2018) ‘Ape 5.0: An Environment for Modern Phylogenetics and Evolutionary Analyses in R’. Bioinformatics 35, 526–528
Wickham, H. (2016) Ggplot2: Elegant Graphics for Data Analysis [online] Springer-Verlag New York. available from <https://ggplot2.tidyverse.org>


Account
{{_current_global_user.email}}
Workspace {{ current_user_role }}
There is {{ users }}/{{ usernumber }} users in your workspace.


Report a problem Fill in the fields below to report your problem Personal information First name* Last name* E-mail* Product information Product ID* State your problem*


Recipe: Side dishes help make Thanksgiving a feast | Honolulu Star-Advertiser
There’s a lot at stake when you put together a Thanksgiving meal, with the turkey to roast and stuffing and gravy to make.
But Thanksgiving is also a holiday of side dishes. And it’s not enough to have just mashed potatoes and a single vegetable. Folks look forward all year long to some of those holiday sides.
When making them, it’s best to pace yourself. Do as much of the prep work as possible in advance.
Plenty of those side dishes come in the form of casseroles and gratins, including this Cheesy Cauliflower Casserole. It’s creamy and pure comfort food.
Before we get to that, here’s some advice to keep in mind as you prepare your Thanksgiving sides:
POTATOES
Peel the potatoes several hours in advance, put them in a bowl of cold water and refrigerate.
Once you cook the potatoes, let them drain. Always use warm milk, cream or half-and-half, plus softened butter when mashing the potatoes. Cold liquids will make the potatoes tough and gluey.
Take your mashed potatoes to another level by adding cooked and mashed parsnips for a sweet flavor or rutabaga for a heartier flavor. Add your favorite fresh chopped herbs.
VEGETABLES
Clean and prep any vegetables you need for casseroles or in side dishes in advance.
Chop, slice or dice vegetables and store in sealed plastic bags. This saves room in the refrigerator as you can stack the bags.
If your recipe calls for it, blanch vegetables a day before using. Pat them dry, then bag.
CASSEROLES AND STUFFING
Many dishes can be made in advance, but remember: Dishes that have lots of cream or a sauce don’t always reheat well.
Assemble casserole dishes the day before baking, then let sit at room temperature for at least 15 minutes before baking.
Prep stuffing ingredients in advance: saute onions, celery and any meats the night before. Cool and refrigerate.
Dry bread for stuffing by cutting into 1/2- to 1-inch cubes and set out overnight to dry. You can also dry bread in an oven at a low (200 degrees) temperature.
KEEPING THINGS WARM
Your outdoor grill can be like having a warming oven. Keep it on its lowest setting (about 200 degrees). Place side dishes in foil trays (if you know you’re going to use your grill for this purpose, bake the dishes in foil trays to begin with). Cover them well so they don’t dry out.
I USED a blend of cheddar and colby jack cheese to make this casserole, but any good melting cheese will work. Cauliflower is mild in flavor, so you can be daring and spice the dish up a bit. Add a few pinches of cayenne, for example.
Blanching the cauliflower shortens the baking time and rids it of excess water. But don’t skip the step of draining and pressing the cauliflower to soak up the moisture after blanching. Excess moisture will make the dish soupy.
CHEESY CAULIFLOWER CASSEROLE
Adapted from delish.com
- 1 large head cauliflower, broken into florets
- 6 slices bacon, cooked and crumbled, divided
- 1/2 cup sliced green onions, divided
- 1/2 cup shredded cheddar or other cheese
- >> Sauce:
- 2 tablespoons unsalted butter
- 3 cloves garlic, minced
- 3 tablespoons all-purpose flour
- 2 cups milk
- 2 ounces cream cheese, softened
- 1 cup shredded cheddar cheese
- Kosher salt and freshly ground pepper, to taste
Heat oven to 350 degrees. Bring a large pot half-filled with water to a boil. Blanch cauliflower 3 minutes. Drain, then press a clean kitchen towel gently on the cauliflower to soak up excess water.
Make sauce: Melt butter in large skillet. Add garlic and cook until fragrant, about 1 minute. Add flour and stir until lightly golden, about 2 minutes. Slowly stir in milk and bring to a low simmer. Whisk in cream cheese until it melts. Remove from heat and stir in cheddar cheese until melted. Season with salt and pepper.
Place drained cauliflower in a 9-by-13-inch baking dish. Stir in cheese sauce. Set aside about 2 tablespoons of cooked bacon and green onions; stir the rest into the cauliflower. Top with remaining bacon, green onions and cheddar.
Bake 30 minutes, until cauliflower is tender and cheese on top has melted. Serves 10.
Nutritional information unavailable.


Energy Web Volta testnet faucet
Volta faucet
Please visit
https://energyweb.org
to get started with our chains.
Request 1 Volta token


A14 breakdown causes closed lane and traffic build-up
by Holly HumeHighways England are attending the breakdown on the A14 but have had to close one lane of the road during a busy time.
Suffolk police received a call just after 2.30pm today that a Renault Scenic had broken down in the eastbound lane of the major road.
The car is in lane one between junction 51 and 52 of the Claydon Interchange by a slip road.
Recovery is being arranged and the lane is expected to be open soon.


Paperless Office
无纸化办公
Menu
Your browser does not support JavaScript! Some features won't work as expected...
Tabs
Personal
Profile
Password
Another tab
Disabled tab
个人信息修改
id
用户名
性别
Email
qq
tel
提交
密码修改
原密码
新密码
密码确认
提交
Alternate tab 2
Disabled tab
Dashboard
Messages
Agenda
Contacts
Medias
Stats
Settings
Notes
{$nowpeople.ustatus}
Hello
{$nowpeople.name}
2
Today's event
{volist name="resultnow" id="vo"}
{$vo.thing}
{/volist}
New messages
Starred
New
17:12
Attachment
John Doe
Mail subject
Not starred
New
15:47
May Starck
Mail subject a bit longer
Not starred
15:12
May Starck
Read message


Taliban say they freed US, Australian hostages for 3 terrorist figures
by Lia EustachewichTwo hostages — an American and Australian — who’ve been held since 2016 have been released in a prisoner swap that let three top Taliban figures walk free, the Taliban said Tuesday.
American Kevin King and Australian Timothy Weeks, both professors at the American University of Kabul, were released in the southern Zabul province.
It wasn’t immediately clear if the two men were handed over to Afghan government representatives, intermediaries or US forces.
King and Weeks were abducted outside the university three years ago. The following year, the Taliban released two videos of them and another in January 2017 in which they appeared pale and gaunt.
Both claimed at the time that they were being treated well and asked their governments to help in their release — but it’s impossible to know whether they were forced to speak.
US officials said American forces had launched a rescue mission to free the pair but they were not found at the raided location.
Their release came hours after the Afghan government freed the trio of Taliban prisoners and sent them to Qatar. They included Anas Haqqani, the younger brother of the Taliban’s deputy Sirajuddin Haaqani, who leads the Aghfan guerrilla insurgent group the Haqqani network.
It appears the Taliban had refused to hand over King and Weeks until they received proof their own men had reached Qatar.
The “conditional release” of the Taliban figures was announced last week by Afghan President Ashraf Ghani.
The prisoner exchange was intended to try to restart talks to end Afghanistan’s 18-year war and allow for the eventual withdrawal of US troops from the country.
With Post wires


I recently did most of Dr Chuck’s Python course on Coursera, and documented most of what I’d learnt. Here are my notes, and few comments on the experience.
I’d recommend it for an introduction. It’s focused on text processing, but includes all the conceptual elements I expected. Coupled with Swaroop’s course: A bite of Python and Learn Python the Hard Way, it represents pretty much the entirity of my Python courses to date.
Week 1: introduction - why we program
I can’t say I really learnt anything in the first week, but it was definitely fun. Dr Chuck is a charismatic and enthusiastic teacher and his lectures, that are kind of like fireside chats, certainly got me interested in the course.
Week 2: variables and expressions
Still pretty basic, but I definitely learned some stuff this week.
Expression evaluation order
When Python evaluates expressions the following hierarchy of operators is used: Parentheses; Powers; Division, multiplication, remainder; Addition, subtraction; Left to right.
An example:
Floats in expressions
When evaluating an expression that contains a float the evaluation is done with integers until the float is evaluated, then after that the rest of the expression is evaluated as if all numbers were floats
An improvement on the elevator program
My version of Dr Chuck’s Euro > US elevator floor converter.  To set this is Sublime Text, go to Preferences > Settings - User, and add:
The if statement
You can do single line if statements like this:
You don’t need to have an else in a conditional, you can just have if and elif(s):
I was curious about why Dr Chuck didn’t use parentheses when writing out if conditionals, turns out for conditional statements they do the same thing as for evaluating any simple expression, i.e. to force hierachy of evaluation! So, they are really not necessary for simple conditions like x < 5.
I think I will still use them though, for consistency if nothing else.
try/except
Try/except is used to deal with errors, by default it will only deal with run time errors, e.g. non-existent variables. An if statement will never raise an exception on it’s own. You have to use ‘raise’ to get that to happen.
It may be possible to use ‘assert’, but that has its own issues apparently.
Week 4: functions
I’m sad to say I didn’t really learn anything new about functions from Dr Chuck. To be fair, he did say functions wouldn’t really feature in the course. I would suggest looking elsewhere for function related tutorials.
Format for a function:
Week 5: loops and iteration
A loop that never runs is known as a zero trip loop, for example:
Use continue in a loop to return to the start of the loop, for example:
While type loops are known as indefinite loops, they will contune to run until some condition becomes false, the opposite are definite loops, i.e. iteration
Loop idioms was a phrase I’d not come across before, Dr Chuck gave examples including counting, adding and averaging loops. More on idioms on wikipedia.
Week 6: Strings
Best thing I learnt this week is the dir function. Use it to discover built in methods for an object, e.g. a variable that points to a string object:
Access a character from a string using indexing:
Get length of string:
Looping through strings:
Slicing strings:
‘in’ as an operator:
A simple string parsing exercise:
Week 7: You Have Arrived
Didn’t make any notes this week.
Week 8: Lists
Lists are mutable! Use the range function to create a list of integers:
Not sure when you would need it really, but if you want to use the index of an item in a list when looping through it you can combine range() and len() to do that:
Lists can be concatinated (+) and sliced ([n:n]) just like strings. Interesting that concatination builds a new list from the existing lists, I thought it might have created a new list of nested lists, but no!
An aside, two logiccal operators to remember: in and not in:
Interesting discussion on alternatives to loop idioms discussed in week 5:
The idea of adding values to a list via a loop and then later doing other things with that list, i.e. with those values, is a powerful one!
The split() method splits a string into a list:
Split() method can be really useful for extracting specific elements form large strings, e.g text files. Use the “double split” method, split on white space, then refine by taking important items form the list and spliting those with other chracters.
Guardian patterns
A technique form preventing errors in your programs, for example, if it appears specific data being reed might be causing problems. Basically debug to figure out what data is causing the issue and then write a statement to deal with that data before the bit of your program that crashes is reached.
Typically this would be an “if x: continue” statement.
Week 9: Dictionaries
Didn’t make any notes this week.
Week 10: Tuples
Basically immutable lists. They are iterable like lists, but you can’t change them once created so you can’t sort, append etc. So why use them? Because they are more efficient than lists. Useful for assigning multiple variables in one statement:
Useful for iterating over keys and values in dictionaries:
Tuples are comparable:
Because they are comparable they are sortable, so are useful for sorting dictionaries by key:
You can combine all the above and use the sorted()
method to output sorted keys and values:
Dr Chuck talked a little bit about refactoring, suggesting once you understand the long form of writing many of these idioms, you can often refactor them into ‘more dense’ versions. An example of this being if oyu wanted to get the top 5 most common words in some text data:


"Show only the even numbers"
Array One {3, 4, 9, 15, 16, 24}
SHOW RESULT
"Show Fizz if divisible by 3
Show Buzz if divisible by 5
Show Fizz-Buzz if divisible by both"
Array Two {3, 5, 9, 15, 30, 43}
SHOW RESULT
"Show word count for strings"
Array Three {
"This is one sentence",
"Here is another",
"This is the last one"}
SHOW RESULT
"Show the last item in array"
Array Four {
"Item 1",
"Item 2",
"Item 3"}
SHOW RESULT
"Show a string in alphabetical order"
Array Five {"the quick brown fox jumps over the lazy dog"}
SHOW RESULT
"Show an array where each string has the first letter capitalized"
Array Six {"paul","ashley","antonio","jason","chris"}
SHOW RESULT


Sensory Web
Sensory Experiments On The Web
View on GitHub
Welcome to the sensory web!
We are working on putting sensory experiments on the web.
Projects
Beer Sense
(
on GitHub
)
Authors and Contributors
Jon Boley (
@JonBoley
)


Shaun Wright-Phillips' comments on Jose Mourinho will excite Tottenham fans
The former Chelsea and Manchester United manager was appointed as the new Tottenham head coach on Wednesday morning
by Connor O'NeillShaun Wright-Phillips has opened up on what it is like to play under Jose Mourinho.
The former Chelsea and Manchester United manager was appointed as the new Tottenham head coach on Wednesday morning after Mauricio Pochettino was sacked by the club on Tuesday night.
Mourinho takes over a Spurs side that are without a win in their past five games and have slipped to 14th in the Premier League, 20 points behind leaders Liverpool after just 12 matches.
And Wright-Phillips, who spent three years working under Mourinho at Stamford Bridge, has revealed why he is the best manager he worked under in his playing career.
“You have to give your all,” the former winger told BBC Radio Five Live .
“For me now, he's the best manager I played under. Even though I wasn’t in the team week in week out I still enjoyed being there. I still felt part of the team and I still felt like we all battered in the right direction.

Tottenham Hotspur End of Decade Series
This week football.london are running a special series of articles looking back at the key moments from the last decade for Spurs.
Each day, there will be three new articles; one in the morning, one at lunchtime and one in the evening.
Here are some of the best bits so far...
- Team of the Decade: Eriksen and Modric in but no place for Alderweireld or Son - Spurs' team of the decade revealed
- When Poch last feared for his future: The pivotal moment in Mauricio Pochettino's Tottenham career that Spurs boss must draw upon now
- Mind The Gap: 'Mind the gap?' - the season when even the Spurs and Arsenal fans lost their banter
- Players of the Decade: Kyle Walker and Michael Dawson in as Dele Alli misses out - The best Spurs players of the decade
- Gareth Bale's coming-of-age moment: Gareth Bale, Inter Milan and a night no Tottenham fan will ever forget
While the former England international also believes that a squad shake up at the club is exactly what is needed.
“For me, I feel like Spurs might need that,” Wright-Phillips replied when asked if any of Spurs’ players will be nervous about their future under Mourinho.
“I feel like they always get to the final hurdle and just fail, and I think he might be the person to take them across the line.”


{% load i18n wiki_tags wiki_images_tags humanize wiki_thumbnails sekizai_tags %} {% load url from future %} {% addtoblock "js" %} {% endaddtoblock %} {% with article|images_for_article as images %}
|
{% trans "Image id" %}: {{ image.id }}
{% trans "Insert" %} |
|
| {% trans "No images found for this article" %} |
{{ field.help_text|safe }}
{% endif %} {% endfor %}{% else %} {% if user.is_anonymous %} {% include "wiki/includes/anonymous_blocked.html" %} {% else %}
{% trans "You do not have permissions to add images." %}
{% endif %} {% endif %}{% trans "After uploading an image, it is attached to this particular artice and can be used only here. Other users may replace the image, but older versions are kept. You probably want to show the image with a nice caption. To achieve this, press the Insert button and fill in the caption fields and possibly choose to have you image floating right or left of the content. You can use Markdown in the caption. The markdown code syntax for images looks like this, possible values for align are left and right:" %}
[image:id align:right] caption indented by 4 spaces{% endwith %}


About Us
FemmeHacks is a beginner-friendly, collegiate hackathon for women-identifying* individuals in Philly/NY/NJ, hosted by the University of Pennsylvania's Women in Computer Science. Our goal is to inspire, teach, and empower women in the Philly tech community. We believe that together we can build inventions, learn, inspire one another, and create a community of women* in the field. we have be both beginner and intermediate workshops on Friday in topics like web dev, hardware, and Github (a code collaboration tool). And on Saturday we have all-day hacking with mentors, engineers, hardware, tech companies, start ups, swag, and good food.
* we realize "women" is a complicated term. We use * to specifically and intentionally welcome trans and cis women, as well as nonbinary and gender non-conforming folks :). Equality for all, y'all.


---
layout: post
title: Murder of Count Andeiro animatic
date: '2013-04-14T11:12:00+02:00'
categories:
- Storyboards
- Atoleiros Battle
picture_url: https://film-Storyboards.tumblr.com/post/47960742274/the-murder-of-count-andeiro-animatic-Storyboards
---
The murder of Count Andeiro. Animatic Storyboards rough.


Search
About Us
Details
Day
8:00 - 8:55
9:00 - 9:55
10:00 - 10:55
11:00 - 11:55
12:00 - 12:55
14:00 - 14:55
15:00 - 15:55
16:00 - 16:55
17:00 - 17:55
Monday
Tuesday
Wednesday
Thursday
Friday
Click on a slot to mark it as occupied
Minor courses available this semester


Class: Aws::CloudFormation::Types::SetTypeConfigurationInput
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Struct
|
|
|
Instance Chain:
self,
::Aws::Structure ,
Struct
|
|
| Inherits: |
Struct
|
| Defined in: | gems/aws-sdk-cloudformation/lib/aws-sdk-cloudformation/types.rb |
Overview
Constant Summary
Instance Attribute Summary
-
#configuration ⇒ String
rw
The configuration data for the extension, in this account and Region.
-
#configuration_alias ⇒ String
rw
An alias by which to refer to this extension configuration data.
-
#type ⇒ String
rw
The type of extension.
-
#type_arn ⇒ String
rw
The Amazon
::Aws::CloudFormation::Resource
Name (ARN) for the extension, in this account and Region. -
#type_name ⇒ String
rw
The name of the extension.
Instance Method Summary
::Aws::Structure
- Included
| #to_hash | Alias for Structure#to_h. |
Instance Attribute Details
#configuration ⇒ String
(rw)
The configuration data for the extension, in this account and Region.
The configuration data must be formatted as JSON, and validate
against the schema returned in the ConfigurationSchema
response
element of DescribeType. For more information, see Defining
account-level configuration data for an extension in the
CloudFormation CLI User Guide.
#configuration_alias ⇒ String
(rw)
An alias by which to refer to this extension configuration data.
Conditional: Specifying a configuration alias is required when setting a configuration for a resource type extension.
#type ⇒ String
(rw)
The type of extension.
Conditional: You must specify ConfigurationArn
, or Type
and
TypeName
.
# File 'gems/aws-sdk-cloudformation/lib/aws-sdk-cloudformation/types.rb', line 6408
class SetTypeConfigurationInput < Struct.new( :type_arn, :configuration, :configuration_alias, :type_name, :type) SENSITIVE = [] include Aws::Structure end
#type_arn ⇒ String
(rw)
The Amazon ::Aws::CloudFormation::Resource
Name (ARN) for the extension, in this account
and Region.
For public extensions, this will be the ::Aws::ARN
assigned when you
activate the type in this account and Region. For private
extensions, this will be the ::Aws::ARN
assigned when you register the
type in this account and Region.
Do not include the extension versions suffix at the end of the ::Aws::ARN
.
You can set the configuration for an extension, but not for a
specific extension version.
# File 'gems/aws-sdk-cloudformation/lib/aws-sdk-cloudformation/types.rb', line 6408
class SetTypeConfigurationInput < Struct.new( :type_arn, :configuration, :configuration_alias, :type_name, :type) SENSITIVE = [] include Aws::Structure end
#type_name ⇒ String
(rw)
The name of the extension.
Conditional: You must specify ConfigurationArn
, or Type
and
TypeName
.
# File 'gems/aws-sdk-cloudformation/lib/aws-sdk-cloudformation/types.rb', line 6408
class SetTypeConfigurationInput < Struct.new( :type_arn, :configuration, :configuration_alias, :type_name, :type) SENSITIVE = [] include Aws::Structure end


{{ extends 'global/Page.html' }} {{ block title }}Final questionnaire{{ endblock }} {{ block content }}
We will now ask you a few questions about yourself that will be used to better understand and analyse the decisions made in the games.
Please provide your Staff Identification Number (SID). This is required to process your payment. If you do not have a SID, please enter your email address. In the absence of either a SID or an email address, you will not be able to receive your payment, and the experimental team will have to ignore your choices.
{{ formfields }} {{ next_button }} {{ endblock }}


Daichir, Priest of Earth:
You made it back safely, thanks be to Maphr! The magical shield in the Mithril Mine seems to have been stabilized... at least for now.
Thank you for your help! Here is the reward I promised -- use it well. I fear this positive change is only temporary, though, so I hope you will help us if the shield begins to weaken again.
Until then, may Maphr shield you from all harm!
Karna Maprera!