www.collazo.ws http://www.collazo.ws A little nothing about something Wed, 18 Apr 2012 21:47:45 +0000 en hourly 1 http://wordpress.org/?v=3.3.2 Deploy-itron now open source http://www.collazo.ws/2012/04/18/deploy-itron-now-open-source http://www.collazo.ws/2012/04/18/deploy-itron-now-open-source#comments Wed, 18 Apr 2012 21:21:14 +0000 robert http://www.collazo.ws/?p=1114 Read more »

]]>
Have you ever wanted to deploy a piece of software quickly on Rackspace Cloud Servers? You’ve probably seen various utilities like Fabric or Chef. I wanted a web interface for people to use so I wrote Deploy-itron about two years ago.

A few people have asked so I went ahead and I cleaned up the code for Deploy-itron and uploaded it to github. You can find it over at github here. The code isn’t pretty and I could probably have done some things differently.

The thing most people will want are the configuration scripts for the various software applications. They are located in the scripts//tmp directory and have the common filename of run.sh. As an example you can find the deploy script for WordPress here.

Feel free to let me know what you think in the comments.

]]>
http://www.collazo.ws/2012/04/18/deploy-itron-now-open-source/feed 0
Uploading to Rackspace Cloud Files with PHP http://www.collazo.ws/2011/08/30/uploading-to-rackspace-cloud-files-with-php http://www.collazo.ws/2011/08/30/uploading-to-rackspace-cloud-files-with-php#comments Tue, 30 Aug 2011 20:50:25 +0000 robert http://www.collazo.ws/?p=1104 Read more »

]]>
Someone recently asked me if I knew of a web based uploader that returned the Akamai CDN URL of the file. I looked around and found this site but it wasn’t quite what was wanted. I decided to edit the code in the example from that site and came up with this.

First, you’ll need the PHP bindings for Rackspace Cloud Files. They can be found here. You’ll need to put the files cloudfiles.php, cloudfiles_http.php, and cloudfiles_exceptions.php in directory on your web server.

Next, save the following code as “index.html”:

“index.html”
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title>Upload to Rackspace Cloud Files</title>
  5. <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
  6. </head>
  7. <body>
  8. <form action="upload.php" enctype="multipart/form-data" method="POST">
  9.     Username: <input name="username" type="text" /><br />
  10.     Key: <input name="key" type="password" /><br />
  11.     Container: <input name="container" type="text" /> <br />
  12.     File: <input name="upload" type="file" /><br />
  13.     <input name="submit" type="submit" value="Upload To Rackspace!" />
  14. </form>
  15. </body>
  16. </html>

After that is saved, create a new file called “upload.php” and save the following:

“upload.php”
  1. <?php
  2. // Turn on error reporting so we can see if there are any problems
  3. error_reporting(E_ALL);
  4. ini_set('display_errors', 1);
  5.  
  6. // include the API
  7. require('cloudfiles.php');
  8.  
  9. // cloud info
  10. $username = $_POST['username']; // username
  11. $key = $_POST['key']; // api key
  12. $container = $_POST['container']; // container name
  13.  
  14. ob_start();
  15.  
  16. // Print some information regarding who and where
  17. echo "Username: $username<br/>";
  18. echo "Container: $container<br/>";
  19.  
  20. $localfile = $_FILES['upload']['tmp_name'];
  21. $filename = $_FILES['upload']['name'];
  22.  
  23. // Print some information about the file
  24. echo "Local: $localfile<br/>";
  25. echo "File : $filename<br/>";
  26.  
  27. ob_flush();
  28.  
  29. // Connect to Rackspace
  30. $auth = new CF_Authentication($username, $key);
  31. $auth->authenticate();
  32. $conn = new CF_Connection($auth);
  33.  
  34. // Get the container we want to use
  35. $container = $conn->create_container($container);
  36.  
  37. // store file information
  38.  
  39. ob_flush();
  40.  
  41. // upload file to Rackspace
  42. $object = $container->create_object($filename);
  43. $object->load_from_filename($localfile);
  44.  
  45. $uri = $container->make_public();
  46. print "Your URL is: " . $object->public_uri();
  47.  
  48. ob_end_flush();
  49. ?>

The important part is on line 46 that contains “$object->public_uri();”. That is function in the API binding that returns the objects URL.

]]>
http://www.collazo.ws/2011/08/30/uploading-to-rackspace-cloud-files-with-php/feed 5
Using Rackspace DNSaaS with curl (part 1) http://www.collazo.ws/2011/07/08/using-rackspace-dnsaas-with-curl-part-1 http://www.collazo.ws/2011/07/08/using-rackspace-dnsaas-with-curl-part-1#comments Fri, 08 Jul 2011 20:35:02 +0000 robert http://www.collazo.ws/?p=1074 Read more »

]]>
With the release of Rackspace DNSaaS (blog post here), I thought I would put together some examples of using curl with the service. With this release, you now have programmatic access to DNS via the API where you can set TTLs, create and delete various record types, and create and delete domains.

Authentication

First, you’ll have to authenticate. To do this, you will need your API key and username.

  1. $ curl -D – -H "X-Auth-Key: yourAPIKey" -H "X-Auth-User: yourUsername" https://auth.api.rackspacecloud.com/v1.0

You should receive the following response:

HTTP/1.1 204 No Content
Server: Apache/2.2.3 (Mosso Engineering)
X-Storage-Url: https://storage101.dfw1.clouddrive.com/v1/yourAccountHash
Content-Type: application/octet-stream
Date: Date and Time
X-Auth-Token: yourAuthToken
X-Storage-Token: yourStorageToken
X-Server-Management-Url: https://servers.api.rackspacecloud.com/v1.0/yourAccountNumber
Connection: Keep-Alive
X-CDN-Management-Url: https://cdn1.clouddrive.com/v1/yourAccountHash
Content-Length: 0

Listing Domain Information

To see a list of your current domains, run the following command. Don’t forget to replace your auth token and account number.

  1. $ curl -X GET -H "X-Auth-Token: yourAuthToken" -H "Accept: application/xml" https://dns.api.rackspacecloud.com/v1.0/yourAccountNumber/domains

Your output will be XML formatted and look like:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<domains xmlns="http://docs.rackspacecloud.com/dns/api/v1.0" xmlns:ns2="http://www.w3.org/2005/Atom" xmlns:ns3="http://docs.rackspacecloud.com/dns/api/management/v1.0" totalEntries="2">
    <domain id="1697941" accountId="yourAccountNumber" name="collazo.ws" updated="2011-06-28T04:18:17Z" created="2009-12-11T01:01:26Z" />
    <domain id="4062964" accountId="yourAccountNumber" name="deployitron.com" updated="2011-03-19T08:10:31Z" created="2011-01-21T23:24:44Z" />
</domains>

To see the same thing formatted as JSON output, run the following:

  1. $ curl -X GET -H "X-Auth-Token: yourAuthToken" -H "Accept: application/json" https://dns.api.rackspacecloud.com/v1.0/yourAccountNumber/domains
{
   "domains":[
      {
         "name":"collazo.ws",
         "id":1697941,
         "accountId":yourAccountNumber,
         "updated":"2011-06-28T04:18:17.000+0000",
         "created":"2009-12-11T01:01:26.000+0000"
      },
      {
         "name":"deployitron.com",
         "id":4062964,
         "accountId":yourAccountNumber,
         "updated":"2011-03-19T08:10:31.000+0000",
         "created":"2011-01-21T23:24:44.000+0000"
      }
   ],
   "totalEntries":2
}

To get details about a particular domain, you’ll enter the following:

  1. $ curl -X GET -H "X-Auth-Token: yourAuthToken" -H "Accept: application/xml" https://dns.api.rackspacecloud.com/v1.0/yourAccountNumber/domains/4062964 # <- make sure you replace this with your domain ID

This will output the following in XML format:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<domain xmlns="http://docs.rackspacecloud.com/dns/api/v1.0" xmlns:ns2="http://www.w3.org/2005/Atom" xmlns:ns3="http://docs.rackspacecloud.com/dns/api/management/v1.0" id="4062964" accountId="yourAccountNumber" name="deployitron.com" ttl="3600" emailAddress="ipadmin@stabletransit.com" updated="2011-03-19T08:10:31Z" created="2011-01-21T23:24:44Z">
    <nameservers>
        <nameserver name="ns.rackspace.com" />
        <nameserver name="ns1.rackspace.com" />
    </nameservers>
    <recordsList totalEntries="5">
        <record id="A-1234567" type="A" name="deployitron.com" data="174.143.174.233" ttl="3600" updated="2011-01-22T11:28:10Z" created="2011-01-22T11:28:10Z" />
        <record id="NS-2345678" type="NS" name="deployitron.com" data="dns1.stabletransit.com" ttl="3600" updated="2011-01-21T23:24:44Z" created="2011-01-21T23:24:44Z" />
        <record id="NS-2345680" type="NS" name="deployitron.com" data="dns2.stabletransit.com" ttl="3600" updated="2011-01-21T23:24:44Z" created="2011-01-21T23:24:44Z" />
        <record id="CNAME-4567890" type="CNAME" name="www.deployitron.com" data="deployitron.com" ttl="3600" updated="2011-01-22T11:30:35Z" created="2011-01-22T11:30:35Z" />
        <record id="CNAME-5678901" type="CNAME" name="www2.deployitron.com" data="deployitron.com" ttl="600" updated="2011-03-19T08:10:31Z" created="2011-03-19T08:10:31Z" />
    </recordsList>
</domain>

To get the same thing JSON formatted:

  1. $ curl -X GET -H "X-Auth-Token: yourAuthToken" -H "Accept: application/json" https://dns.api.rackspacecloud.com/v1.0/yourAccountNumber/domains/4062964
{
   "name":"deployitron.com",
   "id":4062964,
   "accountId":yourAccountNumber,
   "nameservers":[
      {
         "name":"ns.rackspace.com"
      },
      {
         "name":"ns1.rackspace.com"
      }
   ],
   "updated":"2011-03-19T08:10:31.000+0000",
   "ttl":3600,
   "recordsList":{
      "records":[
         {
            "name":"deployitron.com",
            "id":"A-1234567",
            "type":"A",
            "data":"174.143.174.233",
            "updated":"2011-01-22T11:28:10.000+0000",
            "ttl":3600,
            "created":"2011-01-22T11:28:10.000+0000"
         },
         {
            "name":"deployitron.com",
            "id":"NS-2345678",
            "type":"NS",
            "data":"dns1.stabletransit.com",
            "updated":"2011-01-21T23:24:44.000+0000",
            "ttl":3600,
            "created":"2011-01-21T23:24:44.000+0000"
         },
         {
            "name":"deployitron.com",
            "id":"NS-2345680",
            "type":"NS",
            "data":"dns2.stabletransit.com",
            "updated":"2011-01-21T23:24:44.000+0000",
            "ttl":3600,
            "created":"2011-01-21T23:24:44.000+0000"
         },
         {
            "name":"www.deployitron.com",
            "id":"CNAME-4567890",
            "type":"CNAME",
            "data":"deployitron.com",
            "updated":"2011-01-22T11:30:35.000+0000",
            "ttl":3600,
            "created":"2011-01-22T11:30:35.000+0000"
         },
         {
            "name":"www2.deployitron.com",
            "id":"CNAME-5678901",
            "type":"CNAME",
            "data":"deployitron.com",
            "updated":"2011-03-19T08:10:31.000+0000",
            "ttl":600,
            "created":"2011-03-19T08:10:31.000+0000"
         }
      ],
      "totalEntries":5
   },
   "emailAddress":"ipadmin@stabletransit.com",
   "created":"2011-01-21T23:24:44.000+0000"
}

Creating Domains

To create a domain, we issue the following JSON formatted command:

  1. $ curl -D – -X POST -d '{ "domains":[ { "name":"aeVo8AiHeesh.ws", "emailAddress":"robert@aeVo8AiHeesh.ws", "comment":"This is the first domain created via API", "recordsList": { "records":[ { "ttl":600, "data":"127.0.0.1", "name":"aeVo8AiHeesh.ws", "type":"A" },{ "priority": 10, "ttl":86400, "data":"mail.aeVo8AiHeesh.ws", "name":"aeVo8AiHeesh.ws", "type":"MX" },{ "ttl":300, "data":"v=spf1 mx -all", "name":"aeVo8AiHeesh.ws", "type":"TXT" } ] } } ] }' -H "X-Auth-Token: yourAuthToken" -H "Content-Type: application/json" https://dns.api.rackspacecloud.com/v1.0/yourAccountNumber/domains

And the following is returned:

HTTP/1.1 202 Accepted
X-API-VERSION: 1.0.8
Content-Type: application/json
Date: Fri, 08 Jul 2011 15:18:12 GMT
Content-Length: 155
Server: Jetty(7.3.1.v20110307)

{"jobId":"yourJobID","callbackUrl":"https://dns.api.rackspacecloud.com/v1.0/yourAccountNumber/status/yourJobID"}

It’s important to note your job ID so that you can check the status of your job by issuing the following command:

  1. $ curl -X GET -H "X-Auth-Token: yourAuthToken" -H "Accept: application/json" https://dns.api.rackspacecloud.com/v1.0/yourAccountNumber/status/yourJobID

If your job completed successfully, you should see something similar to the following:

{"domains":[{"name":"aevo8aiheesh.ws","id":2841222,"comment":"This is the first domain created via API","accountId":yourAccountNumber,"nameservers":[{"name":"ns.rackspace.com"},{"name":"ns1.rackspace.com"}],"updated":"2011-07-08T15:21:46.000+0000","ttl":3600,"recordsList":{"records":[{"name":"aevo8aiheesh.ws","id":"A-7088731","type":"A","data":"127.0.0.1","updated":"2011-07-08T15:21:47.000+0000","ttl":600,"created":"2011-07-08T15:21:47.000+0000"},{"name":"aevo8aiheesh.ws","id":"MX-3272903","priority":10,"type":"MX","data":"mail.aeVo8AiHeesh.ws","updated":"2011-07-08T15:21:48.000+0000","ttl":86400,"created":"2011-07-08T15:21:48.000+0000"},{"name":"aevo8aiheesh.ws","id":"TXT-243256","type":"TXT","data":"v=spf1 mx -all","updated":"2011-07-08T15:21:49.000+0000","ttl":300,"created":"2011-07-08T15:21:49.000+0000"}]},"emailAddress":"robert@aeVo8AiHeesh.ws","created":"2011-07-08T15:21:45.000+0000"}]}

I see that it was created and I can verify via dig by running:

  1. $ dig aevo8aiheesh.ws @ns.rackspace.com any

Which returns:

; <<>> DiG 9.6.0-APPLE-P2 <<>> aevo8aiheesh.ws @ns.rackspace.com any
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40475
;; flags: qr aa rd; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 2
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;aevo8aiheesh.ws.               IN      ANY

;; ANSWER SECTION:
aevo8aiheesh.ws.        3600    IN      SOA     ns1.rackspace.com. robert.aevo8aiheesh.ws. 1310138509 3600 3600 3600 3600
aevo8aiheesh.ws.        86400   IN      MX      10 mail.aevo8aiheesh.ws.
aevo8aiheesh.ws.        3600    IN      NS      dns1.stabletransit.com.
aevo8aiheesh.ws.        3600    IN      NS      dns2.stabletransit.com.
aevo8aiheesh.ws.        300     IN      TXT     "v=spf1 mx -all"
aevo8aiheesh.ws.        600     IN      A       127.0.0.1

;; ADDITIONAL SECTION:
dns1.stabletransit.com. 86400   IN      A       69.20.95.4
dns2.stabletransit.com. 86400   IN      A       65.61.188.4

;; Query time: 35 msec
;; SERVER: 69.20.95.4#53(69.20.95.4)
;; WHEN: Fri Jul  8 10:45:38 2011
;; MSG SIZE  rcvd: 241

We can accomplish the same thing via XML by running the following:

  1. $ curl -D - -X POST -d '<domains xmlns="http://docs.rackspacecloud.com/dns/api/v1.0"><domain name="paingeez7uec.com" ttl="5600" emailAddress="robert@paingeez7uec.com" comment="This is the second domain created via API"><recordsList><record type="A" data="127.0.0.1" name="paingeez7uec.com"/><record type="MX" data="mail.paingeez7uec.com" priority="10" ttl="5000" name="paingeez7uec.com"/><record type="TXT" data="v=spf1 mx -all" name="paingeez7uec.com" ttl="600"/></recordsList></domain></domains>' -H "X-Auth-Token: yourAuthToken" -H "Content-Type: application/xml" https://dns.api.rackspacecloud.com/v1.0/yourAccountID/domains

Which outputs:

HTTP/1.1 202 Accepted
X-API-VERSION: 1.0.8
Content-Type: application/json
Date: Fri, 08 Jul 2011 19:35:22 GMT
Content-Length: 155
Server: Jetty(7.3.1.v20110307)

{"jobId":"yourJobID","callbackUrl":"https://dns.api.rackspacecloud.com/v1.0/yourAccountNumber/status/yourJobID"}

Checking the status:

  1. $ curl -X GET -H "X-Auth-Token: yourAuthToken" -H "Accept: application/xml" https://dns.api.rackspacecloud.com/v1.0/yourAccountID/status/yourJobID

Which returns:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><domains xmlns="http://docs.rackspacecloud.com/dns/api/v1.0" xmlns:ns2="http://www.w3.org/2005/Atom" xmlns:ns3="http://docs.rackspacecloud.com/dns/api/management/v1.0"><domain id="2841642" accountId="yourAccountID" name="paingeez7uec.com" ttl="5600" emailAddress="robert@paingeez7uec.com" updated="2011-07-08T19:35:23Z" created="2011-07-08T19:35:23Z" comment="This is the second domain created via API"><nameservers><nameserver name="ns.rackspace.com"/><nameserver name="ns1.rackspace.com"/></nameservers><recordsList><record id="A-7089765" type="A" name="paingeez7uec.com" data="127.0.0.1" ttl="5600" updated="2011-07-08T19:35:24Z" created="2011-07-08T19:35:24Z"/><record id="MX-3274128" type="MX" name="paingeez7uec.com" data="mail.paingeez7uec.com" ttl="5000" priority="10" updated="2011-07-08T19:35:25Z" created="2011-07-08T19:35:25Z"/><record id="TXT-243385" type="TXT" name="paingeez7uec.com" data="v=spf1 mx -all" ttl="600" updated="2011-07-08T19:35:26Z" created="2011-07-08T19:35:26Z"/></recordsList></domain></domains>

To verify the domain exists via dig:

  1. $ dig paingeez7uec.com @ns.rackspace.com any

Which outputs:

; <<>> DiG 9.6.0-APPLE-P2 <<>> paingeez7uec.com @ns.rackspace.com any
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45478
;; flags: qr aa rd; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 2
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;paingeez7uec.com.              IN      ANY

;; ANSWER SECTION:
paingeez7uec.com.       5600    IN      SOA     ns1.rackspace.com. robert.paingeez7uec.com. 1310153726 5600 5600 5600 5600
paingeez7uec.com.       5000    IN      MX      10 mail.paingeez7uec.com.
paingeez7uec.com.       5600    IN      NS      dns1.stabletransit.com.
paingeez7uec.com.       5600    IN      NS      dns2.stabletransit.com.
paingeez7uec.com.       600     IN      TXT     "v=spf1 mx -all"
paingeez7uec.com.       5600    IN      A       127.0.0.1

;; ADDITIONAL SECTION:
dns1.stabletransit.com. 86400   IN      A       69.20.95.4
dns2.stabletransit.com. 86400   IN      A       65.61.188.4

;; Query time: 42 msec
;; SERVER: 69.20.95.4#53(69.20.95.4)
;; WHEN: Fri Jul  8 14:49:55 2011
;; MSG SIZE  rcvd: 239

Now you can create domains in using both JSON and XML formatted responses.

Deleting Domains

To delete a domain using curl follow these simple steps. You will need your account ID (yourAccountID in previous examples) and the domain ID from a domain list.

JSON:

  1. $ curl -X DELETE -H "X-Auth-Token: yourAuthToken" -H "Accept: application/json" https://dns.api.rackspacecloud.com/v1.0/yourAccountID/domains/2841222
{"jobId":"yourJobID","callbackUrl":"https://dns.api.rackspacecloud.com/v1.0/yourAccountID/status/yourJobID"}

XML:

  1. $ curl -X DELETE -H "X-Auth-Token: yourAuthToken" -H "Accept: application/xml" https://dns.api.rackspacecloud.com/v1.0/yourAccountID/domains/2841642
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><asyncResponse xmlns="http://docs.rackspacecloud.com/dns/api/v1.0"><jobId>yourJobID</jobId><callbackUrl>https://dns.api.rackspacecloud.com/v1.0/yourAccountID/status/yourJobID</callbackUrl></asyncResponse>

Stay tuned for part 2 where I will show how to modify domains, and add/delete/modify records.

]]>
http://www.collazo.ws/2011/07/08/using-rackspace-dnsaas-with-curl-part-1/feed 2
Edge Purge Content from Rackspace Cloud Files via curl http://www.collazo.ws/2011/06/29/edge-purge-content-from-rackspace-cloud-files-via-curl http://www.collazo.ws/2011/06/29/edge-purge-content-from-rackspace-cloud-files-via-curl#comments Wed, 29 Jun 2011 21:10:16 +0000 robert http://www.collazo.ws/?p=1052 Read more »

]]>
When the Rackspace Cloud Files product received Edge Purge functionality via the API, I didn’t give it much thought as I didn’t use the CDN functionality for any of my personal projects. That changed recently and I started doing some work with the CDN (powered by Akamai). All was fine until I realized I had set the TTL for the objects too high for my testing and wasn’t receiving the right content. Below you’ll find the appropriate methods for doing an edge purge of an object and container via curl using the API.

First, you’ll need to authenticate using your API key and username.

  1. $ curl -D – -H "X-Auth-Key: yourAPIkey" -H "X-Auth-User: yourUsername" https://auth.api.rackspacecloud.com/v1.0

You should receive the following:

  1. HTTP/1.1 204 No Content
  2. Server: Apache/2.2.13 (Red Hat)
  3. X-Storage-Url: https://storage.clouddrive.com/v1/yourAccountHash
  4. Content-Type: application/octet-stream
  5. Date: Date & Time
  6. X-Auth-Token: yourAuthToken
  7. X-Storage-Token: yourStorageToken
  8. X-Server-Management-Url: https://servers.api.rackspacecloud.com/v1.0/yourAccountNumber
  9. Connection: Keep-Alive
  10. X-CDN-Management-Url: https://cdn1.clouddrive.com/v1/yourAccountHash
  11. Content-Length: 0

You now have the information you need to do the Edge Purge from the Akamai fronted CDN. To delete an object, you’ll need the “X-Auth-Token” and “X-CDN-Management-Url”.

To do an Edge Purge of the given object “foo.txt” in the container “bar”, send the following via curl:

  1. $ curl -D – -X DELETE -H "X-Auth-Token: yourAuthToken" -H "X-Purge-Email: your@email.address"  https://cdn1.clouddrive.com/v1/yourAccountHash/bar/foo.txt

You’ll receive the following in response as well as an email to your@email.address.

  1. HTTP/1.1 204 No Content
  2. Date: Date & Time
  3. Server: Apache
  4. X-Akam-Est-Time: 420
  5. X-Akam-Result-Code: 100
  6. Content-Length: 0
  7. Connection: close
  8. Content-Type: text/plain; charset=UTF-8

To do an Edge Purge of the container “bar”, send the following via curl:

  1. curl -D – -H "X-Auth-Token: yourAuthToken" -H "X-Purge-Email: your@email.address" -X DELETE https://cdn1.clouddrive.com/v1/yourAccountHash/bar/

You should receive a response identical to the one you did for object Edge Purge.

That’s it!

]]>
http://www.collazo.ws/2011/06/29/edge-purge-content-from-rackspace-cloud-files-via-curl/feed 1
A Day I Will Never Forget http://www.collazo.ws/2011/05/02/a-day-i-will-never-forget http://www.collazo.ws/2011/05/02/a-day-i-will-never-forget#comments Mon, 02 May 2011 15:39:09 +0000 robert http://www.collazo.ws/?p=1023 Read more »

]]>
There are some events that stay with a person for the rest of their life – moments where a person says “I remember where I was when that happened.” There have been several of these events in my lifetime. Sure, I remember some things about John Lennon’s death and the attempted assassination of Ronald Reagan. I definitely remember where I was when the Space Shuttles Challenger and Columbia exploded, and when the First Gulf War started.

Perhaps the one event in recent memory that has affected me most though is the attacks of September 11, 2001. I still can’t watch news footage from that day or hear the recollection of those directly affected without choking up. There are many things that occur daily in the United States of America but nothing like what happened that day. That event changed the life of a lot of people. As we approached the 10th anniversary of the attacks, I still thought of where I was on that day. Usually, random thoughts will pop in to my head when I see an airplane overhead or walk in to an airport.

Yesterday, at ~22:30 CDT (-0600 GMT), President Barack Obama announced the death of Osama bin Laden, the man who was the mastermind behind the 9/11 attacks. The first feeling I had was excitement that “we” had caught our man. As I heard the President’s words, I could only nod my head in agreement when I heard him say “On nights like this one, we can say to those families who lost loved ones to al Qaeda’s terror: justice has been done.” When he said “A small team of Americans carried out the operation with extraordinary courage and capability. No Americans were harmed. They took care to avoid civilian casualties. After a firefight they killed Osama Bin Laden and took custody of his body,” I was thankful that no American’s died on the mission.

While watching his live address, I watched my Twitter stream to see what people were saying. Some were very amusing like:


Unix says it best: chmod +x /bin/laden
@neiltyson
Neil deGrasse Tyson


FOX News: Elderly Man on Dialysis Killed by Young African-American Male
@MMFlint
Michael Moore


Beloved character actor Osama bin Laden, star of TV’s “Fox News”, dies age 54
@me_irl
the government man


So when Obama said last week he had ‘better stuff to do’ than talk about his birth certificate… Yeah.
@ewstephe
Emily Stephenson


They should have captured Bin Laden alive and made him continually go through airport security for the rest of his life.
@jperrotto
John Perrotto

There were some funny pictures posted:


There were some that were insightful:


This is a night that justifies the Library of Congress archiving all of Twitter.
@klerner
Kevin Lerner


Look at Obama’s face when Seth Meyers made the joke about Bin Laden last night. Meme-creators, go to town. http://twitpic.com/4s777w
@NewYorkObserver
NewYorkObserver

And lastly, there were some that reflected what I was feeling as I saw people celebrating:


“I never wanted to see anybody die, but there are a few obituary notices I have read with pleasure.” – Clarence Darrow
@SusanEJacobsen
Susan Jacobsen


In the particular way America is celebrating bin Laden’s death we see the monster’s most enduring & lamentable victory: http://bit.ly/lHAl3H
@davidsirota
David Sirota

Another day has passed. I will always remember where I was when this happened.

]]>
http://www.collazo.ws/2011/05/02/a-day-i-will-never-forget/feed 0
Tweets for 2011-05-02 http://www.collazo.ws/2011/05/02/tweets-for-2011-05-02-2 http://www.collazo.ws/2011/05/02/tweets-for-2011-05-02-2#comments Mon, 02 May 2011 05:59:00 +0000 robert http://www.collazo.ws/2011/05/02/tweets-for-2011-05-02-2
  • How many newspaper editors are rushing to redo their front page for tomorrow? #
  • Best video of the current Osama coverage: http://youtu.be/XZ5TajZYW6Y #
  • ]]>
    http://www.collazo.ws/2011/05/02/tweets-for-2011-05-02-2/feed 0
    Tweets for 2011-05-02 http://www.collazo.ws/2011/05/02/tweets-for-2011-05-02 http://www.collazo.ws/2011/05/02/tweets-for-2011-05-02#comments Mon, 02 May 2011 05:59:00 +0000 robert http://www.collazo.ws/2011/05/02/tweets-for-2011-05-02
  • How many newspaper editors are rushing to redo their front page for tomorrow? #
  • Best video of the current Osama coverage: http://youtu.be/XZ5TajZYW6Y #
  • ]]>
    http://www.collazo.ws/2011/05/02/tweets-for-2011-05-02/feed 0
    Tweets for 2011-04-29 http://www.collazo.ws/2011/04/29/tweets-for-2011-04-29-2 http://www.collazo.ws/2011/04/29/tweets-for-2011-04-29-2#comments Fri, 29 Apr 2011 05:59:00 +0000 robert http://www.collazo.ws/2011/04/29/tweets-for-2011-04-29-2
  • Cloud Expertise Featured At Interop http://bit.ly/lmabRW #
  • @AdamZilberbaum Try using Cyberduck for Rackspace Cloud Files instead of the Control Panel. http://bit.ly/ewicgo in reply to AdamZilberbaum #
  • @IcyLiquid Pics or it didn't happen. in reply to IcyLiquid #
  • ]]>
    http://www.collazo.ws/2011/04/29/tweets-for-2011-04-29-2/feed 0
    Tweets for 2011-04-29 http://www.collazo.ws/2011/04/29/tweets-for-2011-04-29 http://www.collazo.ws/2011/04/29/tweets-for-2011-04-29#comments Fri, 29 Apr 2011 05:59:00 +0000 robert http://www.collazo.ws/2011/04/29/tweets-for-2011-04-29
  • Cloud Expertise Featured At Interop http://bit.ly/lmabRW #
  • @AdamZilberbaum Try using Cyberduck for Rackspace Cloud Files instead of the Control Panel. http://bit.ly/ewicgo in reply to AdamZilberbaum #
  • @IcyLiquid Pics or it didn't happen. in reply to IcyLiquid #
  • ]]>
    http://www.collazo.ws/2011/04/29/tweets-for-2011-04-29/feed 0
    Tweets for 2011-04-28 http://www.collazo.ws/2011/04/28/tweets-for-2011-04-28-2 http://www.collazo.ws/2011/04/28/tweets-for-2011-04-28-2#comments Thu, 28 Apr 2011 05:59:00 +0000 robert http://www.collazo.ws/2011/04/28/tweets-for-2011-04-28-2
  • @coltfred Just had time to read the article. I think that choosing the right provider is key. OpenStack = no lock in in reply to coltfred #
  • ]]>
    http://www.collazo.ws/2011/04/28/tweets-for-2011-04-28-2/feed 0