Calm: Linux Workloads¶
The estimated time to complete this lab is 60 minutes.
Overview¶
Nutanix Calm allows you to seamlessly select, provision, and manage your business applications across your infrastructure for both the private and public clouds. Nutanix Calm provides App lifecycle, monitoring and remediation to manage your heterogeneous infrastructure, for example, VMs or bare-metal servers. Nutanix Calm supports multiple platforms so that you can use the single self-service and automation interface to manage all your infrastructure.
In this lab you will explore the basics of Nutanix Calm by building and deploying a blueprint that installs and configures a multi-tier Task Manager web app using MySQL, nginix, and HAProxy.
Creating a Blueprint¶
A blueprint is the framework for every application that you model by using Nutanix Calm. Blueprints are templates that describe all the steps that are required to provision, configure, and execute tasks on the services and applications that are created. You can create a blueprint to represent the architecture of your application and then run the blueprint repeatedly to create an instance, provision, and launch your applications. A blueprint also defines the lifecycle of an application and its underlying infrastructure starting from the creation of the application to the actions that are carried out on a blueprint until the termination of the application.
You can use blueprints to model the applications of various complexities; from simply provisioning a single virtual machine to provisioning and managing a multi-node, multi-tier application.
In Prism Central, select > Services > Calm.
Select Blueprints in the left hand toolbar to view and manage Calm bleuprints.
Note
Mousing over an icon will display its title.
Click + Create Blueprint > Multi VM/Pod Blueprint.
Fill out the following fields:
- Name - Initials-CalmLinuxIntro
- Description - [Task Manager Application](http://@@{HAProxy.address}@@/)
- Project - Initials-Calm
Click Proceed to launch the Blueprint Editor.
The Blueprint Editor provides a graphical representation of various components that enable you to visualize and configure the components and their dependencies in your environment.
Creating Credentials¶
First you will create a credential that will be used to authenticate Calm to the CentOS VMs you will eventually deploy. Credentials are unique to each Blueprint, and are not exported as part of the Blueprint for security purposes. Each Blueprint requires a minimum of 1 credential.
This exercise uses a “Generic Cloud” CentOS image. This is a common option for multiple popular Linux distributions that is lightweight, supports Cloud-Init based configuration, and utilizes SSH keypair authentication instead of passwords. Keypair based authentication is commonplace in all public cloud environments.
Click Credentials.
Click Credentials and fill out the following fields:
- Credential Name - CENTOS
- Username - centos
- Secret Type - SSH Private Key
- Key - Paste in your own private key, or use:
-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAii7qFDhVadLx5lULAG/ooCUTA/ATSmXbArs+GdHxbUWd/bNG ZCXnaQ2L1mSVVGDxfTbSaTJ3En3tVlMtD2RjZPdhqWESCaoj2kXLYSiNDS9qz3SK 6h822je/f9O9CzCTrw2XGhnDVwmNraUvO5wmQObCDthTXc72PcBOd6oa4ENsnuY9 HtiETg29TZXgCYPFXipLBHSZYkBmGgccAeY9dq5ywiywBJLuoSovXkkRJk3cd7Gy hCRIwYzqfdgSmiAMYgJLrz/UuLxatPqXts2D8v1xqR9EPNZNzgd4QHK4of1lqsNR uz2SxkwqLcXSw0mGcAL8mIwVpzhPzwmENC5OrwIBJQKCAQB++q2WCkCmbtByyrAp 6ktiukjTL6MGGGhjX/PgYA5IvINX1SvtU0NZnb7FAntiSz7GFrODQyFPQ0jL3bq0 MrwzRDA6x+cPzMb/7RvBEIGdadfFjbAVaMqfAsul5SpBokKFLxU6lDb2CMdhS67c 1K2Hv0qKLpHL0vAdEZQ2nFAMWETvVMzl0o1dQmyGzA0GTY8VYdCRsUbwNgvFMvBj 8T/svzjpASDifa7IXlGaLrXfCH584zt7y+qjJ05O1G0NFslQ9n2wi7F93N8rHxgl JDE4OhfyaDyLL1UdBlBpjYPSUbX7D5NExLggWEVFEwx4JRaK6+aDdFDKbSBIidHf h45NAoGBANjANRKLBtcxmW4foK5ILTuFkOaowqj+2AIgT1ezCVpErHDFg0bkuvDk QVdsAJRX5//luSO30dI0OWWGjgmIUXD7iej0sjAPJjRAv8ai+MYyaLfkdqv1Oj5c oDC3KjmSdXTuWSYNvarsW+Uf2v7zlZlWesTnpV6gkZH3tX86iuiZAoGBAKM0mKX0 EjFkJH65Ym7gIED2CUyuFqq4WsCUD2RakpYZyIBKZGr8MRni3I4z6Hqm+rxVW6Dj uFGQe5GhgPvO23UG1Y6nm0VkYgZq81TraZc/oMzignSC95w7OsLaLn6qp32Fje1M Ez2Yn0T3dDcu1twY8OoDuvWx5LFMJ3NoRJaHAoGBAJ4rZP+xj17DVElxBo0EPK7k 7TKygDYhwDjnJSRSN0HfFg0agmQqXucjGuzEbyAkeN1Um9vLU+xrTHqEyIN/Jqxk hztKxzfTtBhK7M84p7M5iq+0jfMau8ykdOVHZAB/odHeXLrnbrr/gVQsAKw1NdDC kPCNXP/c9JrzB+c4juEVAoGBAJGPxmp/vTL4c5OebIxnCAKWP6VBUnyWliFhdYME rECvNkjoZ2ZWjKhijVw8Il+OAjlFNgwJXzP9Z0qJIAMuHa2QeUfhmFKlo4ku9LOF 2rdUbNJpKD5m+IRsLX1az4W6zLwPVRHp56WjzFJEfGiRjzMBfOxkMSBSjbLjDm3Z iUf7AoGBALjvtjapDwlEa5/CFvzOVGFq4L/OJTBEBGx/SA4HUc3TFTtlY2hvTDPZ dQr/JBzLBUjCOBVuUuH3uW7hGhW+DnlzrfbfJATaRR8Ht6VU651T+Gbrr8EqNpCP gmznERCNf9Kaxl/hlyV5dZBe/2LIK+/jLGNu9EJLoraaCBFshJKF -----END RSA PRIVATE KEY-----
Click Save, and then Back.
Defining Variables¶
Variables allow extensibility of Blueprints, meaning a single Blueprint can be used for multiple purposes and environments depending on the configuration of its variables. Variables can either be static values saved as part of the Blueprint or they can be specified at Runtime (when the Blueprint is launched). Variables are specific to a given Application Profile, which is the platform on which the blueprint will be deployed. For example, a blueprint capable of being deployed to both AHV and AWS would have 2 Application Profiles. Each profile could have individual variables and VM configurations.
By default, variables are stored as a String and are visible in the Configuration Pane. Setting a variable as Secret will mask the value and is ideal for variables such as passwords. In addition to the String and Secret options, there are Integer, Multi-line String, Date, Time, and Date Time Data Types, and more advanced Input Types, however these are outside the scope of this lab.
Variables can be used in scripts executed against objects using the @@{variable_name}@@ construct. Calm will expand and replace the variable with the appropriate value before sending to the VM.
In the Configuration Pane on the right side of the Blueprint Editor, under Variables, add the following variables (Runtime is specified by toggling the Running Man icon to Blue):
Variable Name Data Type | Value Secret Runtime User_initials String | xyz X Mysql_user String | root Mysql_password String | nutanix/4u X Database_name String | homestead Click Save.
Adding a Downloadable Image¶
VMs in AHV can be deployed based on a disk image. With Calm, you can select a Downloadable Image via a URI. During the application deployment, Prism Central will automatically download and create the image specified. If an image with the same URI already exists on the cluster, it will skip the download and use the local image instead.
From the top toolbar, click Configuration > Downloadable Image Configuration and fill out the following fields:
- Package Name - CentOS_7_Cloud
- Description - CentOS 7 Cloud Image
- Image Name - CentOS_7_Cloud
- Image Type - Disk Image
- Architecture - X86_64
- Source URI - http://download.nutanix.com/calm/CentOS-7-x86_64-GenericCloud.qcow2
- Product Name - CentOS
- Product Version - 7
Note
This Generic Cloud image is the same that’s used for the majority of the Nutanix Pre-Seeded Application Blueprints.
Click Save, and then Back.
Creating Services¶
Services are the virtual machine instances, existing machines or bare-metal machines, that you can provision and configure by using Nutanix Calm.
In this exercise you will create the database, webserver, and load balancer services that comprise your application.
Creating the Database Service¶
In Application Overview > Services, click to add a new Service.
By default, the Application Overview is located in the lower right-hand corner of the Blueprint Editor and is used to create and manage Blueprint layers such as Services, Application Profiles, and Actions.
Note Service1 appears in the Workspace and the Configuration Pane reflects the configuration of the selected Service.
Fill out the following fields:
- Service Name - MySQL
- Name - MySQLAHV
Note
This defines the name of the substrate within Calm. Names can only contain alphanumeric characters, spaces, and underscores.
- Cloud - Nutanix
- OS - Linux
- VM Name - @@{User_initials}@@-MYSQL-@@{calm_array_index}@@-@@{calm_time}@@
Note
This will use the Runtime User_initials variable you previously provided to prepend the VM name with your initials. It will also use built-in macros to provide the array index (for scale out services) and a time stamp.
Image - CentOS_7_Cloud
Device Type - Disk
Device Bus - SCSI
Select Bootable
vCPUs - 2
Cores per vCPU - 1
Memory (GiB) - 4
Select Guest Customization
Type - Cloud-init
Script -
#cloud-config users: - name: centos ssh-authorized-keys: - @@{CENTOS.public_key}@@ sudo: ['ALL=(ALL) NOPASSWD:ALL']
Note
When using an SSH Private Key Credential, Calm is able to decode that private key into the matching public key, and makes the decoded value accessable via the @@{Credential_Name.public_key}@@ macro. Cloud-Init is then leveraged to populate the SSH public key value as an authorized key, allowing for the corresponding private key to be used to authenticate to the host.
Select under Network Adapters (NICs)
NIC 1 - Primary
Credential - CENTOS
Click Save.
Note
If errors or warnings are presented after saving the blueprint, hover over the icon in the top toolbar to see a list of issues. Resolve any issues and Save the blueprint again.
Now that you have completed the deployment details for the VM associated with the service, the next step is to tell Calm how the application will be installed on the VM.
With the MySQL service icon selected in the Workspace pane, scroll to the top of the Configuration Panel, and select the Package tab.
The Package is the configuration and application(s) installed on the Service, and is typically accomplished by executing a script on the Service VM.
Specify MySQL_PACKAGE as the Package Name and click Configure install.
- Package Name - MYSQL_PACKAGE
Note the Package install field that appears on the MySQL service in the Workspace pane.
Select + Task, and fill out the following fields in the Configuration Panel to define the script that Calm will remotely execute on the MySQL Service VM:
Task Name - Install_sql
Type - Execute
Script Type - Shell
Credential - CENTOS
Script -
#!/bin/bash set -ex sudo yum install -y "http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm" sudo yum update -y sudo setenforce 0 sudo sed -i 's/enforcing/disabled/g' /etc/selinux/config /etc/selinux/config sudo systemctl stop firewalld || true sudo systemctl disable firewalld || true sudo yum install -y mysql-community-server.x86_64 sudo /bin/systemctl start mysqld sudo /bin/systemctl enable mysqld #Mysql secure installation mysql -u root<<-EOF UPDATE mysql.user SET Password=PASSWORD('@@{Mysql_password}@@') WHERE User='@@{Mysql_user}@@'; DELETE FROM mysql.user WHERE User='@@{Mysql_user}@@' AND Host NOT IN ('localhost', '<IP_ADDRESS>', '::1'); DELETE FROM mysql.user WHERE User=''; DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'; FLUSH PRIVILEGES; EOF mysql -u @@{Mysql_user}@@ -p@@{Mysql_password}@@ <<-EOF CREATE DATABASE @@{Database_name}@@; GRANT ALL PRIVILEGES ON homestead.* TO '@@{Database_name}@@'@'%' identified by 'secret'; FLUSH PRIVILEGES; EOF
Note
You can click the Pop Out icon on the script field for a larger window to view/edit scripts.
Reviewing the script you can see the package will install MySQL, configure the credentials and create a database based on the variables specified earlier in the exercise.
Select the MySQL service icon in the Workspace pane again, select the Package tab in the Configuration Panel.
Click Configure uninstall.
Select + Task, and fill out the following fields in the Configuration Panel:
Task Name - Uninstall_sql
Type - Execute
Script Type - Shell
Credential - CENTOS
Script -
#!/bin/bash echo "Goodbye!"
Note
The uninstall script can be used for removing packages, updating network services like DHCP and DNS, removing entries from Active Directory, etc. It is not being used for this simple example.
Click Save. You will be prompted with specific errors if there are validation issues such as missing fields or unacceptable characters.
Creating the Web Server Service¶
You will now follow similar steps to define a web server service.
In Application Overview > Services, add an additional service.
Select the new service and fill out the following VM fields in the Configuration Panel:
Service Name - WebServer
Name - WebServerAHV
Cloud - Nutanix
OS - Linux
VM Name - @@{User_initials}@@-WebServer-@@{calm_array_index}@@
Image - CentOS_7_Cloud
Device Type - Disk
Device Bus - SCSI
Select Bootable
vCPUs - 2
Cores per vCPU - 1
Memory (GiB) - 4
Select Guest Customization
Type - Cloud-init
Script -
#cloud-config users: - name: centos ssh-authorized-keys: - @@{CENTOS.public_key}@@ sudo: ['ALL=(ALL) NOPASSWD:ALL']
Select under Network Adapters (NICs)
NIC 1 - Primary
Credential - CENTOS
Select the Package tab.
Specify a Package Name and click Configure install.
- Package Name - WebServer_PACKAGE
Select + Task, and fill out the following fields in the Configuration Panel:
Name Task - Install_WebServer
Type - Execute
Script Type - Shell
Credential - CENTOS
Script -
#!/bin/bash set -ex sudo yum update -y sudo yum -y install epel-release sudo setenforce 0 sudo sed -i 's/enforcing/disabled/g' /etc/selinux/config /etc/selinux/config sudo systemctl stop firewalld || true sudo systemctl disable firewalld || true sudo rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm sudo yum update -y sudo yum install -y nginx php56w-fpm php56w-cli php56w-mcrypt php56w-mysql php56w-mbstring php56w-dom git unzip sudo mkdir -p /var/www/laravel echo "server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /var/www/laravel/public/; index index.php index.html index.htm; location / { try_files \$uri \$uri/ /index.php?\$query_string; } # pass the PHP scripts to FastCGI server listening on /var/run/php5-fpm.sock location ~ \.php$ { try_files \$uri /index.php =404; fastcgi_split_path_info ^(.+\.php)(/.+)\$; fastcgi_pass <IP_ADDRESS>:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; include fastcgi_params; } }" | sudo tee /etc/nginx/conf.d/laravel.conf sudo sed -i 's/80 default_server/80/g' /etc/nginx/nginx.conf if `grep "cgi.fix_pathinfo" /etc/php.ini` ; then sudo sed -i 's/cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php.ini else sudo sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php.ini fi sudo systemctl enable php-fpm sudo systemctl enable nginx sudo systemctl restart php-fpm sudo systemctl restart nginx if [ ! -e /usr/local/bin/composer ] then curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer sudo chmod +x /usr/local/bin/composer fi sudo git clone https://github.com/ideadevice/quickstart-basic.git /var/www/laravel sudo sed -i 's/DB_HOST=.*/DB_HOST=@@{MySQL.address}@@/' /var/www/laravel/.env sudo su - -c "cd /var/www/laravel; composer install" if [ "@@{calm_array_index}@@" == "0" ]; then sudo su - -c "cd /var/www/laravel; php artisan migrate" fi sudo chown -R nginx:nginx /var/www/laravel sudo chmod -R 777 /var/www/laravel/ sudo systemctl restart nginx
This script installs PHP and Nginx to create a web server, and then a Laravel based web application. It then configures the web application settings, including updating the DB_HOST with the MySQL IP address, accessed via the @@{MySQL.address}@@ macro.
Select the Package tab and click Configure uninstall.
Select + Task, and fill out the following fields in the Configuration Panel:
Name Task - Uninstall_WebServer
Type - Execute
Script Type - Shell
Credential - CENTOS
Script -
#!/bin/bash set -ex sudo rm -rf /var/www/laravel sudo yum erase -y nginx
For many applications it is common to need to scale out a given service, such as the web tier in order to handle more concurrent users. Calm makes it simple to turn deploy an array containing multiple copies of a given service.
With the WebServer service icon selected in the Workspace pane, scroll to the top of the Configuration Panel, and select the Service tab.
Under Deployment Config > Number of Replicas, increase the Min value from 1 to 2 and the Max value from 1 to 4.
This change will provision a minimum of 2 WebServer VMs for each deployment of the application, and allow the array to grow up to a total of 4 WebServer VMs.
Note
Scaling an application in and out will require additional scripting so that the application understands how to leverage the additional VMs.
Click Save.
Creating the Load Balancer Service¶
To take advantage of a scale out web tier, your application needs to be able to load balance connections across multiple web server VMs. HAProxy is a free, open source TCP/HTTP load balancer used to distribute workloads across multiple servers. It can be used anywhere from small, simple deployments to large web-scale environments such as GitHub, Instagram, and Twitter.
In Application Overview > Services, add an additional service.
Select the new service and fill out the following VM fields in the Configuration Panel:
Service Name - HAProxy
Name - HAProxyAHV
Cloud - Nutanix
OS - Linux
VM Name - @@{User_initials}@@-HAProxy-@@{calm_array_index}@@
Image - CentOS_7_Cloud
Device Type - Disk
Device Bus - SCSI
Select Bootable
vCPUs - 2
Cores per vCPU - 1
Memory (GiB) - 4
Select Guest Customization
Type - Cloud-init
Script -
#cloud-config users: - name: centos ssh-authorized-keys: - @@{CENTOS.public_key}@@ sudo: ['ALL=(ALL) NOPASSWD:ALL']
Select under Network Adapters (NICs)
NIC 1 - Primary
Credential - CENTOS
Select the Package tab.
Specify a Package Name and click Configure install.
- Package Name - HAProxy_PACKAGE
Select + Task, and fill out the following fields in the Configuration Panel:
Name Task - Install_HAProxy
Type - Execute
Script Type - Shell
Credential - CENTOS
Script -
#!/bin/bash set -ex sudo yum update -y sudo yum install -y haproxy sudo setenforce 0 sudo sed -i 's/enforcing/disabled/g' /etc/selinux/config /etc/selinux/config sudo systemctl stop firewalld || true sudo systemctl disable firewalld || true echo "global log <IP_ADDRESS> local0 log <IP_ADDRESS> local1 notice maxconn 4096 quiet user haproxy group haproxy defaults log global mode http retries 3 timeout client 50s timeout connect 5s timeout server 50s option dontlognull option httplog option redispatch balance roundrobin # Set up application listeners here. listen admin bind <IP_ADDRESS>:22002 mode http stats uri / frontend http maxconn 2000 bind <IP_ADDRESS>:80 default_backend servers-http backend servers-http" | sudo tee /etc/haproxy/haproxy.cfg hosts=$(echo "@@{WebServer.address}@@" | tr "," "\n") port=80 for host in $hosts do echo " server host-${host} ${host}:${port} weight 1 maxconn 100 check" | sudo tee -a /etc/haproxy/haproxy.cfg done sudo systemctl daemon-reload sudo systemctl enable haproxy sudo systemctl restart haproxy
Note the use of the @@{WebServer.address}@@ macro in the script above. The macro returns a comma delimited list of all IPs of the VMs within that service. The script then uses the tr command to replace commas with carriage returns. The result is an array, $hosts, containing strings of all WebServer IP addresses. Those addresses are then each added to the HAProxy configuration file.
Select the Package tab and click Configure uninstall.
Select + Task, and fill out the following fields in the Configuration Panel:
Name Task - Uninstall_HAProxy
Type - Execute
Script Type - Shell
Credential - CENTOS
Script -
#!/bin/bash set -ex sudo yum -y erase haproxy
Click Save.
Adding Dependencies¶
As our application will require the database to be running before the web server starts, our Blueprint requires a dependency to enforce this ordering. There are a couple of ways to do this, one of which you’ve already done without likely realizing it.
In the Application Overview > Application Profile section, expand the Default Application Profile and click the Create Action.
Take note of the Orange Orchestration Edge going from the MySQL Start task to the WebServer Package Install task. This edge was automatically created by Calm due to the @@{MySQL.address}@@ macro reference in the WebServer Package Install task. Since the system needs to know the IP Address of the MySQL service prior to being able to proceed with the WebServer Install task, Calm intelligently creates the orchestration edge for you. This requires the MySQL service to be started prior to moving on to the WebServer Install task.
Return to the HAProxy Package Install task, why are orchestration edges automatically created between the WebServer and HAProxy services?
Next, select the Stop Profile Action.
Note that lack of orchestration edges between services when stopping an application. Why might issuing shutdown commands to all services within the application simultaneously create an issue?
Click on each Profile Action to take note of the current presence (or lack thereof) of the orchestration edges.
To resolve this, you’ll manually define a dependencies between services.
Select the WebServer Service and click the Create Dependency icon that appears above the Service icon, and then click on the MySQL service.
This represents that the WebServer service “depends” upon the MySQL service, meaning the MySQL service will start before, and stop after, the WebServer service.
Now create a dependency for the HAProxy service to depend on the WebServer service.
Click Save.
Re-visit the Profile Actions and confirm the edges now properly reflect the dependencies between the services, as shown below:
Drawing the white dependency arrows will cause Calm to create orchestration edges for all System Defined Profile Actions (Create, Start, Restart, Stop, Delete, and Soft Delete).
Launching and Managing the Application¶
From the upper toolbar in the Blueprint Editor, click Launch.
Specify a unique Application Name (e.g. Initials-CalmLinuxIntro1) and your User_initials Runtime variable value for VM naming.
Click Create.
The Audit tab can be used to monitor the deployment of the application.
Why don’t all of the CentOS based services deploy at the same time following the download of the disk image?
Once the application reaches a Running status, navigate to the Services tab and select the HAProxy service to determine the IP address of your load balancer.
In a new browser tab or window, navigate to http://<HAProxy-IP>, and verify your Task Manager application is functioning.
Note
You can also click the link in the Description of the Application.
Takeaways¶
What are the key things you should know about Nutanix Calm?
- Nutanix Calm, as a native component of Prism, is built on and carries forward the benefits of the platform. The simplicity provided by Acropolis lets Calm focus on applications, rather than trying to mask the complexity of the underlying infrastructure management.
- Calm blueprints are easy to use. In 60 minutes you went from nothing to a full infrastructure stack deployment. Because Calm uses standard tools for configuration - bash, PowerShell, Python, etc. - there’s no new language to learn and you can immediately apply skills and code you already have.
- While not as visually impressive, even single VM blueprints can have a massive effect on customers. One bank in India is using Calm for single-VM deployments, reducing the time to deploy these applications from 3 days to 2 hours. Remember that many customers have little or no automation today (or the automation they have is complex/hard to understand thus limiting it’s adoption). This means that Calm can help them right now, today, instantly.
- “Multi-Cloud Application Automation and Lifecycle Management” sounds big and scary. The ‘future’ sounds amazing, but many operators can’t see the path to there. Listen to what the customer is struggling with today (backups require specialized skills, VM deployment takes a long time, upgrades are hard) and speak to how Calm can help with that; jumping right to the multi-cloud automation story pushes Calm from a “I need this right now” to a “well let’s evaluate this later on, once things have quieted down” (and things never truly ‘quiet down’.
- The Blueprint Editor provides a simple UI for modeling potentially complex applications.
- Blueprints are tied to SSP Projects which can be used to enforce quotas and role based access control.
- Having a Blueprint install and configure binaries means no longer creating specific images for individual applications. Instead the application can be modified through changes to the Blueprint or installation script, both of which can be stored in source code repositories.
- Variables allow another dimension of customizing an application without having to edit the underlying Blueprint.
- There are multiple ways of authenticating to a VM (keys or passwords), which is dependent upon the source image.
- Application status can be monitored in real time.
- Applications typically span across multiple VMs, each responsible for different services. Calm is capable of automated and orchestrating full applications.
- Dependencies between services can be easily modeled in the Blueprint Editor.
- Users can quickly provision entire application stacks for production or testing for repeatable results without time lost to manual configuration.
- Interested in using Calm for more app lifecycle operations? Check out the Calm: Day 2 Operations!


Show navigation
Hide navigation
Go Back.
Prediction
Most Wanted
Contact Us
{{ prediction }}
Likelihood of SSO is {{ prediction }}.
DATA POINTS NEEDED
When and how many times each aseet has been cleaned.
Pipe diameter
Number of pipe upstream
Age of pipe
WHen and how many times the asset had an SSO event
Whether the pipe is by a creek bed or not
Root cause of an SSO
Contact Us
https://ddfloww.com/datathon-2019


Extending the API¶
The strength of the ELC API grows with the addition of other paleoecological and biological databases. Research groups and developers are strongly encouraged to fork the ELC framework and follow the steps described below to add a new database as an ELC resource.
The ELC API is denoted by major version within the base path itself and all sub-versions of the API will not break parameter, route or response compatibility. If, in the future, the API is expanded or modified in such a was that this compatibility in untenable, a new major version will be launched. Earlier versions will, however, remain available.
Note
This section contains technical information relevant to a developer audience.
Handlers¶
The majority of code required to support each resource database is contained in a file named handlers/[database_name].py
. As every subquery resource will return data differing in structure and tag vocabulary, a custom “handler” is required to process and map these returns to the common ELC dictionaries.
It is suggested that one of the existing handler be used as a template, paying close attention to the data.update()
statements as these load the ELC response object. These fields are all required. If a parameter can not be returned by the new resource database, data.update(UnretrievableParamName=None)
statements must be included. This will insert a Null into the JSON response and a blank field in a CSV download.
Inline modifications¶
A few locations in the primary source code require additional augmentation to support a new resource database. These are all clearly maked with the comment:
# NEW RESOURCE: [information about the code block to be added]
In some cases addition code may be optional but the source files containing new database hooks are:
- handlers/router.py
- elc/aux.py
- elc/params.py (3 locations)
- elc/taxa.py
- elc/ages.py
Configuration file¶
Requisite information must be added to each data block in the config.yaml
file. If a particular query is not possible with the database to be added, leave it’s endpoint field blank and the ELC API will omit this database when calling that route.


Heatmap of speed Mb/s
Hover over the above to see details for each datapoint.
Points are in Mb/s; Time data is UTC - to convert to local
time +11.
About
In December 2016 I had noticed a decrease in the speed of my 25Mb/s FTTH NBN connection. So I decided I would capture some data and see what pattern there was.
How
To achieve this, I decided to run a crond job on my server to run the speedtest-cli tool every 15 minutes and store in a CSV. This resultant CSV I then processed with python to generate a JSON file that has the data in the format required for a heatmap generated (above) with plotly.js.
Evaluation
The heatmap clearly shows two things:
- That at the start of January there was a general decrease in download speed; and
- There is a pattern of significant speed decrease each evening between ~09:45 UTC and ~11:30 UTC (which local time is ~20:45 and ~21:30).


| Id: {{pack.id}} |
| Version: {{pack.version}} |
| Creator: {{pack.creator}} |
| Creator: {{pack.creator}} |
| {{pack.type.substr(0,1).toUpperCase() + pack.type.substr(1)}} |
| Website: {{pack.website}} |
| Dependencies: {{pack.dependencies.join(", ")}} |


The Java EE 7 Tutorial
7.6 The Lifecycle of a JavaServer Faces Application
The lifecycle of an application refers to the various stages of processing of that application, from its initiation to its conclusion. All applications have lifecycles. During a web application lifecycle, common tasks are performed, including the following.
-
Handling incoming requests
-
Decoding parameters
-
Modifying and saving state
-
Rendering web pages to the browser
The JavaServer Faces web application framework manages lifecycle phases automatically for simple applications or allows you to manage them manually for more complex applications as required.
JavaServer Faces applications that use advanced features may require interaction with the lifecycle at certain phases. For example, Ajax applications use partial processing features of the lifecycle (see Partial Processing and Partial Rendering). A clearer understanding of the lifecycle phases is key to creating well-designed components.
A simplified view of the JavaServer faces lifecycle, consisting of the two main phases of a JavaServer Faces web application, is introduced in A Simple JavaServer Faces Application. This section examines the JavaServer Faces lifecycle in more detail.
7.6.1 Overview of the JavaServer Faces Lifecycle
The lifecycle of a JavaServer Faces application begins when the client makes an HTTP request for a page and ends when the server responds with the page, translated to HTML.
The lifecycle can be divided into two main phases: Execute and Render. The Execute phase is further divided into subphases to support the sophisticated component tree. This structure requires that component data be converted and validated, component events be handled, and component data be propagated to beans in an orderly fashion.
A JavaServer Faces page is represented by a tree of components, called a view. During the lifecycle, the JavaServer Faces implementation must build the view while considering the state saved from a previous submission of the page. When the client requests a page, the JavaServer Faces implementation performs several tasks, such as validating the data input of components in the view and converting input data to types specified on the server side.
The JavaServer Faces implementation performs all these tasks as a series of steps in the JavaServer Faces request-response lifecycle. Figure 7-3 illustrates these steps.
Figure 7-3 JavaServer Faces Standard Request-Response Lifecycle
Description of "Figure 7-3 JavaServer Faces Standard Request-Response Lifecycle"
The request-response lifecycle handles two kinds of requests: initial requests and postbacks. An initial request occurs when a user makes a request for a page for the first time. A postback request occurs when a user submits the form contained on a page that was previously loaded into the browser as a result of executing an initial request.
When the lifecycle handles an initial request, it executes only the Restore View and Render Response phases, because there is no user input or action to process. Conversely, when the lifecycle handles a postback, it executes all of the phases.
Usually, the first request for a JavaServer Faces page comes in from a client, as a result of clicking a link or button component on a JavaServer Faces page. To render a response that is another JavaServer Faces page, the application creates a new view and stores it in the javax.faces.context.FacesContext
instance, which represents all of the information associated with processing an incoming request and creating a response. The application then acquires object references needed by the view and calls the FacesContext.renderResponse
method, which forces immediate rendering of the view by skipping to the Render Response Phase of the lifecycle, as is shown by the arrows labelled Render Response in .
Sometimes, an application might need to redirect to a different web application resource, such as a web service, or generate a response that does not contain JavaServer Faces components. In these situations, the developer must skip the Render Response phase by calling the FacesContext.responseComplete
method. This situation is also shown in , with the arrows labelled Response Complete.
The most common situation is that a JavaServer Faces component submits a request for another JavaServer Faces page. In this case, the JavaServer Faces implementation handles the request and automatically goes through the phases in the lifecycle to perform any necessary conversions, validations, and model updates and to generate the response.
There is one exception to the lifecycle described in this section. When a component's immediate
attribute is set to true
, the validation, conversion, and events associated with these components are processed during the Apply Request Values Phase rather than in a later phase.
The details of the lifecycle explained in the following sections are primarily intended for developers who need to know information such as when validations, conversions, and events are usually handled and ways to change how and when they are handled. For more information on each of the lifecycle phases, download the latest JavaServer Faces Specification documentation from http://jcp.org/en/jsr/detail?id=344
.
The JavaServer Faces application lifecycle Execute phase contains the following subphases:
7.6.2 Restore View Phase
When a request for a JavaServer Faces page is made, usually by an action, such as when a link or a button component is clicked, the JavaServer Faces implementation begins the Restore View phase.
During this phase, the JavaServer Faces implementation builds the view of the page, wires event handlers and validators to components in the view, and saves the view in the FacesContext
instance, which contains all the information needed to process a single request. All the application's components, event handlers, converters, and validators have access to the FacesContext
instance.
If the request for the page is an initial request, the JavaServer Faces implementation creates an empty view during this phase and the lifecycle advances to the Render Response phase, during which the empty view is populated with the components referenced by the tags in the page.
If the request for the page is a postback, a view corresponding to this page already exists in the FacesContext
instance. During this phase, the JavaServer Faces implementation restores the view by using the state information saved on the client or the server.
7.6.3 Apply Request Values Phase
After the component tree is restored during a postback request, each component in the tree extracts its new value from the request parameters by using its decode
(processDecodes()
) method. The value is then stored locally on each component.
If any decode
methods or event listeners have called the renderResponse
method on the current FacesContext
instance, the JavaServer Faces implementation skips to the Render Response phase.
If any events have been queued during this phase, the JavaServer Faces implementation broadcasts the events to interested listeners.
If some components on the page have their immediate
attributes (see The immediate Attribute) set to true
, then the validations, conversions, and events associated with these components will be processed during this phase. If any conversion fails, an error message associated with the component is generated and queued on FacesContext
. This message will be displayed during the Render Response phase, along with any validation errors resulting from the Process Validations phase.
At this point, if the application needs to redirect to a different web application resource or generate a response that does not contain any JavaServer Faces components, it can call the FacesContext.responseComplete
method.
At the end of this phase, the components are set to their new values, and messages and events have been queued.
If the current request is identified as a partial request, the partial context is retrieved from the FacesContext
, and the partial processing method is applied.
7.6.4 Process Validations Phase
During this phase, the JavaServer Faces implementation processes all validators registered on the components in the tree by using its validate
(processValidators
) method. It examines the component attributes that specify the rules for the validation and compares these rules to the local value stored for the component. The JavaServer Faces implementation also completes conversions for input components that do not have the immediate
attribute set to true.
If the local value is invalid, or if any conversion fails, the JavaServer Faces implementation adds an error message to the FacesContext
instance, and the lifecycle advances directly to the Render Response phase so that the page is rendered again with the error messages displayed. If there were conversion errors from the Apply Request Values phase, the messages for these errors are also displayed.
If any validate
methods or event listeners have called the renderResponse
method on the current FacesContext
, the JavaServer Faces implementation skips to the Render Response phase.
At this point, if the application needs to redirect to a different web application resource or generate a response that does not contain any JavaServer Faces components, it can call the FacesContext.responseComplete
method.
If events have been queued during this phase, the JavaServer Faces implementation broadcasts them to interested listeners.
If the current request is identified as a partial request, the partial context is retrieved from the FacesContext
, and the partial processing method is applied.
7.6.5 Update Model Values Phase
After the JavaServer Faces implementation determines that the data is valid, it traverses the component tree and sets the corresponding server-side object properties to the components' local values. The JavaServer Faces implementation updates only the bean properties pointed at by an input component's value
attribute. If the local data cannot be converted to the types specified by the bean properties, the lifecycle advances directly to the Render Response phase so that the page is re-rendered with errors displayed. This is similar to what happens with validation errors.
If any updateModels
methods or any listeners have called the renderResponse
method on the current FacesContext
instance, the JavaServer Faces implementation skips to the Render Response phase.
At this point, if the application needs to redirect to a different web application resource or generate a response that does not contain any JavaServer Faces components, it can call the FacesContext.responseComplete
method.
If any events have been queued during this phase, the JavaServer Faces implementation broadcasts them to interested listeners.
If the current request is identified as a partial request, the partial context is retrieved from the FacesContext
, and the partial processing method is applied.
7.6.6 Invoke Application Phase
During this phase, the JavaServer Faces implementation handles any application-level events, such as submitting a form or linking to another page.
At this point, if the application needs to redirect to a different web application resource or generate a response that does not contain any JavaServer Faces components, it can call the FacesContext.responseComplete
method.
If the view being processed was reconstructed from state information from a previous request and if a component has fired an event, these events are broadcast to interested listeners.
Finally, the JavaServer Faces implementation transfers control to the Render Response phase.
7.6.7 Render Response Phase
During this phase, JavaServer Faces builds the view and delegates authority to the appropriate resource for rendering the pages.
If this is an initial request, the components that are represented on the page will be added to the component tree. If this is not an initial request, the components are already added to the tree and need not be added again.
If the request is a postback and errors were encountered during the Apply Request Values phase, Process Validations phase, or Update Model Values phase, the original page is rendered again during this phase. If the pages contain h:message
or h:messages
tags, any queued error messages are displayed on the page.
After the content of the view is rendered, the state of the response is saved so that subsequent requests can access it. The saved state is available to the Restore View phase.


Eddie Hearn aims dig at Deontay Wilder after knockout vs Luis Ortiz
Eddie Hearn aimed a dig at Deontay Wilder for his tepid call-out of Anthony Joshua after his win over Luis Ortiz.
The WBC champion successfully defended his title in Las Vegas on Saturday night, knocking Ortiz out in the seventh round.
Wilder said after his victory he would fight Tyson Fury next before pursuing a unification fight with the winner of Joshua’s rematch with Andy Ruiz Jr.
The American has repeatedly said he wants Ruiz Jr to win the rematch and Hearn teased Wilder for avoiding saying Joshua’s name after his latest victory.
He told IFL TV: ‘He struggled to say it, didn’t he? “I want the winner of ….Ruiz and the other guy”.
‘As refreshing as it is in a long time, what’s next after Andy Ruiz is totally irrelevant right now.
Advertisement Advertisement
‘It’s just about trying to beat Andy Ruiz. I think Joshua against Wilder is the most thrilling fight in world boxing.
 It’s all irrelevant unless Joshua can beat Andy Ruiz.’
Wilder and Joshua blamed each other for their unification fight falling through in 2018 before the British heavyweight lost his titles to Ruiz Jr last June.
The failure to agree terms with Joshua pushed Wilder towards Fury, but Hearn insists the Bronze Bomber is vulnerable.
‘That’s why the division is so exciting. You can have any fight going any way you want,’ he said.
‘[Wilder is] very, very limited as a fighter skill wise, but he has this freakish power that can turn your lights off at any time.
‘That’s why he’s so exciting, Deontay Wilder. He’s vulnerable, he can get beaten by anybody, but if he hits you on the chin, you’re bang in trouble.’


WITNESS LIST
Agriculture, Water & Rural Affairs
March 20, 2017 2:00 PM - or upon adjournment
FOR:
Briggs, Jim General Manager Utilities (City of Georgetown Texas), Georgetown, TX
Dougal, Leonard Attorney (Chisholm Trail SUD), Austin, TX
Robinson, Delton President, CTSUD (Self; Chisholm Trail SUD), Georgetown, TX
Rodriguez, Arturo Attorney (City of Georgetown), Georgetown, TX
AGAINST:
Brown, Tim Bell county commissioner (Self; Bell county commissioner), Belton texas, TX
Fisher, John Bell co commissioner (Self; Bell county commissioner), Killeen, TX
Registering, but not testifying:
AGAINST:
Dngus, Virginia (Self), Belton, TX
Dockrey, Ron (Self), Killeen, TX
ON:
Benter, Tammy Water Division Director (Public Utility Commission of Texas), Austin, TX
Galiga, Todd (Texas Commission on Environmental Quality), Austin, TX
Ulmann, Chris (TCEQ), Austin, TX
FOR:
Metzger, Luke Director (also providing written testimony) (Self; Environment Texas),
Austin, TX
Rogers, Nona (Self), Austi n, TX
Registering, but not testifying:
FOR:
Borel, Dennis (Coalition of Texans with Disabilities), Austin, TX
Doyel, Elizabeth Executive Director (Self; Texas League of Conservation Voters), Austin,
TX
Flatten, Charles Water Policy Manager (Self; Hill Country Alliance), Bee Cave, TX
Houston, Joshua General Counsel (Texas Impact), Austin, TX
Mullins, Christopher Legislative and Policy Consultant (Self; Sierra Club), Austin, TX
Townsend, Trent (The Nature Conservancy), Austin, TX
AGAINST:
Chisholm<EMAIL_ADDRESS>(Self), Austin, TX
ON:
La Caille, Cari-Michel Director, (TCEQ), Austin, TX
Schalchlin, Scott Associate Commissioner for SSLCs (Department of Aging and Disability
Services), Austin, TX
Providing written testimony:
FOR:
Alexander, Troy Assoc. Director for Advocacy (Texas Medical Association), Austin, TX
WITNESS LIST
Agriculture, Water & Rural Affairs
March 20, 2017 2:00 PM - or upon adjournment
Registering, but not testifying:
FOR:
Williams, C.E. General Manager (Self; Panhandle Groundwater Conservation District),
White Deer, TX
FOR:
Wells, Hope Water Resources Counsel (San Antonio Water System and Texas Water
Conservation Association), San Antonio, TX
Registering, but not testifying:
FOR:
Doyel, Elizabeth Executive Director (Self; Texas League of Conservation Voters), Austin,
TX
Fitzsimmons, Shauna (Upper Trinity Groundwater Conservation District, Lone Star
Groundwater Conservation District, Prairielands Groundwater Conservation District),
Austin, TX
Flatten, Charles Water Policy Manager (Self; Hill Country Alliance), Bee Cave, TX
Hood, Beth Program Manager (Texas Alliance of Groundwater Districts), Austin, TX
Lauderback, Bill Executive VP, Public Affairs (Lower Colorado River Authority), Austin,
TX
Metzger, Luke Director (Self; Environment Texas), Austin, TX
Mullins, Christopher Legislative and Policy Consultant (Self; Sierra Club), Austin, TX
Robbins, Dean Asst. General Mgr. (Texas Water Consrvation Assn.), Austin, TX
Skaggs, Jason Executive Director of Government & Public Affairs (Texas and
Southwestern Cattle Raisers Association), Austin, TX
Williams, C.E. General Manager (Self; Panhandle Groundwater Conservation District),
White Deer, TX
FOR:
Gentsch, Denise (also providing written testimony) (Self; Texas Seed Trade Association),
Austin, TX
Reaves, Jim State Legislative Director (Texas Farm Bureau), Austin, TX
AGAINST:
Albornoz, Sari (Self), Austin, TX
Casnovsky, Joy Program Director, Sustainable Food Center (Self; Sustainable Food
Center), Austin, TX
McGeary, Judith Executive Director (Self; Farm and Ranch Freedom Alliance), Cameron,
TX
Seibild, Rebecca (Self), Colorado city, TX
Simpson, Ryan (The League of Independent Voters), Austin, TX
ON:
Clement, John (City of Austin), Austin, TX
Tagliabue, Tom Director, Intergovernmental Relations (City of Corpus Christi), Corpus
Christi, TX
WITNESS LIST
Agriculture, Water & Rural Affairs
March 20, 2017 2:00 PM - or upon adjournment
Registering, but not testifying:
FOR:
Barrett, Gary State Affairs, Bayer Corporation (Self), Austin, TX
Kowalski, Thomas President and ceo (Texas healthcare and bioscience institute), Austin,
TX
Mayberry, Warren Manager, Govt Affairs (DuPont Pioneer), Austin, TX
Shannon, Fred (Texas Association of Manfacturers), Austin, TX
Skaggs, Jason Executive Director of Government & Public Affairs (Texas and
Southwestern Cattle Raisers Association), Austin, TX
Stokes, Jeff Director, legislative & regulatory affairs (Texas Nursery & Landscape
Association), Austin, TX
Wade, Patrick (Texas Grain Sorghum Association), Austin, TX
Womack, Daniel Director State Government Affairs (Dow Chemical), Austin, TX
Woodard, Shayne Waterloo Lobby & Advocacy, Inc. (Dow AgroSciences), Austin, TX
AGAINST:
Clark, Erick (Self), Austin, TX, TX
Cuellar, Guadalupe Legislative Attorney (City of El Paso), El Paso, TX
Denison, Kathy (Self), Bastrop, TX
Dngus, Virginia (Self), Belton, TX
Doyel, Elizabeth Executive Director (Self; Texas League of Conservation Voters), Austin,
TX
Flatten, Charles Water Policy Manager (Self; Hill Country Alliance), Bee Cave, TX
Henneke, Dee ann (Self), Leander, TX
Metzger, Luke Director (Self; Environment Texas), Austin, TX
Miley, Amy (Self), Austin, TX
Mullins, Christopher Legislative and Policy Consultant (Self; Sierra Club), Austin, TX
Umbarger, James (Self), Austin, TX
ON:
Hunter, Dan Assistant Commissioner (Texas Department of Agriculture), Austin, TX
Wright, Philip Administratior for ACP (Texas Department of Agriculture), Austin, TX


About Our External Partnership Program
Carnegie Mellon University’s Dietrich College of Humanities and Social Sciences offers many resources to both our students and our local communities. With a team dedicated to assisting you, those that want to get in contact with Dietrich College students and faculty can do so with ease.
LEARN MOREPartnership Success Stories
It is through the combined effort of our partners are we able to better the world around us. Over the years, Dietrich College has worked with many different groups and organizations. By having our students build relations with people outside of the school, we offer a place to prepare them for life in a future career.
When we work together, projects can achieve more than we can imagine. Bringing in students and faculty offer new perspectives on problems, each individual bringing their own cummulative knowledge to the table. Some of our best work has come from collaborative efforts. Community members and those outside of our circle come together to make something new.
LEARN MORE


ViewController
class ViewController: UIViewController, ARSCNViewDelegate, PluginManagerDelegate
The Main
ViewController. This ViewController holds the instance of the PluginManager.
Furthermore it holds the ARKitView.
-
Undocumented
Declaration
Swift
@IBOutlet weak var visualEffectView: UIVisualEffectView!
-
Undocumented
Declaration
Swift
@IBOutlet weak var arPenLabel: UILabel!
-
Undocumented
Declaration
Swift
@IBOutlet weak var arPenActivity: UIActivityIndicatorView!
-
Undocumented
Declaration
Swift
@IBOutlet weak var arPenImage: UIImageView!
-
Undocumented
Declaration
Swift
@IBOutlet weak var arKitLabel: UILabel!
-
Undocumented
Declaration
Swift
@IBOutlet weak var arKitActivity: UIActivityIndicatorView!
-
Undocumented
Declaration
Swift
@IBOutlet weak var arKitImage: UIImageView!
-
Undocumented
Declaration
Swift
@IBOutlet var arSceneView: ARSCNView!
-
The PluginManager instance
Declaration
Swift
var pluginManager: PluginManager!
-
A quite standard viewDidLoad
Declaration
Swift
override func viewDidLoad()
-
viewWillAppear. Init the ARSession
Declaration
Swift
override func viewWillAppear(_ animated: Bool)
-
Undocumented
Declaration
Swift
override func viewWillDisappear(_ animated: Bool)
-
Convert the whole scene into an stl file and present a shareViewController for AirDrop
Declaration
Swift
@IBAction func share()
-
Callback from the ARManager
Declaration
Swift
func arKitInitialiazed()
-
Callback from PenManager
Declaration
Swift
func penConnected()
-
Undocumented
Declaration
Swift
func penFailed()
-
This method will be called after
penConnected
andarKitInitialized
to may hide the blurry overlayDeclaration
Swift
func checkVisualEffectView()


 How about one in slow-motion? How about in super slo-mo? How about one hundred one minutes of slo-mo car wreck up-close and personal in all its teeth gnashing, nail scraping, shriek-inducing glory? Well, if this is what's lacking in your life, please see "Very Bad Things."
The movie details Kyle Fisher's (Jon Favreau) ill-fated bachelor party.  After quickly tiring of the obligatory gambling and pro-wrestling pay-per-view, the boys move on to cocaine and a woman of the night, which one of the man accidentally kills. This premise is not a bad one, in my book. This is not to say that I am condoning either hooker slaughter or drug abuse, but the fact is that these are dark and titillating subjects (see car wreck, above) which can propel a movie in the right direction for an adult audience.
But, alas, these are cheap, contrived situations and Peter Berg leads us through one hundred one of the most tedious and depressing moments of our lives, second only to our own true tragedies. On the positive side, the acting is pretty good. I was convinced (with the exception of the developments involving Christian Slater's character) that these fellas were being run through hell and back.  However, gross manipulation does not a movie make. In this respect, I was reminded of last year's "Return to Paradise," another long, slow car wreck of a movie, which showed us the most pathetic and heart-rending of stories, but that's all it showed.
The tone of "Very Bad Things" felt awfully inappropriate at times. At the beginning I was impressed that the film decided to defy its previews and take the much more serious tone of a darker film rather than a dark comedy. But, then, as if to confuse, each act was concluded with an entirely contradictory happy, jazzy tune...way to kill the mood, guys. It's like they were trying to say, "hey, we were just kidding about all that horrible stuff," but without the actual humor to back it up. Add to that a very bad sense of timing -- how many days took place between the bachelor's party and the wedding? -- and you've got yourself a stinker of a movie.
I found myself wondering why I had enjoyed other dark movies (Fargo, A Simple Plan) to a great degree, but not this one. What was the difference? The difference for "Very Bad Things" was an uneven tone, a lack of any human sympathy for anyone in the film, and a story that was entirely too predictable. It could've been better, the audience can see the potential, Peter Berg's direction was very interesting at times, but that just made it all the more frustrating.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Attn:The President/CEO I crave your indulgence as I contact you in such a surprising manner. But I respectfully insist you read this letter carefully as I am optimistic it will open doors for unimaginable financial reward for both of us. This business transaction might not fall within the wide spectrum of your business activities, but I plead your assistance, as your flair for profitable business is needed. Permit me to introduce myself,I am Dr Blessed Ogbe the Banking officer to Engr.Johnson Creek who was a major contractor to oil companies,.On the 21st of April 2000,my lient, his wife and their three children were involved in a car accident along Sagamu / Lagos Express Road. Unfortunately they All lost their lives in the event of the accident. Since then I have made several enquiries to your Embassy to locate any of my clients extended relatives, this has also proved unsuccessful. After these several unsuccessful attempts, I decided to trace his relatives over the Internet to locate any member of his family but of no avail, hence I contacted you.I contacted you to assist in repartrating the money and property left behind by my client before they get confiscated or declared unserviceable by the bank where this huge deposits were lodged. Particularly,the Bank where the deceased had an account valued at about US$15.2M (Fifteen Million Two Hundred Thousand United Stated Dollars). Conseqently, the bank issued me a notice to provide the next of kin or have the account confiscated. Since I have been unsuccesfull in locating the the relatives for over 2 years now. I seek your consent to present you as the next of kin of the deceased since you are from the same country so that the proceeds of this account valued at US$15.2million can be paid to you and then you and me can share the money. 60% to me and 40% to you. I have all necessary legal documents that can be used to back up any claim we may make. All I require is your honest co-operation to enable us see this deal through. I guarantee that this will be executed under a legitimate arrangement that will protect you from any breach of the law. Kindly email your following confidential information to me urgently to enable us proceed: a.Your complete names b.Your private telephone number c.Your private fax number d.Your private email address Please direct your reply to my confidential<EMAIL_ADDRESS>or through the below fax.You can also reach me through my private telephone number stated below for any enquiries. Upon the receipt of your information,I will advise you on the modalities of the transaction.We have concluded details on how to achieve success. Yours Faithfully, Dr.Blessed Ogbe Position: Operation Director, Pacific International Bank Plc, 40,Marina Rd,Lagos,Nigeria. Tel: 234-803-302-5573 Fax:234-9-272-2046 ___________________________________________ Look Good, Feel Good www.healthiest.co.za


Delivering IML(Indian Made Liquor) and IMFL(Indian Made Foreign Liquor) to customer’s doorstep in a completely legalized manner.
Buy and reserve a bottle on the cloud and redeem it in our partnered bars and pubs in your desired quantities at cheaper prices.
Personal Doctor bot who regularly keeps a check on your drinking habits by analyzing your alcohol intake information provided by you or the app and warns the customer when he exceeds the limits.
An expert judge in matters of taste and best food supplements. It gives best suggestions on supplements that go with the alcoholic beverages you choose.
Party at your place? Dont worry, we've got you covered. We provide Bar Counter, Bar Tender along with the wide variety of drinks for your parties.
Cheif Executive Officer
Cheif Marketing Officer


DeAndre Hopkins Calls Out The NFL After Game vs. Ravens
by Andrew HolleranThe Baltimore Ravens absolutely dominated the Houston Texans on Sunday afternoon, winning 41-7, in one of the most-impressive performances of the NFL’s 2019 regular season.
The contest did include one extremely puzzling call by the referees that hurt the Texans in a major way.
Houston went deep to DeAndre Hopkins early in the game on a 4th down attempt. The pass was incomplete, though it looked like Hopkins was interfered with. Houston challenged the no-call, but replay review upheld the decision.
We’re not exactly sure why.
Hopkins, who had 7 catches for 80 yards in the game, took to Twitter following the game.
“As a leader in the NFL, we need someone new in New York deciding calls,” he tweeted.
The NFL implemented the pass interference challenge rule following the 2018 season. It has not gone well. It seems like the majority of calls – whether they are right or wrong – are just automatically upheld by replay review.
The league needs to take another look at this process in the offseason.


Configuring Elastic Beanstalk Environment with .ebextensions
At Captiv8, we are using Amazon AWS to host most of our PHP projects. We are heavily rely on Elastic Beanstalk to help us set up PHP environment, database and load balancer. On top of that, we are also managing our own server image based on Amazon AMI. In this image, we installed additional software and packages that we need for our application. However, this approach has a drawback as it is difficult to maintain the image and track changes. Everytime you need to update the image, you have to create new server, install the new software and export it into new image. This will leave you with bunch of different images and it is hard to tell what are the things that have changed inside each image.
Chef
In order to solve these problems, I decided to find a way to automate the process. My first attempt was trying to use Chef to provision the Elastic Beanstalk environment. I have been using Chef for a while to provision my Vagrant machines. It is powerful and more convenient in compare with bash scripts. Since I am already familiar with Chef, I started looking at tutorials on how to use Chef with Elastic Beanstalk. Most of the tutorials that I found don’t provide easy way to integrate Chef with Elastic Beanstalk. One of them mentions about using AWS OpsWorks with Chef but I think it is overkill for the time being. So, I ditched Chef and start looking for another solution.
ebextensions
ebextensions is another solution that I found after checking the official documentation of Elastic Beanstalk. With this solution, you need to to create .ebextensions folder inside your project and create a file to define what are the packages that you want to install into the environment. Elastic Beanstalk will automatically run the script every time you deploy a new version of the application. Aside from that, you can also tell ebextensions to execute shell script in the instance or changing permission of a file. You can read more details about ebextension here: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
This is my directory structure at the moment:
Here is the example of my ebextension config file:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
And this is the example of my bash script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
|
Inside my ebextensions config file, I call the shell script which will install additional software. The benefit of using shell script is you have more options and it is much easier to customize the software. Since the .ebextensions folder is copied to the instance, you can tell the shell script to copy a template config file that you have prepared before hand. I hope you find this blog post useful.


WebAuthn with Cognito
Register
Sign-in
Register with Authenticator
Sign-in experience:
Login with Password + FIDO
Login with Password Only
Password-less (FIDO only)
Login


| Run Command Remote |
cmd, params, workdir, dst_ip=None |
run command on remote machine
Parameters:
| cmd=<string> |
full path to the command |
| params=<string>] |
command parameters |
| [workdir=<string>] |
Optional command work folder |
| [dst_ip=<string>] |
Optional overide to the default destination IP address set in __init__ |
|


It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text. All the Lorem Ipsum generators on the Internet tend to repeat predefined chunks as necessary, making this the first true generator on the Internet. It uses a dictionary of over 200 Latin words, combined with a handful of model sentence structures, to generate Lorem Ipsum which looks reasonable. The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc.
Contrary to popular belief, Lorem Ipsum is not simply random text.  Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil) by Cicero, written in 45 BC. This book is a treatise on the theory of ethics, very popular during the Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor sit amet..", comes from a line in section 1.10.32.
"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.  Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"
Presidente: Harrison Rainier Ribeiro
Vice-presidente: xxxxx yyyyyyy
Diretor de Tesouraria: xxxxx yyyyyyyy
Diretor de Infraestrutura: xxxxx yyyyyy
Gerente de Comunicação: Junior Martins
Secretário Executivo: xxxxx yyyyy
Membro: xxxxx yyyyyyy
Membro: xxxxx yyyyyyy
Membro: xxxxx yyyyyyyy
Membro: xxxxx yyyyyy
Membro: xxxxx yyyyyy
Membro: xxxxx yyyyy
Professor Coordenador: xxxxx yyyyyy
Professor: xxxxx yyyyyyy
Professor: xxxxx yyyyyyyy
Preparador Físico: xxxxx yyyyyy
Fisioterapeuta: xxxxx yyyyyy
Psicólogo: xxxxx yyyyy


Lotto lout 'sniffed away 3 houses' and spent £5.7m on booze and bedding 4,000 women
EXCLUSIVE: Mickey Carroll says his win lead to the best 10 years of his life but admits he'd probably be dead now if the money hadn't have run out
by Louie Smith, Charlie Gall, https://www.facebook.com/dailymirror/It cost just £1 - and gave Mickey Carroll the best 10 years of his life, at least, that's what he claims.
After scooping the £9.7m National Lottery jackpot back in 2002, Mickey, then 19, soon earned the nickname 'Lotto lout', as he spent his winnings on drugs, booze and hookers.

But he admits he blew the remaining £5.7m on maintaining an extravagant lifestyle, including wild holidays to Puerto Banus on the Costa del Sol with his mates.
He recalls: "We used to go to the local whorehouse because the girls there were better looking.
"We'd get our own drugs first and be high on cocaine by the time we rocked up at the brothels.
"I drank vodka and fresh orange, any lager, cider or whiskey, as long as it was wet. I'd wake up in some strange places."
Mickey's raucous behaviour wasn't just confined to his trips away.
Alcohol and narcotics were a part of his every day life.
"I'd wake up, do three lines of Charlie and drink half a bottle of vodka before I got out of bed.
"I was a full-blown alcoholic, doing two bottles of vodka a day."
The drinking and the brothels put an end to his short marriage to Sandra, who was seven months pregnant with their daughter when his lottery numbers came up.
She walked out in disgust shortly after they wed in 2003, accusing him of cheating on her with vice girls and surrounding himself with hangers-on.
Mickey, who boasts of bedding 4,000 women, does not dispute any of Sandra’s claims.
He says: “I spent the rest of the money on drugs and hookers, holidays and cars.”
Hell-bent on becoming “King of the Chavs”, he appeared in court more than 30 times, often arriving in flash cars, swigging cans of beer.
His Norfolk mansion “The Grange” was used for wild parties, and the lawn became a track for demolition car derbies. As a result, the luxury property soon fell into disrepair.
He says: “It lay derelict for about 10 years. My mate’s mum and dad lived in it until I kicked them out.
“I had another two houses, but it’s all gone – I sniffed ’em away.”
By 2005, his accountant warned he was down to his last million and as the money dwindled, the “friends’” and hangers-on began to drift away.
Enemies were also circling and one morning he found his six Rottweilers dead, their throats slit.
Mickey, who was jailed for affray in 2006, says: “Gangsters sent me pictures of my family. They threatened to chop my daughter up, and my whole family.
“They were dangerous guys, a Liverpool firm, so I paid them 130 grand.
"They backed off for a while, then there was a bit of an altercation and the boys in London sorted it out for me.”
By 2013, Mickey was broke, homeless and struggling to find work because of his reputation.
He says: “I’d turn up at interviews and they’d say, ‘We just wanted to see whether it was you or not’.”
He eventually followed Sandra to Scotland, moving to Moray, where he was so broke he lived in a squalid hotel for down-and-outs.
He says: “It was a dive, but I had food and beer, all good.
“That was 2013. I was homeless for three months. Easy come, easy go.”
He worked at the Walkers biscuit factory in Aberlour before starting in a slaughterhouse.
He says: “I stayed there for five years until it shut down. I do miss the slaughterhouse.
"I loved it there. I’ve got my slaughterhouse licence. I’ll never lose that.”
He later got his coal job and now works seven days a week.
He says: “I’m a skint lottery winner. It’s got me quite a few women so I don’t mind. I’m living in a rented flat.
“I’m happy.
"I reckon I’m lucky to be alive. If I still had the money I’d probably be six feet under.”


outer aria-hidden
outer aria-hidden, grandchildren
direct aria-hidden
direct aria-hidden, grandchildren
inner aria-hidden, grandchildren


|
OpenM++ runtime library (libopenm)
|
OpenM++ data library: public interface for db common structures. More...
Go to the source code of this file.
Classes | |
| class | openm::IRowAdapter |
| row factory and setter interface to select row from database More... | |
| union | openm::DbValue |
| union to pass value to database methods More... | |
| class | openm::IValueFormatter |
| converter for value column (parameter, accumulator or expression value) to string More... | |
| class | openm::IRowProcessor |
| public interafce for row processing during select, ie: select and append to row list More... | |
Namespaces | |
| openm | |
| openM++ namespace | |
Typedefs | |
| typedef OpenmException< 4000, dbUnknownErrorMessage > | openm::DbException |
| db-exception | |
Variables | |
| const char * | openm::SQLITE_DB_PROVIDER = "sqlite" |
| SQLite db-provider name. | |
| const char * | openm::MYSQL_DB_PROVIDER = "mysql" |
| MySQL and MariaDB db-provider name. | |
| const char * | openm::PGSQL_DB_PROVIDER = "postgresql" |
| PostgreSQL db-provider name. | |
| const char * | openm::MSSQL_DB_PROVIDER = "mssql" |
| MS SQL db-provider name. | |
| const char * | openm::ORACLE_DB_PROVIDER = "oracle" |
| Oracle db-provider name. | |
| const char * | openm::DB2_DB_PROVIDER = "db2" |
| DB2 db-provider name. | |
| const char | openm::dbUnknownErrorMessage [] = "unknown db error" |
| db-exception default error message: "unknown db error" | |
OpenM++ data library: public interface for db common structures.


|
IoTaaP
0.0.4
|
Public Member Functions | |
| IoTaaP_OLED () | |
| Construct a new IoTaaP_OLED::IoTaaP_OLED object. More... | |
| void | init () |
| Initializes integrated OLED. More... | |
| void | showText (String text, int x=0, int y=0) |
| Shows text on integrated OLED. OLED must be initialized first. More... | |
| void | displayBitmap (int16_t x, int16_t y, const uint8_t bitmap[], uint16_t color) |
| Displays bitmap on OLED. initOLED() must be called before. More... | |
| void | setBrightness (uint8_t perc) |
| Sets OLED brightness. More... | |
| IoTaaP_OLED::IoTaaP_OLED | ( | ) |
Construct a new IoTaaP_OLED::IoTaaP_OLED object.
| void IoTaaP_OLED::displayBitmap | ( | int16_t | x, |
| int16_t | y, | ||
| const uint8_t | bitmap[], | ||
| uint16_t | color | ||
| ) |
Displays bitmap on OLED. initOLED() must be called before.
| x | Start X coordinate (usually 0) |
| y | Start Y coordinate (Usually 0) |
| bitmap | Bitmap to show |
| color | Bitmap color (usually 1) |
| void IoTaaP_OLED::init | ( | ) |
Initializes integrated OLED.
| void IoTaaP_OLED::setBrightness | ( | uint8_t | perc | ) |
Sets OLED brightness.
| perc | Brightness percentage (0-100) |
| void IoTaaP_OLED::showText | ( | String | text, |
| int | x = 0 , |
||
| int | y = 0 |
||
| ) |
Shows text on integrated OLED. OLED must be initialized first.
| text | Text to be printed |
| x | Text location on x coordinate |
| y | Text location on y coordinate |


Widget To Test:
Shape
Text
TextBox
FAChar
Icon
List
Menu
Surface
Serialize/Deserialize
Properties
Original
Clone
Key
Value


Welcome to The Web Scraper. For all your scraping needs.
All you need is a valid email address so sign up today and receive free scapes for life!


Dorothy Delong | UI & Website Design
Overview
A project where I used web design fundamentals and design work flow to plan and design an original, single-page web design project from concept to creation. I incorporated research and UI design skills to create, finalize, package and export a comprehensive final digital design comp.
My Role
- - Utilize a Web Design Workflow to research, conceptualize & design.
- - Identify and prioritize site content + structure, layout & placement.
- - Build a functional, visually pleasing & user-friendly site structure.
- - Hand-pick cohesive colors, typography and visual design elements.
- - Mobile first approach. Gather, assess and implement feedback.
The Customer
Dorothy DeLong- a traveling feminist photographer who explores the country in search of women doing amazing things. Dorothy captures their boldness in action, whether protesting for pay equality, fighting for environmental regulation, or standing up for those in the #MeToo movement.
- Quote about Dorothy's mission: “I capture the realness behind feminism, no filter.”
The Problem
Dorothy has been using a Facebook page to share all her photos but now she’s ready for an upgraded, professional online presence. Up to now, she has had to put together a physical portfolio for museums interested in her work. Dorothy wants a portfolio website to display her work so that galleries and magazines can see her photography at a glance and request to use it.
Web Design Workflow
I used the following workflow framework for efficiency:
- Step 1. Gather information
- Step 2. Organize and sketch site structure
- Step 3. Add detail to the design
- Step 4. Create a final design comp
- Step 5. Feedback and iteration
- Step 6. Prepare files for next steps
Research & Planning
The first step was gathering information in order to get to know the client, understand the main goals of the site, her style, needs, and any parameters to keep in mind for the design.
After an introduction to Dorothy and her goals, I sought out inspiration to encourage the creative process. I compiled an inspirational mood board, browsed related sites, and took a moment to reflect on the project. Gathering one’s thoughts, feelings, and intentions at the start of a project is useful for maintaining scope and providing guidance along the way.
Inspirational Mood Board
GATHERING INFORMATION
Dorothy’s Goals
- The website should entice magazines to purchase her photos for publication. She wants a good place to showcase her work when magazines ask for a portfolio.
- It should help get her work shown in museums, both locally and abroad. A great portfolio site would allow her work to be shown much more widely.
Dorothy’s Parameters
- The site should be one page since she doesn’t want a ton of content to update.
- The site must include:
- - An artist’s statement, which will help visitors of the site learn more about Dorothy
- - A photo or headshot of Dorothy
- - A quote about her mission
- - Site navigation that will link to each content section
- - Her logo and full name
- - Four samples of her photography work - she wants to start small and potentially add more at a later date
- - Contact information
- - Social media links
Conducting Research
I reviewed her goals and parameters and assessed her responses to a project intake questionnaire:
- 1. Who are you trying to reach with this website?
- 2. Who are your competitors?
- 3. What are some website designs that inspire you?
- 4. Can I see some of your work samples?
- 5. Do you have a logo, specific colors, or any other content I should include on the site?
The responses provided me with helpful information on her target audience- usually magazines that want to use her work in editorials and galleries that want to show her work. She wanted to make it really easy for both of these people to find what they need from her site. Her competitors include others in the same niche of photography, exhibiting artistic feminism and bold street shots.
I was able to see some design examples of what she liked and discovered she was very inspired by Bettye Lane’s work as a photographer, and looked up to her as a role model. I also viewed several samples of Dorothy’s own work. Her style varies from street and candid shots to more staged ones and her photos tend to center around either feminism in action or feminism in moments. I was provided with photography samples and her personal logo.
Artist's Statement
“My work focuses on candid photographs taken on location at events for women’s rights, places where women are owning their space, and fleeting encounters on the streets. My work engulfs the viewer in real moments of strength, vulnerability, and solidarity.”
Organization of Site Structure
Structure, Layout & Navigation
In order to make the site user-friendly, I needed to build on a solid foundation with a reliable structure, intuitive navigation and a consistent layout, all working in tandem. Organizing the site into a logical structure, I worked with concepts like visual hierarchy and content prioritization. The user’s attention should be drawn to the most important content first, information that visitors would generally be looking for when they visit.
Mobile First & Content Prioritization
The Mobile First mindset is a responsive design approach that starts with prioritizing content and then maximizing the space on the screen. To maximize space, one option would be to use a collapsed menu icon for the navigation menu. Design work starts out low fidelity, meaning the initial hand-drawn sketches contain very little detail, and are simply to organize the order of content into a basic skeleton of what the site might look like. With consideration of the goals and parameters, I could determine what information should be most prominent and what would be less emphasized.
Details and Design
Digital Wireframing & Styles
The digital wireframes began as low fidelity structures from the sketch. Using a method to help neatly align the content and elements for a visually appealing layout, I applied a twelve-column grid system to my design for positioning and alignment of content within that framework.
After examining some common design layouts, I decided to go with the Featured Image style of layout. This way, Dorothy’s work would be front and center right from the start for a compelling introduction, emphasizing her photography. I would include her logo and full name at the top for instant branding and identity, as well as her Artist’s Statement in the top header section as prioritized content about her.
Color can be a powerful design element of the storytelling process, communicating messages, eliciting feelings, and assisting in creating visual hierarchy. After exploring color theory and various color relationships, I played with hue, saturation, and value, as well as contrast. I settled on a magenta hue for a powerful splash of boldness with a feminine edge. Outside of black and white, I stuck to a three-color scheme for this project to create visual interest and variety without becoming busy or distracting.
Next was selecting typography and using it establish visual hierarchy, ensuring it expressed tone and mood, and complemented the overall design. I experimented with different font-pairings on digital artboards before deciding on the main typefaces for Dorothy’s style tile, keeping in line with her style and goals. I created a custom typescale as a guide for all the sizes, typefaces, and transformations throughout the site.
Versions & Revisions
Moving from low-fidelity towards high-fidelity digital designs, means adding lots of detail for a higher-quality appearance. This includes graphics, images, colors, and typography, all working well together.
Dorothy’s profile samples had some variance and yet commonality with her own unique style and balanced blend of black and white statements juxtaposed alongside splashes of colorfully candid images. I needed to differentiate her portfolio from her competitors and to keep her parameters in mind.
UI & Intuitive Design
The content structure was designed to help users easily find what they need. Understanding design patterns and trends that help produce an intuitive user interface, a trend I used here was applying an opacity filter to the background feature image, which made the text easier to read. As an intuitive design feature, I applied magenta from the color scheme to the navigation links to imitate what Dorothy’s site will look like when a user hovers their mouse on the About navigation button.
Feedback & Iteration
So far I’ve performed research to determine site goals, brainstormed ideas, created wireframes, and built a design comp. At this stage in the iteration cycle it’s best to get feedback from others invested in the design, like the client, customer, a project stakeholder, or potential site users before launching. Then interpret the feedback for understanding, and implement any relevant changes or necessary revisions based on the feedback that aligns with the project goals.
To make sure the original objectives were met and to ensure the success of the site, I presented the project to gather information for feedback to help determine whether more iteration was needed.
Obstacles & Challenges
Aside from determining content prioritization, maximizing space for mobile versions, design decisions, and minor revisions for versioning throughout the project, there was one small challenge towards the end of the project’s iteration cycle.
Feedback requested was to add in two new images as thumbnails to the gallery, and an additional social media icon for another profile link. I used my design knowledge and skills to do a little re-structuring to incorporate these revisions into a new version and delivered again for further feedback.
File Preparation & Final Steps
Once the design comp was complete, I did a final walk through for review, ensuring all goals and parameters were met, visual messaging cohesion, and that look and feel were on point for Dorothy’s personal photography brand. Finally, in preparing files for the next steps I made sure the files and folders were properly named and structured, and that everything was well-organized and labeled.
UX Recommendations
As Dorothy’s portfolio grows she will likely continue to add new selections of work online to showcase. Either an image collage or a gallery slider like image carousel could be implemented to easily allow browsing and scrolling through her growing collection while maximizaing screen space.


Montage Image Viewer
About
Documentation
Montage mViewer
Montage Python Application
Links
A Good Development LLC
mViewer GitHub


Stony Brook Farm offers English or Western riding lessons to beginner - intermediate riders. Enrolled riders benefit from a hands on approach and will learn to groom and tack their own horse as well as various aspects of horsemanship on the ground; including topics such as wrapping legs, equine nutrition, and first aid care. Our quiet, well schooled lesson horses are patient teachers and suit a variety of riders.
Stony Brook instructors strive to create riders who are strong and secure in the saddle and able to communicate clearly and concisely with their horse with soft, effective aids. The quiet atmosphere of the barn and friendly instructors will make you or your child feel welcome and comfortable to grow as a horse person and most importantly - enjoy it!


455 likes
Namaste (Hello) guyz and girlz. This is Animesh Singh and I am the co-founder of InMyPlanet Networks, TekhDecoded, PushMyBlog.
You can check me out at www.about.me/animesh22singh.
Founder at Facecook
Lives at Jamshedpur, India
Goes to Vig English School
Followed to 55.5k+ dudes.
Eat anything you give from heart.
Privacy . Terms . Advertising . Ad Choices . Cookies . More


Hi Adam,
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.
It was popularised in the 1960s with the release Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. There are many variations of passages of Lorem IpsumLorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of.
1 attachments - Download | View images


Locals out in force at popular Eaglesham Halloween event.
There were hundreds of pumpkins on display.
by East Kilbride News, https://www.dailyrecord.co.uk/authors/east-kilbride-news/Hundreds of families in Eaglesham turned out in force at the weekend to battle off evil spirits.
Filled with community togetherness and guised in colourful and scary outfits, their united front was no match for any would-be evils.
Wishing to mark their territory, they lined the common land with their own specially carved pumpkins as part of the second annual Jack in the Orry event, organised by Tracey White.
Over 300 pumpkins were carved as part of the spooktacular event as locals welcomed back their pal Jack.
That saw local residents, groups, clubs and the artistic among the community carve a pumpkin for Hallowe’en and line the path of the Orry.
The result was a fantastic offering of spooky, eerie and colourful squashes of all shapes and sizes lining the centre of the historic village.
And there was plenty of surprises in store, not least a hidden Grufallo trail, with fantastic artwork and carved pumpkins in keeping with Julia Donaldson’s classic novel.
Volunteers collected for the local food bank appeal at the event, helping to add to the brilliant community spirit.
Our snapper Dom Cocozza popped on his brave suit and headed along to help tackle all things scary and spooky.


string
class has been briefly introduced in an earlier chapter. It is a very powerful class to handle and manipulate strings of characters. However, because strings are, in fact, sequences of characters, we can represent them also as plain arrays of elements of a character type.
|
|
char
. It can be represented as:"Hello"
or the sequence "Merry Christmas"
can be stored in foo
, since both would fit in a sequence with a capacity for 20 characters.'\0'
(backslash, zero).char
called foo
can be represented storing the character sequences "Hello"
and "Merry Christmas"
as:'\0'
) has been added in order to indicate the end of the sequence. The panels in gray color represent char
elements with undetermined values.
|
|
char
initialized with the characters that form the word "Hello"
plus a null character '\0'
at the end."
). For example:
|
|
"
) are literal constants. And their type is, in fact, a null-terminated array of characters. This means that string literals always have a null character ('\0'
) automatically appended at the end.myword
can be initialized with a null-terminated sequence of characters by either one of these two statements:
|
|
myword
is declared with a size of 6 elements of type char
: the 5 characters that compose the word "Hello"
, plus a final null character ('\0'
), which specifies the end of the sequence and that, in the second case, when using double quotes ("
) it is appended automatically.
|
|
|
|
|
|
string
), still, plain arrays with null-terminated sequences of characters (C-strings) are a natural way of representing strings in the language; in fact, string literals still always produce null-terminated character sequences, and not string
objects.cin
and cout
support null-terminated sequences directly, allowing them to be directly extracted from cin
or inserted into cout
, just like strings. For example:
|
|
What is your name? Homer Where do you live? Greece Hello, Homer from Greece! |
cin
and cout
, but there is a notable difference in their declarations: arrays have a fixed size that needs to be specified either implicit or explicitly when declared; question1
has a size of exactly 20 characters (including the terminating null-characters) and answer1
has a size of 80 characters; while strings are simply strings, no size is specified. This is due to the fact that strings have a dynamic size determined during runtime, while the size of arrays is determined on compilation, before the program runs.string
's member functions c_str
or data
:
|
|
c_str
and data
members of string
are equivalent)| Previous: Arrays | Index | Next: Pointers |


Follow @muli_nzavi
ℕ&ℂ
NZAVI & CO ADVOCATES
📞 (+254) 701 123049
About us
Our Services
Our People
News and insights
Covid-19 Hub
Contacts
Call us at +254 701 123 049


Click on the mirrors to reflect a note that you are holding. When clicking on the false mirror, where the hidden door is, it will not have a reflection of the note, and will subsequently be broken.


--- company: "Nokia Gate5 GmbH" location: "Berlin, Germany" title: "Senior Quality Assurance Engineer" started: "2009" duration: "04.2009 - 11.2012" website: "https://www.here.com/" keywords: "error management, mobile, scrum master, test automation, kanban, agile testing, quality assurance, searching, routing, positioning, rendering, location based services" description: "Nokia is a multinational company with a range of products where its technology and design made it one of the most notorious brands in mobile communications and their site in Berlin (now called Here) is responsible for delivering and maintaining Nokia's location based solutions. The role involved Test and Error management on Nokia Maps for S40 focused on the Native Engine, providing routing, search, rendering and positioning to a Java application." skills: - cpp: name: "C++" share: "100%" - kanban: name: "Kanban" share: "50%" - scrum: name: "Scrum" share: "50%" - test: name: "Test Automation" share: "20%" - scrumm: name: "Scrum Master" share: "30%" - error: name: "Error and QA Management" share: "30%" - planning: name: "Test Planning" share: "20%" languages: - "English" --- Nokia is a multinational company with a range of products where its technology and design made it one of the most notorious brands in mobile communications. Their site in Berlin is responsible for delivering and maintaining Nokia's location based solutions. The Senior Quality Assurance Engineer role involved Test and Error management on Nokia Maps for S40, which belonged to the company's portfolio for BRIICA markets, conducting the following activities:


Result Analyzer
Enter the Calender Year of which results to be analyzed:
Enter the Semester:
Submit
Reset


Eddie Van Halen
The guitarrist who changed the rock music
Here's a time line of Eddie Van Halen's life:
- 1955 - Eddie Van Halen born in January 26, in Nijmegen, Netherlands
- 1961 - Van Halen and his older brother, Alex, learned to play the piano as children starting at the age of six.The brothers commuted from Pasadena to San Pedro to study with an elderly man, Stasys (Stanley) Kalvaitis who taught them classical piano. Van Halen and brother Alex hated the commute, but continued as their mother would discipline them if they refused to go.
- 1972 - Van Halen formed another band, originally called "Genesis." The name was changed to "Mammoth" when Van Halen became aware of the English progressive rock band Genesis. Mammoth consisted of Van Halen on guitar and lead vocals, his brother Alex on drums and bassist Mark Stone.
- 1976 - At one point, the group considered using the name "Rat Salad," after the Black Sabbath song of the same name, before settling on "Van Halen."The band originally began playing cover material, ranging from pop to disco, before settling on original material. In 1976, band supporter Rodney Bingenheimer invited Kiss bassist Gene Simmons to check out a Van Halen show.
- 1978 - Van Halen is the debut studio album by American rock band Van Halen. Released on February 10, 1978, the album peaked at number 19 on the Billboard Hot 100. The album became widely recognized as the band's popularity grew, selling more than ten million copies in the United States by 1999 and achieving RIAA diamond status.
- 1979 - Van Halen II is the second studio album by American hard rock band Van Halen, released in 1979. It peaked at number 6 on the Billboard charts and spawned the singles "Dance the Night Away" and "Beautiful Girls". To date, it has sold over five million copies in the United States.
- 1982 - Van Halen was invited by producer Quincy Jones to contribute the guitar solo for Michael Jackson's single "Beat It." Van Halen reportedly declined any payment for the recording, deeming a credit on the album sufficient.
- 1986 - 5150 (pronounced "fifty-one-fifty") is the seventh studio album by American hard rock band Van Halen, released in 1986 on Warner Bros. Records. It was the first of four albums to be recorded with new lead singer Sammy Hagar, who replaced David Lee Roth.
- 1995 - Balance is the tenth studio album by hard rock band Van Halen, released on January 24, 1995 through Warner Bros. Records. The album is the last of the band's four studio releases to feature Sammy Hagar as lead vocalist. Balance reached number 1 on the U.S. Billboard 200 in February 1995.
- 1998 - Van Halen III is the eleventh studio album by American hard rock band Van Halen, released on March 17, 1998 on Warner Bros. Produced by Mike Post and Eddie Van Halen, it is the band's only studio album to feature lead vocalist Gary Cherone, and the last to feature bassist Michael Anthony before he left the band in 2006. Work on a follow-up album with Cherone commenced in 1999, but never advanced past a few demos.
- 2012 - A Different Kind of Truth is the twelfth studio album by American hard rock band Van Halen. Released on February 7, 2012, by Interscope Records, the record is Van Halen's first full-length album of studio material with former lead vocalist David Lee Roth since 1984. Likewise, it is Van Halen's first studio album since 1998's Van Halen III.
- 2020 - Eddie Van Halen passed away on October 6, 2020, after a long battle with cancer.
"Van Halen changed the way electric guitarists played, the sounds they strove for, even the physical construction of the instruments they used, with multiple patents to his name (and other technical breakthroughs, he credibly maintained, that were ripped off and capitalized upon before he learned how to use the patent office). He single-handedly gave the electric guitar an extra decade or more of cultural prominence, even as he’d try to duck blame for a generation of teased-hair shredders who played like typewriters."
-- Brian Hiatt (Rolling Stones Magazine)


Thanks for trying out Para.
Here's the basics
- Use the pen tool to draw shapes using bezier curves.
- Use the select tool to select and manipulate shapes.
- Pan and zoom by holding down the command key (⌘) and clicking and dragging for pan, or using the mouse wheel to zoom.
- Save a version of your drawing by entering a name in the righthand panel and selecting save. You can download a version of your saved file to your computer by selecting save to computer.
- You can load a locally saved file by selecting it from the dropdown menu. To load in a file saved on your computer, select the upload file from desktop option.
- Export an svg of your file with the download svg option, and edit it in your favorite vector software. A heads up, you will not be able to re-import this svg into Para after you're done.
Here's the important stuff
- Create distributions of shapes by selecting a shape while holding the alt key to pull up the modifier menu and select add behavior.
- Selecting copy will create a single copy of your shape.
- Selecting linear distribution will create a linear pattern of shapes.
- Selecting radial distribution will create a radial pattern of shapes.
- You can adjust distributions by dragging the red and green shapes.
- Create a distribution of shapes along a path by dragging a shape over a path while holding SHIFT and releasing it.
- To edit a distribution, double click on any shape in it. This will move you down a level in the heirarchy of the drawing (sort of like moving between groups in illustrator). Double click outside the distribution to move back up.
- Create multi-level distributions and use the double clicking mechanism to edit them
- Changing one shape or distribution will change all the copies of it accordingly. This is a feature, not a bug.
Here's the bad news
- Para is a prototype, meaning it's very rough and there's a lot of bugs. We're sorry in advance. Here's someone you can complain to.
- Para is not optimized, so if you create a billion shapes in your drawing, it's going to start moving very slowly
Here's the good news
Who we are
Para is a research project by Jennifer Jacobs and Joel Brandt. Everything that is broken is most likely Jennifer's fault.


PART VII. PIGEONS--REPEALED
§§322-121 to 124 REPEALED. L 1988, c 86, §2.
Cross References
For present provisions, see §§142-101 to 103.


In this chapter we implement the aeroplane's cockpit, allowing the player to take off and win the game.


Hello there!
You can learn more about me from any of the links below.
This site is based off of the Compass theme.