AWS::KMS::Key
The AWS::KMS::Key
resource specifies an KMS key in AWS Key Management Service. You can use this resource to create symmetric encryption KMS keys,
asymmetric KMS keys for encryption or signing, and symmetric HMAC KMS keys. You can use
AWS::KMS::Key
to create multi-Region
primary keys of all supported types. To replicate a multi-Region key, use the
AWS::KMS::ReplicaKey
resource.
If you change the value of the KeySpec
, KeyUsage
, or
MultiRegion
properties of an existing KMS key, the update request fails, regardless
of the value of the UpdateReplacePolicy
attribute. This prevents you from accidentally
deleting a KMS key by changing any of its immutable property values.
AWS KMS replaced the term customer master key (CMK) with AWS KMS key and KMS key. The concept has not changed.
You can use symmetric encryption KMS keys to encrypt and decrypt small amounts of data,
but they are more commonly used to generate data keys and data key pairs. You can also use a
symmetric encryption KMS key to encrypt data stored in AWS services that are integrated with AWS KMS
You can use asymmetric KMS keys to encrypt and decrypt data or sign messages and verify
signatures. To create an asymmetric key, you must specify an asymmetric KeySpec
value and a KeyUsage
value. For details, see Asymmetric keys in AWS KMS in the
AWS Key Management Service Developer Guide.
You can use HMAC KMS keys (which are also symmetric keys) to generate and verify
hash-based message authentication codes. To create an HMAC key, you must specify an HMAC
KeySpec
value and a KeyUsage
value of
GENERATE_VERIFY_MAC
. For details, see HMAC keys in AWS KMS in the
AWS Key Management Service Developer Guide.
You can also create symmetric encryption, asymmetric, and HMAC multi-Region primary keys.
To create a multi-Region primary key, set the MultiRegion
property to
true
. For information about multi-Region keys, see Multi-Region keys in AWS KMS in the AWS Key Management Service Developer
Guide.
You cannot use the AWS::KMS::Key
resource to specify a KMS key with imported key
material or a KMS key in a custom key
store.
Regions
AWS KMS CloudFormation resources are available in all Regions in which AWS KMS and AWS CloudFormation are supported.
You can use the AWS::KMS::Key
resource to create and manage all KMS key types that are supported in a Region.
Syntax
To declare this entity in your AWS CloudFormation template, use the following syntax:
JSON
{ "Type" : "AWS::KMS::Key", "Properties" : { "Description" :
String
, "Enabled" :Boolean
, "EnableKeyRotation" :Boolean
, "KeyPolicy" :Json
, "KeySpec" :String
, "KeyUsage" :String
, "MultiRegion" :Boolean
, "PendingWindowInDays" :Integer
, "Tags" :[ Tag, ... ]
} }
YAML
Type: AWS::KMS::Key Properties: Description:
String
Enabled:Boolean
EnableKeyRotation:Boolean
KeyPolicy:Json
KeySpec:String
KeyUsage:String
MultiRegion:Boolean
PendingWindowInDays:Integer
Tags:- Tag
Properties
Description
-
A description of the KMS key. Use a description that helps you to distinguish this KMS key from others in the account, such as its intended use.
Required: No
Type: String
Minimum:
0
Maximum:
8192
Update requires: No interruption
Enabled
-
Specifies whether the KMS key is enabled. Disabled KMS keys cannot be used in cryptographic operations.
When
Enabled
istrue
, the key state of the KMS key isEnabled
. WhenEnabled
isfalse
, the key state of the KMS key isDisabled
. The default value istrue
.The actual key state of the KMS key might be affected by actions taken outside of CloudFormation, such as running the EnableKey, DisableKey, or ScheduleKeyDeletion operations.
For information about the key states of a KMS key, see Key state: Effect on your KMS key in the AWS Key Management Service Developer Guide.
Required: No
Type: Boolean
Update requires: No interruption
EnableKeyRotation
-
Enables automatic rotation of the key material for the specified KMS key. By default, automatic key rotation is not enabled.
AWS KMS supports automatic rotation only for symmetric encryption KMS keys (
KeySpec
=SYMMETRIC_DEFAULT
). For asymmetric KMS keys and HMAC KMS keys, omit theEnableKeyRotation
property or set it tofalse
.To enable automatic key rotation of the key material for a multi-Region KMS key, set
EnableKeyRotation
totrue
on the primary key (created by usingAWS::KMS::Key
). AWS KMS copies the rotation status to all replica keys. For details, see Rotating multi-Region keys in the AWS Key Management Service Developer Guide.When you enable automatic rotation, AWS KMS automatically creates new key material for the KMS key one year after the enable date and every year thereafter. AWS KMS retains all key material until you delete the KMS key. For detailed information about automatic key rotation, see Rotating KMS keys in the AWS Key Management Service Developer Guide.
Required: No
Type: Boolean
Update requires: No interruption
KeyPolicy
-
The key policy that authorizes use of the KMS key. The key policy must conform to the following rules.
-
The key policy must allow the caller to make a subsequent PutKeyPolicy request on the KMS key. This reduces the risk that the KMS key becomes unmanageable. For more information, refer to the scenario in the Default key policy section of the AWS Key Management Service Developer Guide .
-
Each statement in the key policy must contain one or more principals. The principals in the key policy must exist and be visible to AWS KMS. When you create a new AWS principal (for example, an IAM user or role), you might need to enforce a delay before including the new principal in a key policy because the new principal might not be immediately visible to AWS KMS. For more information, see Changes that I make are not always immediately visible in the AWS Identity and Access Management User Guide.
If you are unsure of which policy to use, consider the default key policy. This is the key policy that AWS KMS applies to KMS keys that are created by using the CreateKey API with no specified key policy. It gives the AWS account that owns the key permission to perform all operations on the key. It also allows you write IAM policies to authorize access to the key. For details, see Default key policy in the AWS Key Management Service Developer Guide.
A key policy document can include only the following characters:
-
Printable ASCII characters
-
Printable characters in the Basic Latin and Latin-1 Supplement character set
-
The tab (
\u0009
), line feed (\u000A
), and carriage return (\u000D
) special characters
Minimum:
1
Maximum:
32768
Required: Yes
Type: Json
Update requires: No interruption
-
KeySpec
-
Specifies the type of KMS key to create. The default value,
SYMMETRIC_DEFAULT
, creates a KMS key with a 256-bit symmetric key for encryption and decryption. In China Regions,SYMMETRIC_DEFAULT
creates a 128-bit symmetric key that uses SM4 encryption. You can't change theKeySpec
value after the KMS key is created. For help choosing a key spec for your KMS key, see Choosing a KMS key type in the AWS Key Management Service Developer Guide.The
KeySpec
property determines the type of key material in the KMS key and the algorithms that the KMS key supports. To further restrict the algorithms that can be used with the KMS key, use a condition key in its key policy or IAM policy. For more information, see AWS KMS condition keys in the AWS Key Management Service Developer Guide.Important If you change the value of the
KeySpec
property on an existing KMS key, the update request fails, regardless of the value of theUpdateReplacePolicy
attribute. This prevents you from accidentally deleting a KMS key by changing an immutable property value.Note AWS services that are integrated with AWS KMS
use symmetric encryption KMS keys to protect your data. These services do not support encryption with asymmetric KMS keys. For help determining whether a KMS key is asymmetric, see Identifying asymmetric KMS keys in the AWS Key Management Service Developer Guide. AWS KMS supports the following key specs for KMS keys:
-
Symmetric encryption key (default)
-
SYMMETRIC_DEFAULT
(AES-256-GCM)
-
-
HMAC keys (symmetric)
-
HMAC_224
-
HMAC_256
-
HMAC_384
-
HMAC_512
-
-
Asymmetric RSA key pairs
-
RSA_2048
-
RSA_3072
-
RSA_4096
-
-
Asymmetric NIST-recommended elliptic curve key pairs
-
ECC_NIST_P256
(secp256r1) -
ECC_NIST_P384
(secp384r1) -
ECC_NIST_P521
(secp521r1)
-
-
Other asymmetric elliptic curve key pairs
-
ECC_SECG_P256K1
(secp256k1), commonly used for cryptocurrencies.
-
SM2 key pairs (China Regions only)
SM2
Required: No
Type: String
Allowed values:
ECC_NIST_P256 | ECC_NIST_P384 | ECC_NIST_P521 | ECC_SECG_P256K1 | HMAC_224 | HMAC_256 | HMAC_384 | HMAC_512 | RSA_2048 | RSA_3072 | RSA_4096 | SM2 | SYMMETRIC_DEFAULT
Update requires: Replacement
-
KeyUsage
-
Determines the cryptographic operations for which you can use the KMS key. The default value is
ENCRYPT_DECRYPT
. This property is required for asymmetric KMS keys and HMAC KMS keys. You can't change theKeyUsage
value after the KMS key is created.Important If you change the value of the
KeyUsage
property on an existing KMS key, the update request fails, regardless of the value of theUpdateReplacePolicy
attribute. This prevents you from accidentally deleting a KMS key by changing an immutable property value.Select only one valid value.
-
For symmetric encryption KMS keys, omit the property or specify
ENCRYPT_DECRYPT
. -
For asymmetric KMS keys with RSA key material, specify
ENCRYPT_DECRYPT
orSIGN_VERIFY
. -
For asymmetric KMS keys with ECC key material, specify
SIGN_VERIFY
. -
For asymmetric KMS keys with SM2 (China Regions only) key material, specify
ENCRYPT_DECRYPT
orSIGN_VERIFY
. -
For HMAC KMS keys, specify
GENERATE_VERIFY_MAC
.
Required: No
Type: String
Allowed values:
ENCRYPT_DECRYPT | GENERATE_VERIFY_MAC | SIGN_VERIFY
Update requires: Replacement
-
MultiRegion
-
Creates a multi-Region primary key that you can replicate in other AWS Regions. You can't change the
MultiRegion
value after the KMS key is created.For a list of AWS Regions in which multi-Region keys are supported, see Multi-Region keys in AWS KMS in the AWS Key Management Service Developer Guide.
Important If you change the value of the
MultiRegion
property on an existing KMS key, the update request fails, regardless of the value of theUpdateReplacePolicy
attribute. This prevents you from accidentally deleting a KMS key by changing an immutable property value.For a multi-Region key, set to this property to
true
. For a single-Region key, omit this property or set it tofalse
. The default value isfalse
.Multi-Region keys are an AWS KMS feature that lets you create multiple interoperable KMS keys in different AWS Regions. Because these KMS keys have the same key ID, key material, and other metadata, you can use them to encrypt data in one AWS Region and decrypt it in a different AWS Region without making a cross-Region call or exposing the plaintext data. For more information, see Multi-Region keys in the AWS Key Management Service Developer Guide.
You can create a symmetric encryption, HMAC, or asymmetric multi-Region KMS key, and you can create a multi-Region key with imported key material. However, you cannot create a multi-Region key in a custom key store.
To create a replica of this primary key in a different AWS Region , create an AWS::KMS::ReplicaKey resource in a CloudFormation stack in the replica Region. Specify the key ARN of this primary key.
Required: No
Type: Boolean
Update requires: Replacement
PendingWindowInDays
-
Specifies the number of days in the waiting period before AWS KMS deletes a KMS key that has been removed from a CloudFormation stack. Enter a value between 7 and 30 days. The default value is 30 days.
When you remove a KMS key from a CloudFormation stack, AWS KMS schedules the KMS key for deletion and starts the mandatory waiting period. The
PendingWindowInDays
property determines the length of waiting period. During the waiting period, the key state of KMS key isPending Deletion
orPending Replica Deletion
, which prevents the KMS key from being used in cryptographic operations. When the waiting period expires, AWS KMS permanently deletes the KMS key.AWS KMS will not delete a multi-Region primary key that has replica keys. If you remove a multi-Region primary key from a CloudFormation stack, its key state changes to
PendingReplicaDeletion
so it cannot be replicated or used in cryptographic operations. This state can persist indefinitely. When the last of its replica keys is deleted, the key state of the primary key changes toPendingDeletion
and the waiting period specified byPendingWindowInDays
begins. When this waiting period expires, AWS KMS deletes the primary key. For details, see Deleting multi-Region keys in the AWS Key Management Service Developer Guide.You cannot use a CloudFormation template to cancel deletion of the KMS key after you remove it from the stack, regardless of the waiting period. If you specify a KMS key in your template, even one with the same name, CloudFormation creates a new KMS key. To cancel deletion of a KMS key, use the AWS KMS console or the CancelKeyDeletion operation.
For information about the
Pending Deletion
andPending Replica Deletion
key states, see Key state: Effect on your KMS key in the AWS Key Management Service Developer Guide. For more information about deleting KMS keys, see the ScheduleKeyDeletion operation in the AWS Key Management Service API Reference and Deleting KMS keys in the AWS Key Management Service Developer Guide.Minimum: 7
Maximum: 30
Required: No
Type: Integer
Update requires: No interruption
Tags
-
Assigns one or more tags to the replica key.
Note Tagging or untagging a KMS key can allow or deny permission to the KMS key. For details, see ABAC for AWS KMS in the AWS Key Management Service Developer Guide.
For information about tags in AWS KMS, see Tagging keys in the AWS Key Management Service Developer Guide. For information about tags in CloudFormation, see Tag.
Required: No
Type: List of Tag
Update requires: No interruption
Return values
Ref
When you pass the logical ID of this resource to the intrinsic Ref
function, Ref
returns the key ID, such as
1234abcd-12ab-34cd-56ef-1234567890ab
.
For more information about using the Ref
function, see Ref.
Fn::GetAtt
The Fn::GetAtt
intrinsic function returns a value for a specified attribute of this type. The following are the available attributes and sample return values.
For more information about using the Fn::GetAtt
intrinsic function, see Fn::GetAtt.
Arn
-
The Amazon Resource Name (ARN) of the KMS key, such as
arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
.For information about the key ARN of a KMS key, see Key ARN in the AWS Key Management Service Developer Guide.
KeyId
-
The key ID of the KMS key, such as
1234abcd-12ab-34cd-56ef-1234567890ab
.For information about the key ID of a KMS key, see Key ID in the AWS Key Management Service Developer Guide.
Examples
Create a symmetric encryption KMS key
The following example creates a symmetric encryption KMS key. The key policy for the
KMS key allows Alice
to manage the key and allows Bob
to view
the KMS key and use it in cryptographic operations. It also allows the AWS account (root) full access to the key. This prevents you from losing
control of the key if both Alice
and Bob
are deleted from the
account.
JSON
"myKey": { "Type": "AWS::KMS::Key", "Properties": { "Description": "An example symmetric encryption KMS key", "EnableKeyRotation": true, "PendingWindowInDays": 20, "KeyPolicy": { "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow administration of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Bob" }, "Action": [ "kms:DescribeKey", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext" ], "Resource": "*" } ] } } }
YAML
myKey: Type: 'AWS::KMS::Key' Properties: Description: An example symmetric encryption KMS key EnableKeyRotation: true PendingWindowInDays: 20 KeyPolicy: Version: 2012-10-17 Id: key-default-1 Statement: - Sid: Enable IAM User Permissions Effect: Allow Principal: AWS: 'arn:aws:iam::111122223333:root' Action: 'kms:*' Resource: '*' - Sid: Allow administration of the key Effect: Allow Principal: AWS: 'arn:aws:iam::111122223333:user/Alice' Action: - 'kms:Create*' - 'kms:Describe*' - 'kms:Enable*' - 'kms:List*' - 'kms:Put*' - 'kms:Update*' - 'kms:Revoke*' - 'kms:Disable*' - 'kms:Get*' - 'kms:Delete*' - 'kms:ScheduleKeyDeletion' - 'kms:CancelKeyDeletion' Resource: '*' - Sid: Allow use of the key Effect: Allow Principal: AWS: 'arn:aws:iam::111122223333:user/Bob' Action: - 'kms:DescribeKey' - 'kms:Encrypt' - 'kms:Decrypt' - 'kms:ReEncrypt*' - 'kms:GenerateDataKey' - 'kms:GenerateDataKeyWithoutPlaintext' Resource: '*'
Create a symmetric encryption KMS key with a resource tag
The following example creates a symmetric encryption KMS key with one resource tag.
Tagging or untagging a KMS key can allow or deny permission to the KMS key. For details, see ABAC for AWS KMS in the AWS Key Management Service Developer Guide.
JSON
"myKeyWithTag": { "Type": "AWS::KMS::Key", "Properties": { "KeyPolicy": { "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": { "Fn::Join": [ "", [ "arn:aws:iam::", { "Ref": "AWS::AccountId" }, ":root" ] ] } }, "Action": "kms:*", "Resource": "*" } ] }, "Tags": [ { "Key": { "Ref": "Key" }, "Value": { "Ref": "Value" } } ] }, "Parameters": { "Key": { "Type": "String" }, "Value": { "Type": "String" } } }
YAML
myKeyWithTag: Type: 'AWS::KMS::Key' Properties: KeyPolicy: Version: 2012-10-17 Id: key-default-1 Statement: - Sid: Enable IAM User Permissions Effect: Allow Principal: AWS: !Join - '' - - 'arn:aws:iam::' - !Ref 'AWS::AccountId' - ':root' Action: 'kms:*' Resource: '*' Tags: - Key: !Ref Key Value: !Ref Value Parameters: Key: Type: String Value: Type: String
Create an asymmetric KMS key
The following example creates an RSA asymmetric KMS key for signing and verification. For
an asymmetric KMS key, you must specify KeySpec
and KeyUsage
properties. The EnableKeyRotation
property must be omitted or set to
false
.
JSON
"RSASigningKey": { "Type": "AWS::KMS::Key", "Properties": { "Description": "RSA-3072 asymmetric KMS key for signing and verification", "KeySpec": "RSA_3072", "KeyUsage": "SIGN_VERIFY", "KeyPolicy": { "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow administration of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Admin" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Developer" }, "Action": [ "kms:Sign", "kms:Verify", "kms:DescribeKey" ], "Resource": "*" } ] } } }
YAML
RSASigningKey: Type: 'AWS::KMS::Key' Properties: Description: RSA-3072 asymmetric KMS key for signing and verification KeySpec: RSA_3072 KeyUsage: SIGN_VERIFY KeyPolicy: Version: 2012-10-17 Id: key-default-1 Statement: - Sid: Enable IAM User Permissions Effect: Allow Principal: AWS: 'arn:aws:iam::111122223333:root' Action: 'kms:*' Resource: '*' - Sid: Allow administration of the key Effect: Allow Principal: AWS: 'arn:aws:iam::111122223333:role/Admin' Action: - 'kms:Create*' - 'kms:Describe*' - 'kms:Enable*' - 'kms:List*' - 'kms:Put*' - 'kms:Update*' - 'kms:Revoke*' - 'kms:Disable*' - 'kms:Get*' - 'kms:Delete*' - 'kms:ScheduleKeyDeletion' - 'kms:CancelKeyDeletion' Resource: '*' - Sid: Allow use of the key Effect: Allow Principal: AWS: 'arn:aws:iam::111122223333:role/Developer' Action: - 'kms:Sign' - 'kms:Verify' - 'kms:DescribeKey' Resource: '*'
Create an HMAC KMS key
The following example creates an HMAC KMS key. For
an HMAC KMS key, you must specify an HMAC KeySpec
and the GENERATE_VERIFY_MAC value for the KeyUsage
property. Omit the EnableKeyRotation
property or it set to
false
.
JSON
{ "HMACExampleKey": { "Type": "AWS::KMS::Key", "Properties": { "Description": "HMAC_384 key for tokens", "KeySpec": "HMAC_384", "KeyUsage": "GENERATE_VERIFY_MAC", "KeyPolicy": { "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow administration of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Admin" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/Developer" }, "Action": [ "kms:GenerateMac", "kms:VerifyMac", "kms:DescribeKey" ], "Resource": "*" } ] } } } }
YAML
HMACExampleKey: Type: 'AWS::KMS::Key' Properties: Description: HMAC_384 key for tokens KeySpec: HMAC_384 KeyUsage: GENERATE_VERIFY_MAC KeyPolicy: Version: 2012-10-17 Id: key-default-1 Statement: - Sid: Enable IAM User Permissions Effect: Allow Principal: AWS: 'arn:aws:iam::111122223333:root' Action: 'kms:*' Resource: '*' - Sid: Allow administration of the key Effect: Allow Principal: AWS: 'arn:aws:iam::111122223333:role/Admin' Action: - 'kms:Create*' - 'kms:Describe*' - 'kms:Enable*' - 'kms:List*' - 'kms:Put*' - 'kms:Update*' - 'kms:Revoke*' - 'kms:Disable*' - 'kms:Get*' - 'kms:Delete*' - 'kms:ScheduleKeyDeletion' - 'kms:CancelKeyDeletion' Resource: '*' - Sid: Allow use of the key Effect: Allow Principal: AWS: 'arn:aws:iam::111122223333:role/Developer' Action: - 'kms:GenerateMac' - 'kms:VerifyMac' - 'kms:DescribeKey' Resource: '*'
Create a multi-Region primary key
The following example creates a multi-Region primary key. This example key is a symmetric encryption KMS key, but you can create multi-Region versions of asymmetric KMS keys and HMAC KMS keys.
Multi-Region keys are an AWS KMS feature that lets you create multiple interoperable KMS keys in different AWS Regions. Because these KMS keys have the same key ID, key material, and other metadata, you can use them to encrypt data in one AWS Region and decrypt it in a different AWS Region without making a cross-Region call or exposing the plaintext data. For more information, see Multi-Region keys in the AWS Key Management Service Developer Guide.
To replicate this primary key into a different AWS Region, use the AWS::KMS::ReplicaKey CloudFormation resource.
JSON
"myPrimaryKey": { "Type": "AWS::KMS::Key", "Properties": { "Description": "An example multi-Region primary key", "MultiRegion": true, "EnableKeyRotation": true, "PendingWindowInDays": 10, "KeyPolicy": { "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow administration of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": [ "kms:ReplicateKey", "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Bob" }, "Action": [ "kms:DescribeKey", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey", "kms:GenerateDataKeyWithoutPlaintext" ], "Resource": "*" } ] } } }
YAML
myPrimaryKey: Type: 'AWS::KMS::Key' Properties: Description: An example multi-Region primary key MultiRegion: true EnableKeyRotation: true PendingWindowInDays: 10 KeyPolicy: Version: 2012-10-17 Id: key-default-1 Statement: - Sid: Enable IAM User Permissions Effect: Allow Principal: AWS: 'arn:aws:iam::111122223333:root' Action: 'kms:*' Resource: '*' - Sid: Allow administration of the key Effect: Allow Principal: AWS: 'arn:aws:iam::111122223333:user/Alice' Action: - 'kms:ReplicateKey' - 'kms:Create*' - 'kms:Describe*' - 'kms:Enable*' - 'kms:List*' - 'kms:Put*' - 'kms:Update*' - 'kms:Revoke*' - 'kms:Disable*' - 'kms:Get*' - 'kms:Delete*' - 'kms:ScheduleKeyDeletion' - 'kms:CancelKeyDeletion' Resource: '*' - Sid: Allow use of the key Effect: Allow Principal: AWS: 'arn:aws:iam::111122223333:user/Bob' Action: - 'kms:DescribeKey' - 'kms:Encrypt' - 'kms:Decrypt' - 'kms:ReEncrypt*' - 'kms:GenerateDataKey' - 'kms:GenerateDataKeyWithoutPlaintext' Resource: '*'
See also
-
AWS KMS keys in the AWS Key Management Service Developer Guide.
-
CreateKey in the AWS Key Management Service API Reference.
-
Creating keys in the AWS Key Management Service Developer Guide.
-
Creating asymmetric KMS keys in the AWS Key Management Service Developer Guide.
-
Creating HMAC KMS keys in the AWS Key Management Service Developer Guide.
-
Creating multi-Region primary keys in the AWS Key Management Service Developer Guide.


| Test Case | FINISH-0030 |
| Title | When a podcast completes, the play menu becomes dormant |
| Objective | This test case is intended to verify the following implied or specified requirements:
Letting the podcast play to completion should cause the app to revert to the initial display menu. |
| Setup |
|
| Actions |
|
| Expected | When the podcast completes, the play menu will become dormant and pressing the back key will present the play list. |
| Results | PASSED |
| Cleanup |
|
| Requirements | SFWIAUDIO-PR-FINISHED-015 |


--- layout: post title: DDD eXchange date: 2010-02-19 19:57:01.000000000 -07:00 type: post published: true status: publish categories: - News tags: [] meta: _gcid: '174' _gcuser: Vladimir Gitlevich content_type: announcement Date(s): '2010-06-11T00:00:00' Summary: '2' Link: http://skillsmatter.com/event/design-architecture/ddd-exchange-2010/zx-680 Location: '2' _bitly_trim: http://dddcommunity.org/?p=85 author: login: Vladimir Gitlevich email<EMAIL_ADDRESS>display_name: Vladimir Gitlevich first_name: Vladimir Gitlevich last_name: '' ---
DDD eXchange is an annual event for London's architect community which will provide an informal day of deep technical insight, discussion and demonstration of new ideas, techniques and practices.
This year's programme will feature leading thinkers and architects who will share their experience with using DDD in practice. Eric Evans has kindly agreed to be the Programme Lead, and is currently working with some other leading experts on an interesting and exciting set of talks! Lunch and drinks will be provided. £25 if booked before Feb 28.


|
-
September 15th, 2009, 09:29 AM
#1
java error
Hi im trying to check if n is an integer if not i would show an error msg and alert the user to input an integer number again. I tried to use if (n%1==0) but whenever i type a number like 45.2 i would get an error.
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at P2.main(P2.java:8)
Why is this so?? why dosent it go to the else statement and prompt the user to reenter the number.
Code:
import java.util.Scanner;
class test {
public static void main(String[] args) {
Scanner cc= new Scanner(System.in);
System.out.println("Enter a number:");
int n = cc.nextInt();
do{
if (n%1==0){
System.out.println( times( n ) );
System.out.println("\nEnter the next number:");
n = cc.nextInt();
}
else if (n%1!=0) {
System.out.println("\nEnter a number:");
n = cc.nextInt();}
}//end do
while(n != -1);
System.out.println("Program Terminated");
}//end while
public static int times( int n )
{
return n * n;
}//end times
}//end class
-
September 15th, 2009, 09:41 AM
#2
-
September 15th, 2009, 09:46 AM
#3
Re: java error
Yes. I understand, so how can i do a check on my codes to allow user to input again upon a float being typed in.
-
September 15th, 2009, 09:53 AM
#4
Re: java error
Originally Posted by hugo84
Yes. I understand, so how can i do a check on my codes to allow user to input again upon a float being typed in.
use try-catch..
Code:
try
{
.....
}
catch ( InputMismatchException inputMismatchException )
{
....
}
Please use code tags like this :
Code Your Dreams
-
September 15th, 2009, 10:07 AM
#5
Re: java error
This is what i did. But it doesnt allow me to continue the program for user to input again. it just ends there with the error.
Code:
do{
try{
System.out.println( times( n ) );
System.out.println("\nEnter the next number:");
n = cc.nextInt();
}
catch ( InputMismatchException inputMismatchException ) {
System.out.println("\nError enter number again:");
n = cc.nextInt();
}
}//end do
while(n != -1);
System.out.println("Program Terminated");
}//end while
-
September 15th, 2009, 10:08 AM
#6
-
September 15th, 2009, 10:23 AM
#7
Re: java error
Hmm.. Dosent work the program will print wrong entry and terminate. What i wanted was the user keep inputting another value until sentinel reaches -1. I want it to prompt wrong entry and for the user to input another value again.
-
September 15th, 2009, 11:30 AM
#8
Re: java error
Put the 'try...catch' inside the 'do' loop. Put cc.next() in the 'catch' block to clear the invalid input. Remove all the duplicate n = cc.nextInt() lines from inside the loop and replace them with a single one just before the end of the loop (i.e. after the end of the 'catch' block).
Think about what you've written. n % 1 == 0 is a pointless arithmetic expression which will always be true when n is an int, because n % 1 will always be 0.
Experience is a poor teacher: it gives its tests before it teaches its lessons...
Anon.
Last edited by dlorde; September 15th, 2009 at 11:35 AM.
Please use [CODE]...your code here...[/CODE] tags when posting code. If you get an error, please post the full error message and stack trace, if present.
-
September 15th, 2009, 11:52 AM
#9
Re: java error
Originally Posted by dlorde
Put the 'try...catch' inside the 'do' loop. Put cc.next() in the 'catch' block to clear the invalid input. Remove all the duplicate n = cc.nextInt() lines from inside the loop and replace them with a single one just before the end of the loop (i.e. after the end of the 'catch' block).
Think about what you've written. n % 1 == 0 is a pointless arithmetic expression which will always be true when n is an int, because n % 1 will always be 0.
Experience is a poor teacher: it gives its tests before it teaches its lessons...
Anon.
hmm. Ur right. This is what i changed to according to ur specs. Hmm im still getting Exception in thread "main" java.util.InputMismatchException errors when i type in a double value eg 43.2
Code:
import java.util.Scanner;
import java.lang.Exception;
class test {
public static void main(String[] args) {
Scanner cc= new Scanner(System.in);
System.out.println("Enter a number:");
int n = sc.nextInt();
do{
try{
System.out.println( times( n ) );
System.out.println("\nEnter the next number:");
// n = cc.nextInt();
}
catch(Exception ex)
{
cc.next();
} n = cc.nextInt();
}//end do
while(n != -1);
}
System.out.println("Program Terminated");
}//end while
public static int times( int n )
{
return n * n;
}//end times
}//end class
-
September 15th, 2009, 11:58 AM
#10
Re: java error
With a Scanner you can check the token before reading it:
Code:
Scanner sc = new Scanner(System.in);
int n;
do {
System.out.append("Enter a number: ");
if (sc.hasNextInt()) {
n = sc.nextInt();
break;
} else {System.out.format("%nERROR: %s is not an integer number!%n%n", sc.nextLine());}
} while (true);
This will loop until the user types an integer number, rejecting strings or other numbers that cannot be read as integer.
Last edited by jcaccia; September 15th, 2009 at 12:03 PM.
-
September 15th, 2009, 12:40 PM
#11
Re: java error
Originally Posted by jcaccia
With a Scanner you can check the token before reading it:
Code:
Scanner sc = new Scanner(System.in);
int n;
do {
System.out.append("Enter a number: ");
if (sc.hasNextInt()) {
n = sc.nextInt();
break;
} else {System.out.format("%nERROR: %s is not an integer number!%n%n", sc.nextLine());}
} while (true);
This will loop until the user types an integer number, rejecting strings or other numbers that cannot be read as integer.
Nice!. 1 Question i did a test and put sc.nextInt() in the else loop.. The output would come out an error mismatch type. WHereas if i put sc.next() or sc.nextLine the error wont appear it will just go to the error msg. Why is this so? why wouldnt sc.nextInt work as usual as well?
is it because if you put sc.nextInt it will expect an INT value only? therefore the error. Whereas when u put sc.next() its a String? so 43.5 would not give an error mismatch?
-
September 15th, 2009, 12:53 PM
#12
Re: java error
Exactly, nextInt() expects to get an integer number, if the next token available is not then it raises the exception, while next() expects a String, so any kind of input is ok.
The difference between next() and nextLine() is that the former will get the next token only and the latter everything to the end of the line.
I originally had next() for the error message, but nextLine() works better. This piece of code needs to be improved a bit to make it work with more than one value in the same line (for instance if the user types "43.5 123"), allowing you to use next() to discard the invlaid input (43.5) and procede to read the next token (123).
-
September 15th, 2009, 02:21 PM
#13
Re: java error
Originally Posted by hugo84
hmm. Ur right. This is what i changed to according to ur specs. Hmm im still getting Exception in thread "main" java.util.InputMismatchException errors when i type in a double value eg 43.2
Yes, I simplified it but didn't finish it because I thought you might like to get it working yourself... OK, declare 'n' before the loop, setting it to 0. Move n = cc.nextInt(); to the start of the loop. Spend some time stepping through the code so you know how it works.
When you use classes you are unfamiliar with, always read the Javadocs to see what they can do and how they should be used. That's what the Javadocs are there for. You'll often find that the writers of the class wanted to do the same thing you want to do, and provided a method to do just that.
The value of a prototype is in the education it gives you, not in the code itself...
A. Cooper
Please use [CODE]...your code here...[/CODE] tags when posting code. If you get an error, please post the full error message and stack trace, if present.
-
September 15th, 2009, 03:42 PM
#14
-
September 16th, 2009, 08:55 AM
#15
Re: java error
Originally Posted by holestary
in my first java year i was saying if loop too..and some of my friends says still.. it may be hard to say correctly after years
lols.. thats my amateur style.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
Featured
|
Bookmarks


How to do well in this course¶
Tip
text Full credit for the original version of this document below goes to Dr. Simon Bates from Physics 117 at UBC-Vancouver.
The material below has been used and adapted with his permission.
Your success in this course depends to a large extent how you approach it, and how you engage with the activities, the materials and each other.
Here, we give you some ideas and advice on how to do well in the course that you might find useful as you embark on the course.
But before that, here are some key ideas about learning that we have used in designing this course activities and assessments:
Learning is a contact sport.
It’s not like watching a good movie, where you can just let it wash over you.
You have to engage to really learn; you have to struggle to learn.
It’s hard, it sometimes won’t make sense and it takes time and persistence.
You might have found learning (and passing exams) pretty easy to this point; university might well be very different.
Memorizing is not learning.
We won’t emphasize memorizing in this course.
Every test you do, you can take in your own notes (we call these ‘open note’ tests).
So more important than remembering every single equation we will use, is knowing when to use which ones, how to use them to solve problems and evaluating if what you’ve calculated makes sense.
Understanding is learning and understanding should be your goal.
Can you explain an idea or a concept from this course to someone else in a way that they will understand it? And some time after you studied it? This is the acid test for learning and it is one reason why we place such a lot of value on interaction and communication with your peers in this course.
We’ll do lots of tests.
Why? Because research shows testing improves learning.
It might seem counterintuitive, but by taking a test, what we recall becomes more recallable in the future.
In a sense, you are practicing what you are going to need to do for the final.
Ingredients for your success¶
Even with all these key ideas about learning, the most important ingredients need to come from you.
Here are some of the things we think you need to think about at the start of the course:
Plan Spend some time thinking about how you are going to plan your work on this course.
It requires you to schedule 2-3 hours per week of self-study and outside-class time for pre-reading and practice.
Just turning up to lecture and tutorials will not be enough.
Lectures will not present material; they will reinforce and consolidate your understanding of it.
If you have never taken a course like this, you might consider thinking a bit more about how to best prepare for the classes.Prepare Read the material for this weeks pre-reading carefully ahead of the classes that follow.
Don’t skim it, don’t hunt for answers to the quiz; make notes and engage in discussions on Perusall for things you don’t understand.
You need some basic familiarity or fluency with the content before we can make the most of the precious class time we have together.Engage Engage with us, with your peers and yourself.
Be an active learner; participate in face-to-face classes and online – discuss with peers, and ask questions.
Most of all, ask yourself ‘does this make sense?’ If it doesn’t, do something about it!Practice The way we assess most of this course will be on your ability to solve problems; numerical and conceptual ones.
So, solve problems as practice: lots of problems.
If the problems we set you are too easy, make up problems.
Practice not just solving but how to get started on problems.
Work with a problem solving strategy so you don’t have to say ‘I don’t know where to start’Collaborate Your peers are a fantastic resource for your understanding.
Don’t get isolated; form a study group, use Piazza and Perusall, go to the Drop-in sessions.
Try not to fall behind (it’s hard to catch up if you do) but do talk to us if you really are struggling.Be careful and don’t be fooled by the familiarity of some of this material.
You may have seen most of it before.
This may lead you to expect that you have little new to learn here.
We found that students come with huge misconceptions about seemingly familiar ideas.
You need to be prepared to let go of them if you are to really master these foundations of the subject and this course.And finally, math.
You need a relevant math co-requisite for this course (one of MATH 100, 102, 104, 110, 120, 180, 184).
We will assume that you are comfortable with the following (and can do them quickly and easily): scientific notation, unit conversions, order of magnitude estimates, significant figures, trig, algebra, sketching and interpreting graphs, basic differentiation (and a touch of integration too).
Early in the course, you will get a chance to diagnose any gaps in your own math knowledge.


EXCEL EXTRAVAGANZA
- Matīss
- 14 June 2021
- 420 Comments
Did you hear about DJ Excel? - Everyone says he's off the charts!
Excel Expert with success in maintaining and organizing data, including dictionaries, metadata repositories, and cross-reference indexes across a broad range of industries. Skilled in VLOOKUP formula development, Pivot Table generation, and Pivot reporting. Apply your new skills to hands-on projects that showcase your expertise to potential employers.
Learn, how to plan and perform audits such as operational, financial and compliance audits. Review audit findings and develop action plans. During practical training sessions participate in audit meetings and coordinate internal and external audit activities. Learn to develop corporate policies and procedures according to regulatory requirements.
The Business Process Model and Notation (BPMN) is a vital tool for supporting and enhancing organizations. Practitioners are experts in visualizing and formalizing key processes in a way that empowers optimization. You will gain hands-on experience applying process management principles to visualize a complex business process and the activities that support it.
Build skills at every stage of your career with flexible and affordable options. Enroll in free courses, gain in-demand job skills, ascend Your knowledge to the next level and achieve what You have always dreamed about.
Receive everything You need to complete up to 2 BASIC courses a month
Unlimited BASIC course completions and up to 2 PREMIUM courses each month
Unlimited BASIC & PREMIUM course access with 1 included individual consultation
"The course is very well constructed and so interesting that keeps you always motivated for studying. I recommend
this course for those who would like to again some knowledge in the Business Process Management Engineering field."
"Learning from leading scientists about what's going on in the field right now is so much different
than the experience of reading a textbook."
"Excellent website! I learnt a lot in relation to practical issues that are extremely important in modern day
auditing. I recommend the courses strongly for both academics and practitioners. Thank you."
"I thoroughly enjoyed using this platform. The lessons are very easy to follow. I completed the hands-on labs and
that further solidified the skills taught in the lessons. I've learned the main purpose of the audit and the
general meaning of the conceptual audit process. It's a fantastic opportunity."
"I love how the courses is structured. VBA being a very expansive programming language can get very intimidating
for beginners and there are plenty of course available about VBA where students quickly get overwhelmed or loose
interest right from start. This course has been structured perfectly in getting rid of these two common issues."
"Great training with powerful visual illustrations. The course material (excel spreadsheet, data sets,
PowerBI templates) are very well articulated and prepared. The promotion is mine now!"
"Excellent course. This course teaches the mechanics of how to create macros/VBA subroutines, key concepts related
to programming and very interesting examples on how to apply everything that was learned are given throughout
the course. The explanations are clear, precise and easy to understand."
Be on the lookout for upcoming conferences organized by Viper Force where sector experts are invited to provide deep and meaningful insight into the niche and often not talked about specifics, requirements and directions of the respective field.
Did you hear about DJ Excel? - Everyone says he's off the charts!
Why didn’t the marketing couple get married? - They weren’t on the same landing page.
Did you hear about the new strategy where companies collaborate with ill celebrities? - It’s called influenza marketing. It’s really going viral.
An accountant friend of mine has borrowed six manuals now and not given any of them back. I think he’s a professional bookkeeper.
Finally found the instruction manual that tells me why my alarm clock rings. It’s about time.
I’m looking for a book on how to fix automatic gearboxes, but the library only has manuals.
Just opened the manual for my new ladder. It says “step one, then step two, then step three”…
After 40 years of hard work, a man retired with $5,000,000.00 which he had gained through courage, diligence, initiative, skill, devotion to duty, thrift, efficiency, shrewd investment.. And the death of an uncle who left him $4,999,999.50
Accountant - Someone who knows the cost of everything and the value of nothing.
Auditor - Someone who arrives after the battle and bayonets all the wounded.
Banker - The fellow who lends you his umbrella when the sun is shining and wants it back the minute it begins to rain. (Mark Twain)
Economist - An expert who will know tomorrow why the things he predicted yesterday didn't happen today.
Statistician - Someone who is good with numbers but lacks the personality to be an accountant.
Actuary - Someone who brings a fake bomb on a plane, because that decreases the chances that there will be another bomb on the plane.
Programmer - Someone who solves a problem you didn't know you had in a way you don't understand.
Mathematician - A blind man in a dark room looking for a black cat which isn't there.
Lawyer - A person who writes a 10,000 word document and calls it a "brief."

Consultant - Someone who takes the watch off your wrist and tells you the time.

While we are good with smoke signals, there are simpler ways for us to get in touch and answer Your questions.


Students are matched with open source, free software and technology-related organizations working on bitcoin to write code, earn BTC and put their summer break to good use. The organizations provide mentors who help the students onboard to the project and contribute code. The program requires 10-12 weeks of time commitment with a minimum expectation of 30 hours a week and is open to students, age 18 and older enrolled in a post secondary academic program in most countries.
Subscribe to our newsletter for the most interesting stories and resources from the world of bitcoin open-source development.


--- layout: post title: "Scary Stuff" --- Great video on Current (a favorite channel of mine) about the ever growing loss of freedoms in this country.


Thankyou to our key event sponsors for their support in making the Digital Summit 2020 event a success.
Attendees can still visit our sponsors' and exhibitors' virtual booths to view and download content, however you won't be able to engage with staff.
The Digital Summit is over for another year. We're already planning for 2021 – register for updates to hear about sponsorship, exhibition and speaking opportunities, and to keep up-to-date with Digital Summit news.
Get updates on Digital Summit 2021 opportunitiesIBM is a leading cognitive solutions and cloud platform company headquartered in Armonk, NY. IBM leverages the power of innovation, data and its expertise to improve business and society. Established in 1911, it is the largest technology and consulting employer in the world, with more than 380,000 employees serving clients in 170 countries. With 24 consecutive years of patent leadership, IBM Research is the world's largest corporate research organisation with more than 3,000 researchers in 12 labs across 6 continents. With Watson, the AI platform for business, IBM is building industry-based solutions to real-world problems guided by its 'Principles for Transparency and Trust in the Cognitive Era'. IBM has a proud 87-year history in Australia. Since 1932 – the same year as the Sydney Harbour Bridge – IBM has made significant investments to advance Australia's innovation, global competitiveness, and community well-being.
Established in 1985, Microsoft Australia is subsidiary of Microsoft Corp. Microsoft is the world leader in software, services, devices, and solutions that empower every person and every organisation on the planet to achieve more. Microsoft enables digital transformation for the era of an intelligent cloud and an intelligent edge. Headquartered in Sydney, Microsoft Australia has 7 regional offices across the country employing over 1,000 people. Woven throughout daily life, work or play, Microsoft technologies enable millions of Australian partners and customers to innovate in new ways. Our platforms harmonise the interests of our customers, developers, and IT better than any competing ecosystem or platform. Microsoft is driven to help anyone make the most of any moment – to help create a world where people can make the most of their time and to lead more fulfilling lives.
Rimini Street is a global provider of enterprise software products and services. It is the leading third-party support provider for Oracle and SAP software products and a Salesforce partner. Rimini Street offers premium, ultra-responsive and integrated application management and support services. These services enable enterprise software licensees to save significant costs, free up resources for innovation and achieve better business outcomes. Over 2,100 Fortune 500, Fortune Global 100, midmarket, public sector, and other organisations from a broad range of industries rely on Rimini Street as their trusted application enterprise software products and services provider.
COVID-19 has proved we can make and embrace change quickly. During the height of the pandemic we saw a huge acceleration in digitisation – from telehealth to online learning, remote working, and e-commerce – and the fast-tracking of numerous policy and regulatory changes to break down long-standing digital roadblocks. As a nation we have achieved in a few months what might have taken us years to progress, and it is important that we now do not lose that momentum. However, a single company, a single organization, or a single government can't achieve this on its own. Through coalitions across the public and private sectors, we can affect change by removing barriers and incentivising growth, to make it faster and more pervasive. As an organisation, Telstra is committed to working with all our stakeholders to map the real ways we can put Australia at the forefront of a digital future – paperless, cashless, and virtual – so Australia comes out stronger.
Accenture is a global professional services company with leading capabilities in digital, cloud and security. Combining unmatched experience and specialised skills across more than 40 industries, Accenture offers strategy and consulting, interactive, technology and operations services – all powered by the world's largest network of advanced technology and intelligent operations centers.
Creativity is in our DNA. Our game-changing innovations are redefining the possibilities of digital experiences. We connect content and data and introduce new technologies that democratise creativity, shape the next generation of storytelling and inspire entirely new categories of business.
ARQ Group is a full-service consultancy with data, digital and cloud capabilities. Their innovations have changed the way the Australian Government uses technology to enhance human-centred services. Half of the ASX top 20 trust ARQ to develop their digital experiences, and they are the name behind many government IT projects.
Dragonfly brings cybersecurity, enterprise networking and cutting-edge automation together to fill the digital capabilities gap. Dragonfly have shaped the technology of some of Australia's largest organisations and is the partner of choice of Australia's most security conscious organisations. Telstra has chosen Dragonfly as their networking and security automation partner.
GitLab is a platform for the whole DevOps lifecycle. GitLab is the world's largest remote company, with over 1,300 team members in 68 countries and regions. GitLab works with thousands of developers and millions of users to deliver new innovations. Over 100,000 organizations trust GitLab to deliver great software, faster.
PwC brings solutions to help deliver services – from digital strategy and innovation to enterprise architecture, and technology change from delivery through to testing and quality management to make our businesses thrive. PwC has over 12,000 technologists globally with over 670 in Australia providing a expertise, knowledge, and experience.
Government CRM solutions from Salesforce are revolutionising the capabilities of the public sector. Today's most innovative governments are adopting business service models – citizens expect government to deliver the same high-quality service as the private sector. Salesforce helps agencies build stronger connections between citizens, employees, governments, services, and information.
SAP is a leading provider of enterprise solutions to government and non-profit agencies worldwide. SAP is committed to helping governments protect communities, serve constituents, and drive economic prosperity. With SAP's enterprise solutions, public sector agencies can automate processes, boost performance, decide with data, and empower employees with ease and intelligence.
The DTA does not endorse the listed Sponsors and/or Exhibitors product, service or organisation at the Digital Summit 2020. Approval and acceptance of sponsorship/exhibition opportunities does not indicate that Sponsors and/or Exhibitors will be provided opportunities to work with the DTA or government in the future.


{% extends "gridder_base.html" %} {% block content %}
You’ve successfully activated your account. Now you can start creating grids.


|
ActionComponents
04.05.00
Customizable UI and time-saving tools for iOS development with Xamarin and Visual Studio.
|
The ActionComponents.ACLabel is a custom UILabel
that contains events to easily handle being touched and adds helper methods to make it easier to move or resize the label.
More...
Public Member Functions | |
| ACLabel () | |
| Initializes a new instance of the ActionComponents.ACLabel class. More... | |
| ACLabel (NSCoder coder) | |
| Initializes a new instance of the ActionComponents.ACLabel class. More... | |
| ACLabel (NSObjectFlag flag) | |
| Initializes a new instance of the ActionComponents.ACLabel class. More... | |
| ACLabel (CGRect bounds) | |
| Initializes a new instance of the ActionComponents.ACLabel class. More... | |
| ACLabel (IntPtr ptr) | |
| Initializes a new instance of the ActionComponents.ACLabel class. More... | |
| void | MoveToPoint (nfloat x, nfloat y) |
| Moves this ActionComponents.ACLabel to the given point More... | |
| void | MoveToPoint (CGPoint pt) |
| Moves this ActionComponents.ACLabel to the given point More... | |
| void | Resize (nfloat width, nfloat height) |
| Resize this ActionComponents.ACLabel to the specified width and height. More... | |
| void | RotateTo (nfloat degrees) |
| Rotates this ActionComponents.ACLabel to the given degrees More... | |
| override void | TouchesBegan (NSSet touches, UIEvent evt) |
| Sent when one or more fingers touches the screen. More... | |
| override void | TouchesEnded (NSSet touches, UIEvent evt) |
| Send when one or more fingers are lifted from the screen. More... | |
| delegate void | ACLabelTouchedDelegate (ACLabel view) |
| Occurs when this ActionComponents.ACLabel is touched More... | |
| delegate void | ACLabelReleasedDelegate (ACLabel view) |
| Occurs when this ActionComponents.ACLabel is released More... | |
Properties | |
| Object | tag [get, set] |
| Gets or sets the [OPTIONAL] tag that can be assosciated with this ActionComponents.ACLabel More... | |
| bool | bringToFrontOnTouched [get, set] |
| Gets or sets a value indicating whether this ActionComponents.ACLabel is automatically brought to the front when touched. More... | |
| new bool | Enabled [get, set] |
| Gets or sets a value indicating whether this ActionComponents.ACLabel is enabled. More... | |
Events | |
| ACLabelTouchedDelegate | Touched |
| ACLabelReleasedDelegate | Released |
The ActionComponents.ACLabel is a custom UILabel
that contains events to easily handle being touched and adds helper methods to make it easier to move or resize the label.
Available in ActionPack Business or Enterprise only
| ActionComponents.ACLabel.ACLabel | ( | ) |
Initializes a new instance of the ActionComponents.ACLabel class.
| ActionComponents.ACLabel.ACLabel | ( | NSCoder | coder | ) |
Initializes a new instance of the ActionComponents.ACLabel class.
| coder | Coder. |
| ActionComponents.ACLabel.ACLabel | ( | NSObjectFlag | flag | ) |
Initializes a new instance of the ActionComponents.ACLabel class.
| flag | Flag. |
| ActionComponents.ACLabel.ACLabel | ( | CGRect | bounds | ) |
Initializes a new instance of the ActionComponents.ACLabel class.
| bounds | Bounds. |
| ActionComponents.ACLabel.ACLabel | ( | IntPtr | ptr | ) |
Initializes a new instance of the ActionComponents.ACLabel class.
| ptr | Ptr. |
| delegate void ActionComponents.ACLabel.ACLabelReleasedDelegate | ( | ACLabel | view | ) |
Occurs when this ActionComponents.ACLabel is released
| delegate void ActionComponents.ACLabel.ACLabelTouchedDelegate | ( | ACLabel | view | ) |
| void ActionComponents.ACLabel.MoveToPoint | ( | nfloat | x, |
| nfloat | y | ||
| ) |
Moves this ActionComponents.ACLabel to the given point
| x | The x coordinate. |
| y | The y coordinate. |
| void ActionComponents.ACLabel.MoveToPoint | ( | CGPoint | pt | ) |
Moves this ActionComponents.ACLabel to the given point
| pt | Point. |
| void ActionComponents.ACLabel.Resize | ( | nfloat | width, |
| nfloat | height | ||
| ) |
Resize this ActionComponents.ACLabel to the specified width and height.
| width | Width. |
| height | Height. |
| void ActionComponents.ACLabel.RotateTo | ( | nfloat | degrees | ) |
Rotates this ActionComponents.ACLabel to the given degrees
| degrees | Degrees. |
| override void ActionComponents.ACLabel.TouchesBegan | ( | NSSet | touches, |
| UIEvent | evt | ||
| ) |
Sent when one or more fingers touches the screen.
<Docs>Set containing the touches.</Docs>
| touches | Touches. |
| evt | Evt. |
| override void ActionComponents.ACLabel.TouchesEnded | ( | NSSet | touches, |
| UIEvent | evt | ||
| ) |
Send when one or more fingers are lifted from the screen.
<Docs>Set containing the touches.</Docs>
| touches | Touches. |
| evt | Evt. |
|
getset |
Gets or sets a value indicating whether this ActionComponents.ACLabel is automatically brought to the front when touched.
true
if bring to front on touched; otherwise, false
.
|
getset |
Gets or sets a value indicating whether this ActionComponents.ACLabel is enabled.
true
if enabled; otherwise, false
.
Enabling/disabling a ActionComponents.ACLabel automatically changes the value of it's UserInteractionEnabled
flag
|
getset |
Gets or sets the [OPTIONAL] tag that can be assosciated with this ActionComponents.ACLabel
The tag.
| ACLabelReleasedDelegate ActionComponents.ACLabel.Released |
| ACLabelTouchedDelegate ActionComponents.ACLabel.Touched |


Dr Roslan Ahmad appointed new Penang Amanah chairman
GEORGE TOWN, Nov 23 — Nibong Tebal Parti Amanah Negara (Amanah) chief Dr Roslan Ahmad has been appointed the new Penang Amanah chairman, taking over from Datuk Seri Mujahid Yusof Rawa.
Mujahid, who is also Amanah vice-president and Minister in the Prime Minister’s Department, said the appointment was made at the Amanah Penang Convention, which party president Mohamad Sabu officiated here earlier today.
He also revealed that he had declined reappointment for the state party chairman post as he wanted to focus on his federal duties.
“Alhamdulillah, the convention was a success and the state committee polls was also successfully conducted using the e-voting system,” he said when met by reporters at the “Cherita Acheen Street” event here today.
He hoped the new state party leadership will continue its good ties with the Penang government, now that the Amanah was also a component party in the state. — Bernama


Israeli Police Searching for Vandals Who Damaged 40 Cars in East Jerusalem - Photo, Video
TEL AVIV (Sputnik) - Israeli police are investigating acts of vandalism that took place in the Arab quarter of Jerusalem, with at least 40 vehicles being damaged, police said on Monday.
"At least 40 vehicles and [various] building walls were vandalised in [East] Jerusalem's Shuafat neighbourhood. Police are investigating the incident", Israeli police said in a statement, specifying that the disruption occurred on Sunday night.
According to the Times of Israel, the vehicle tires were slashed and graffiti was sprayed on city walls.
Officers later said that the number of vandalized cars could be much higher.
An alleged video of the moment has been published on Twitter.
Israeli police have increased their presence in the Palestinian neighbourhood of Isawiyah since the end of June following violent clashes with local residents. The incidents were provoked by the death of a young Palestinian man, who was shot dead by a policeman after he launched fireworks at the officers during clashes in the neighbourhood.
With regard to such incidents, the authorities usually suspect ultra-right Jewish activists. Muslim and Christian sites in Israel, East Jerusalem and the West Bank; the property of Palestinians and Israeli Arabs; and even Israeli army bases have repeatedly been targeted in acts of vandalism.


Bootstrap
Component practise
Basic panel example this is a new website
Panel heading without title
Panel content
Panel title
Panel content
Panel content of this new website
this is a new website
New panel
New idea
New content
New practise
blue colour content
Panel content
Panel heading
... ... ...
//list group// //basic exmple//
Cras justo odio
Dapibus ac facilisis in
Morbi leo risus
Porta ac consectetur ac
Vestibulum at eros


* built to test my ability to design an Angular site that uses a Web Service via json-server. Continue to add to this project... attempting to connect to MySQL db


Travel the world & meet new friends.
Create custom landing pages with Omega that convert more visitors than any website. With lots of unique blocks, you can easily build a page without coding.
Create custom landing pages with Omega that convert more visitors than any website. With lots of unique blocks, you can easily build a page without coding.
“OMG! I cannot believe that I have got a brand new landing page after getting Omega. It was super easy to edit and publish. Everyone should try it!”
Jonathan Taylor
“You made it so simple. My new site is so much faster and easier to work with than my old site. I just choose the page, make the change and click save.”
Lizzie Rodgers
Create custom landing pages with Omega that converts more visitors than any website. With lots of unique blocks, you can easily build a page without coding.
With lots of unique blocks, you can easily build a page without coding. Build your next landing page quickly.
With lots of unique blocks, you can easily build a page without coding. Build your next landing page quickly.
Create custom landing pages with Omega that converts more visitors than any website. With lots of unique blocks, you can easily build a page without coding.
Create custom landing pages with Omega that converts more visitors than any website. With lots of unique blocks, you can easily build a page without coding.
Get this app


|
Answer all of these on separate sheets of paper. Put your name and your CS email address on each sheet. |
|
|
|
|
typedef struct { Jval key; Jval val; Dllist children; } Tree; |
Each node may have any number of children.
Each node in children is
a jval whose .v field is a (Tree *).
Write the procedure print_height(), which has the following prototype:
void print_height(Tree *t);
Print_height() should print the height of the given tree on standard output, right justfied and padded to 5 spaces. Note, the tree in Question 2 has a height of four, and the tree in Question 5 has a height of five.
#include "jval.h" typedef struct dllist { struct dllist *flink; struct dllist *blink; Jval val; } *Dllist; extern Dllist new_dllist(); extern void free_dllist(Dllist); extern void dll_append(Dllist, Jval); extern void dll_prepend(Dllist, Jval); extern void dll_insert_b(Dllist, Jval); extern void dll_insert_a(Dllist, Jval); extern void dll_delete_node(Dllist); extern int dll_empty(Dllist); #define dll_traverse(ptr, list) \ for (ptr = list->flink; ptr != list; ptr = ptr->flink) #define dll_rtraverse(ptr, list) \ for (ptr = list->blink; ptr != list; ptr = ptr->blink)


A rest api orm for Angular. Tested with Angular 6.1.x. Can be use used seamlessly with JsonApi.org or easibly be adjusted to work with your own format.
It aims to remove as much boilerplate code as possible while allowing for easy extendability. It will empower your models with CRUD functionality and also manages to-one and to-many relationships.
Your models will look something like
@Model()
export class Employee extends Resource {
@Field()
public id: number;
@Field()
public firstName: string;
@Field()
public lastName: string;
@ToOne(Team)
public team: ToOneRelation<Employee, Task>;
@ToMany(Task):
public tasks: ToManyRelation<Employee, Task>;
public mumble(): void {
console.log('mumble mumble mumble ....')
}
}
@Model()
export class Task extends Resource {
@Field()
public id: number;
@Field()
public title: string;
}
@Model()
export class Team extends Resource {
@Field()
public id: number;
@Field()
public teamName: string;
}
Then, some common usage will look like
/* POST /employees */
const john: Employee = await new Employee().save(); /* All CRUD methods come with type safety. */
/* GET /employees */
const employees: Array<Employee> = await Employee.fetch(); /* Fetches all from API. */
const someGuy = employees[0];
someGuy.firstName = 'Mike'
someGuy.mumble() /* 'mumble mumble mumble ....' */
/* PATCH /employees/{id} */
await someGuy.update() /* will only send updated fields */
/* DELETE /employees/{id} */
await someGuy.delete()
/* There will also Task and Team instances available if they were included by the response from GET /employees */
const tasks: Array<Task> = Task.collection(); /* Gets the locally available instances */
/* PATCH /employees/{id}/team with body {id: 20} */
await someGuy.team.set( Team.find(20)); //* update the to-one relationship */
/* DELETE /employees/{id}/team */
await someGuy.team.remove(); //* clear the to-one relationship */
someGuy.team.instance === null /* Will be true */
For more detailed information on the available methods and how to use them, see the model usage guide.
Using npm:
npm install --save-dev @ngx-api-orm/core
import { HttpClientModule } from '@angular/common/http';
import { ResourceModule, JsonApiDotOrg } from '@ngx-api-orm/core';
@NgModule({
declarations: [ ... ],
imports: [ ... ,
ResourceModule.forRoot({
rootPath: 'https://example.com/api/v1',
requestHandlers: JsonApiDotOrg /* Requires package @ngx-api-orm/json-api. Omit this line if you're not using a JsonApi.org formatted API. */
}),
HttpClientModule, /* this one is required */
... ],
providers: [ ...],
bootstrap: [ ... ]
})
export class SomeModule {}
See the model usage guide for detailed instructions on how to use the Resource
classes and decorators.
If the ngx-api-orm
default format or the JsonApi.org format is not what you're getting from your API, see the extendability guide. This library leverages the power of Angular's dependency injection, making it super easy to override certain default features.


Feature Section Heading
They say you’re never supposed to meet your idols. In this case, it’s a good thing your idol is inanimate. Cheeseburgers are never going to give you up or let you down. They’ll also never run around or desert you. They’ll never make you cry, unless it’s from sheer joy. Cheeseburgers certainly won’t say goodbye either. Finally, cheeseburgers are incapable of telling lies or hurting you. On the flip side, they can still Rick Roll you. Cheeseburgers certainly won’t say goodbye either. Finally, cheeseburgers are incapable of telling lies or hurting you. On the flip side, they can still Rick Roll you. Cheeseburgers certainly won’t say goodbye either. Finally, cheeseburgers are incapable of telling lies or hurting you. On the flip side, they can still Rick Roll you.Epic cheeseburgers come in all kinds of manifestations, but we want them in and around our mouth no matter what. Slide those smashed patties with the gently caramelized meat fat between a toasted brioche bun and pass it over. You fall in love with the cheeseburger itself but the journey ain’t half bad either. They’re the childhood friend that knows your highest highs and lowest lows. They’ve been with you through thick and thin and they’re the best at keeping secrets. Whether it’s dressed up or informal, cheeseburgers have your back. Sometimes we lose sight of what really matters in life. There’s something to be said for a gourmet brie and truffle burger paired with parmesan frites, but don’t let that make you forget about the ol’ faithful with American cheddar and a squishy bun. Lettuce remind you that cheeseburgers come in all forms - bun intended. Pop quiz: what’s the greatest thing to happen to your mind, body, and soul in recent history? A cheeseburger, obviously. Cheeseburgers know that what you want can also be what you need.


CSS uses selectors to reference HTML tags (i.e. p.className)
As a developer, I want the "Live demo" bullet list to be styled based on the rules for each bullet
Restriction: do NOT modify the HTML elements.
Notice there should not be blue or bold HTML element in this Goal section.


What is this?
This webiste is intended for the displaying of some of my projects, exploits, and some social things. And for fun, some games
I have no particular reason for any projects I make/host,
but they're here for you to discover
This webiste is intended for the displaying of some of my projects, exploits, and some social things. And for fun, some games


--- layout: post title: Storyboard sketch date: '2018-02-13T11:30:40+01:00' categories: - Storyboards - Sketchbooks picture_url: https://film-Storyboards.tumblr.com/post/170839300982/Storyboards-sketch ---


--- layout: post title: 'Where I''ve been' date: 2004-02-21 00:00:00 category: personal ---
create your own visited country map or write about it on the open travel guide