EdExchange Onboarding Guide for Service Providers
About this Guide
This guide provides detailed, step-by-step instructions on how to deploy the reference implementation of the network server to send and receive documents using EdExchange. Upon completion of this guide, your organization will have become an active member of the EdExchange network and have successfully requested and received a PESC college transcript with Butte College based on test data and test student "John Doe".
Step 1: Join the EdExchange Network
To add your organization to the EdExchange directory, complete registration form. Make sure to check the "Service Provider" checkbox to indicate your organization is a service provider. If your organization is also an institution, check the "Institution" checkbox too.
Step 2: Deploy a Server
The purpose of this section is to deploy an Ubuntu based Linux server that will be used to host the reference implementation of the EdExchange network server on the internet. For the purpose of this guide, Amazon Web Services (AWS) will be used to create and deploy the server. However, you may optionally choose to host the server any way you like and still use this guide, provided the operating system is Ubuntu 16.04 LTS.
Upon completion of this section, you will have a an Ubuntu 16.04 LTS server that is ready to be provisioned with the reference implementation of the EdExchange network server.
Step 2a: Sign In to the AWS console
Log into the AWS console located at https://aws.amazon.com/console/. If this link no longer works, do a Google search on "Amazon Web Services console" and use the search results to find the AWS console. Select the "Sign In To the Console" button and login. If you don't have an Amazon account that is appropriate for hosting the EdExchange network server, you'll need to create an Amazon account.
Step 2b: Open EC2 Dashboard
The server will be deployed as an EC2 instance. There are various ways to load the EC2 console, one of which is to select "Services/EC2" from the main AWS dashboard (the landing page that is presented after you've logged into the AWS console.
Step 2c: Create a Server Instance
If you've followed the instructions so far, the EC2 dashboard should be presented and you should see an option called "Lanuch Instance" in the "Create Instance" area of the dashboard. Select "Launch Instance" and you will be prompted for the required information as shown in the steps below.
- Choose an Amazon Machine Image (AMI) You will be presented with several operating system choices during this part of the process. You should choose the Ubuntu instance which is currently shown as "Ubuntu Server 16.04 LTS (HVM), SSD Volume Type - ami-7c803d1c.
- Choose an Instance Type You will be presented with several hardware options during this part of the process. Select an instance type that makes sense for the amount of network traffic you expect to have. Initially, you many choose to use the free tier just to establish your presence on the EdExchange network. Later, you can change the instance type to something more appropriate.
Step 2d: Start the Server
After you've selected the operating system and instance type, select select "Review and Launch". Review the information that's provided about the server instance and then select "Launch". Once the server is started, you'll need some way to connect to the server so that you can provision the server with the EdExchange software and start the network server. AWS allows remote connections to the running server by use of a public/private key pair. At this point in the process, you should be presented with an option to use an existing key pair (if you have already created one during a similar process with a different server) or to create a new pair.
You may use an existing key pair if you already have one. If you don't want to using existing key pair or you don't have one, select "Create a new key pair" and give it a name that makes sense, such as "EdExchange". Select "Download key pair" and save it somewhere safe and where you can easily access it. Note where you save it. If you lose this file, you won't be able to remotely access the server.
After you've downloaded your public/private key pair to your local system, select "Launch Instance". You will be presented with a page that shows the name of the new EC2 instance. For example:
Your instances are now launching. The following instance launches have been initiated: i-0fe3dc9b47b98fb63Note the name of your new server instance, for example "i-0fe3dc9b47b98fb63" as shown above. The "i-0fe3dc9b47b98fb63" should be a link, that when selected, will present the status of the instance.
In the future, you can also find your running instances by selecting "Services/EC2" from the main AWS dashboard and then selecting "Running instances"
Wait until the server instance is in the "Running" state before continuing to the next step.
Step 2e: Assign a Static IP Address
The purpose of this step is to allocate an static IP address that will not change whenever the AWS server instance is restarted. Without this step, the AWS server instance is not guaranteed to have the same IP address if it's ever restarted.
From the EC2 Dashboard (where you can see your running server instance under "Instance" menu item), select the "Elastic IPs" menu item and then select "Allocate new address" and then "Allocate". You should be presented with a dialog that shows the IP address, similar to the one here:
Note the IP address and close the dialog. Next, select the IP address you just created from the list of Elastic IP Addresses and from the Actions dropdown, select "Associate address". Using the dialog, associate the IP address with your newly created server instance using the server name you noted earlier in the process. E.g. i-0fe3dc9b47b98fb63
Step 3: Provision the Server
In this section, you will provision the server with the latest EdExchange software---the reference implementation of the network server. This step includes downloading the software to the AWS server instance and building the network server.
Step 3a: Connect to the AWS Server
At this point in the process, you should have a running AWS server instance. This section describes how to remotely connect to the running server so that you can download and build the EdExchange Network Server software.
The method you use to connect to the running server depends on what operating system you use on your local host. This is the same computer on which you saved your public/private key pair. Amazon has provided instructions for each operating system...
| Your Computer | How to Connect |
|---|---|
| Linux | Connecting to Your Linux Instance Using SSH |
| Windows | Connecting to Your Linux Instance from Windows Using PuTTY |
| All | Connecting to Your Linux Instance Using MindTerm |
The remainder of this section provides abbreviated instructions on how to connect to the server using SSH on Linux. It assumes you used the suggested name "EdExchange" for your private key. If you saved the private key using a different name, substitute "EdExchange" with whatever name you used. If the instructions here don't work for you, consult the documentation from Amazon in the table above.
The authenticity of host 'ec2-52-32-59-26.us-west-2.compute.amazonaws.com (<IP_ADDRESS>)' can't be established. ECDSA key fingerprint is a9:f9:a6:80:69:95:98:6c:d5:38:a1:dc:8b:79:2b:eb. Are you sure you want to continue connecting (yes/no)?
Step 3b: Get the Network Server Software
Step 3c: Build the Network Server Software
Warning: JAVA_HOME environment variable is not set. Apache Maven 3.3.9 Maven home: /usr/share/maven Java version: 1.8.0_121, vendor: Oracle Corporation Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "4.4.0-59-generic", arch: "amd64", family: "unix"You'll notice the warning:
Warning: JAVA_HOME environment variable is not set.This will be addressed in the next step.
The output should be similar to the following:
java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
Reactor Summary: [INFO] [INFO] Directory Server ................................... SUCCESS [01:52 min] [INFO] pesc-sdk ........................................... SUCCESS [ 44.928 s] [INFO] network-server ..................................... SUCCESS [ 51.302 s] [INFO] PESC CDS EdExchange ................................ SUCCESS [ 0.017 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS
Step 3d: Create the Database
You should still be connected to your AWS server instance. From the command prompt, run the following command:
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
The output should be similar to the following:
Executing: /tmp/tmp.DaSy8lV3dd/gpg.1.sh --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D gpg: requesting key 2C52609D from hkp server p80.pool.sks-keyservers.net gpg: key 2C52609D: public key "Docker Release Tool (releasedocker)" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)
You should see output similar to following:
docker-engine: Installed: (none) Candidate: 1.13.0-0~ubuntu-xenial Version table: 1.13.0-0~ubuntu-xenial 500 500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages 1.12.6-0~ubuntu-xenial 500 500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages 1.12.5-0~ubuntu-xenial 500 500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages 1.12.4-0~ubuntu-xenial 500 500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages 1.12.3-0~xenial 500 500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages 1.12.2-0~xenial 500 500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages 1.12.1-0~xenial 500 500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages 1.12.0-0~xenial 500 500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages 1.11.2-0~xenial 500 500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages 1.11.1-0~xenial 500 500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages 1.11.0-0~xenial 500 500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages
$ sudo apt-get install -y docker-engine
Docker should now be installed. Verify the installation by checking if the docker daemon is running:
The outpout should be similar to the following:
docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2017-02-07 21:13:41 UTC; 1min 38s ago Docs: https://docs.docker.com Main PID: 2286 (dockerd)
Client: Version: 1.13.0 API version: 1.25 Go version: go1.7.3 Git commit: 49bf474 Built: Tue Jan 17 09:58:26 2017 OS/Arch: linux/amd64 Server: Version: 1.13.0 API version: 1.25 (minimum version 1.12) Go version: go1.7.3 Git commit: 49bf474 Built: Tue Jan 17 09:58:26 2017 OS/Arch: linux/amd64 Experimental: false
OK - network-db is running. IP: <IP_ADDRESS>, StartedAt: 2017-02-07T21:28:33.087848567Z You can start the network server app using the following command: java -Dspring.profiles.active=dev -Ddb.server=<IP_ADDRESS> -jar ./target/network-server.jar or use your favorite IDE to develop and run
Step 4: Associate a Domain Name with the AWS Server
In this section, you will associate a domain name, through the Domain Name System (DNS), to a currently running EC2 instance. You must be the legal owner of the domain name you intend to use for the network server and have access to the registrar so that you can update the domain record to point to the new AWS server instance. The domain name is used in web browser's to locate a particular resource. For example, a domain name "edex.phoenix.edu" would allow users to access the EdExchange network server on the internet using https://edex.phoenix.edu. The remainder of this section provides instructions on how to configure the domain name to point to the new AWS server using Amazon's Route 53 registrar. In case you haven't registered a domain name yet, the first step covers the registration process. If you choose to use Amazon's Route 53 registrar, you can check for domain name availablility on the Route 53 dashboard. You can optionally use any other registrar of your choice. For a list of accredited registrars, go to the Registrar Directory. If you choose a different registrar for your domain name, the steps to associate the domain name with the AWS server will be dependent on the registrars process. You can optionally transfer the domain name from your registrar to Amazon's Route 53. You can access the Route 53 dashboard by selecting "Services/Route 53" from the main AWS dashboard.
If you own a domain name registered through a registrar other than Amazon's Route 53, you'll have to follow the instructions specific to the registrar for associating the domain name with your AWS server instance. You can optionally choose to transfer the domain name from your current registrar to Amazon's Route 53 registrar and continue following this guide. At a minimum, you will need to get the IP address for the Amazon EC2 instance. This is the same IP address that was created in the Assign a Static IP Address.
If you don't own a domain name yet for use with EdExchange, you may purchase the domain name through Amazon's domain name service, Route 53.
To use Route 53, make sure you are currently logged into Amazon and then click here to open the Route 53 console in a new window (Route 53 is AWS’s DNS service). You can register new domain names with Route 53 as well as manage DNS records for your domain.
Enter the desired domain name into the input box and select "Check". If the domain is available, you can add the domain name to your Amazon cart. In the next step, fill out the required information and purchase the domain name. Once you purchase the domain, it will take a few minutes for the domain name to become active. When it becomes active, you should receive an alert on the Route 53 Dashboard that indicates the domain registration was successful. You should also receive an email with the same information, sent to the email address you provided during the domain name registration process.
- Sign in to the AWS Management Console and open the Amazon EC2 console at https://console.aws.amazon.com/ec2/.
- In the regions list in the upper right corner of the console, choose the region that you launched the instance in.
- In the navigation pane, choose Instances.
- In the table, choose the instance that you want to route traffic to.
- In the bottom pane, on the Description tab, get the value of Elastic IPs. If you didn't associate an Elastic IP with the instance, get the value of Public IP.
The official Amazon documentation for associating your domain name with your running server instance can be found here. The remainder of this section describes how to associate the IP address with your instance.
- Open the Amazon Route 53 console at https://console.aws.amazon.com/route53/. In the navigation pane, choose Hosted Zones.
- Choose the name of the hosted zone for the domain name that you want to use to route traffic to your EC2 instance.
- Choose Create Record Set.
- Specify the following values:
- Name
- Type the domain name that you want to use to route traffic to your EC2 instance. The default value is the name of the hosted zone. For example, if the name of the hosted zone is example.com and you want to use acme.example.com to route traffic to your EC2 instance, type acme.
- Type
- Choose A – IPv4 address.
- Alias
- Choose No.
- TTL (Seconds)
- Accept the default value of 300.
- Value
- Type the IP address that you got in Get the IP address for the Amazon EC2 instance.
- Routing Policy
- Accept the default value, Simple.
- Choose Create. Changes generally propagate to all Amazon Route 53 servers in a couple of minutes. In rare circumstances, propagation can take up to 30 minutes. When propagation is done, you'll be able to route traffic to your EC2 instance by using the name of the resource record set that you created in this procedure.
Step 5: Configure the EdExchange Network Server
- Sign in to the AWS Management Console and open the Amazon EC2 console at https://console.aws.amazon.com/ec2/.
- In the regions list in the upper right corner of the console, choose the region that you launched the instance in.
- In the navigation pane, choose Running Instances.
- In the table, choose the instance that you created for EdExchange.
- In the bottom pane, on the Description tab, select/click the link for the security group next to Security groups. The security group configuration options will be in the bottom pane.
- Select the Inbound tab and then Edit and then Add Rule from the popup dialog.
- Select HTTPS from the drop down list and then Save
Step 5a: Create an SSL Certificate for the Network Server
In this section, you'll be using the letsencrypt client to create an SSL certicate that will be used to secure HTTPS traffic for your EdExchange network server. If you already have an SSL certificate for your domain, or you wish to purchase one through a certificate authority, you may skip this section. To begin, make sure you're logged into the AWS server instance. From the command line, invoke the following commands:
The letsencrypt client should now be ready to use.
Next, run letsencrypt and pass in your domain name, and an email address. If you lose your account credentials, you can recover through e-mails sent to the provided email address. In the example command below, the domain name is "www.example.com"
$ sudo letsencrypt -d www.example.com --email<EMAIL_ADDRESS>In the dialog that is presented, select Secure Make all requests redirect to secure HTTPS access. and then OK.
Upon completion, you should be presented with a popup dialog similar to the one below:
You should see output from letsencrypt similar to the following:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/www.example.com/fullchain.pem. Your cert will expire on 2017-05-10. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - If you like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Invoke the commands below and when prompted, input a password. Note the password you use for future use. When the command completes, a new file keystore.p12 will exist in the current directory. Note that in the example command below, you'll need to replace "www.example.com" with your actual domain name.
Step 5b: Create an SSL Certificate for Signing Documents
Step 5c: Upload the Network Server SSL Certificate
One of the requirements to receive documents throught the EdExchange network, is that the EdExchange directory server must have the network servers SSL certificate. The directory server uses the certificate to verify that endpoint URLs are hosted by the server specified in the SSL certificate. So in the step, you will be uploading your PEM encoded network certificate to the directory server.
- From the /home/ubuntu directory of your AWS server instance, extract the PEM encoded certificate from the keystore created earlier:
$ openssl pkcs12 -in keystore.p12 -clcerts -nokeys -out network_certificate.pem
- Open a web browser on your computer and login to the directory server at https:/edex-directory-open-pilot.ccctechcenter.org and select "My Organization" from the menu.
-
Copy and paste the contents of the network_certificate.pem (found in /home/ubuntu on the AWS server instance) to the "Network Certificate" input field in the "My Organizatation" page of the
directory server application.
- From the /home/ubuntu directory of the AWS server instance:
$ cat network_certificate.pem
-
The output should be similar to following which you should cut and paste into the "Network Certificate" field including the ----BEGIN CERTIFICATE---- and ----END CERTIFICATE-----:
-----BEGIN CERTIFICATE----- MIIFDDCCA/SgAwIBAgISA6JlLdJYmZ9++zUxaKBjyKdfMA0GCSqGSIb3DQEBCwUA MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNzAyMDkwMjA0MDBaFw0x NzA1MTAwMjA0MDBaMB8xHTAbBgNVBAMTFHd3dy5pbmZpbmlzaW50aGUuY29tMIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArEBKo0jsHvA96TKhJdkosVbn NQ1oZl3OX32geI7ooDVL6y+NmlMHwTJCB8Dd/hF/9DHTTBn0D+macfbT1RAtbVts 1l583pdS4ido5G8cP4escnXdllCm0OmsgJA98nPDBl6uJAb4Og51Fnz6fMe9YZst x8QX/SlRiDQ9IjrPN1JL3l5lbwA23Vunu9E+mC3nuAV4fWNhoCK5pgBqlPaKnz+S g+h14iJuygkuSq6KA/onZX8I8J6PX8iZ0ItXUti15RuakIKNRCzToA/d5ovpXRmg WHNmOkVaUr2baCwQ6xStPCBt1T3Sfq2N3iaf55lU4sThw8dj6t6Kz3h/JOR0JwID AQABo4ICFTCCAhEwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMB BggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSJruVS5/bY3JsOD4Of 3zvXsX6n9TAfBgNVHSMEGDAWgBSoSmpjBH3duubRObemRWXv86jsoTBwBggrBgEF BQcBAQRkMGIwLwYIKwYBBQUHMAGGI2h0dHA6Ly9vY3NwLmludC14My5sZXRzZW5j cnlwdC5vcmcvMC8GCCsGAQUFBzAChiNodHRwOi8vY2VydC5pbnQteDMubGV0c2Vu Y3J5cHQub3JnLzAfBgNVHREEGDAWghR3d3cuaW5maW5pc2ludGhlLmNvbTCB/gYD VR0gBIH2MIHzMAgGBmeBDAECATCB5gYLKwYBBAGC3xMBAQEwgdYwJgYIKwYBBQUH AgEWGmh0dHA6Ly9jcHMubGV0c2VuY3J5cHQub3JnMIGrBggrBgEFBQcCAjCBngyB m1RoaXMgQ2VydGlmaWNhdGUgbWF5IG9ubHkgYmUgcmVsaWVkIHVwb24gYnkgUmVs eWluZyBQYXJ0aWVzIGFuZCBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQ2Vy dGlmaWNhdGUgUG9saWN5IGZvdW5kIGF0IGh0dHBzOi8vbGV0c2VuY3J5cHQub3Jn L3JlcG9zaXRvcnkvMA0GCSqGSIb3DQEBCwUAA4IBAQCNQoPxmWCTIi0u2qnSBEbr yFgYaynmPrXB+g0bRCVRrAXPgic8VliS5cYOXSK454Rm060HWPtn8jmnki3RGwLc sQrqMTmRU/wW0pWoMxUArbHbqscyFYQIOiLhrrvwej6wSARidif1Iz1RplnGe/+F yPyQKczPTah1UQhozt9aXI+u6JD5MMBYJWIYHQYqL4ZZnyYKrx97BNfsJhiuC9tc cPUNMwgESu4PU+3M9n3mwq0poGHmhXuH0v6aY9tJKTO1xIupHaPjTz5GlqEF2+Vc uOsK1KC+somcZPjBg3T9Nnf6esa6AXAb5GfjXujHim+SM3TaAwEr/JNMW2wc9J7M -----END CERTIFICATE-----
- From the /home/ubuntu directory of the AWS server instance:
Step 5d: Upload the Signing Certificate
One of the requirements to receive documents throught the EdExchange network, is that the EdExchange directory server must have the SSL certificate used to verify the digital signature of a received document. When a network server receives a document from a member, the signing certificate is retrieved from the directory server and the digital sigature is verified using the public key portion of the certificate.
- Open a web browser on your computer and login to the directory server at https:/edex-directory-open-pilot.ccctechcenter.org and select "My Organization" from the menu.
-
Copy and paste the contents of the signing_certificate.pem (found in /home/ubuntu on the AWS server instance) to the "Signing Certificate" input field in the "My Organizatation" page of the
directory server application.
- From the /home/ubuntu directory of the AWS server instance:
$ cat signing_certificate.pem
-
The output should be similar to following which you should cut and paste into the "Signing Certificate" field including the ----BEGIN CERTIFICATE---- and ----END CERTIFICATE-----:
-----BEGIN CERTIFICATE----- MIIENzCCAx+gAwIBAgIJAIxcHY01lbEuMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYD VQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTETMBEGA1UEBwwKU2FjcmFtZW50 bzEcMBoGA1UECgwTRGF0YSBieSBUb3VjaCwgSW5jLjETMBEGA1UECwwKRWRFeGNo YW5nZTEYMBYGA1UEAwwPSmFtZXMgV2hldHN0b25lMSswKQYJKoZIhvcNAQkBFhxq d2hldHN0b25lQGNjY3RlY2hjZW50ZXIub3JnMB4XDTE3MDIwOTE2NTU1NVoXDTI3 MDIwNzE2NTU1NVowgbExCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlh MRMwEQYDVQQHDApTYWNyYW1lbnRvMRwwGgYDVQQKDBNEYXRhIGJ5IFRvdWNoLCBJ bmMuMRMwEQYDVQQLDApFZEV4Y2hhbmdlMRgwFgYDVQQDDA9KYW1lcyBXaGV0c3Rv bmUxKzApBgkqhkiG9w0BCQEWHGp3aGV0c3RvbmVAY2NjdGVjaGNlbnRlci5vcmcw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDOncxgFiM8mqDqtwgg5dan VOnOlCDbHYHNryFtKUeMkwK2wk0SBKAJBneltOUr+Te3lXxaqP6pLJenAMhufwar PFEb3POB+wZGBO4x+gzB6u0dHXe+R9gk1Pj+Bfro8da0S4StmgN+BkPbxSwDRYf1 10AD1viH6ozWmEMcf3KMTIYMjZq1GbmRrigl+UvAvkkHbMgeKSKMObXRL20lpniR kpyKNEWJalMwlL64obP6FfqgqOqsxNCCiva2cRrEYQS7I5N78QcJga7oDSsMjlRf 8SqkeOJU0T3Pk/IwDIGVu5tFFHLyplb3OY6Pxjk71jMekNA/3QCk4TDjHUa3N/7H AgMBAAGjUDBOMB0GA1UdDgQWBBQHLyuqZ8Aw2KNEWIxSlpCmn5uerTAfBgNVHSME GDAWgBQHLyuqZ8Aw2KNEWIxSlpCmn5uerTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3 DQEBCwUAA4IBAQAFxRyUNBAdFxI76sg0OLOgg41NrQsH6wqZ7Y4j4FrDeNEiOy0R lTj14+fXz3qIxv3NUTmIsNMW+Y3rmbLZLQzdRstd4rsucz1hPM85HYU/h8Sl8TAh 9oKUjDgbNvmmDcQKCs1VaPWVFz36HXPLnOzrJwgrSMdBxa0Rd3U1h1J2P2d9NTYB 4wcBLyXb4tnJzWZVxIuoOqS2wEJgR17pekpNwzvHV8aae3deDqrGFEgoQrbKtGI6 4KHN+GaZccfSPWobmj6lOrzs23vzsZLBgjx+bqWK4k2nOSB7OuDlTsZz2/Gj37uJ UefzAZM0VN/hj/4DZUwELgqNxDHlSeKKEOyc -----END CERTIFICATE-----
- From the /home/ubuntu directory of the AWS server instance:
Step 5e: Set the OAuth Secret
OAuth 2.0 is used by the reference implementation of the network server to authenticate and authorize HTTP requests related to document upload and acknowledgements. This section describes how to configure OAuth 2.0
- Open a web browser on your computer and login to the directory server at https:/edex-directory-open-pilot.ccctechcenter.org and select "My Organization" from the menu.
- In the section titled "OAUTH", select/click the pencil icon.
- In the "Secret" field, enter a passphrase. Note the passphrase and keep it secure. You will need to provide this passphrase to your network server as one of the configuration parameters when start the network server on your AWS instance.
Step 5f: Define an Endpoint for Handling PESC College Transcripts.
By default, the reference implementation of the network server accepts documents at /api/v1/documents/inbox. If your server name is www.example.com, then your fully qualified endpoint URL would be https://www.example.com/api/v1/documents/inbox. To make this endpoint discoverable by entities that wish to send you a document, you must add the URL to your list of endpoints on the directory server. This section describes how to add the necesssary endpoint to the directory server so you can receive a PESC college transcripts.
- Open a web browser on your computer and login to the directory server at https:/edex-directory-open-pilot.ccctechcenter.org and select "My Organization" from the menu.
- In the section titled "Endpoints", select/click the "plus" icon. This should present a web form for inputing information about the endpoint.
- Fill in the entire web form:
- The URL: the server/domain name must match the domain name contained in the network certificate you uploaded earlier in the process. This will be automatically populated. if your domain name is "www.example.com", then the URL should be "https://www.example.com/api/v1/documents/inbox".
- A description of the endpoint. E.g. "PESC College Transcripts"
- Document Format: choose "PESCCML" from the list.
- Document Types: choose "College Transcript" from the list.
- Departments: choose "Administration" from the list.
- Mode: choose "LIVE" from the list.
Step 6: Start the EdExchange Network Server
This section describes how to start the network server hosted on your AWS ubuntu instance.
- Connect to your AWS server instance.
- Verify that you have the following files in the /home/ubuntu (the current users's home directory) directory after you're logged in to the AWS server:
- keystore.p12 You should have created the keystore in Step 5a: Create an SSL Certificate for the Network Server
- keystore.jks You should have created the keystore in Step 5b: Create an SSL Certificate for Signing Documents.
- Verify that you have a directory "cdsWebserver" in the /home/ubuntu (the current user's home directory) directory. This is the GIT repository and location of the network server software that was built in Step 3b: Get the Network Server Software
- Verify that ./cdsWebserver/networkServer/target/network-server.jar exists. This is the compiled network server software that you should have build in Step 3c: Build the Network Server Software
- Create a shell script to start the network server (you can optionally update the appropriate application.properties profile in the source code and rebuild your application):
- nano start-network-server.sh
- Copy and paste the following code into the editor, after providing the properites, providing missing values for the following properties:
- networkServer.id : This is your organization's EdExchange directory ID. Obtain it from the directory server.
- networkServer.name : This is your organization's name. It should be the same as what's on the directory server.
- networkServer.keystore.password : This is the password you used in Step 5b: Create an SSL Certificate for Signing Documents
- networkServer.admin.username : This is the username of the super user account that is used to sign into the network server. Make sure to select a unpredictable username.
- networkServer.admin.password : This is the password of the super user account that is used to sign into the network server. Make sure this is a highly secure password.
- server.ssl.key-store-password : This is the password you used in Step 5a: Create an SSL Certificate for the Network Server
- authentication.oauth.secret : This is the OAuth 2.0 secrete you used in Step 5e: Set the OAuth Secret
#!/bin/bash docker start network-db /home/ubuntu/cdsWebserver/networkServer/target/network-server.jar \ --spring.profiles.active=pilot \ --logging.file="/home/ubuntu/network-server.log" \ --db.server=<IP_ADDRESS> \ --networkServer.id= \ --networkServer.name= \ --networkServer.keystore=/home/ubuntu/keystore.jks \ --networkServer.keystore.password= \ --networkServer.keystore.signing_key_alias=EdExchange \ --networkServer.file.path=/home/ubuntu/documents \ --networkServer.admin.username= \ --networkServer.admin.password= \ --server.ssl.key-store=/home/ubuntu/keystore.p12 \ --server.ssl.key-store-password= \ --authentication.oauth.secret= \
- Close the editor and save the changes. (Ctrl-X) then type 'Y' when prompted.
- chmod +x start-network-server.sh
- sudo chown ubuntu:ubuntu keystore.p12
- mkdir documents This is where documents will be saved.
- sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 9000
- sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 9443
- sudo apt-get install iptables-persistent Respond with "Y" to question prompts. This step makes it so the iptables are persisted across reboots.
- sudo nano /etc/systemd/system/edexchange.service
- Copy and paste the following into the editor.
[Unit] Description = Start the EdExchange network server After = network.target [Service] ExecStart = /home/ubuntu/start-network-server.sh [Install] WantedBy = multi-user.target
- Close the editor and save the changes. (Ctrl-X) then type 'Y' when prompted.
- sudo chmod 644 /etc/systemd/system/edexchange.service
- sudo systemctl enable connection.service
- sudo service edexchange start
The network server should now be running. You may test it by opening a browser and navigating to your domain name. E.g. https://www.example.com, where you shoud be presented with the default home page. If for some reason, the home page does not load, you should take a look at the server log, located at /home/ubuntu/network-server.log for any errors that may have occurred.
Step 7: Request a Transcript
This section describes how to request a transcript for a test student named "John Doe" from Butte College. All of the student identifying information is test data, and the generated transcript is test data.
Upon completion of this section, you will have sent a PESC transcript request document to Butte College through the CCC Tech Center, which is the service provider for Butte College. In response, a PESC college transcript for the test student will be sent back, and you will have the opportunity to view the transcript and information about the transaction.
- Sign into your network server using the admin username and password you configured in Step 6: Start the EdExchange Network Server
- Select "Request Transcript" from the top level menu.
- Fill in all of the form fields as follows:


Attacking fleet card placeholder.
Defending fleet card placeholder.
{{location.name}} - [{{actor.unit.general.name}}]


よくたずねられる質問
読む時間の目安: 4 分If you don’t see your question here, feel free to drop by #docker-compose
on
freenode IRC and ask the community.
サービスの起動順は制御できますか？
はい。 起動順の制御 を参照してください。
サービスの再生成や停止に 10 秒もかかるのはなぜ？
Compose stop attempts to stop a container by sending a SIGTERM
. It then waits
for a default timeout of 10 seconds. After the timeout,
a SIGKILL
is sent to the container to forcefully kill it. If you
are waiting for this timeout, it means that your containers aren’t shutting down
when they receive the SIGTERM
signal.
There has already been a lot written about this problem of processes handling signals in containers.
To fix this problem, try the following:
-
Make sure you’re using the exec form of
CMD
andENTRYPOINT
in your Dockerfile.For example use
["program", "arg1", "arg2"]
not"program arg1 arg2"
. Using the string form causes Docker to run your process usingbash
which doesn’t handle signals properly. Compose always uses the JSON form, so don’t worry if you override the command or entrypoint in your Compose file. -
If you are able, modify the application that you’re running to add an explicit signal handler for
SIGTERM
. -
Set the
stop_signal
to a signal which the application knows how to handle:web: build: . stop_signal: SIGINT
-
If you can’t modify the application, wrap the application in a lightweight init system (like s6) or a signal proxy (like dumb-init or tini). Either of these wrappers take care of handling
SIGTERM
properly.
1 つのホスト上で Compose ファイルを複数稼動させるには？
Compose uses the project name to create unique identifiers for all of a
project’s containers and other resources. To run multiple copies of a project,
set a custom project name using the -p
command line option
or the COMPOSE_PROJECT_NAME
environment variable.
What’s the difference between up
, run
, and start
?
Typically, you want docker-compose up
. Use up
to start or restart all the
services defined in a docker-compose.yml
. In the default “attached”
mode, you see all the logs from all the containers. In “detached” mode (-d
),
Compose exits after starting the containers, but the containers continue to run
in the background.
The docker-compose run
command is for running “one-off” or “adhoc” tasks. It
requires the service name you want to run and only starts containers for services
that the running service depends on. Use run
to run tests or perform
an administrative task such as removing or adding data to a data volume
container. The run
command acts like docker run -ti
in that it opens an
interactive terminal to the container and returns an exit status matching the
exit status of the process in the container.
The docker-compose start
command is useful only to restart containers
that were previously created, but were stopped. It never creates new
containers.
Can I use json instead of yaml for my Compose file?
Yes. Yaml is a superset of json so any JSON file should be valid Yaml. To use a JSON file with Compose, specify the filename to use, for example:
docker-compose -f docker-compose.json up
Should I include my code with COPY
/ADD
or a volume?
You can add your code to the image using COPY
or ADD
directive in a
Dockerfile
. This is useful if you need to relocate your code along with the
Docker image, for example when you’re sending code to another environment
(production, CI, etc).
You should use a volume
if you want to make changes to your code and see them
reflected immediately, for example when you’re developing code and your server
supports hot code reloading or live-reload.
There may be cases where you want to use both. You can have the image
include the code using a COPY
, and use a volume
in your Compose file to
include the code from the host during development. The volume overrides
the directory contents of the image.
Where can I find example compose files?
There are many examples of Compose files on github.


Xiaomi says all its 2020 phones over €250 will support 5G
by YordanEarlier this year Lei Jun, Xiaomi CEO, announced the company is planning to launch at least 10 new smartphones with 5G connectivity. Today, during a keynote in Guangzhou, China, he doubled down and said all phones over CNY2,000 (that’s about $285/€255) will have 5G capabilities.
The executive’s speech was part of the annual China Mobile Global Partner Conference. During the event, the carrier’s chairman Yang Jie said the plans are to add 70 million 5G users in 2020 and to expand the 5G application to over 100 industries. Another important guest of the conference was Howard Liang - chairman of Huawei’s Board of Directors.
Currently, Xiaomi has a rather modest portfolio of 5G handsets - there is the relatively old Mi Mix 3 5G, the China-only Mi 9 Pro 5G, and the Mi Mix Alpha, which is pretty much a prototype and rumors have been suggesting there have been made only 500 units of it.
By bringing cheaper devices with 5G chips, we are likely to see the next-gen connectivity arrive with devices such as the non-Pro Redmi K30, the eventual Mi 10 SE, and even the Redmi Note 9 Pro.
A safer bet would be that the Mi 10 flagships and the next Black Shark gaming handset will also have a 5G option, as well as 4G-only for markets where the network is not yet available.


{% import "_includes/forms" as forms %} {{ forms.textField({ label: "Domain Group ID"|t, id: 'domainGroupID', name: 'domainGroupID', instructions: "Can be found by accessing {url} in \"Your scripts\" tab."|t({url: 'https://manage.cookiebot.com/en/manage'}), value: settings.domainGroupID, errors: settings.getErrors('domainGroupID') }) }}
{{ "Can be found by accessing {url} in \"Dialog\" tab."|t({url: 'https://manage.cookiebot.com/en/manage'}) }}


Select a project to color correct and mosaic within the editor.
Showing {{$ctrl.pagination.startingItem}} - {{$ctrl.pagination.endingItem}} of {{$ctrl.pagination.count}} projects
Showing results for "{{$ctrl.searchString}}"


Why pair programming is important?
Pair Programming is a development technique where two programmers work together on a workstation. Compared to the traditional solo programming approach, pair programming has many advantages.
It is believed that this produces the same amount of work as two separate programmers but with a higher quality. Further more, skills can also transferred between the two programmers, where the two have different experience and specialities. Ad-hoc training also occurs as one person shows the other some tricks, workarounds, etc.
Other benefits of pair programming include:
- Collective code ownership - everbody gains a working knowledge of the entire codebase
- Mentoring - Knowledge is transferred between the junior programmers or new team members when paired with a more experienced person on the team
- Team cohesion - People get to know each other more quckly and learn how to work with each other
- Improved morale - When done well, pair programming is more more enjoyable than programming alone
Roles
In the pair programming model, one person is said to be the Navigator and the other the Driver. Both work on the same problem, either in person at the same machine, or remotely like we've done here. The Navigator is charged with the writing: turning ideas into working code. The Driver's task is to give suggestions and also review the code the Navigator writes. There's also another aspect to this method, where the Driver tries to focus on the overall project and potential future problems while the Navigator can focus all his attention to the specific task at hand. Roles are not fixed, and pairs tend to change seats often.
Impressions
Peter - So far I've enjoyed all my pairing sessions. The one that I enjoy the most is being able to bounce ideas with my pair, as well as learn from them. There isn't one session where I didn't learn anything new, and considering that I'm still a baby in my programming career, it is crucial that I'm always learning. Furthermore, it is also very enjoyable, especially when we are able to troubleshoot and resolve a bug. However, to have an effective pair programming, you really to communicate well with your partner. Both of you have to be on the same page and clearly communicate what it is you are working - communication is key here.
Raphael - Pairing went very smoothly for me. When I work on something on my own, I get easily distracted, but having a partner not only focuses my attention, but makes for an overall much more pleasant experience. Before actually pairing up, I thought I wouldn't enjoy being Navigator that much since I thought I would just mindlessly be writing out what the Driver told me to, but in practice it didn't feel like that at all. If anything, Navigator felt like the more proactive role while the Driver keeps track of the big picture and makes sure you don't make mistakes. At our level it's also great to have turns at these different roles since there's so much we don't know. I was able to teach a few things to Peter today and learned a few others in separate sessions, and I think those were the best parts about the pairing sessions: giving or receiving knowledge.


Wired Brain Coffee believes it is important for you to know what you put in your body. To that end, here is the nutritional information for our products.
| Drink | Carbohydrates | |||||
|---|---|---|---|---|---|---|
| Serving Size | Calories | Fat (g) | Protein (g) | Sugar (g) | Fiber (g) | |
| Hot Cocoa | 8 oz | 250 | 5 | 2 | 25 | 0 |
| Mocha | 8 oz | 250 | 5 | 2 | 25 | 0 |
| Max | 250 |


Start Bootstrap
Home
(current)
About
Services
Contact
FORMULARIO DE DATOS CON PARSLEY
Nombre:
Apellido:
E-Mail:
You've reached the end!


| DOSE: |
|
|
2C-P |
(powder / crystals) |
1. Introduction
2. Routes of Ingestion
A. Oral
B. Insufflation
3. Description of Effects and Personal Opinions
4. A Bad Trip
1. Introduction
Instead of trying to answer questions about the substance while stoned I thought I'd put down all of my knowlege about the substance. I aquired 1000mg of 2c-p, about 100 doses, and I have been toying with it for about a two months. Total estimated trips would be somewhere above 20. My previous experiences with similar drugs include lsd, mushrooms, ayahuasca (dmt), dpt, dipt, 2c-i, salvia, lsa, and...lots of non-psychedelic drugs.
A quick comment before anyone gets too excited about 2c-p. This is one of the more intense drugs I have ever tried. This is not always an easy ride, and the effects last an amazing 12-18 hours. I would say avoid this drug if you are just looking for a nice buzz or a gentle trip. If you are in for the ride, however, I don't think you will be dissapointed.
2. Routes of Ingestion
A. Oral (swallowed) 6-10mg
This is the only method of ingestion covered by Pihkal, and his experiences are pretty consistent with mine. The effects do not begin until 2-3 hours after ingestion. This is important to know, you do not want to redose at +2 hours because you don't feel anything. Once the trip has begun, it takes a few hours to peak, and the peak lasts a rediculous 10-14 hours. It is vital to make sure I am not busy the following day. The come down is slow, starting with some physical fatigue, then a dissipation of visual effects, and an inability to sleep. As for side effects: gas, bloating, sweating, tense muscles (especially the jaw), and possibly other digestion discomforts. None of these are too worrisome, just annoying. Very few people I've encountered complain of vomiting or nausea.
B. Insufflation (snorting) 3-6 mg
This method was not covered anywhere on the internet, so I had to just go for it. I did a little research first to verify it wouldn't be deadly, of course. To consider: 'At doses this low, I'm going to have to be very careful'. After the initial 3mg dose, I can always take another 3mg in an hour without sacrificing intensity. I watched a clock as I insufflated and waited for the effects several times, at different doses, and came up with this timeline.
0 min: Insufflate the powder (3-5mg). I don't feel anything burning initially, and go to get a drink.
5 min: Now it starts to burn. It's an Intense burning, but not much drip at all. Nothing I've snorted feels quite like this, but I know it will be over soon.
10 min: The burn is starting to fade a little, and I feel a bit stoned.
15 min: No more burning, and the effects have already started. Visuals, energy, inspiration, closed eye visual, the works.
45 min: The effects have peaked, and after this they do not get any more intense. If I not tripping as much as I'd like, I consider waiting 15 to 30 mins to make sure its fully present, and then redose. Or maybe smoke some marijuana.
The effects last suprisingly long for being insufflated, a good 8-12 hour trip. Sleeping is not as hard with this route, because the effects fade faster. I do not snort large amounts at once, as the speed of the come up overwhelms many people and causes vomiting. The more I snort the more it burns, I just redose about 3mg an hour.
3. Description of Effects and Personal Opinions
Mentally, there is a bit of psychedelia. I am most impressed by the intuitions I am given about my attitude and interpersonal relationships. 2c-p is also a very inspiring drug artistically, affecting both my music and visual work. It could be helpful to writers, and probably anyone who can deal with the length and intensity of the trip. The main effect as far as I can tell is giggling. Visuals are very present, some of the best I have had in a long, long time. Bright colors and detailed texture/patterns are the main triggers for the visuals. The colors are brighter, with halos, and textures move about and stretch. The closed eye visuals are what impressed me the most. Amazing animated layers of repetative objects...legs, flames, all layered in a style reminiscent of flash animations. The images carry a style like nothing I have seen in any art, ever.
4. A Bad Trip
I do want to take a bit to describe what a bad trip 2c-p trip was like. My first experience with it was an overdose, and that trip is my main inspiration for typing this all up. The 2c-p had just arrived in the mail, and I started measuring out doses. I took one dose, and waited to see if it was enough. After two hours, I foolishly decided I had not taken enough, and took perhaps 5mg more. That was all it took, 15mg total. Twenty mins later, the piles on the mirror started to wiggle around and I was sweating profusely. I got some help putting the piles into capsules, and we went about our day, ready to start a party. We got one started and I sold perhaps 6 or 8 doses. One of my friends puked, and for some reason I felt quite bad about that. He didn't mind, but I was tripping a bit too hard. I began to draw some attention with my rambling about my electric bill, and my worries about my vomity friend.
I talked to someone about my ex, which was a bad idea. We were very close, a three year relationship, and I missed her quite a bit. My friend told me to give it up, that my ex never thinks about me, and I got a bit emotional. I was acting really really drunk, and cried. The visuals were so intense, I just lay on the floor looking at the walls for awhile, trying to wait out the peak and not embarrass myself anymore. Finally, the peak was over and I felt alot better. I was sweating too much, and I didn't look healthy at all. Sleep was impossible, so I lay around having a much better trip all night. The effects lasted at least 20 hours, but I fully recovered.
Ok, this is it for now, maybe this can be updated eventually, although I would rather buy some 2c-e ;)
yrm0m
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


MealRecs
Recipe
My Recipe List
Recipe
Name
Description
Preparation Time
Cook Time
Servings
Source
Source URL
Image
Keyword
Ingredients:
Directions
Back
Save
Delete


OPM, Gender Equality Ministry hold workshop on responsive planning and budgeting
The Office of the Prime Minister (OPM), together with the Ministry of Gender Equality and Child Welfare held a workshop aimed at capacitating office of the Prime Minister officials, in terms of gender responsive planning and budgeting.
The five-day workshop was held at Otjiwarongo.


Run, run as fast as you can! Take a sweet and smart look at
the science behind a favorite holiday pastime.

Journey to Space: The Exhibiton now open
Buy Tickets >
Other screens just won't do after catching a show in the
state's biggest sounding, most tech-forward theater.
Did you know we show Hollywood movies in the evening?
Now Playing >
From OMSI After Dark to giant festivals, see the museum like
never before
Look at the sky differently from one of our Star Parties.
Learn More >
Bigger and better than ever. See how we're turning the heat up
with brand new camps and classes this year.
From a brand new camp to high-end technology, this year is going to rock.
Learn More >
When's the next launch? Where is the ISS right now? What's a
total eclipse, really? Find out.


Meet a partner for your best holiday
bradley hunter
Based in Chicago. I love playing tennis and loud music.
lucas marsha
I get my inspiration from nature and objects around me. I have a passion to colours, typography and skateboards.
heather walker
I'm a happy person that loves cats and climbing on mountains.
bradley hunter
Based in Chicago. I love playing tennis and loud music.


This is a simple hero unit, a simple Jumbotron-style component for calling extra attention to featured content or information.
It uses utility classes for typography and spacing to space content out within the larger container.
This is a modified jumbotron that occupies the entire horizontal space of its parent.


- Author
- Fabien Potencier fabie.nosp@m.n@sy.nosp<EMAIL_ADDRESS>Definition at line 22 of file Filesystem.php.
| chgrp |
( |
|
$files, |
|
|
|
$group, |
|
|
|
$recursive = false |
|
) |
| |
Change the group of an array of files or directories.
- Parameters
-
| string | array | \Traversable | $files | A filename, an array of files, or a instance to change group |
| string | $group | The group name |
| bool | $recursive | Whether change the group recursively or not |
- Exceptions
-
| IOException | When the change fail |
Definition at line 237 of file Filesystem.php.
| chmod |
( |
|
$files, |
|
|
|
$mode, |
|
|
|
$umask = 0000 , |
|
|
|
$recursive = false |
|
) |
| |
Change mode for an array of files or directories.
- Parameters
-
| string | array | \Traversable | $files | A filename, an array of files, or a instance to change mode |
| int | $mode | The new mode (octal) |
| int | $umask | The mode mask (octal) |
| bool | $recursive | Whether change the mod recursively or not |
- Exceptions
-
| IOException | When the change fail |
Definition at line 189 of file Filesystem.php.
| chown |
( |
|
$files, |
|
|
|
$user, |
|
|
|
$recursive = false |
|
) |
| |
Change the owner of an array of files or directories.
- Parameters
-
| string | array | \Traversable | $files | A filename, an array of files, or a instance to change owner |
| string | $user | The new owner user name |
| bool | $recursive | Whether change the owner recursively or not |
- Exceptions
-
| IOException | When the change fail |
Definition at line 210 of file Filesystem.php.
| copy |
( |
|
$originFile, |
|
|
|
$targetFile, |
|
|
|
$override = false |
|
) |
| |
Copies a file.
This method only copies the file if the origin file is newer than the target file.
By default, if the target already exists, it is not overridden.
- Parameters
-
| string | $originFile | The original filename |
| string | $targetFile | The target filename |
| bool | $override | Whether to override an existing file or not |
- Exceptions
-
| FileNotFoundException | When originFile doesn't exist |
| IOException | When copy fails |
Definition at line 38 of file Filesystem.php.
| dumpFile |
( |
|
$filename, |
|
|
|
$content, |
|
|
|
$mode = 0666 |
|
) |
| |
Atomically dumps content into a file.
- Parameters
-
| string | $filename | The file to be written to. |
| string | $content | The data to write into the file. |
| null | int | $mode | The file mode (octal). If null, file permissions are not modified Deprecated since version 2.3.12, to be removed in 3.0. |
- Exceptions
-
| IOException | If the file cannot be written to. |
Definition at line 462 of file Filesystem.php.
Checks the existence of files or directories.
- Parameters
-
| string | array | \Traversable | $files | A filename, an array of files, or a instance to check |
- Returns
- bool true if the file exists, false otherwise
Definition at line 112 of file Filesystem.php.
Returns whether the file path is an absolute path.
- Parameters
-
- Returns
- bool
Definition at line 437 of file Filesystem.php.
| makePathRelative |
( |
|
$endPath, |
|
|
|
$startPath |
|
) |
| |
Given an existing path, convert it to a path relative to a given starting path.
- Parameters
-
| string | $endPath | Absolute path of target |
| string | $startPath | Absolute path where traversal begins |
- Returns
- string Path of target relative to starting path
Definition at line 325 of file Filesystem.php.
| mirror |
( |
|
$originDir, |
|
|
|
$targetDir, |
|
|
\Traversable |
$iterator = null , |
|
|
|
$options = array() |
|
) |
| |
Mirrors a directory to another.
- Parameters
-
| string | $originDir | The origin directory |
| string | $targetDir | The target directory |
| \Traversable | $iterator | A Traversable instance |
| array | $options | An array of boolean options Valid options are:
- $options['override'] Whether to override an existing file on copy or not (see copy())
- $options['copy_on_windows'] Whether to copy files instead of links on Windows (see symlink())
- $options['delete'] Whether to delete files that are not in the source directory (defaults to false)
|
- Exceptions
-
| IOException | When file type is unknown |
Definition at line 371 of file Filesystem.php.
| mkdir |
( |
|
$dirs, |
|
|
|
$mode = 0777 |
|
) |
| |
Creates a directory recursively.
- Parameters
-
| string | array | \Traversable | $dirs | The directory path |
| int | $mode | The directory mode |
- Exceptions
-
| IOException | On any directory creation failure |
Definition at line 85 of file Filesystem.php.
Removes files or directories.
- Parameters
-
| string | array | \Traversable | $files | A filename, an array of files, or a instance to remove |
- Exceptions
-
| IOException | When removal fails |
Definition at line 149 of file Filesystem.php.
| rename |
( |
|
$origin, |
|
|
|
$target, |
|
|
|
$overwrite = false |
|
) |
| |
Renames a file or a directory.
- Parameters
-
| string | $origin | The origin filename or directory |
| string | $target | The new filename or directory |
| bool | $overwrite | Whether to overwrite the target if it already exists |
- Exceptions
-
| IOException | When target file or directory already exists |
| IOException | When origin cannot be renamed |
Definition at line 265 of file Filesystem.php.
| symlink |
( |
|
$originDir, |
|
|
|
$targetDir, |
|
|
|
$copyOnWindows = false |
|
) |
| |
Creates a symbolic link or copy a directory.
- Parameters
-
| string | $originDir | The origin directory path |
| string | $targetDir | The symbolic link name |
| bool | $copyOnWindows | Whether to copy files if on Windows |
- Exceptions
-
| IOException | When symlink fails |
Definition at line 286 of file Filesystem.php.
| touch |
( |
|
$files, |
|
|
|
$time = null , |
|
|
|
$atime = null |
|
) |
| |
Sets access and modification time of file.
- Parameters
-
| string | array | \Traversable | $files | A filename, an array of files, or a instance to create |
| int | $time | The touch time as a Unix timestamp |
| int | $atime | The access time as a Unix timestamp |
- Exceptions
-
| IOException | When touch fails |
Definition at line 132 of file Filesystem.php.
The documentation for this class was generated from the following file:


menu
Roku Remote
arrow_back
*
home
arrow_drop_up
arrow_left
OK
arrow_right
arrow_drop_down
fast_rewind
play_arrow
fast_forward
replay


Developer Student Clubs are university based community groups for students interested in Google developer technologies. Students from all undergraduate or graduate programs with an interest in growing as a developer are welcome. By joining a DSC, students grow their knowledge in a peer-to-peer learning environment and build solutions for local businesses and their community.
What we offer you:
Name: Debbs
Gender: Female
I am currently obsessed with the how it started trends on Twitter, I am impressed with its versatility
Coding, Abula, Boujie Owambe


Multiply max available buy. (Es. 0.5 => half max). Use this to prevent production failure and/or save valuable resources. Range is 0 - 1


;
It is our nature to create, innovate, and collaborate.
We share stories. In their potential ability to touch the humanity and hearts of other people, to provoke moral indignation, instill compassion, and inspire action, we believe movies can ignite a sense of purpose and can allow our most audacious dreams to take flight.


We're listening to everything
See the closest activities first
When you're on vacation or traveling, the same site works.
Find the closest trivia night, art exhibit, yoga class, kid events, street fest, farmers market, live music, poetry reading, happy hour, you name it, wherever you are.
We're listening on twitter for dates. To add your events, just as us to follow you and we'll automatically include your events.
You can include our list of events, filtered by geography and category, on your site using our Partner API.


EventProbeSuccess(bids: HashMap<Int, Bid>)
Event to update notify user about a probe request success.
bids - a HashMap mappping the adslots id to bid objects
bids


sc_core::sc_sensitive Class Reference
#include <sysc/kernel/sc_sensitive.h>
List of all members.
Public Types |
| typedef sc_signal_in_if< bool > | in_if_b_type |
typedef sc_signal_in_if
< sc_dt::sc_logic > | in_if_l_type |
| typedef sc_in< bool > | in_port_b_type |
| typedef sc_in< sc_dt::sc_logic > | in_port_l_type |
| typedef sc_inout< bool > | inout_port_b_type |
| typedef sc_inout< sc_dt::sc_logic > | inout_port_l_type |
Public Member Functions |
| sc_sensitive & | operator<< (sc_process_handle) |
| sc_sensitive & | operator() (const sc_event &) |
| sc_sensitive & | operator() (const sc_interface &) |
| sc_sensitive & | operator() (const sc_port_base &) |
| sc_sensitive & | operator() (sc_event_finder &) |
| sc_sensitive & | operator<< (const sc_event &) |
| sc_sensitive & | operator<< (const sc_interface &) |
| sc_sensitive & | operator<< (const sc_port_base &) |
| sc_sensitive & | operator<< (sc_event_finder &) |
| sc_sensitive & | operator() (sc_cthread_handle, sc_event_finder &) |
| sc_sensitive & | operator() (sc_cthread_handle, const in_if_b_type &) |
| sc_sensitive & | operator() (sc_cthread_handle, const in_if_l_type &) |
| sc_sensitive & | operator() (sc_cthread_handle, const in_port_b_type &) |
| sc_sensitive & | operator() (sc_cthread_handle, const in_port_l_type &) |
| sc_sensitive & | operator() (sc_cthread_handle, const inout_port_b_type &) |
| sc_sensitive & | operator() (sc_cthread_handle, const inout_port_l_type &) |
| void | reset () |
Static Public Member Functions |
| static void | make_static_sensitivity (sc_process_b *, const sc_event &) |
| static void | make_static_sensitivity (sc_process_b *, const sc_interface &) |
| static void | make_static_sensitivity (sc_process_b *, const sc_port_base &) |
| static void | make_static_sensitivity (sc_process_b *, sc_event_finder &) |
Friends |
| class | sc_module |
Detailed Description
Definition at line 61 of file sc_sensitive.h.
Member Typedef Documentation
Member Function Documentation
| static void sc_core::sc_sensitive::make_static_sensitivity |
( |
sc_process_b * |
, |
|
|
const sc_event & |
| |
|
) |
| | [static] |
| void sc_core::sc_sensitive::reset |
( |
|
) |
|
Friends And Related Function Documentation
The documentation for this class was generated from the following file:


1st edition
8:30 AM
Registration
9:00 AM
Key Note
9:15 AM
Product Management - a comparative perspective vis-a-vis other roles in agile organizations
Jeneef Joshua
10:15 AM
Coffee Break
10:30 AM
Stairs for Successful Agile Projects - Pragmatic aspects on Agile Project Execution
Khaarthigha Subramanian
11:30 AM
Introduction to Lean Analytics
Kartik Narayanan
12:30 PM
Networking Lunch
*Subject to change
Kartik has over 17+ years of industry experience in Product Management and Business Analysis. You can read his blogs about product management and books at https://digitalamrit.com
His experience spans accross Business Development, Business Analysis and Project Management with expertise in Retail and Consumer goods.
Khaarthigha is experienced in handling multiple delivery models and domains playing various roles in her career spanning 12 years in the global IT space.


Source code for svea_managers.svea_archetypes
#!/usr/bin/env python
"""
Module containing archetypal SVEA manager classes.
"""
from copy import deepcopy
import rospy
from svea.actuation import ActuationInterface
from svea.data import BasicDataHandler
__license__ = "MIT"
__maintainer__ = "Frank Jiang"
__email__ =<EMAIL_ADDRESS>"
__status__ = "Development"
[docs]class SVEAManager(object):
"""Container for the different software module of a SVEA
vehicle. Additionally, this manager is used to provide clean
interfaces to each module of a SVEA vehicle. In general, every SVEA
consists of the following modules:
1. Localization Interface
2. Controller
3. Actuation Interface
4. Data Handler
Note, we use the term "Interface" carefully. They are called
interfaces since the main functionality is performed elsewhere in
another ROS node.
:param vehicle_name: Name of vehicle; used to initialize each
software module.
:type vehicle_name: str
:param localizer: A chosen localization interface class constructor
:type localizer: class
:param controller: A chosen controller class constructor
:type controller: class
:param actuation: A chosen actuation interface class constructor,
defaults to ActuationInterface
:type actuation: class
:param data_handler: A chosen data handler class constructor,
defaults to BasicDataHandler
:type data_handler: class
"""
MAX_WAIT = 1.0/10.0 # no slower than 10Hz
def __init__(self, vehicle_name, localizer, controller,
actuation=ActuationInterface,
data_handler=BasicDataHandler):
self.vehicle_name = vehicle_name
self.localizer = localizer(vehicle_name)
self.controller = controller(vehicle_name)
self.actuation = actuation(vehicle_name)
self.data_handler = data_handler(vehicle_name)
# bring localizer state out into manager
self.state = self.localizer.state
self.last_state_time = None
# set up automatic state logging
self.localizer.add_callback(self.data_handler.log_state)
[docs] def start(self, wait=False):
""" Start interface objects
:param wait: Flag deciding whether to wait for actuation
interface to be ready or not
:type wait: bool
"""
self.localizer.start()
self.actuation.start(wait)
[docs] def wait_for_state(self):
"""Wait for a new state to arrive, or until a maximum time
has passed since the last state arrived.
:return: New state when it arrvies, if it arrives before max
waiting time, otherwise None
:rtype: VehicleState, or None
"""
time = rospy.get_time()
if self.last_state_time is None:
timeout = None
else:
timeout = self.MAX_WAIT - (time - self.last_state_time)
if timeout <= 0:
return deepcopy(self.state)
self.localizer.ready_event.wait(timeout)
wait = rospy.get_time() - time
if wait < self.MAX_WAIT:
return deepcopy(self.state)
else:
return None
[docs] def compute_control(self, state=None):
"""Compute control using chosen controller object
:param state: State used to compute control; if no state is
given as an argument, self.state is automatically
used instead, defaults to None
:type state: VehicleState, or None
:return: Computed control input; format depends on return type
of controller object's own compute_control() method;
typically this should return a steering angle and a
velocity
:rtype: Some return type as self.controller.compute_control()
"""
if state is None:
return self.controller.compute_control(self.state)
return self.controller.compute_control(state)
[docs] def send_control(self, steering, velocity):
"""Send control input off to low-level controller and actuate
SVEA. This method also auto-logs the control input.
:param steering: Steering angle request in [rad]
:type steering: float
:param velocity: Velocity request in [m/s]
:type velocity: float
"""
self.actuation.send_control(steering, velocity)
# log control as soon as it's actually sent
self.data_handler.log_ctrl(steering, velocity, rospy.get_time())
def _log_state(self):
self.data_handler.log_state(self.state)
[docs] def visualize_data(self):
"""Visualize data using the visualize_data() method of the
chosen data handler object"""
self.data_handler.visualize_data()


Lorem ipsum dolor sit amet consectetur adipisicing elit.
© 2020 Company Name
Terms of Use
Privacy Policy
Resources
Help Center
Support
Newsroom
Status
Development
Developers
Documentation
Product Updates
FAQ
Company
Careers
Blog
Culture
Team


Cam Jordan Gets Unsportsmanlike Penalty For Dirty Elbow on Panthers QB Kyle Allen (VIDEO)
by Darrelle LincolnCam Jordan will likely receive a suspension and/or fine for this.
During the Saints-Panthers game, the Saints defensive star came up and threw a punch at Panthers QB Kyle Allen which drew an unsportsmanlike conduct penalty.


Read a text file.
Split the file into an array of text lines.
Split the text lines into arrays of integers.
Plot the 2 sets of points from the 2 lines of the file.


|
Fixed Point Arithmetic
0
Fixed-point math library.
|
This header depends only upon the definition of. More...
Modules | |
| Comparison functions | |
| Fixed point arithmetic | |
| Limits | |
| Fxp_width | |
| Width based type names. | |
Data Structures | |
| struct | mfrac |
| 16 bit fractional number in Q8.8 format. More... | |
| struct | frac |
| 16 bit fractional number in Q1.15 format. More... | |
| struct | dfrac |
| 32 bit fractional number in Q2.30 format. More... | |
| struct | efrac |
| 32 bit fractional number in Q17.15 format. More... | |
Macros | |
| #define | MFRAC_BIT (16) |
| #define | FRAC_BIT (16) |
| #define | DFRAC_BIT (32) |
| #define | EFRAC_BIT (32) |
Typedefs | |
| typedef int16_t | mfrac_base |
| typedef int16_t | frac_base |
| typedef int32_t | dfrac_base |
| typedef int32_t | efrac_base |
This header depends only upon the definition of.
Unfortunately in C there is no way to forbid casting between integer types. While this would be inocuous in the case of integers, fractionals are different. For type casting to preserve the numerical value, the decimal point sould be aligned when converting between types. To prevent accidental implicit casts between fractional types we enclose them in structs. The downside of this approach is that it is no longer possible to use the '+' and '-' operators between fractionals, but in most cases you should not do that and use a double-length accumulator instead.
| struct mfrac |
16 bit fractional number in Q8.8 format.
Values of this type can represent numbers between -128 and (2**7 - 2**-8), or approximately 127.996 with a precision of 2**-8 (about 0.0039 or 2.4 decimal places).
| Data Fields | ||
|---|---|---|
| mfrac_base | v |
| struct frac |
| struct dfrac |
32 bit fractional number in Q2.30 format.
Values of this type can represent numbers between -2 and (2 - 2**-30) with a precision of 2**-30 (9.31E-10 or 9 decimal places)
A typical use of double fracs is for accumulators that store a multiply-sum of fracs.
| Data Fields | ||
|---|---|---|
| dfrac_base | v |
| struct efrac |
32 bit fractional number in Q17.15 format.
Values of this type can represent numbers between -65536 and (65536 - 2**-15) with a precision of 2**-15 (about 0.0000305 or 4.5 decimal places).
The main reason for defining efracs as Q17.15 is that casting fracs to (int32_t) and adding them naturally results in a 17.15 value.
| Data Fields | ||
|---|---|---|
| efrac_base | v |
| typedef int32_t dfrac_base |
| typedef int32_t efrac_base |
| typedef int16_t mfrac_base |


Deprecated: This plugin has been removed from the Jenkins Update Centre
The Publish Over CIFS Plugin has replaced this plugin.
Archived versions of this plugin remain available for download.
Plugin Information |
|---|
No information for the plugin 'cifs' is available. It may have been removed from distribution. |
This plugin uploads build artifacts to repository sites using CIFS (SMB) protocol. First you should define CIFS shares in the Hudson global configuration page. After that you can refer to the shares using a select list in your project configuration. See picture for global config:
The CIFS share must exist before you can reference it and should be accessible by user who is publishing the files.
Per job you can enable publishing of build artifacts:
Source points to files which will be uploaded. You can use ant includes syntax, eg. folder/dist/*.jar. Path is constructed from workspace root.
Note that you cannot point files outside the workspace directory. For example providing: ../myfile.txt
won't work...
Destination points to destination folder on remote site. It will be created if doesn't exists and relative to share root path.
You can define multiple blocks of source/destination pairs.
Change Log
Version 1.1.10
- Incorporated patch for allowing flattening of directory structure per job and per file mask.
- Moved plugin to GitHub
Version 1.1.4
- Fixed issue with winsServer parameter
- Fixed issue with share directory not being used when the artifact is actually copied to the share
Version 1.1
- Fixed a few items in the pom so they showed up correctly on the wiki
Version 1.0
- Initial release of plugin.


This is a Zendesk Labs App. Zendesk Labs is a testing ground for experimental
software applications that are in various stages of development. The software
may change, break, or disappear at any time. While Zendesk does not support
Zendesk Labs Apps, their creators may be able to help. The best way to contact
the original developer is by creating a
GitHub Issue
in the App's repository.


{% extends "base_auth.html" %} {% block content_auth %}
The webmaster has not set up any emails yet, so we can't send you any link confirmation
Please contact the admin to learn more


1 dead in farm accident in Sheboygan County
SHEBOYGAN, Wis. - One person is dead after a farming accident in eastern Wisconsin.
Sheboygan County authorities say the accident was reported late Monday morning.
According to the sheriff's office, one person is dead. No other information was released.


Patient Name
< Back to Patient Selection
Patient Profile
To Game Setup >
Patient Performance
Game Settings
Patient Mode
Help


Blend your style and experience on a global, competitive stage. You have 13 rounds to attack and defend your side using sharp gunplay and tactical abilities. And, with one life per-round, you'll need to think faster than your opponent if you want to survive. Take on foes across Competitive and Unranked modes as well as Deathmatch and Spike Rush.
 No two Agents play alike, just as no two highlight reels will look the same.


This is a paragraph in the div (P1).
This is a paragraph in the div (P2).
This is a paragraph in the div (P3).
This is a paragraph in the div (P4).
This is a paragraph in the div (P5).
This is a paragraph in the div (P6).
This is a paragraph in the div (P7).
This is a paragraph in the div (P8).
This is a paragraph in the div (P9).


| PERLMODLIB(1) | Perl Programmers Reference Guide | PERLMODLIB(1) |
no integer; no strict 'refs'; no warnings;
which lasts until the end of that BLOCK.
Some pragmas are lexically scoped--typically those that affect the $^H hints variable. Others affect the current package instead, like "use vars" and "use subs", which allow you to predeclare a variables or subroutines within a particular file rather than just a block. Such declarations are effective for the entire file for which they were declared. You cannot rescind them with "no vars" or "no subs".
The following pragmas are defined (and have their own documentation).
It's possible that not all modules listed below are installed on your system. For example, the GDBM_File module will not be installed if you don't have the gdbm library.
To find out all modules installed on your system, including those without documentation or outside the standard release, just use the following command (under the default win32 shell, double quotes should be used instead of single quotes).
% perl -MFile::Find=find -MFile::Spec::Functions -Tlwe \ 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC'
(The -T is here to prevent '.' from being listed in @INC.) They should all have their own documentation installed and accessible via your system man(1) command. If you do not have a find program, you can use the Perl find2perl program instead, which generates Perl code as output you can run through perl. If you have a man program but it doesn't find your modules, you'll have to fix your manpath. See perl for details. If you have no system man command, you might try the perldoc program.
Note also that the command "perldoc perllocal" gives you a (possibly incomplete) list of the modules that have been further installed on your system. (The perllocal.pod file is updated by the standard MakeMaker install process.)
Many popular C extension modules do not come bundled (at least, not completely) due to their sizes, volatility, or simply lack of time for adequate testing and configuration across the multitude of platforms on which Perl was beta-tested. You are encouraged to look for them on CPAN (described below), or using web search engines like Google or DuckDuckGo.
Most importantly, CPAN includes around a thousand unbundled modules, some of which require a C compiler to build. Major categories of modules are:
The list of the registered CPAN sites follows. Please note that the sorting order is alphabetical on fields:
Continent | |-->Country | |-->[state/province] | |-->ftp | |-->[http]
and thus the North American servers happen to be listed between the European and the South American sites.

Perl implements a class using a package, but the presence of a package doesn't imply the presence of a class. A package is just a namespace. A class is a package that provides subroutines that can be used as methods. A method is just a subroutine that expects, as its first argument, either the name of a package (for "static" methods), or a reference to something (for "virtual" methods).
A module is a file that (by convention) provides a class of the same name (sans the .pm), plus an import method in that class that can be called to fetch exported symbols. This module may implement some of its methods by loading dynamic C or C++ objects, but that should be totally transparent to the user of the module. Likewise, the module might set up an AUTOLOAD function to slurp in subroutine definitions on demand, but this is also transparent. Only the .pm file is required to exist. See perlsub, perlobj, and AutoLoader for details about the AUTOLOAD mechanism.
If so, please try to reuse the existing modules either in whole or by inheriting useful features into a new class. If this is not practical try to get together with the module authors to work on extending or enhancing the functionality of the existing modules. A perfect example is the plethora of packages in perl4 for dealing with command line options.
If you are writing a module to expand an already existing set of modules, please coordinate with the author of the package. It helps if you follow the same naming scheme and module interaction scheme as the original author.
Try to "use warnings;" (or "use warnings qw(...);"). Remember that you can add "no warnings qw(...);" to individual blocks of code that need less warnings.
Use blessed references. Use the two argument form of bless to bless into the class name given as the first parameter of the constructor, e.g.,:
sub new { my $class = shift; return bless {}, $class; }
or even this if you'd like it to be used as either a static or a virtual method.
sub new { my $self = shift; my $class = ref($self) || $self; return bless {}, $class; }
Pass arrays as references so more parameters can be added later (it's also faster). Convert functions into methods where appropriate. Split large methods into smaller more flexible ones. Inherit methods from other modules if appropriate.
Avoid class name tests like: "die "Invalid" unless ref $ref eq 'FOO'". Generally you can delete the "eq 'FOO'" part with no harm at all. Let the objects look after themselves! Generally, avoid hard-wired class names as far as possible.
Avoid "$r->Class::func()" where using "@ISA=qw(... Class ...)" and "$r->func()" would work.
Use autosplit so little used or newly added functions won't be a burden to programs that don't use them. Add test functions to the module after __END__ either using AutoSplit or by saying:
eval join('',<main::DATA>) || die $@ unless caller();
Does your module pass the 'empty subclass' test? If you say "@SUBCLASS::ISA = qw(YOURCLASS);" your applications should be able to use SUBCLASS in exactly the same way as YOURCLASS. For example, does your application still work if you change: "$obj = YOURCLASS->new();" into: "$obj = SUBCLASS->new();" ?
Avoid keeping any state information in your packages. It makes it difficult for multiple other packages to use yours. Keep state information in objects.
Always use -w.
Try to "use strict;" (or "use strict qw(...);"). Remember that you can add "no strict qw(...);" to individual blocks of code that need less strictness.
Always use -w.
Follow the guidelines in perlstyle.
Always use -w.
The perlstyle manual supplied with Perl has many helpful points.
Coding style is a matter of personal taste. Many people evolve their style over several years as they learn what helps them write and maintain good code. Here's one set of assorted suggestions that seem to be widely used by experienced developers:
Use underscores to separate words. It is generally easier to read $var_names_like_this than $VarNamesLikeThis, especially for non-native speakers of English. It's also a simple rule that works consistently with VAR_NAMES_LIKE_THIS.
Package/Module names are an exception to this rule. Perl informally reserves lowercase module names for 'pragma' modules like integer and strict. Other modules normally begin with a capital letter and use mixed case with no underscores (need to be short and portable).
You may find it helpful to use letter case to indicate the scope or nature of a variable. For example:
$ALL_CAPS_HERE constants only (beware clashes with Perl vars) $Some_Caps_Here package-wide global/static $no_caps_here function scope my() or local() variables
Function and method names seem to work best as all lowercase. e.g., "$obj->as_string()".
You can use a leading underscore to indicate that a variable or function should not be used outside the package that defined it.
Do NOT export method names!
Do NOT export anything else by default without a good reason!
Exports pollute the namespace of the module user. If you must export try to use @EXPORT_OK in preference to @EXPORT and avoid short or common names to reduce the risk of name clashes.
Generally anything not exported is still accessible from outside the module using the ModuleName::item_name (or "$blessed_ref->method") syntax. By convention you can use a leading underscore on names to indicate informally that they are 'internal' and not for public use.
(It is actually possible to get private functions by saying: "my $subref = sub { ... }; &$subref;". But there's no way to call that directly as a method, because a method must have a name in the symbol table.)
As a general rule, if the module is trying to be object oriented then export nothing. If it's just a collection of functions then @EXPORT_OK anything but use @EXPORT with caution.
This name should be as descriptive, accurate, and complete as possible. Avoid any risk of ambiguity. Always try to use two or more whole words. Generally the name should reflect what is special about what the module does rather than how it does it. Please use nested module names to group informally or categorize a module. There should be a very good reason for a module not to have a nested name. Module names should begin with a capital letter.
Having 57 modules all called Sort will not make life easy for anyone (though having 23 called Sort::Quick is only marginally better :-). Imagine someone trying to install your module alongside many others.
If you are developing a suite of related modules/classes it's good practice to use nested classes with a common prefix as this will avoid namespace clashes. For example: Xyz::Control, Xyz::View, Xyz::Model etc. Use the modules in this list as a naming guide.
If adding a new module to a set, follow the original author's standards for naming modules and the interface to methods in those modules.
If developing modules for private internal or project specific use, that will never be released to the public, then you should ensure that their names will not clash with any future public module. You can do this either by using the reserved Local::* category or by using a category name that includes an underscore like Foo_Corp::*.
To be portable each component of a module name should be limited to 11 characters. If it might be used on MS-DOS then try to ensure each is unique in the first 8 characters. Nested modules make this easier.
For additional guidance on the naming of modules, please consult:
http://pause.perl.org/pause/query?ACTION=pause_namingmodules
or send mail to the<EMAIL_ADDRESS>mailing list.
How do you know that you've made the right decisions? Have you picked an interface design that will cause problems later?  Do you have any questions?
The best way to know for sure, and pick up many helpful suggestions, is to ask someone who knows. The<EMAIL_ADDRESS>mailing list is useful for this purpose; it's also accessible via news interface as perl.module-authors at nntp.perl.org.
All you need to do is post a short summary of the module, its purpose and interfaces. A few lines on each of the main methods is probably enough. (If you post the whole module it might be ignored by busy people - generally the very people you want to read it!)
Don't worry about posting if you can't say when the module will be ready - just say so in the message. It might be worth inviting others to help you, they may be able to complete it for you!
It's well known that software developers usually fully document the software they write. If, however, the world is in urgent need of your software and there is not enough time to write the full documentation please at least provide a README file containing:
If the README file seems to be getting too large you may wish to split out some of the sections into separate files: INSTALL, Copying, ToDo etc.
How you choose to license your work is a personal decision. The general mechanism is to assert your Copyright and then make a declaration of how others may copy/use/modify your work.
Perl, for example, is supplied with two types of licence: The GNU GPL and The Artistic Licence (see the files README, Copying, and Artistic, or perlgpl and perlartistic). Larry has good reasons for NOT just using the GNU GPL.
My personal recommendation, out of respect for Larry, Perl, and the Perl community at large is to state something simply like:
Copyright (c) 1995 Your Name. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
This statement should at least appear in the README file. You may also wish to include it in a Copying file and your source files. Remember to include the other words in addition to the Copyright.
To be fully compatible with the Exporter and MakeMaker modules you should store your module's version number in a non-my package variable called $VERSION. This should be a positive floating point number with at least two digits after the decimal (i.e., hundredths, e.g, "$VERSION = "0.01""). Don't use a "1.3.2" style version. See Exporter for details.
It may be handy to add a function or method to retrieve the number. Use the number in announcements and archive file names when releasing the module (ModuleName-1.02.tar.Z). See perldoc ExtUtils::MakeMaker.pm for details.
If possible, register the module with CPAN. Follow the instructions and links on:
http://www.cpan.org/modules/04pause.html
and upload to:
http://pause.perl.org/
and notify<EMAIL_ADDRESS>This will allow anyone to install your module using the "cpan" tool distributed with Perl.
By using the WWW interface you can ask the Upload Server to mirror your modules from your ftp or WWW site into your own directory on CPAN!
Always strive to remain compatible with previous released versions. Otherwise try to add a mechanism to revert to the old behavior if people rely on it. Document incompatible changes.
If it ain't broke, don't fix it! Perl 4 library scripts should continue to work with no problems. You may need to make some minor changes (like escaping non-array @'s in double quoted strings) but there is no need to convert a .pl file into a Module for just that.
All Perl applications that make use of the script will need to be changed (slightly) if the script is converted into a module. Is it worth it unless you plan to make other changes at the same time?
If you are going to convert the script to a module you can use the opportunity to redesign the interface. The guidelines for module creation above include many of the issues you should consider.
This utility will read *.pl files (given as parameters) and write corresponding *.pm files. The pl2pm utilities does the following:
Being a mechanical process pl2pm is not bullet proof. The converted code will need careful checking, especially any package statements. Don't delete the original .pl file till the new .pm one works!
Help save the world! Share your code in a form that makes it easy to reuse.
fragment of code built on top of the reusable modules. In these cases the application could invoked as:
% perl -e 'use Module::Name; method(@ARGV)' ... or % perl -mModule::Name ... (in perl5.002 or higher)
The module and its user have a contract, part of which is common law, and part of which is "written". Part of the common law contract is that a module doesn't pollute any namespace it wasn't asked to. The written contract for the module (A.K.A. documentation) may make other provisions. But then you know when you "use RedefineTheWorld" that you're redefining the world and willing to take the consequences.
| 2020-06-21 | perl v5.30.3 |


Let me tell you a joke: I have a JavaScript-themed dating profile, and nobody calls me back.
 I can't believe it exists!


CS56 Computer Animation: Lab 10
In which, we play with physics and possibly choose our own adventure....
The goal of this lab is to
- gain hands-on experience using a physics engine
- explore additional topics of your choosing for extra credit!
Get the source
This assignment has been added to your AnimationFramework repository. To get the source, run
> cd cs56/AnimationToolkit
> git pull
> cd build
> cmake ..
> make
You should now have a new directory under assignments called
a10-physics.
Assignment 10: Use the force
Due December 12
Question 1: Computing forces and torques (5 points)
In this question, use Newton's equations of motion to compute the net force
and net torque for the following box. Show your calculations in your readme
for this week.
- The box has mass 10.0 and dimensions (100, 200, 100)
- The box starts at position (0,0,0)
- Each frame, we apply two forces. The forces and positions are given in the
box's local coordinate frame.
- a linear force of (0, 0, 10) applied at position (-50,0,-50)
- a linear force of (0, 0, 5) applied at position (50,0,-50)
To check your work, use ODE to simulate the box
and print out the forces and torques each frame. Verify that you get the same
result that you calculated in your readme. Use ABoxSim1 as a guide.
CAREFUL: don't forget to compare your answers against the simulated forces in
local coordinates!
To run the demo from the build directory, type
build> ../bin/a10-forces
Question 2: Unstoppable!! (10 points)
In this question, you will implement a character that can interact with a
physically-simulated wall. This demo will require defining both kinematic and
dynamic objects in the ODE physics engine. The character will consist of
kinematic objects and the wall will consist of dynamic objects.
Use the code in ABoxSim3 as an example.
Helpful Reference: Open Dynamics Engine (ODE) Reference Manual
To run the demo from the build directory, type
build> ../bin/a10-unstoppable
Controls
- Press spacebar to reset the simulation
- Press 'd' to toggle the display to show either the character or physics objects
-
Features
- Create a wall of bricks. The wall width should be at least 200 and height should be 200. Place the wall so it is perpendicular to the +Z axis, with its base centered at position (0,0,100). Each brick should be dynamically simulated
- Each brick should have dimensions (50, 50, 50) and mass 50.
- Create a rigid body for each brick using dBodyCreate()
- Create a collision object for each brick using dCreateBox()
- For each joint of the skeleton, create a kinematically simulated sphere. Each
sphere should have radius 2 and total mass equal to 5.
- Create a rigid body for the sphere using dBodyCreate
- Set the rigid body to be kinematic using dBodySetKinematic
- Create a collision object for the sphere using dCreateSphere
- Each frame, update the position of the spheres based on the global positions of each joint
- Draw the boxes and spheres simulated by your program
BONUS: Fireworks (5 points)
In this question, you will implement fireworks using particle systems.
Implement your solution in assignments/a10-physics/fireworks.cpp
To run the demo from the build directory, type
build> ../bin/a10-fireworks
For this demo, implement a rocket that explodes into
fireworks when the user presses the space bar.
Each firework should contain two particle systems: one which
represents the rocket and one which represents the the exploded firework.
Fireworks go through three stages: ROCKET, EXPLODE, DONE.
- ROCKET: a rocket particle should be initialized with a randomized start
velocity and "time to live". When the rocket's time to live expires, the firework
switches to mode EXPLODE.
- EXPLODE: N sparks are initialized at the current location of the rocket
with randomized velocities extending in a circle arond the start position.
Each particle should get a "time to live". When all firework particles have
exceeded their time to live, the firework switches to mode DONE
- DONE: The firework is no longer updated or drawn and is available for re-launch
by the user.
Features
- Particles should contain
- mass, velocity, position, color, time to live, transparency, and size
- derivatives for position and velocity
- accumilated forces
- In update, compute the derivative and update each particle's state. Additionally, decrement ttl by the delta time.
- Create a new rocket when the user presses spacebar
- When a particle expires, it should either be deleted or recycled as part of an object pool.
- Randomize the properties of the particles.
- Define at least one external force to act on the particles (e.g. gravity)
- Visualize the rocket with a cone. The cone should face the direction that the
particle is moving.
BONUS: Behave! (10 points)
In this question, you will animate a simple crowd using boid behaviors.
Implement your behaviors in assignments/a10-physics/ABehaviors.cpp
Animate a character using your WASD controller in
assignments/a10-physics/ASteerable.cpp
To run the demo from the build directory, type
build> ../bin/a10-behaviors
This demo requires you to have a placeholder character
drawn as a sphere.
Implement the steering behaviors in ABehaviors.cpp. The basecode
provides a UI for tweaking parameters and for environment
Features
- Implement AFlee:calculateDesiredVelocity
- Implement AArrival:calculateDesiredVelocity
- Implement ADeparture:calculateDesiredVelocity
- Implement ASeparation:calculateDesiredVelocity
- Implement ACohesion:calculateDesiredVelocity
- Implement AAlignment:calculateDesiredVelocity
- Implement AFlocking:calculateDesiredVelocity
- Implement ALeader:calculateDesiredVelocity
- Port your WASD controller to ASteerable to create a humanoid character
Submission Requirements


To be part of the organization where learning the process is a primary source where one can develop individual skills and utilize it to the fullest potential for the development of Organization Goal set and development of personal growth.
| Examination | Board/University | School / College | Percentage | Year of Passing |
|---|---|---|---|---|
| B.E | Savitribai Phule Pune University | International Institute of Information Technology, I²IT, Pune | - | 2020 |
| T.E | 60.01 | 2019 | ||
| S.E | 60.19 | 2018 | ||
| F.E | 66.52 | 2017 | ||
| XII | Maharashtra State Board | Lal Bahadur Shastri Jr. College, Bhandara | 83.6 | 2016 |
| X | Maharashtra State Board | Rastriya Adarsh Vidyalaya, Ramtek | 93.60 | 2014 |
In this project, we developed an automated energy metering system, which can monitor the energy consumed and generate bills for the consumed energy, it also had an integrated theft detection which will automatically shut-down the system if theft is detected.
This project deals with the common problem faced by civil engineers;which is adjusting the tripod and leveling screws of dumpy level. With the help of Arduino UNO, Gyroscope sensor and servo motor the process of automation is to be carried out.
The monitoring of temperature and humidity are major areas for industries. Any kind of imbalance in the environmental conditions or unset parameters can create financial loss in the productivity of industries. To solve this, we made aprototypethatcan sense the real time temperature and humidity of a room and show the data in a web application with an alert system as well as store the data for future analysis in a database.


This dialog is invoked with the Export Motorola S1 Records, Export Motorola S2 Records, and Export Motorola S3 Records commands. It is based on the standard File Save dialog. You can enter a name and select the location of the file you want to export to.
The folders and files in the current location are displayed. Double-clicking a folder opens it – that is, your current location moves to that folder. To open the folder one level higher (the “parent” of the current folder) click the “Up One Level” button. Double-clicking a file will attempt to replace that file – you are prompted if you want to replace it.
Save In
To see how the current folder fits in the hierarchy on your computer, click the down arrow. To see what's inside a folder, click it.
File Name
Type the filename you want to export to. If you type the name of an existing file you are prompted if you want to replace it. If you type the name of a folder that folder is opened and the contents are displayed.
Save As Type
By default you only see existing files with a .S file extension; this is commonly used as the file extension of Motorola-S format files. To see other files select a different filter from the list. To see all files use the *.* filter. Note that you can add, delete or modify the filters list by using the Filters page of the Options dialog.
Export (discontiguous) highlighted areas only
If this option is selected then only the currently highlighted bytes in the active file are exported (see Highlighter). Otherwise the currently selected bytes are exported.
When this option is on each S record is written with its actual file address. For example, if you import a Motorola S file using the "Use Import Addresses" and the "Highlight" options (see Import Motorola S Records dialog) then subsequently export the file using the "Export highlighted areas only" option then you will get back the same logical file (unless some of the original records were past the end of the file imported into).
This option is disabled if there are currently no bytes highlighted in the active file.