AWS::CodeDeploy::DeploymentGroup
The AWS::CodeDeploy::DeploymentGroup
resource creates an AWS CodeDeploy deployment
group that specifies which instances your application revisions are deployed to, along
with other deployment options.
For more information, see CreateDeploymentGroup in the AWS CodeDeploy API Reference.
Syntax
To declare this entity in your AWS CloudFormation template, use the following syntax:
JSON
{ "Type" : "AWS::CodeDeploy::DeploymentGroup", "Properties" : { "AlarmConfiguration" : AlarmConfiguration, "ApplicationName" :
String
, "AutoRollbackConfiguration" : AutoRollbackConfiguration, "AutoScalingGroups" : [String, ...
], "Deployment" : Deployment, "DeploymentConfigName" :String
, "DeploymentGroupName" :String
, "DeploymentStyle" : DeploymentStyle, "Ec2TagFilters" : [ Ec2TagFilter, ... ], "Ec2TagSet" : Ec2TagSet, "LoadBalancerInfo" : LoadBalancerInfo, "OnPremisesInstanceTagFilters" : [ OnPremisesInstanceTagFilter, ... ], "OnPremisesInstanceTagSet" : OnPremisesInstanceTagSet, "ServiceRoleArn" :String
, "TriggerConfigurations" : [ TriggerConfig, ... ] } }
YAML
Type: AWS::CodeDeploy::DeploymentGroup Properties: AlarmConfiguration: AlarmConfiguration ApplicationName:
String
AutoRollbackConfiguration: AutoRollbackConfiguration AutoScalingGroups: -String
Deployment: Deployment DeploymentConfigName:String
DeploymentGroupName:String
DeploymentStyle: DeploymentStyle Ec2TagFilters: - Ec2TagFilters Ec2TagSet : Ec2TagSet LoadBalancerInfo: LoadBalancerInfo OnPremisesInstanceTagFilters: - OnPremisesInstanceTagFilters OnPremisesInstanceTagSet: OnPremisesInstanceTagSet ServiceRoleArn:String
TriggerConfigurations: - TriggerConfig
Properties
AlarmConfiguration
-
Information about the Amazon CloudWatch alarms that are associated with the deployment group.
Required: No
Type: CodeDeploy DeploymentGroup AlarmConfiguration
Update requires: No interruption
ApplicationName
-
The name of an existing CodeDeploy application to associate this deployment group with.
Required: Yes
Type: String
Update requires: Replacement
AutoRollbackConfiguration
-
Information about the automatic rollback configuration that is associated with the deployment group. If you specify this property, don't specify the
Deployment
property.Required: No
Type: AutoRollbackConfiguration
Update requires: No interruption
AutoScalingGroups
-
A list of associated Auto Scaling groups that CodeDeploy automatically deploys revisions to when new instances are created. Duplicates are not allowed.
Required: No
Type: List of String values
Update requires: No interruption
Deployment
-
The application revision to deploy to this deployment group. If you specify this property, your target application revision will be deployed as soon as the provisioning process is complete. If you specify this property, don't specify the
AutoRollbackConfiguration
property.Required: No
Type: CodeDeploy DeploymentGroup Deployment
Update requires: No interruption
DeploymentConfigName
-
A deployment configuration name or a predefined configuration name. With predefined configurations, you can deploy application revisions to one instance at a time, half of the instances at a time, or all the instances at once. For more information and valid values, see Working with Deployment Configurations in the AWS CodeDeploy User Guide.
Required: No
Type: String
Update requires: No interruption
DeploymentGroupName
-
A name for the deployment group. If you don't specify a name, AWS CloudFormation generates a unique physical ID and uses that ID for the deployment group name. For more information, see Name Type.
Important
If you specify a name, you cannot perform updates that require replacement of this resource. You can perform updates that require no or some interruption. If you must replace the resource, specify a new name.
Required: No
Type: String
Update requires: Replacement
DeploymentStyle
-
Attributes that determine the type of deployment to run and whether to route deployment traffic behind a load balancer.
If you specify this property with a blue/green deployment type, don't specify the
AutoScalingGroups
,LoadBalancerInfo
, orDeployment
properties.Note
For blue/green deployments, AWS CloudFormation supports deployments on AWS Lambda compute platforms only.
Required: No
Type: DeploymentStyle
Update requires: No interruption
Ec2TagFilters
-
The EC2 tags that are already applied to EC2 instances that you want to include in the deployment group. CodeDeploy includes all EC2 instances identified by any of the tags you specify in this deployment group. Duplicates are not allowed.
You can specify
EC2TagFilters
orEc2TagSet
, but not both.Required: No
Type: List of CodeDeploy DeploymentGroup Ec2TagFilters
Update requires: No interruption
Ec2TagSet
-
Specifies information about groups of tags applied to EC2 instances. The deployment group will include only EC2 instances identified by all the tag groups.
You can specify
EC2TagFilters
orEc2TagSet
, but not both.Required: No
Type: EC2TagSet
Update requires: No interruption
LoadBalancerInfo
-
Information about the load balancer used in the deployment. For more information, see Integrating CodeDeploy with Elastic Load Balancing in the AWS CodeDeploy User Guide.
Required: No
Type: LoadBalancerInfo
Update requires: No interruption
OnPremisesInstanceTagFilters
-
The on-premises instance tags already applied to on-premises instances that you want to include in the deployment group. CodeDeploy includes all on-premises instances identified by any of the tags you specify in this deployment group. To register on-premises instances with CodeDeploy, see Working with On-Premises Instances for CodeDeploy in the AWS CodeDeploy User Guide. Duplicates are not allowed.
You can specify
OnPremisesInstanceTagFilters
orOnPremisesInstanceTagSet
, but not both.Required: No
Type: List of CodeDeploy DeploymentGroup TagFilters
Update requires: No interruption
OnPremisesInstanceTagSet
-
Information about groups of tags applied to on-premises instances. The deployment group will include only on-premises instances identified by all the tag groups.
You can specify
OnPremisesInstanceTagFilters
orOnPremisesInstanceTagSet
, but not both.Required: No
Type:CodeDeploy DeploymentGroup OnPremisesTagSet
Update requires: No interruption
ServiceRoleArn
-
A service role Amazon Resource Name (ARN) that grants CodeDeploy permission to make calls to AWS services on your behalf. For more information, see Create a Service Role for AWS CodeDeploy in the AWS CodeDeploy User Guide.
Note
In some cases, you might need to add a dependency on the service role's policy. For more information, see IAM role policy in DependsOn Attribute.
Required: Yes
Type: String
Update requires: No interruption
TriggerConfigurations
-
Information about the notification triggers for the deployment group. Duplicates are not allowed.
Required: No
Type: List of CodeDeploy DeploymentGroup TriggerConfig
Update requires: No interruption
Return Value
Ref
When you pass the logical ID of an AWS::CodeDeploy::DeploymentGroup
resource to the intrinsic Ref
function, the function returns the
deployment group name, such as mydeploymentgroup-a123d0d1
.
For more information about using the Ref
function, see Ref.
Examples
Revision in GitHub
The following example creates a deployment group that is associated with Auto Scaling groups and uses an application revision that is stored in a GitHub repository. You specify the repository information as input parameters.
JSON
"DeploymentGroup" : { "Type" : "AWS::CodeDeploy::DeploymentGroup", "Properties" : { "ApplicationName" : {"Ref" : "ApplicationName"}, "AutoScalingGroups" : [ {"Ref" : "CodeDeployAutoScalingGroups" } ], "Deployment" : { "Description" : "A sample deployment", "IgnoreApplicationStopFailures" : "true", "Revision" : { "RevisionType" : "GitHub", "GitHubLocation" : { "CommitId" : {"Ref" : "CommitId"}, "Repository" : {"Ref" : "Repository"} } } }, "ServiceRoleArn" : { "Fn::GetAtt" : [ "RoleArn", "Arn" ] } } }
YAML
DeploymentGroup: Type: AWS::CodeDeploy::DeploymentGroup Properties: ApplicationName: Ref: "ApplicationName" AutoScalingGroups: - Ref: CodeDeployAutoScalingGroups Deployment: Description: "A sample deployment" IgnoreApplicationStopFailures: true Revision: RevisionType: GitHub GitHubLocation: CommitId: Ref: CommitId Repository: Ref: Repository ServiceRoleArn: Fn::GetAtt: [ RoleArn, Arn ]
Associate EC2 Instances
The following example creates a deployment group that uses instance tags to associate EC2 instances with the deployment group. The deployment group uses an application revision that is stored in an S3 bucket.
JSON
"DeploymentGroup" : { "Type" : "AWS::CodeDeploy::DeploymentGroup", "Properties" : { "ApplicationName" : {"Ref" : "Application"}, "Deployment" : { "Description" : "First time", "IgnoreApplicationStopFailures" : "true", "Revision" : { "RevisionType" : "S3", "S3Location" : { "Bucket" : {"Ref" : "Bucket"}, "Key" : {"Ref" : "Key"}, "BundleType" : "Zip", "ETag" : {"Ref" : "ETag"}, "Version" : {"Ref" : "Version"} } } }, "Ec2TagFilters" : [{ "Key" : {"Ref" : "TagKey"}, "Value" : {"Ref" : "TagValue"}, "Type" : "KEY_AND_VALUE" }], "ServiceRoleArn" : { "Fn::GetAtt" : [ "RoleArn", "Arn" ] } } }
YAML
DeploymentGroup: Type: AWS::CodeDeploy::DeploymentGroup Properties: ApplicationName: Ref: "Application" Deployment: Description: "First time" IgnoreApplicationStopFailures: true Revision: RevisionType: S3 S3Location: Bucket: Ref: Bucket Key: Ref: Key BundleType: Zip ETag: Ref: ETag Version: Ref: Version Ec2TagFilters: - Key: Ref: TagKey Value: Ref: TagValue Type: "KEY_AND_VALUE" ServiceRoleArn: Fn::GetAtt: [ RoleArn, Arn ]
Alarm and Trigger
The following example configures a billing alarm and a notification trigger for the deployment group.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "EC2TagKey0": { "Type": "String", "Default": "ec2TagKey0" }, "EC2TagValue0": { "Type": "String", "Default": "ec2TagValue0" }, "EC2TagKey1": { "Type": "String", "Default": "ec2TagKey1" }, "EC2TagValue1": { "Type": "String", "Default": "ec2TagValue1" }, "CodeDeployServiceRole": { "Type": "String" }, "DeploymentGroupName": { "Type": "String" } }, "Resources": { "myAlarm": { "Type": "AWS::CloudWatch::Alarm", "Properties": { "Namespace": "AWS/Billing", "MetricName": "EstimatedCharges", "Statistic": "Maximum", "Period": "21600", "EvaluationPeriods": "1", "Threshold": 1000, "ComparisonOperator": "GreaterThanThreshold" } }, "mySNSTopic": { "Type": "AWS::SNS::Topic", "Properties": {} }, "Application": { "Type": "AWS::CodeDeploy::Application" }, "DeploymentConfig": { "Type": "AWS::CodeDeploy::DeploymentConfig", "Properties": { "MinimumHealthyHosts": { "Type": "FLEET_PERCENT", "Value": "25" } } }, "DeploymentGroup": { "Type": "AWS::CodeDeploy::DeploymentGroup", "Properties": { "AlarmConfiguration": { "Alarms": [ { "Name": { "Ref": "myAlarm" } } ] }, "ApplicationName": { "Ref": "Application" }, "DeploymentConfigName": { "Ref": "DeploymentConfig" }, "DeploymentGroupName": { "Ref": "DeploymentGroupName" }, "Ec2TagFilters": [ { "Key": { "Ref": "EC2TagKey0" }, "Value": { "Ref": "EC2TagValue0" }, "Type": "KEY_AND_VALUE" }, { "Key": { "Ref": "EC2TagKey1" }, "Type": "KEY_ONLY" }, { "Value": { "Ref": "EC2TagValue1" }, "Type": "VALUE_ONLY" } ], "ServiceRoleArn": { "Fn::GetAtt": [ "CodeDeployServiceRole", "Arn" ] }, "TriggerConfigurations": [ { "TriggerEvents": [ "DeploymentSuccess", "DeploymentRollback" ], "TriggerName": "MyTarget", "TriggerTargetArn": { "Ref": "mySNSTopic" } } ] } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Parameters: EC2TagKey0: Type: String Default: ec2TagKey0 EC2TagValue0: Type: String Default: ec2TagValue0 EC2TagKey1: Type: String Default: ec2TagKey1 EC2TagValue1: Type: String Default: ec2TagValue1 CodeDeployServiceRole: Type: String DeploymentGroupName: Type: String Resources: myAlarm: Type: AWS::CloudWatch::Alarm Properties: Namespace: AWS/Billing MetricName: EstimatedCharges Statistic: Maximum Period: '21600' EvaluationPeriods: '1' Threshold: 1000 ComparisonOperator: GreaterThanThreshold mySNSTopic: Type: AWS::SNS::Topic Properties: {} Application: Type: AWS::CodeDeploy::Application DeploymentConfig: Type: AWS::CodeDeploy::DeploymentConfig Properties: MinimumHealthyHosts: Type: FLEET_PERCENT Value: '25' DeploymentGroup: Type: AWS::CodeDeploy::DeploymentGroup Properties: AlarmConfiguration: Alarms: - Name: !Ref myAlarm ApplicationName: !Ref Application DeploymentConfigName: !Ref DeploymentConfig DeploymentGroupName: !Ref DeploymentGroupName Ec2TagFilters: - Key: !Ref EC2TagKey0 Value: !Ref EC2TagValue0 Type: KEY_AND_VALUE - Key: !Ref EC2TagKey1 Type: KEY_ONLY - Value: !Ref EC2TagValue1 Type: VALUE_ONLY ServiceRoleArn: !GetAtt CodeDeployServiceRole.Arn TriggerConfigurations: - TriggerEvents: - DeploymentSuccess - DeploymentRollback TriggerName: MyTarget TriggerTargetArn: !Ref mySNSTopic
Automatic Rollback Configuration
The following example configures automatic rollback for the deployment group.
JSON
{ "Parameters": { "EC2TagKey0": { "Type": "String", "Default": "ec2TagKey0" }, "EC2TagValue0": { "Type": "String", "Default": "ec2TagValue0" }, "EC2TagKey1": { "Type": "String", "Default": "ec2TagKey1" }, "EC2TagValue1": { "Type": "String", "Default": "ec2TagValue1" }, "CodeDeployServiceRole": { "Type": "String" }, "DeploymentGroupName": { "Type": "String" } }, "Resources": { "myAlarm": { "Type": "AWS::CloudWatch::Alarm", "Properties": { "Namespace": "AWS/Billing", "MetricName": "EstimatedCharges", "Statistic": "Maximum", "Period": "21600", "EvaluationPeriods": "1", "Threshold": 1000, "ComparisonOperator": "GreaterThanThreshold" } }, "mySNSTopic": { "Type": "AWS::SNS::Topic", "Properties": {} }, "Application": { "Type": "AWS::CodeDeploy::Application" }, "DeploymentConfig": { "Type": "AWS::CodeDeploy::DeploymentConfig", "Properties": { "MinimumHealthyHosts": { "Type": "FLEET_PERCENT", "Value": "25" } } }, "DeploymentGroup": { "Type": "AWS::CodeDeploy::DeploymentGroup", "Properties": { "AlarmConfiguration": { "Alarms": [ { "Name": { "Ref": "myAlarm" } } ] }, "ApplicationName": { "Ref": "Application" }, "AutoRollbackConfiguration": { "Enabled": "true", "Events": [ "DEPLOYMENT_FAILURE" ] }, "DeploymentConfigName": { "Ref": "DeploymentConfig" }, "DeploymentGroupName": { "Ref": "DeploymentGroupName" }, "Ec2TagFilters": [ { "Key": { "Ref": "EC2TagKey0" }, "Value": { "Ref": "EC2TagValue0" }, "Type": "KEY_AND_VALUE" }, { "Key": { "Ref": "EC2TagKey1" }, "Type": "KEY_ONLY" }, { "Value": { "Ref": "EC2TagValue1" }, "Type": "VALUE_ONLY" } ], "ServiceRoleArn": { "Fn::GetAtt": [ "CodeDeployServiceRole", "Arn" ] }, "TriggerConfigurations": [ { "TriggerEvents": [ "DeploymentSuccess", "DeploymentRollback" ], "TriggerName": "MyTarget", "TriggerTargetArn": { "Ref": "mySNSTopic" } } ] } } } }
YAML
Parameters: EC2TagKey0: Type: String Default: ec2TagKey0 EC2TagValue0: Type: String Default: ec2TagValue0 EC2TagKey1: Type: String Default: ec2TagKey1 EC2TagValue1: Type: String Default: ec2TagValue1 CodeDeployServiceRole: Type: String DeploymentGroupName: Type: String Resources: myAlarm: Type: AWS::CloudWatch::Alarm Properties: Namespace: AWS/Billing MetricName: EstimatedCharges Statistic: Maximum Period: '21600' EvaluationPeriods: '1' Threshold: 1000 ComparisonOperator: GreaterThanThreshold mySNSTopic: Type: AWS::SNS::Topic Properties: {} Application: Type: AWS::CodeDeploy::Application DeploymentConfig: Type: AWS::CodeDeploy::DeploymentConfig Properties: MinimumHealthyHosts: Type: FLEET_PERCENT Value: '25' DeploymentGroup: Type: AWS::CodeDeploy::DeploymentGroup Properties: AlarmConfiguration: Alarms: - Name: !Ref myAlarm ApplicationName: !Ref Application AutoRollbackConfiguration: Enabled: 'true' Events: - DEPLOYMENT_FAILURE DeploymentConfigName: !Ref DeploymentConfig DeploymentGroupName: !Ref DeploymentGroupName Ec2TagFilters: - Key: !Ref EC2TagKey0 Value: !Ref EC2TagValue0 Type: KEY_AND_VALUE - Key: !Ref EC2TagKey1 Type: KEY_ONLY - Value: !Ref EC2TagValue1 Type: VALUE_ONLY ServiceRoleArn: !GetAtt CodeDeployServiceRole.Arn TriggerConfigurations: - TriggerEvents: - DeploymentSuccess - DeploymentRollback TriggerName: MyTarget TriggerTargetArn: !Ref mySNSTopic
Load Balancer
The following example configures an Elastic Load Balancing load balancer for the deployment group.
JSON
{ "Parameters": { "EC2TagKey0": { "Type": "String", "Default": "ec2TagKey0" }, "EC2TagValue0": { "Type": "String", "Default": "ec2TagValue0" }, "EC2TagKey1": { "Type": "String", "Default": "ec2TagKey1" }, "EC2TagValue1": { "Type": "String", "Default": "ec2TagValue1" }, "CodeDeployServiceRole": { "Type": "String" }, "DeploymentGroupName": { "Type": "String" }, "VpcCidr": { "Type": "String" }, "SubnetCidr": { "Type": "String" } }, "Resources": { "myVpc": { "Type": "AWS::EC2::VPC", "Properties": { "CidrBlock": { "Ref": "VpcCidr" } } }, "mySubnet" : { "Type" : "AWS::EC2::Subnet", "Properties" : { "VpcId" : { "Ref" : "myVpc" }, "CidrBlock" : { "Ref": "SubnetCidr" } } }, "InternetGateway" : { "Type" : "AWS::EC2::InternetGateway" }, "AttachGateway" : { "Type" : "AWS::EC2::VPCGatewayAttachment", "Properties" : { "VpcId" : { "Ref" : "myVpc" }, "InternetGatewayId" : { "Ref" : "InternetGateway" } } }, "myELB": { "Type": "AWS::ElasticLoadBalancing::LoadBalancer", "Properties": { "Listeners": [{ "InstancePort": "8000", "LoadBalancerPort": "80", "Protocol": "HTTP" }], "Subnets": [ { "Ref" : "mySubnet" } ] } }, "mySNSTopic": { "Type": "AWS::SNS::Topic", "Properties": {} }, "Application": { "Type": "AWS::CodeDeploy::Application" }, "DeploymentConfig": { "Type": "AWS::CodeDeploy::DeploymentConfig", "Properties": { "MinimumHealthyHosts": { "Type": "FLEET_PERCENT", "Value": "25" } } }, "DeploymentGroup": { "Type": "AWS::CodeDeploy::DeploymentGroup", "Properties": { "ApplicationName": { "Ref": "Application" }, "DeploymentConfigName": { "Ref": "DeploymentConfig" }, "DeploymentGroupName": { "Ref": "DeploymentGroupName" }, "Ec2TagFilters": [ { "Key": { "Ref": "EC2TagKey0" }, "Value": { "Ref": "EC2TagValue0" }, "Type": "KEY_AND_VALUE" }, { "Key": { "Ref": "EC2TagKey1" }, "Type": "KEY_ONLY" } ], "LoadBalancerInfo": { "ElbInfoList": [{ "Name": { "Ref" : "myELB" } }] }, "DeploymentStyle": { "DeploymentOption": "WITH_TRAFFIC_CONTROL" }, "ServiceRoleArn": { "Fn::GetAtt": [ "CodeDeployServiceRole", "Arn" ] }, "TriggerConfigurations": [ { "TriggerEvents": [ "DeploymentSuccess", "DeploymentFailure" ], "TriggerName": "MyTarget", "TriggerTargetArn": { "Ref": "mySNSTopic" } } ] } } }, "Outputs": { "ELB": { "Description": "ELB for DeploymentGroup", "Value" : { "Ref" : "myELB" } } } }
YAML
Parameters: EC2TagKey0: Type: String Default: ec2TagKey0 EC2TagValue0: Type: String Default: ec2TagValue0 EC2TagKey1: Type: String Default: ec2TagKey1 EC2TagValue1: Type: String Default: ec2TagValue1 CodeDeployServiceRole: Type: String DeploymentGroupName: Type: String VpcCidr: Type: String SubnetCidr: Type: String Resources: myVpc: Type: AWS::EC2::VPC Properties: CidrBlock: !Ref VpcCidr mySubnet: Type: AWS::EC2::Subnet Properties: VpcId: !Ref myVpc CidrBlock: !Ref SubnetCidr InternetGateway: Type: AWS::EC2::InternetGateway AttachGateway: Type: AWS::EC2::VPCGatewayAttachment Properties: VpcId: !Ref myVpc InternetGatewayId: !Ref InternetGateway myELB: Type: AWS::ElasticLoadBalancing::LoadBalancer Properties: Listeners: - InstancePort: '8000' LoadBalancerPort: '80' Protocol: HTTP Subnets: - !Ref mySubnet mySNSTopic: Type: AWS::SNS::Topic Properties: {} Application: Type: AWS::CodeDeploy::Application DeploymentConfig: Type: AWS::CodeDeploy::DeploymentConfig Properties: MinimumHealthyHosts: Type: FLEET_PERCENT Value: '25' DeploymentGroup: Type: AWS::CodeDeploy::DeploymentGroup Properties: ApplicationName: !Ref Application DeploymentConfigName: !Ref DeploymentConfig DeploymentGroupName: !Ref DeploymentGroupName Ec2TagFilters: - Key: !Ref EC2TagKey0 Value: !Ref EC2TagValue0 Type: KEY_AND_VALUE - Key: !Ref EC2TagKey1 Type: KEY_ONLY LoadBalancerInfo: ElbInfoList: - Name: !Ref myELB DeploymentStyle: DeploymentOption: WITH_TRAFFIC_CONTROL ServiceRoleArn: !GetAtt CodeDeployServiceRole.Arn TriggerConfigurations: - TriggerEvents: - DeploymentSuccess - DeploymentFailure TriggerName: MyTarget TriggerTargetArn: !Ref mySNSTopic Outputs: ELB: Description: ELB for DeploymentGroup Value: !Ref myELB
Target Group Info
The following example specifies the target group to use in a deployment. Instances are registered as targets in a target group, and traffic is routed to the target group.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "AppDeploymentGroup": { "Type": "AWS::CodeDeploy::DeploymentGroup", "Properties": { "ApplicationName": "MyApp", "DeploymentStyle": { "DeploymentOption": "WITH_TRAFFIC_CONTROL" }, "LoadBalancerInfo": { "TargetGroupInfoList": [ { "Name": { "Fn::GetAtt": ["MyTargetGroup", "TargetGroupName"] } } ] }, "ServiceRoleArn": "arn:aws:iam::12345678:role/CodeDeployServiceRole" } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Resources: AppDeploymentGroup: Type: AWS::CodeDeploy::DeploymentGroup Properties: ApplicationName: MyApp DeploymentStyle: DeploymentOption: WITH_TRAFFIC_CONTROL LoadBalancerInfo: TargetGroupInfoList: - Name: !GetAtt MyTargetGroup.TargetGroupName ServiceRoleArn: 'arn:aws:iam::12345678:role/CodeDeployServiceRole'


Hebron tours explain Israeli settlement policy
by Isabel Marques da SilvaThe US administration announced, earlier this week, that it no longer considers Israeli settlements in the Palestinian territories as a violation of international law, prompting criticism by the other members of the UN Security Council and by the EU External Policy Chief. Euronews gives a glimpse about the challenges created by a settlement in the Palestinian city of Hebron, visited recently by the correspondent Isabel Marques da Silva.
In the largest city in the West Bank, Hebron, the Jewish non governmental organization "Breaking the Silence", founded by Israeli veterans, organizes educational tours.
The guide shows the designated "sterilized streets" in the city’s old quarter. A place where only Jewish settlers can walk or drive.
The few Palestinians who still live here enter their houses from a backdoor or ladder to the roof. Cages on their windows protect them from stones.
The segregation concept
"The most important story in Hebron is the segregation concept. Look at the map. All the settlements are south of the old city, that is why all the gates leading in and out of the old city towards the south are blocked for Palestinians", explains Yehuda Sjaul, founder of "Breaking the Silence".
There are 650 soldiers protecting fewer than 1000 Jewish settlers, who live in the old quarter of the city with 200 thousand Palestinians.
The tour is not welcomed by settlers who argue they need security, but would prefer to coexist peacefully.
"We believe everyone should live in peace together, right? Remind that in South Africa there was apartheid, and in apartheid they used to teach that black people could not live with white people. And that was evil because we believe in peace and living together, right?", says one settler to his daughters when passing near the tour members.
On the other side of the checkpoint
After crossing a military checkpoint, the tour can continue with the Palestinian non governmental organization "Youth Against Settlements".
The guide is keen to raise public awareness about the disruption in daily life caused by the settlements policy.
"The Israeli army closed the market by military orders, the settlers occupied the rooftop and they are using it as a kindergarten, as an outpost, which is illegal according to the Israeli law. They broke into the shops, destroyed the decoration and burned the wood.
The two guides are friends and their tours attract tourists but also thousands of locals, especially university students.


Chapter 1 Workshop Answers for Week 1
1.1 Short mathematical question - Beer Lambert law
- How far can monochromatic 489 nm light travel through a 0.100 M solution of fluorescein with an extinction coefficient at 489 nm of 92000 M−1 cm−1 before 90 % of it is absorbed?
If 90% of the incident light is being absorbed then 10% of the light is transmitted…
The Beer-Lambert law is (Equation (1.1)):
\[\begin{equation} \log{\frac{I}{I_0}}=-\varepsilon c l \tag{1.1} \end{equation}\]
rearranging this:
\[\begin{equation*} l = \frac{\log{\frac{I_0}{I}}}{\varepsilon c} \end{equation*}\]
\[\begin{equation*} l = \frac{\log{\frac{100 \%}{10 \%}}}{92000 \textrm{ M}^{-1} \textrm{ cm}^{-1} \times 0.100 \textrm{ M}} \end{equation*}\]
\[\begin{equation*} l = \frac{1}{9200000 \textrm{ M}^{-1} \textrm{ m}^{-1} \times 0.100 \textrm{ M}} \end{equation*}\]
\[\begin{equation*} l = 1.0 \textrm{ μm} \end{equation*}\]
1.2 Short conceptual question - molar extinction coefficient
- Modify the molecule in figure 1.1 to increase the molar extinction coefficient (do not worry about what may happen to wavelength).
If a molecule is rigid the difference between the ground and excited state structure is smaller and this usually leads to a higher molar extinction coefficient, so any structural changes which increase this rigidity will likely lead to a higher molar extinction coefficient.
Excitation of an electron from a bonding or non-bonding orbital into an anti-bonding orbital reduces the bond order, and will ‘kink’ aromatic systems.
1.3 Short conceptual question - intensity of colour
- What factors influence the ‘intensity of colour’ of the following solutions?
CuSO4 in solution forms the hexa aqua complex listed in figure 1.3. This is a centrosymmetric molecule which therefore runs foul of the Laporte selection rule which says that “allowed transitions in centrosymmetric molecules must involve a change in parity”. So either g → u or u → g are allowed, and g → g and u → u are forbidden.
You will not be expected to work out symetry types for orbitals but can ‘back justify’ to explain with this.
These symmetry labels appear on the energy level diagram for CU2+ (figure 1.5).
Both of the split energy levels are gerade (g) and so there is no change of parity for the transition from t2g to eg, therefore the transition is selection rule forbidden and has a low molar extinction coefficient. The ‘breaking of symmetry’ by possible rotamers of the water ligands mean this value is higher than for the gas phase atomic molar absorption coefficient. The maximum molar extinction coefficient of copper sulfate solutions is around 20 M-1 cm-1.
The permanganate (MnO4-) is a ligand to metal charge transfer transition, since excitation of an electron effectively moves an electron from one of the oxygen ligands to the manganese ‘empty’ metal centre there is no limitation from the spin selection rule and the complex is not subject to the Laporte selection rule. This leads to moderate to ‘high’ molar extinction coefficients. The maximum molar extinction coefficient of potassium permanganate solutions is around 1800 M-1 cm-1.
The final molecule is the synthetic dye methylene blue, this is not centrosymmetric and so is not subject to the Laporte selectrion rule, further the structure with fused aromatic rings and a large amount of conjugation is fairly rigid and so there is a large overlap of the wavefunctions of the ground and excited state. The maximum molar extinction coefficient of methylene blue solutions is around 75000 M-1 cm-1.
1.4 Short conceptual question - line width
- Why are some spectra very broad (figure 1.6), whereas others have sharp peaks (figure 1.7)?
You will need to look at the x-scale to truley note the difference in the width of these emission spectra.
We are looking at two very different spectra here, first off we have an atomic transition and a molecular transition. Secondly one is solvated, the other in the gas (or more acurately plasma) phase. Both of these factors are important…
When we have a transition for either absorption or emission then on an atomic level those energy levels are incredibly well defined, this leads to the energy required to promote an electron between these levels to be equally well defined.
As soon as we solvate this the energy of the occupied (HOMO) is softened as intermolecular interactions will stabilise this level to different amounts, solvation may also allow previously absolutely parity forbidden processes to occur.
The molecular spectrum is much broader because each of the possible rotamers, vibratamers and isomers has a slightly different energy, the myriad possible energies are expanded still by solvation and tempeature effects. The more possible structural isomers and rotamers the ‘softer’ any defining features in the spectrum. For example if we compare the rhodamine spectum (figure 1.6) to that of antracene (figure 1.8) we can see that there is more ‘fine structure’ in the anthracene spectrum, this is because of the smaller possible number of structural variations, there are no possible rotamers and so transitions are more defined.
1.5 Short conceptual question - the effect of solvation on absorbance
- Why does the observed colour of ethidium bromide depend upon the solvent (figure 1.9))?
Think about the effect of solvation on the energy levels and why those energy levels matter! Remember that if light is transmitted through a solution that is the colour we observe…
This is in essence answering the same question as in question 1.4, solvation affects the energy levels of occupied orbitals.WIthout going into any more detail than essential the different solvents stabilise the HOMO of ethidium bromide different amounts - this is likely due to different hydrogen bonding of the alchols. The more stabilised the ground state the bigger the energy gap leading to a blue shift in the absorption spectra. The orange solution is absorbing blue light (λmax = 480 nm) and the purple solution absorbing orange (λmax = 550 nm) indicating the energy gap of the aquous solution is larger and therefore the solvent stabilisation is biggest.
It is worth noting that the energy of ‘empty’ orbitals is unaffected and so the energy of the LUMO is unchanged (figure 1.10).
1.6 Extended question - Azobenzene
Azobenzene undergoes the following cis-trans isomerisation, the isomerisation occurs in the ps timescale.
- Why would you expect the absorption spectrum of each isomer to be different?
Trans azobenzene is centrosymmetric and so is subject to the Laporte selection rule, cis azobenzene is non-centrosymmetric and so it is not parity forbidden. Consequently the HOMO-LUMO transition which is allowed for the cis is forbidden for the trans and so the absorbance spectra is different.
- Suggest why the trans conformation is more stable than the cis isomer.
Steric hinderance will mean that the cis-isomer is not planar, if it isn’t planar it isn’t fully conjugated, and if it isn’t fully conjugated it isn’t as stable. There is no steric hinderance in the trans isomer.
- Use the following data to predict the proportion of each isomer under 360 nm excitation.
Table: (#tab:azobenzeneabs) The molar extinction coefficient of the two isomers of azobenzene.
| ε360 / M−1 cm−1 | ε460 / M−1 cm−1 | |
|---|---|---|
| trans-azobenzene | 22000 | 4500 |
| cis-azobenzene | 2100 | 5500 |
For the photostationary state the absorbance of the two isomers will be the same.
The excited state for both molecules will be the same, and the probability of the excited state decaying into any given isomer is the same.
So if \(A =\varepsilon cl\) and \(A_{trans}=A_{cis}\) then at 360 nm:
\[\begin{equation*} \varepsilon_{trans} c_{trans} = \varepsilon_{cis} c_{cis} \end{equation*}\]
\(c_{trans}= 0.095 c_{cis}\)
- Would there be more or less trans azobenzene at 460 nm? Justify your answer.
There would be more trans at the photostationary state when excited at 460 nm, this is because the relative ration of molar extinction coefficients favors formation of more of the trans isomer.
- It has been suggested the 360 nm absorption is an S0 → S2 absorption, and the 460 nm band is an S0 → S1 absorption. Suggest which energy levels are involved for each of the two transitions and compare it to stilbene which has a similar structure, but the cis and trans absorptions are 280 & 295 nm respectively.
Azobenzene has \(n\), \(\pi\) and \(\pi^*\) orbitals whereas stilbene only has \(\pi\) and \(\pi^*\) orbitals. Given the different orbital types available in azobenzene the expectation that the transitions will have a wider energy spacing than in stilbene where we just have the bonding and antibonding \(pi\) set, and so we would expect these energy levels to be more closely spaced.
I’m leaving you hanging on this one we will discuss it again next week.


Creating a Standalone Metadata File
Although primarily a content package editor, the RELOAD Editor incorporates a fully fledged metadata editor and can be used to create and view metadata files which are independent of content.
To create a new Metadata file, Click File, New > IMS 1.2.2 Metadata File. A new blank metadata file is created and you can choose the desired application profile by clicking on the drop-down list.
Add Metadata as before using the form view or tree view (or a combination) until all necessary entries have been completed. Then click File, Save As ... to open the Save dialog box. Enter a filename, and retain the .xml suffix. Save the file somewhere convenient. You can view the file in a web browser, where you will see that it is a valid IMS Metadata v1.2.2 record.


Landing page for all things Jade Studios
© Jade Studios  |
HTML5 UP
Youtube
Github
Minecraft Showcase


System Architect Picture "Phenomenon Under Heading"
Parent Diagram:
Subject Phenomenon
(OMT Object Model)


Github Board Refined 💜
Improving your workflow experience.
By clicking
Save
, your token would be saved locally and sync automatically by the browser. Please, create a token with read/write permission from
here
for high rate API calls and private repos.


Welcome to Bluge Labs, an organization focused on supporting high-quality search software for Go. Bluge Labs is made possible by our sponsors. These supporters recognize the value of these projects, and work together with Bluge Labs to ensure their future.


Track your licence
Tracking number
{{ token }}
Your licence is on its way.
It should be with you today or tomorrow.
History
| Time | Status |
|---|---|
| Today – 6:45am | Romford RMA – Out for delivery |
| Yesterday – 5:11pm | Swansea Depot – Transfer |
| Yesterday – 3:01pm | Swansea Depot – Received |
| Yesterday – 9:20am | DVLA – Printing |


A file upload.
Protected Properties | |
| string | $path |
| The temporary path. More... | |
| string | $remoteName |
| The client's name for the file. More... | |
| int | $status |
| The upload's "error" code. More... | |
Public Methods | |
| __construct (int $status, string $remoteName, string $path) | |
| null HttpError | getError () |
| Generates and returns an HttpError if the status indicates one took place. More... | |
| string | getPath () |
| string | getRemoteName () |
| int | getSize () |
| int | getStatus () |
| string | getType () |
| $this | move (string $path) |
|
protected |
The temporary path.
|
protected |
The client's name for the file.
|
protected |
The upload's "error" code.
| __construct | ( | int | $status, |
| string | $remoteName, | ||
| string | $path | ||
| ) |
| int | $status | |
| string | $remoteName | |
| string | $path |
| null HttpError getError | ( | ) |
Generates and returns an HttpError if the status indicates one took place.
|
final |
|
final |
|
final |
|
final |
|
final |
| $this move | ( | string | $path | ) |
| string | $path |


|
AnyCollect
1.1.2
|
This project aims to collect metrics by reading files or executing commands, and parsing their contents/outputs with regular expressions. It is designed to work with Snap Telemetry.
This repo is organized as the following:
The Snap plugins require a special version of the C++ Snap plugin library.
Refer to USAGE.md for more information on how to use these programs.
AnyCollect's documentation is available on GitHub pages.
All OSs currently supported by plugin:
A C++ 17 compiler such as GCC 7 is required.
The libraries and standalone interfaces do not have additional dependencies. The Snap plugin interface requires the C++ Snap plugin library and its dependencies, which should be installed on the system first. AnyCollect uses static linking of those libraries for the programs to be portable.
Refer to the DEPENDENCIES.md file for more information.
If the Snap and its dependencies are built in the /usr/local/lib
, execute ldconfig /usr/local/lib/
to allow the ld
linker to look for installed libraries there.
Then you can compile with CMake:
Other build configured types are Debug
, Release
, and RelWithDebInfo
(to profile with Linux Perf or GPerfTools).
The buildall.sh
script can be used to build AnyCollect Snap Plugin library and its dependencies automatically. It can either download the dependencies from GitHub or use local ones in the third_party
folder.
Refer to USAGE.md. Please be careful about the metric instantiation rules detailed in this usage file.
The documentation can be built with Doxygen from the build
directory. It is installed in doc/html
.
This repository is one of many plugins in Snap, a powerful telemetry framework. The full project is at http://github.com/intelsdi-x/snap. To reach out on other use cases, visit Slack.
Snap, along with this plugin, is an Open Source software released under the Apache 2.0 [License](LICENSE).


--- layout: post title: Playful interaction and goal-oriented gaming explored through media arts practice date: 2006-07-17 00:00:00 categories: digital-media interfaces-&-interaction play ---
Playful interaction and goal-oriented gaming explored through media arts practice: "Game/Play is a networked national touring exhibition focusing on the rhetorical constructs game and play. This collaboration between Q Arts, Derby and HTTP Gallery, London provides a basis for exchange and interaction between audiences, artists, curators and writers through the exhibitions and networked activity."


Here you will find a little more about me and the projects I'm working on.
Creative, hard worker and reliable individual looking for a challenging position where I could improve myself and grow as a professional. I am studying Computer Science with specialization in Administrative Data Processing at College LaSalle. I work effectively in teams and I am diplomatic and tactful with both professionals and nonprofessionals.
I fell that I found myself in the programming area, and I really love to work on new projects. I have a problem-solving mindset, and solving issues is what gives me the most joy. Thankfully, programming is plenty of those.
Podcasts are part of my daily routine. Everytime I'm not working or studying, I will probably have my headphones on, listening to something new. I believe it is one of the main medias for communication, and specially useful for anyone with a busy schedule to keep updated.
I've been sedentary for the most part of my life, only getting into exercising in my adult life. Now I can't stay much time without going to the gym. My favorite exercise is boxing, as it is a complex sport which improves the body and the mind.
I'm very passionate about music. I play different instruments and have played with bands in the past. I like to listen to differennt genres and recently got interested in music production. My goal is to have a home studio in a near future.


All your favorite services in one site
Franz allows you to add each service many times. This makes Franz the perfect tool to manage multiple business and private accounts all at the same time. You could even use five different Facebook Messenger accounts at once, if some inexplicable reason urges you to do so.
Franz supports a great variety of business and private messaging & chat services like Slack, WhatsApp, WeChat, Messenger, Telegram, Google Hangouts, Skype, Zendesk and many more
Franz allows you to add each service many times. This makes Franz the perfect tool to manage multiple business and private accounts all at the same time. You could even use five different Facebook Messenger accounts at once, if some inexplicable reason urges you to do so.
Franz supports a great variety of business and private messaging & chat services like Slack, WhatsApp, WeChat, Messenger, Telegram, Google Hangouts, Skype, Zendesk and many more


Please enter a valid age
Dating is not important for a person your age, focus on your studies
Congratulations! Your celebrity match was Channing Tattum due to your shared interests
Congratulations! Your celebrity match was Margot Robbie due to you shared interests


Build: 20160822
Points: 0
X
Help and Controls
Mouse Controls
- Left mouse drag -- Rotate camera
- Right mouse drag -- Move camera focus
- Middle mouse drag -- Zoom camera
Touchpad Controls
- Left mouse drag -- Rotate camera
- Shift + Left mouse -- Pan camera
- Ctrl + Left mouse -- Zoom camera
Touch Controls
- Single finger drag -- Rotate camera
- Two finger drag -- Pan camera
- Two finger pinch -- Zoom camera
Options
- Toggle Grid -- Displays a grid on the ground plane
- Reset Camera -- Resets the camera to the initial position
- Save View -- Saves an image of the current view
- Help -- This window
- Show Metadata -- Toggles display of segmented metada (if present)


Issue 596
Ubiquity XForms doesn't load correctly in Internet Explorer 8 standards mode
You should see the text 'TEST PASSED' in the result field.
Result:


One Million Arab Coders Forums
Members
Profile
About
Contact
Create New post
Title
Edit
Delete
{% for post in posts %}
{{post.title}}
edit
delete
{% endfor %}


|
|||||||||
| PREV NEXT | FRAMES NO FRAMES |
Map
holding the actual data.
Matcher
that checks whether the document text for two annotations
is identical.Tagger
instance is used for.
RelationSet
used to store the data produced by this
co-referencer.
Matcher
that checks whether the text of one annotation is the
initials of another (e.g.Tagger
that uses the initials of a multi-word capitalised text as a
tag (International Business Machines -> {IBM, I.B.M.}).Pattern
used to identify abbreviations based on initials (e.g.
Utils.MWE_UPPER_INITIAL_PATTERN
, this
method returns the initials for constituent words of the multi-word
expression.
Utils.MWE_UPPER_INITIAL_PATTERN
.
Relation
s-based model to the old format ("matches"
annotation and document features).Matcher
that modifies the behaviour of an existing
Matcher
- the delegate (provided at construction time).
|
|||||||||
| PREV NEXT | FRAMES NO FRAMES |


Software Engineer
A little boy who loves coding, photographing, learning and living his style.
Faculty of Science
Kasetsart University Bangkhen campus
Bangkok, Thailand
Facgure Co., Ltd.
Phrayathai, Bangkok, Thailand
Now - Food delivery
Sea Thailand(Garena)
24th Floor, AIA Capital Center Ratchada, Bangkok, Thailand


object Args
Singleton class that contains helpful methods that create arguments used constantly by the SDK.
fun createPositionJson(latitude: Float, longitude: Float): String
Creates a Json string where the lat field has the value latitude and the lng field has the longitude value. |


View the slides at gdila.org/js201.
Wifi network: Opodz Members
Wifi password: opodz888
Girl Develop It is here to provide affordable and accessible programs to learn software through mentorship and hands-on instruction.
Some "rules"
Access the slides and follow along here:
Let's get set up to write and test a little JavaScript. Make a folder called gdi
. Inside, make an HTML page called index.html
and a JavaScript file called mycode.js
. Then set up your index.html
file like this:
<!DOCTYPE html>

<meta chartset="UTF-8"/>
<title>Test Page</title>

This is my awesome JavaScript code.

A variable is a place to store values
Review:
The scope of a variable is how long the computer will remember it.
function func() {
var local = true;
console.log(local);
};
func();
console.log(local);
var global = "I'm available everywhere!";
function func() {
var local = "I'm available inside this function.";
console.log(local, global);
};
func();
console.log(global);
Be careful to properly declare and initialize your variables to avoid unexpected global scope.
var global = "I'm available everywhere.";
function func() {
local = "I'm available everywhere, too!";
};
func();
console.log(local);
var g = "global";
function go() {
var l = "local";
var g = "in here!";
console.log(g + " inside go()");
}
go();
alert(g + " outside go()");
Questions about variables, scope, or precedence?
var coolClasses = ['HTML 101', 'HTML 201', 'JS 101', 'JS 201'];
var classes = [];
classes[0] = 'HTML 101';
classes[1] = 'HTML 201';
classes.push('JS 101');
We can also use the new
keyword to create a new array:
var classes = new Array();
var classes = ['HTML 101', 'HTML 201', 'JS 101', 'JS 201'];
var firstClass = classes[0];
var lastClass = classes[3];
The pop()
method removes the last item from the array and returns it
var classes = ['HTML 101', 'HTML 201', 'JS 101', 'JS 201'];
console.log(classes);
var removed = classes.pop();
console.log(classes);
console.log(removed);
var classes = ['HTML 101', 'HTML 201', 'JS 101', 'JS 201'];
var i = 0;
console.log(classes[i]); // What will this display?
console.log(classes[1]; // What will this display?
console.log(classes.pop()); // What will this display?
console.log(classes.length); // what will this display?
var classes = ['HTML 101', 'HTML 201', 'JS 101', 'JS 201'];
for(var i = 0; i < classes.length; i++) {
console.log(classes[i]); // What will this display?
}
Starting with this array:
var noisesArray = ["quack", "sneeze", "boom"];
Output “quack! sneeze! boom!
” to the console.
join()
method of arraysConverts an array to a string.
Takes a single argument - the string that should separate the individual items.
array.join()
var classes = ['HTML 101', 'HTML 201', 'JS 101', 'JS 201'];
console.log(classes.join());
console.log(classes.join(', '));
console.log(classes.join(' + '));
console.log(classes.join(''));
Starting with this array:
var noisesArray = ["quack", "sneeze", "boom"];
Output “quack! sneeze! boom!
” to the console.
filter()
method of arraysvar numbers = [12, 5, 8, 44, 53, 130, 44, 4];
function isBigEnough(element) {
return element >= 10;
}
var bigNumbers = numbers.filter(isBigEnough);
console.log(numbers);
console.log(bigNumbers);
The filter()
method creates a new array with all elements that pass the test implemented by the provided function.
filter()
The filter()
method requires one argument - a callback function that returns a Boolean
If the function returns true, the item is added to the new array.
var numbers = [12, 5, 8, 44, 53, 130, 44, 4];
function isBigEnough(element) {
return element >= 10;
}
var bigNumbers = numbers.filter(isBigEnough);
The filter()
callback function can take up to three arguments. They are: element
, index
, and array
Given this array:
var cats = [
{ name: "Maru", status: "hungry" },
{ name: "Hana", status: "playful" },
{ name: "Lil Bub", status: "sleepy" },
{ name: "Grumpy Cat", status: "hungry" }
];
Filter the array to create a new array of just the cats who are hungry.
map()
method of arraysThe map()
method creates a new array with the results of calling a function on each item in the array.
map()
The map()
method requires one argument - a callback function that takes an item from the current array and returns an item that will be included in the new array.
var numbers = [57, 12, 13, 5, 143, 8, 17, 43];
var numbersPlusFive = numbers.map(function(num){
return num + 5;
});
console.log(numbers);
console.log(numbersPlusFive);
The map()
callback function can take up to three arguments. They are: element
, index
, and array
Given this array:
var cats = [
{ name: "Maru", status: "hungry" },
{ name: "Hana", status: "playful" },
{ name: "Lil Bub", status: "sleepy" },
{ name: "Grumpy Cat", status: "hungry" }
];
Use the map()
method to create a new array of strings representing the cats names. Like this:
var catNames = ["Maru", "Hana", "Lil Bub", "Grumpy Cat"];
Questions about join()
, filter()
, or map()
before we move on?
var ollieTheCat = {
furColor: 'gray',
age: 1,
personality: 'wild',
likes: ['catnip', 'food', 'naps', 'cuddles', 'attention'],
adopted: {
month: 'february',
day: '11',
year: '2015'
}
};
So far, we've learned how to create an object by doing this:
var ollieTheCat = {};
Or by doing this:
var ollieTheCat = {
furColor: 'gray',
age: 1
};
These are called object literals - a pair of curly braces with 0 or more property/value pairs.
new
keywordWe can also create new objects by using the new
keyword, like this:
var ollieTheCat = new Object();
We can assign properties inside an object literal:
var ollieTheCat = {
furColor: 'gray'
};
or by using dot notation:
var ollieTheCat = {};
ollieTheCat.furColor = 'gray';
or by using bracket notation:
var ollieTheCat = new Object();
ollieTheCat['furColor'] = 'gray';
We can access properties with dot notation:
var furVariable = ollieTheCat.furColor;
...or we can use bracket notation:
var furVariable = ollieTheCat['furColor'];
Given an object:
var ollieTheCat = {
furColor: 'gray',
age: 1
};
We can change the value of a property with dot notation:
ollieTheCat.furColor = 'hot pink';
...or we can change the value with bracket notation:
ollieTheCat['furColor'] = 'hot pink';
We can also use variables to store references to property names
var ollieTheCat = {
furColor: 'gray'
};
var keyVariable = 'furColor';
console.log(ollieTheCat[keyVariable]);
Note that you can only use variables with bracket notation.
Create an animal object, and define these properties on it:
name
- a stringdescription
- a stringnoises
- an array of stringsvar myCats = [
{ name: 'Ollie', age: 1, furColor: 'gray' },
{ name: 'Mabel', age: 6, furColor: 'gray' }
];
What would be the result?
console.log(myCats[0].name);
console.log(myCats[1]furColor);
console.log(myCats[1]["Fur Color"]);
var zoo = {
birds: 3,
bears: 5,
cats: 12
};
for(var key in zoo) {
console.log(zoo[key] + ' ' + key);
}
var doll = {
size: 'large',
innerDoll: { size: 'medium'}
};
doll.innerDoll.innerDoll = {size: 'small'};
console.log(doll);
Start with your array of animals from the previous exercise.
Add an outfit
property to each animal, which contains an object that describes different parts of their outfit, for example, shirt: "blue"
.
Log out the outfit of each animal to make sure it worked.
Bonus: Modify your loop from the last exercise to include the animal's outfit in the output, e.g. "Daffy Duck is wearing blue pants and a white shirt."
Questions on objects before we move on?


{{ _('Are you sure you want to delete the {group} group avatar?')|f(group=profile.group.name) }} {% csrf_token %} {% trans %} You are about to permanently delete the avatar. This cannot be undone! You can always upload another avatar to replace the current one. {% endtrans %} {{ _('Cancel') }}


Vote summary
Thank you for voting in the {{ballot.name_text}} ballot. A summary of your votes is below:
{% for s in summary %}
Question: {{ s.0 }}
{% endfor %}
{% if closed %}
This ballot has closed - no further votes can be cast. Thank you for casting your vote.
{% else %}
If you wish to change your vote, please click here to vote again. Note that only your most recent vote will be recorded.
If you are satisfied with your vote you can close this webpage. Thank you for casting your vote.
{% endif %}


Types of containers
Linux distributions
Alpine Linux
Debian
Basic containers
Basic container
Python 3
NodeJS
LAMP (Apache, SQLite3, PHP)
Net tools
Container products / applications
icom Data Suite (iDS)
AnyViz Cloud Adapter
Node-RED
Software Development Kit (SDK)
Scripts to create your own container
Containers for INSYS icom OS devices
INSYS icom OS devices can run LXC containers, which can add a lot of functionality!
Send your questions, wishes, bug reports or ideas to<EMAIL_ADDRESS>Types of containers
To get to your own container with your functionality, there are at least three entry levels:
Use a complete distribution
There are containers with Alpine Linux and Debian. These are perfect for fast prototyping or a PoC (Proof of Concept), because you get results very fast by using the provided package managers (apk, apt). The disadvantage is, that these containers get huge very fast because of all the dependencies of the pre compiled packages.
Use a basic container
This is a good option in case you want to implement scripts in one of the offered interpreted programming languages (e.g. Python, NodeJS, ash, PHP), where no compiler is needed. You can even develop within the running container on the device. This is a good compromise between container size and functionality. A disadvantage of this option is, that you do not have control over the basic container, so it could be problematic to add further packets or modules or update the interpreter and its lib.
Create your own container
This is the developers choice: Install the SDK (as Docker or LXC container), clone the prepared build scripts and create the containers from scratch. This is also the way, how the basic containers are created. Creating containers with this means:
- the resulting containers will have a minimal footprint
- you are in charge of every single bit that gets included
- you can reproduce the build of an container
- this could be automated by integrating these scripts into your CI/CD pipeline
- updating the individual components is easy
- most likely this will create the most stable and secure containers: What's not included, can't break - what's not running, can't get hacked
Alpine Linux
Download: Alpine.tar
An Alpine Linux container with only an SSH server for login.
Alpine Linux uses musl as standard C library instead of glibc, which most of the time leads to smaller binaries. The SDK doesn't support musl, so it's not possible to use it to cross compile applications for Alpine Linux.
Alpine Linux does have a huge catalogue of precompiled applications and libraries. Use the included package managing tool "apk" for updating, upgrading and installing additional packages, so this container fits when you want to run standard software, e.g. Node-RED or a minetest server.
Debian
Download: Debian.tar
A Debian container with only an SSH server for login.
This container might be the easiest way to add functionality due to the huge popularity of Debian. Despite being perfect for quick tests of PoC (Proof of Concept) this comes at the cost of a bit container size, so it isn't recommended to use such containers in a production environment.
Use the included package managing tool "apt" for updating, upgrading and installing additional packages. Before downloading such a container from the device, it's recommended to delete as many files as possible, e.g. all the cached downloaded packages and all the repository information. This data will be outdated anyway and can be replaced with a fresh apt-get upgrade.
Basic container
Download: container_default.tar
A minimal container that brings a SSH server (for login). This container is meant as an example or template for your own containers you want to create with the SDK and the provided scripts. Also use this container for very simple applications, that can be implemented in ash, a minimal shell interpreter included in busybox.
Python 3
Download: container_python3.tar
A minimal container with Python 3 in it. There are already a few modules installed (e.g. requests, certifi, urllib). Additional packages can be installed using the included pip.
LAMP (Linux, Apache, SQLite3, PHP)
Download: container_LAMP.tar
A container with a classic LAMP stack consisting of Linux, Apache web server, SQLite3 data base and PHP. Additionally it uses runit to start/stop processes.
Net tools
Download: container_net-tools.tar
A container with a few net tools like tcpdump, nmap, nping, iperf, openvpn, mosquitto (MQTT broker), httping, curl, iptables, stunnel. Use this container for debugging purposes! You can create a jump host in a remote network, bridge the nets to it and debug from there.
icom Data Suite (iDS)
Download: iDS download site
Product page: https://www.insys-icom.com/
An IoT software, used for alarming and controlling your data with multiple industrial protocols.
AnyViz Cloud Adapter
Download: AnyViz Cloud Adapter (Container)
Documentation: Installation instructions
Product page: https://www.anyviz.io
AnyViz is probably the easiest way to monitor, operate and analyze machine and plant controls remotely.
With the container OPC-UA, Modbus, Siemens, Beckhoff, EtherNet/IP, BACnet and M-Bus devices can be connected to the cloud.
Node-RED
Download: Node-RED.tar
This container is based on Alpine Linux. Add more modules and connectors to it by using npm. Use this guide to install packages with npm, that need a compiler to get installed.
Software Development Kit (SDK)
Download: M3_SDK_LXC.tar.gz
This SDK is just a suggestion, you can use whatever toolchain you prefer!
It contains tools to cross compile code for the armv7 architecture. It's avalable as LXC or Docker container. It is meant to be used in combination with a bunch of scripts, so all the steps to create a container are completely automated.
This SDK comes with no IDE at all, it's meant to be used
- via command line interface (CLI) or
- integrated in your favourite IDE or editor or
- by your CI/CD pipeline
The idea is, that you continue to use all your existing tools on your PC like editors to create the content and applications. The tools within the SDK then are used to do all the necessary cross compiling and packaging, so you get a container.
Here are the first steps to create your own container.
The SDK is a Gentoo Linux without any graphical UI (headless). You can update it and install more packages with the typical Gentoo tools (emerge). In case you have to use a none Linux system, you could create a virtual machine image on your own by downloading the LXC version of the SDK. You would have to add a bootloader and a Linux kernel.
Scripts to create your own container
Having a container is nice, being able to reproduce its build in an automated way is better!
This git repository with scripts can be the foundation of your own container projects. Mount the clone of this repo into your installed SDK and build your first basic container. These scripts will download, check, configue, make, make install and package all necessary software. Use the existing scripts as a template for your own containers.
Hint! Use separate clones of the repos for separate container projects! This allows you to update different containers at different speed. Also this scripts will change over time, when there are updates or new basic containers.


class Rake::PackageTask
Create a packaging task that will package the project into distributable files (e.g zip archive or tar files).
The PackageTask will create the following targets:
:package
-
Create all the requested package files.
:clobber_package
-
Delete all the package files. This target is automatically added to the main clobber target.
:repackage
-
Rebuild the package files from scratch, even if they are not out of date.
"package_dir/name-version.tgz"
-
Create a gzipped tar package (if need_tar is true).
"package_dir/name-version.tar.gz"
-
Create a gzipped tar package (if need_tar_gz is true).
"package_dir/name-version.tar.bz2"
-
Create a bzip2'd tar package (if need_tar_bz2 is true).
"package_dir/name-version.zip"
-
Create a zip package archive (if need_zip is true).
Example:
Rake::PackageTask.new("rake", "1.2.3") do |p| p.need_tar = true p.package_files.include("lib /*.rb") end
Attributes
Name of the package (from the GEM Spec).
True if a gzipped tar file (tgz) should be produced (default is false).
True if a bzip2'd tar file (tar.bz2) should be produced (default is false).
True if a gzipped tar file (tar.gz) should be produced (default is false).
True if a xz'd tar file (tar.xz) should be produced (default is false)
True if a zip file should be produced (default is false)
Directory used to store the package files (default is 'pkg').
List of files to be included in the package.
Tar command for gzipped or bzip2ed archives. The default is 'tar'.
Version of the package (e.g. '1.3.2').
Zip command for zipped archives. The default is 'zip'.
Public Class Methods
Create a Package Task with the given name and
version. Use :noversion
as the version to build a package
without a version or to provide a fully-versioned package name.
# File lib/rake/packagetask.rb, line 86 def initialize(name=nil, version=nil) init(name, version) yield self if block_given? define unless name.nil? end
Public Instance Methods
Create the tasks defined by this task library.
# File lib/rake/packagetask.rb, line 108 def define fail "Version required (or :noversion)" if @version.nil? @version = nil if :noversion == @version desc "Build all the packages" task :package desc "Force a rebuild of the package files" task repackage: [:clobber_package, :package] desc "Remove package products" task :clobber_package do rm_r package_dir rescue nil end task clobber: [:clobber_package] [ [need_tar, tgz_file, "z"], [need_tar_gz, tar_gz_file, "z"], [need_tar_bz2, tar_bz2_file, "j"], [need_tar_xz, tar_xz_file, "J"] ].each do |need, file, flag| if need task package: ["#{package_dir}/#{file}"] file "#{package_dir}/#{file}" => [package_dir_path] + package_files do chdir(package_dir) { sh @tar_command, "#{flag}cvf", file, package_name } end end end if need_zip task package: ["#{package_dir}/#{zip_file}"] file "#{package_dir}/#{zip_file}" => [package_dir_path] + package_files do chdir(package_dir) { sh @zip_command, "-r", zip_file, package_name } end end directory package_dir_path => @package_files do @package_files.each do |fn| f = File.join(package_dir_path, fn) fdir = File.dirname(f) mkdir_p(fdir) unless File.exist?(fdir) if File.directory?(fn) mkdir_p(f) else rm_f f safe_ln(fn, f) end end end self end
Initialization that bypasses the “yield self” and “define” step.
# File lib/rake/packagetask.rb, line 93 def init(name, version) @name = name @version = version @package_files = Rake::FileList.new @package_dir = "pkg" @need_tar = false @need_tar_gz = false @need_tar_bz2 = false @need_tar_xz = false @need_zip = false @tar_command = "tar" @zip_command = "zip" end
The directory this package will be built in
# File lib/rake/packagetask.rb, line 172 def package_dir_path "#{package_dir}/#{package_name}" end
The name of this package
# File lib/rake/packagetask.rb, line 166 def package_name @version ? "#{@name}-#{@version}" : @name end
The package name with .tar.bz2 added
# File lib/rake/packagetask.rb, line 190 def tar_bz2_file "#{package_name}.tar.bz2" end
The package name with .tar.gz added
# File lib/rake/packagetask.rb, line 184 def tar_gz_file "#{package_name}.tar.gz" end
The package name with .tar.xz added
# File lib/rake/packagetask.rb, line 196 def tar_xz_file "#{package_name}.tar.xz" end
The package name with .tgz added
# File lib/rake/packagetask.rb, line 178 def tgz_file "#{package_name}.tgz" end
The package name with .zip added
# File lib/rake/packagetask.rb, line 202 def zip_file "#{package_name}.zip" end


A Magical Evening for the Haas Brothers
Twin brothers Simon and Nikolai Haas were honored during the annual Museum of Arts and Design Ball.
by Kristen TauerThe MAD Ball brought a little more whimsy than usual to Cipriani 42 courtesy of the Haas brothers’ own creations.
Twins Nikolai and Simon Haas were the honorees at this year’s event, and during cocktail hour they were having a magical moment.
 Really quick,” said a man approaching the brothers with a deck of cards in hand. He instructed them to both choose a card and then say the magic words: “Look alike.”
Turning them over, they found a sticker of their own faces atop that of the Kings they had chosen.
“You make every day happy,” added the magician, walking away and leaving the two men in wonder.
“I love this museum,” said Simon Haas. “Craft is very dear to my heart so it’s exactly the right type of place that we want to be associated with, and we’ve been coming here for years. A lot of friends and people who have helped us out are involved in this museum and are going to be here tonight.”
The brothers, who use various materials — including beads and fur — to create colorful and fantastical creatures and worlds, have had a momentous year. And not least because of their recent collaboration with Rihanna and Phaidon, for which they designed various stands (at various price points) for her newly released book. They had illustrated two custom backdrops for the evening, and pieces from their tableware collections served as centerpieces around the room.
“For sure, a lot of people that didn’t know about us now do because of Rihanna — that was such a cool project and I’m obsessed with her, so it was a dream come true,” added Simon Haas. “I think the biggest was [gallerist] Marianne Boesky had us at the Frieze fair in London, and that was a new market for us. I don’t think people knew us and they responded so well to the work, so it gave me a renewed excitement,” he added. “It shows me that I haven’t —” (he paused, thinking of the right sentiment). “That I’m not just buying into my own crap,” he said.
The museum is also making a push to engage with a younger crowd, and Alexander Hankin is heading up the effort as cofounder of the young patrons program.
“I think so much of my generation is going to experience art through our phones, but what’s unique about MAD is, really, it’s a great place for people to go and experience art in process and in real life. And I think nothing compares to seeing it in person,” he said. “My hope with this new group is to really get people out to experience art, interact with artists. We have the Haas brothers tonight, and who’s more fun and interactive?”
“They’re really out of this world with some of their pieces,” said fashion lawyer Elizabeth Kurpis. “They make a room which is more traditional — which is my style — a little more fun but adding in something that’s more contemporary and cheeky.”
(And that was certainly the case for the former bank environment that is Cipriani.)
Design blogger Athena Calderone’s yellow Fendi gown was a natural fit for the illustrated backdrop. “It’s almost outside my comfort zone, but perfectly outside my comfort zone,” she said of her dress; the fashion house had sponsored the event. At another event last week, she met someone special who proved hard to leave behind for the Monday evening event.
“I adopted a puppy yesterday, and it was so challenging to leave him today. I was actually out on my terrace just before I came here in this gorgeous Fendi dress potty training him and teaching him how to sit. It was really sweet,” she said; the call of MAD prevailed.
“Design is at the forefront of everything that I do, art informs everything, design informs everything,” she added. “It’s a really important museum that I just continue to be inspired by.”


GroupBoxLayout
can hide its content. Use the following attributes for this:
collapsable
- if the value is set to true
the component's content can be hidden using
the icons /.collapsed
- if set to true
, component's content will be collapsed immediately after
the screen gets opened. It is used with collapsable="true"
.There is an additional predefined style for group boxes - light
. A group box with this style has only
the top border, as shown in this example.


Errors and trouble shooting¶
BeamScheme has sophisticated error checking and detection. Error messages and warnings are displayed in the Status Bar. During the operation of the program you may encounter a variety of warning and error messages. There are three types of messages.
- Informational: These give details of the programs working. These messages have a grey background. No action is required they are for information only. For example the startup message “BeamScheme initialised correctly’.
- Actional: The program is requiring some kind of response from you. These messages have a yellow background. For example “Click Point A”
- Error: The program has detected an error condition. These messages are displayed with a red background. Some errors will not allow you to continue until the error has been corrected. In this case the area or areas with the error will be highlighted in red.
Some common error messages and their causes are discussed below:
Other errors may from time to time be generated by the operating system. These will generally be in the form of a dialogue box requiring acknowledgement. Please refer to the appropriate documentation and/or contact technical assistance.


I have been a computer and technology hobbiest my whole life. I've always thought that writing code is what I really wanted to do, but, I'm just now getting the opportunity to pursue that dream. I've studied various laguages, technologies, frameworks, and libraries, and I am now seeking a career in Web Development. I'm open to small freelance jobs, internships, or, preferably, an entry-level position as a Junior Developer.
You can find everything I have worked on in my GitHub account, including the files for this website.
Browse my GitHub


The Ninth Gate * * (out of * * * * )
Directed by Roman Polanski. Cast: Johnny Depp, Emmanuelle Seigner, Frank Langella, Lena Olin, Barbara Jefford, Jack Taylor. 2000 - 133 minutes Rated R (for violence, profanity, sex, and nudity). Reviewed by Dustin Putman, March 11, 2000.
"The Ninth Gate," an alleged mystery-thriller from famed, yet controversial, director Roman Polanski (1968's "Rosemary's Baby," 1974's "Chinatown"), is a wildly overlong 133-minutes sludge through well-worn territory and predictable twists and turns, seemingly leading up to a whopper of an ending. But the ending never arrives; the screen just fades to white, then to black, and the credits roll, before you have even seen anything that would make you care one way or the other about the fate of the protagonist and the predicament he is in.
Boris Balkan (Frank Langella), a wealthy collector of Lucifer-themed relics in New York City, hires seedy book dealer Dean Corso (Johnny Depp) for a well-compensated mission: travel to Europe, weed out the other two copies of a treasured, potentially dangerous book he owns, the 17th-century satanic text entitled "The Nine Gates of the Kingdom of Shadows," and investigate which of the three copies is the original. Containing the power to summon the Devil, Corso must work fast to find them, for whoever owns one of the books may very well be plotting the end of the world.
Based on the novel, "El Club Dumas," by Arturo Perez-Reverte, "The Ninth Gate" drags out its only somewhat intriguing investigation to ridiculous lengths, slowly--and I mean slowly--moving from one scene to the next. It is only in retrospect that you realize just how superfluous much of the film is, as Corso learns very little throughout, and is so dense that the viewer always knows more than he does (which isn't much to know, to begin with). Following an appropriately deliberate prologue and a superbly realized and entrancing opening credits sequence, with a memorably sumptuous music score by Wojciech Kilar, the film goes straight into downtime, and stays there for over an hour, treading through tedious scenes of meaningless exposition that don't get Corso anywhere further in his search.
The second hour of the film picks up considerably, as you finally are treated to scenes that incredibly seem to be leading somewhere, even when they aren't. There are a few chase sequences placed within the running time to add a little action to the arduous proceedings, and, more effectively, a handful of highly effective and tautly directed setpieces. One late moment that will intentionally be left vague as to not reveal one of the very few disturbing developments, involves Balkan in a dark and atmospheric castle, black clouds forbiddingly looming overhead. All of the striking images the film has to offer, by the way, are thanks to the always-impressive cinematography of Darius Khondji (whose work on 1999's "In Dreams" was snubbed of an Oscar nomination).
For such a world-class filmmaker, Polanski gets little support from his actors, almost all of whom turn in amateurish performances, as if they were performing in their very first movie (which is far from the truth), or had just received the script five minutes prior to when filming commenced (which may be the case, based on the evidence here). Johnny Depp appears to be playing the movie for laughs, and isn't having much fun doing it, while Lena Olin, as the alluring previous owner of one of the books, slinks her way through her scenes and doesn't pay attention to such a thing as "good" acting. Of the major characters, only Emmanuelle Seigner, who happens to be Polanski's younger wife, spices up the goings-on. As a mysterious traveler that keeps running into Corso during his trip, and then finally is revealed to know more about "The Nine Gates" than meets the eye, Seigner adds much-needed life to a picture that, without her and a few select technical credits, would be as dead as a doornail.
"The Ninth Gate" wants to be a horror movie, and Polanski apparently is attempting to recapture the acclaim he received from his first satanic-themed motion picture, "Rosemary's Baby," but he has no such luck. That 1968 classic chiller offered an outstanding performance from Mia Farrow, and was filled with a lumbering sense of dread and fear, two things that are largely absent from "The Ninth Gate."
- Copyright 2000 by Dustin Putman Http://www.young-hollywood.com Http://www.atnzone.com
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


--- layout: feed --- Upcoming Work {% for post in site.categories.upcoming reversed %} {{ post }} {% endfor %}


KANSAS CITY A film review by Scott Renshaw Copyright 1996 Scott Renshaw
Starring: Jennifer Jason Leigh, Miranda Richardson, Harry Belafonte, Michael Murphy, Dermot Mulroney. Screenplay: Robert Altman, Frank Barhydt. Director: Robert Altman. Reviewed by Scott Renshaw.
It is a very risky think Robert Altman is attempting in KANSAS CITY, but then Altman has never shied away from risk. At the height of the Vietnam War, he made the darkly anti-establishment MASH; he turned free-form character study into the brilliant NASHVILLE; he made satires of the very insider worlds of Hollywood film-making (THE PLAYER) and high fashion (READY-TO-WEAR). For the most part, however, those were risks in subject matter. In KANSAS CITY, Altman structures his narrative like an improvisational jazz solo, with a payoff in the final ten minutes that is a real kicker. The question is whether he will have lost his audience in the 100 minutes of riffes which precede it.
KANSAS CITY takes place over the course of two days in the title city in 1934 leading up to municipal elections, beginning with the kidnapping of Carolyn Stilton (Miranda Richardson) by Blondie O'Hara (Jennifer Jason Leigh). Carolyn is the wife of Henry Stilton (Michael Murphy), a local political leader Blondie believes can help her with a serious problem. It seems that her husband Johnny (Dermot Mulroney) made the mistake of robbing a black gambler while wearing blackface, incurring the wrath of black crime boss Seldom Seen (Harry Belafonte), and Blondie wants Henry to do whatever is necessary to orchestrate Johnny's safe release. With the laudanum-addicted Carolyn as her hostage, Blondie moves through every level of Kansas City society, waiting for the word which will bring her Johnny marching home.
Altman has a very specific image of Kansas City he is trying to get across, and he accomplishes that task. It is a city which seems to exist outside of the time, with races mixing in jazz clubs, liquor flowing freely despite Prohibition, prosperity still evidenty despite Depression. It is also a city where the petty corruption of gambling and alcohol exists side by side with the hard-core corruption of the brutal Democratic political machine controlled by Tom Pendergast, and where violence was the real law. The soundtrack crackles with magnificent jazz tracks, a constant underscore to brutatlity, and Altman grounds his story in the city's real history by incorporating Pendergast and a young saxophone player named Charlie Parker (Albert J. Burnes) into the events fo the story.
The product of those elements is a fusion of music, mood and plot in which the latter often gets short shrift. Altman has one of his typically large casts to keep track of, and his shifts back and forth between them seem to have little to do with pacing. The encounters between Seldom Seen and Johnny are basically a series of monologues in which Belafonte's Seldom holds forth with his captive audience on race relations, the media, his beloved jazz music and whatever other issue happens to strike his fancy. Those speeches are far from riveting -- once you get the point that he is "seldom seen and often heard," Seldom's sociological observations simply serve to stall KANSAS CITY. The same is true of a sub-plot involving Charlie Parker and a pregnant teen-ager (Ajia Mignon Johnson) which eventually proves relevant but is largely distracting while you are waiting. Even the ostensible main plot, the relationship between Blondie and Carolyn, is troublesome. For a long time, it seems to be just another example of the kind of film I criticized MANNY & LO for being, a hostage drama in which captor and captive predictably become friends.
Then, just as I was prepared to give KANSAS CITY up for dead, it assaulted me with developments so unexpected that they left me breathless. Suddenly, a performance by Jennifer Jason Leigh which had seemed like just another one of her mannered stabs at imitating 1930s screen actresses made beautiful, terrible sense; suddenly, Miranda Richardson's opium-addled society dame was even funnier and more tragic; suddenly, the Johnny who had been little more than a piece of furniture during Seldom's speeches came to life. After struggling through most of its running time, KANSAS CITY heads for the finish line in a dead sprint. The problem is that by the time Altman begins his kick, he's nearly out of the race. KANSAS CITY's tale of brutal truths beneath glossy surfaces is the polar opposite of most of this summer's fare: it is a film which works far better when you are thinking about it afterwards than it does while you are watching it. I only hope audiences are willing to trust Altman the risk-taker as long as it takes.
On the Renshaw scale of 0 to 10 Kansas City chiefs: 7.
-- Scott Renshaw Stanford University http://www-leland.stanford.edu/~srenshaw
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