Wiredrive is Seeking an Operations Engineer

Do you want to help build a globally distributed, high volume application? Do you want to make it perform better, faster, and stronger? Are you the rare person that wants to be a developer and sys admin? Are you comfortable with infrastructure and configuration, but can also write tests, debug, and deploy? Are you excited about the DevOps movement?

The infrastructure team maintains and expands the Wiredrive platform. Engineers design and build a number of system-critical components; including cloud infrastructure, monitoring systems, and networking technologies. The infrastructure team works directly with development and customer care to ensure constant and consistent network availability and scalability for our customer base.

Areas you will be working on include large-scale infrastructure design, private cloud deployment, networking, security, monitoring, distributed testing, provisioning, etc.  You will also be working directly with development on new features and integrating with 3rd party products/APIs, etc.

See the full job description here: http://bit.ly/aXUR8W

Talk on Scaling at Facebook

Aditya Agarwal is a Director of Engineering at Facebook and gave a
great talk at QCon on scaling at Facebook. One of the things he says
is "You can get the code right, you can get the products right, but
you need to get the culture right first. If you don't get the culture
right then your company won't scale."

He also goes into refactoring scaling and goes into some depth on the
actual architecture they are using.

cPrime analysis of Wiredrive scrum process

cPrime has released an analysis of how we are working with Scrum at Wiredrive. It's mostly accurate. Only part I really disagree with is how it dwells on the team taking a long time to get up to speed with Scrum. That was simply not the case, we really had it down after a few sprints.

The hard part was dealing with legacy code and how to architect our way out of long term development problems; not something that Scrum could help with.

You can see the full paper on the Wiredrive blog

Wiredrive RSS Example pages

Wiredrive has release example source code for integrating with the presentation RSS feeds. There are 3 example layouts done in Javascript and PHP, that are great starting places for building a Wirerive powered website.  The layouts display the feed contents veritical, horizontal, and tiled, and also work on the iPhone.

There are also two examples for proxy forwarding to get around crossdomain issues in Flash and Javasript. 

Download the code to your own servers and try them out.

You can get the code at github
http://github.com/wiredrive/wiredrive_rss

Wiredrive is Seeking a SaaS Development Engineer/PHP

We are growing and hiring a SaaS Development Engineer.  With such a high unemployment rate it feels good to be growing and hiring.

The Team
The engineering team maintains and expands the SaaS platform. Engineers design and build the software, cloud infrastructure and networking technologies that power all of Wiredrive's services.

The Role
Software engineers have a passion for solving complex and interesting problems.  Areas you will be working on include application development, APIs, security, private cloud deployment, large-scale system design, networking, distributed testing, user interface design, etc.

See the Wiredrive blog for the official job description
http://www.wiredrive.com/blog/2010/02/01/wiredrive-is-seeking-a-saas-development-engineer/

Media RSS in Wiredrive Presentations

Media RSS in Wiredrive Presentations


Wiredrive recently changed the RSS feed in the presentations to conform to the Media RSS standard;  media RSS is the standard way for embedding rich media into the XML of the RSS feed.  We did this so the video, large and small thumbnails, and credits can be easily parsed from the feed and used on a website.

This opens up the possibility for companies to keep the content on their website in sync with their presentation reels, and only have to manage the content in one place.  A change to the presentation in Wiredrive would update the RSS feed, which would then update the website.

The basic format of the media extension to the RSS is (with all the data removed):
<media:content url="" fileSize="" type="" height="" width="" />
<media:thumbnail url=”" height="" width="" />
<media:thumbnail url=”” height="" width="" />
<media:credit role=""></media:credit>


Here is a simple PHP script to load in the RSS feed and pull out the media variables.
<?php

// load in the RSS feed
$xml = simplexml_load_file('http://www.wdcdn.net/rss/presentation/library/client/plusyou/id/9d40ddc41cf9f26bc4a51a1783606286/');

// get the first item from the feed
$item = $xml->channel->item[0];

// get nodes in media: namespace for media information
$media = $item->children('http://search.yahoo.com/mrss/');

// content attributes
echo "Content\n";
foreach($media->content->attributes() as $k=>$v) {
    echo "$k = $v\n";
}
echo "\n";

// thumbnail attributes
echo "Large Thumbnail\n";
foreach($media->thumbnail[0]->attributes() as $k=>$v) {
    echo "$k = $v\n";
}
echo "\n";

// small thumbnail attributes
echo "Small Thumbnail\n";
foreach($media->thumbnail[1]->attributes() as $k=>$v) {
    echo "$k = $v\n";
}
echo "\n";

// credits
echo "Credits\n";
foreach($media->credit as $credit) {
   echo "\nRole : ". $credit->attributes()->role;
   echo "\nValue: ". $credit;
   echo "\n";

From here the data can be easily used to show all contents of the presentation on a website. 

The full instructions and more information can be read on the Wiredrive Customer Care site here: http://www.wiredrive.com/customercare/archives/4587/

The feed is from our Blog Out Loud event.  The presentation can bee seen here
http://bit.ly/3GOLLx

X-HOST vs HOST headers in Apache

Wiredrive is using an nginx front end proxy server for forwarding requests to backend application servers.  The configuration is pretty simple and standard:

        location / {
            proxy_pass            http://backend;
            proxy_buffering      off;
            proxy_redirect        off;

            proxy_set_header      Host                       origin.example.com
            proxy_set_header      X-Real-IP               $remote_addr;
            proxy_set_header      X-Forwarded-For   $proxy_add_x_forwarded_for;
        }

The resulting header on the backend servers is:

           Host      origin.example.com

Sending requests through the CDN first breaks this forwarding to the backend servers.  The CDN is adding an additional header when forwarding from the edge server to the origin server.  The resulting headers on the backend servers are:

           Host       origin.example.com
           X-Host   www.example.com

The problem with this is Apache picks the X-Host header over the Host header, so if there are two different virtual hosts for origin.example.com and www.example.com the request ends up at www.example.com instead of the intended origin.example.com.

The fix is relatively easy, proxy_set_header should use X-Host instead of Host.

       location / {
            proxy_pass            http://backend;
            proxy_buffering      off;
            proxy_redirect        off;

            proxy_set_header      X-Host                   origin.example.com
            proxy_set_header      X-Real-IP               $remote_addr;
            proxy_set_header      X-Forwarded-For   $proxy_add_x_forwarded_for;
        }