<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>O'Reilly Media - Technology Books, Tech Conferences, IT Courses, News</title>
<style type="text/css">
li.GlobalNavInfo.right { width: 145px; }
</style>
<!-- Google Plus Link --><link href="https://plus.google.com/108442503368488643007" rel="publisher" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!--chartbeat-->
<script type="text/javascript">var _sf_startpt=(new Date()).getTime()</script>
<link href="http://www.oreilly.com" rel="canonical" /><meta name="twitter:url" content="http://www.oreilly.com" />
<!-- feed autodiscovery links -->
<link rel="alternate" type="application/atom+xml" title="New Titles Feed" href="http://feeds.feedburner.com/oreilly/newbooks" />
<link rel="alternate" type="application/atom+xml" title="Upcoming Titles Feed" href="http://feeds.feedburner.com/oreilly/upcomingbooks" />
<link rel="alternate" type="application/atom+xml" title="O'Reilly Ebook Deal of the Day Feed" href="http://feeds.feedburner.com/oreilly/ebookdealoftheday" />
<!--Auto Complete CSS (see footer for autocomplete scripts, including call to autocomplete_data.js file) -->
<!--<link rel="stylesheet" type="text/css" href="//content.atomz.com/sp10049ed9/publish/autocomplete_styles.css" />-->
<!--ML Scripts and CSS-->
<!-- script type="text/javascript" src="//cdn.oreillystatic.com/oreilly/ml/js/jquery-1.4.min.js"></script -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="//cdn.oreillystatic.com/oreilly/ml/css/stylesheet.css" />
<link rel="stylesheet" type="text/css" media="screen" href="//cdn.oreillystatic.com/assets/css/nav.css" />
<!--MyBUYS Header -->
<!-- MyBuys libraries and style sheet -->
<link href="http://t.p.mybuys.com/css/mbstyles.css" type="text/css" rel="stylesheet" id="mybuysstyles" />
<script type="text/javascript" src="http://t.p.mybuys.com/js/mybuys3.js"></script>
<script type="text/javascript" src="http://t.p.mybuys.com/clients/OREILLY/js/setup.js"></script>
<!-- End MyBuys libraries and style sheet -->
<!-- common javascript and analytics -->
<!-- path_info: csp/92 -->
<!-- table: csp - ref_id: 92 -->
<!-- table: csp - ref_id: 92 - cs_rid: 92 -->
<script language="JavaScript" type="text/javascript"><!--
var s_account="ororeilly,orglobal"
//--></script>
<!-- SiteCatalyst code version: H.20.2. Copyright 1997-2009 Omniture, Inc. More info available at http://www.omniture.com -->
<script language="JavaScript" type="text/javascript" src="http://cdn.oreillystatic.com/assets/js/s_code.js"></script>
<script language="JavaScript" type="text/javascript"><!--
s.pageName="oreilly:oreilly:oreilly.com home page"
s.channel="oreilly"
s.prop1="oreilly:oreilly"
s.prop2="oreilly:oreilly"
s.prop3="oreilly:oreilly"
s.prop4=""
s.prop5="oreilly.com home page"
s.prop6="n/csp/92"
s.prop24="06/18/2014"
s.prop21=""
s.hier1="oreilly,oreilly"
/************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/
var s_code=s.t();if(s_code)document.write(s_code)//--></script>
<!-- End SiteCatalyst code version: H.20.2. -->
<!-- analytics.pl: 2014/11/6 11:19:39 -->
<meta name="verify-v1" content="abK30/O5baixwH0IC3Oclk1/zLsPjzlr1htTrzEYLuU=" />
<!--<title>O'Reilly Media - Technology Books, Tech Conferences, IT Courses, News</title>-->
<meta name="keywords" content="O'Reilly, oreilly, technology books, technology conferences, IT training courses, tech news" />
<meta name="description" content="O'Reilly spreads the knowledge of innovators through technology books, online services, and tech conferences. Find the technology resources you need at O'Reilly Media, a technology company at the leading edge." />
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="O'Reilly Media - Technology Books, Tech Conferences, IT Courses, News" />
<meta name="twitter:url" content="http://www.oreilly.com" />
<meta name="twitter:description" content="O'Reilly spreads the knowledge of innovators through technology books, online services, and tech conferences. Find the resources you need at O'Reilly Media, a technology company at the leading edge." />
<meta name="twitter:site" content="@OReillyMedia" />
<meta name="twitter:image" content="http://cdn.oreillystatic.com/oreilly/images/oreilly-social-icon-120.png" />
<meta property="og:title" content="O'Reilly Media - Technology Books, Tech Conferences, IT Courses, News" />
<meta property="og:type" content="website" />
<meta property="og:url" content="http://www.oreilly.com" />
<meta property="og:image" content="http://cdn.oreillystatic.com/oreilly/images/oreilly-social-icon-200.png" />
<!-- ORM correction to ML styles -->
<link rel="stylesheet" href="//cdn.oreillystatic.com/oreilly/ml/css/ml.css" type="text/css" />
<script type="text/javascript" src="//cdn.oreillystatic.com/oreilly/ml/js/ml.js"></script>
<script type="text/javascript" src="//fonts.oreillystatic.com/bmj2nsh.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){ }</script>
<link rel="stylesheet" href="http://www.oreilly.com/css/oreilly.css" type="text/css" />
<link rel="shortcut icon" href="http://www.oreilly.com/favicon.ico" />
<!-- Google Analytics -->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-4591498-1']);
_gaq.push(['_setDomainName', 'oreilly.com']);
_gaq.push(['_addIgnoredRef', 'oreilly.com']);
_gaq.push(['_setSiteSpeedSampleRate', 50]);
_gaq.push(['_trackPageview']);
(function() { var ga = document.createElement('script'); ga.type =
'text/javascript'; ga.async = true; ga.src = ('https:' ==
document.location.protocol ? 'https://ssl' : 'http://www') +
'.google-analytics.com/ga.js'; var s =
document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s); })();
</script>
<!--Facebook Insights -->
<meta property="fb:page_id" content="15137500430" />
<!-- Start Visual Website Optimizer Asynchronous Code -->
<script type='text/javascript'>
var _vwo_code=(function(){
var account_id=27087,
settings_tolerance=2000,
library_tolerance=1500,
use_existing_jquery=false,
// DO NOT EDIT BELOW THIS LINE
f=false,d=document;return{use_existing_jquery:function(){return use_existing_jquery;},library_tolerance:function(){return library_tolerance;},finish:function(){if(!f){f=true;var a=d.getElementById('_vis_opt_path_hides');if(a)a.parentNode.removeChild(a);}},finished:function(){return f;},load:function(a){var b=d.createElement('script');b.src=a;b.type='text/javascript';b.innerText;b.onerror=function(){_vwo_code.finish();};d.getElementsByTagName('head')[0].appendChild(b);},init:function(){settings_timer=setTimeout('_vwo_code.finish()',settings_tolerance);this.load('//dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(d.URL)+'&r='+Math.random());var a=d.createElement('style'),b='body{opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important;}',h=d.getElementsByTagName('head')[0];a.setAttribute('id','_vis_opt_path_hides');a.setAttribute('type','text/css');if(a.styleSheet)a.styleSheet.cssText=b;else a.appendChild(d.createTextNode(b));h.appendChild(a);return settings_timer;}};}());_vwo_settings_timer=_vwo_code.init();
</script>
<!-- End Visual Website Optimizer Asynchronous Code -->
<!-- added 3-25-2014 -->
<script type="text/javascript">
window._umbel = window._umbel || [];
(function()
{ var u = document.createElement('script'); u.type = 'text/javascript'; u.async = true; u.src = document.location.protocol + '//tags.api.umbel.com/rarhwbkpbtjrmkdq/w.js?d=' + new Date().getMonth() + '' + new Date().getDate(); var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(u, s); }
)();
</script>
</head>
<body id="home" class="main">
<div id="page">
<!--header-->
<table width="990" border="0" cellpadding="0" cellspacing="0" class="mainLayoutTable">
<tr>
<td class="navheaderbg">
<div> <!--TopNav Start-->
<script type="text/javascript">
function checkIfDefault(keyword) {
var defaultSearchTerm = "Search";
if(keyword==defaultSearchTerm) {
return '';
}
else {
return keyword;
}
}
</script>
<div id="header" style="width:990px;">
<div class="logo">
<a href="http://www.oreilly.com"><img src="http://cdn.oreillystatic.com/images/sitewide-headers/ml-header-home-blinking.gif" border=0 alt="O'Reilly Media, Inc."></a>
</div> <!--logo end-->
<div class="tools">
<p><a href="http://members.oreilly.com" class="signInLinkmy">Your Account</a>
</p>
<div id="globalBasket" class="popDownWrapper globalCartWrapper" style=" margin:2px 0px 0px 0px; width:239px;">
<div class="popDownNav globalCartNav">
<div class="globalCartBasketImg" style="">
<img src="http://cdn.oreillystatic.com/images/sitewide-headers/basketicon.gif" border="0" alt="Shopping Cart">
</div>
<div class="globalCartBasketInfo" style="">
<a href="http://shop.oreilly.com/basket.do"><span class="navHeader">Shopping Cart</span></a>
</div>
</div> <!--popDownNav globalCartNav end-->
</div> <!--globalBasket-->
</div> <!--tools end-->
</div> <!--Header End-->
<!--[if lt IE 9]>
<script>
'article aside footer header nav section time'.replace(/\w+/g,function(n){document.createElement(n)})
</script>
<![endif]-->
<!-- Nav CSS -->
<!-- Not Needed for Actual Site -->
<style type="text/css">
nav a { text-decoration:none; }
nav a:hover { text-decoration:underline; }
nav p { margin:0 0 10px; }
nav .fsl { font-size:16px; }
nav .fsxl { font-size:24px; line-height:1.1em; }
nav .fwb { font-weight:bold; }
nav .fc-highlight { color:#b9002d; }
nav .fc-dark { color:#222; }
nav .fc-light { color:#fff; }
nav .nm { margin:0; }
nav .mb { margin-bottom:10px; }
nav .mr { margin-right:10px; }
nav .floatl { float:left; }
nav .clear { clear:both; }
nav a.btn-green-arrow { display:block; float:left; padding:5px 10px 5px 22px; line-height:22px; font-size:20px; font-weight:bold; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; border:1px solid #f2ba12; color:#222; background: rgb(247,209,69); background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiNmN2QxNDUiIHN0b3Atb3BhY2l0eT0iMSIvPgogICAgPHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiNmNWM1MTciIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); background: -moz-linear-gradient(top, rgba(247,209,69,1) 50%, rgba(245,197,23,1) 50%); background: -webkit-gradient(linear, left top, left bottom, color-stop(50%,rgba(247,209,69,1)), color-stop(50%,rgba(245,197,23,1))); background: -webkit-linear-gradient(top, rgba(247,209,69,1) 50%,rgba(245,197,23,1) 50%); background: -o-linear-gradient(top, rgba(247,209,69,1) 50%,rgba(245,197,23,1) 50%); background: -ms-linear-gradient(top, rgba(247,209,69,1) 50%,rgba(245,197,23,1) 50%); background: linear-gradient(to bottom, rgba(247,209,69,1) 50%,rgba(245,197,23,1) 50%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f7d145', endColorstr='#f5c517',GradientType=0 ); }
nav a.btn-green-arrow:hover { text-decoration:none; }
nav a.btn-green-arrow .arrow { display:block; min-height:18px; background:transparent url(//cdn.oreillystatic.com/oreilly/images/btn-green-arrow-overlay.png) left center no-repeat; margin:0 0 0 -25px; padding:0 0 0 25px; }
nav a.btn-green-arrow.small { font-size:13px; line-height:18px; padding:5px 10px 5px 22px !important; }
ul#primarynav, #sf-menu-text-nav { display:none; }
</style>
<!-- Styles for page -->
<style type="text/css">
/* Reset for browsers that don't automatically set semantic tags to block */
article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section { display:block; }
nav .self-clear:after { content:""; display:block; clear:both; height:0; }
#globalInclude { text-align:left !important; }
</style>
<!-- Nav Styles -->
<style type="text/css">
nav { font-size:13px; }
nav ul { list-style:none; margin:0; padding:0; }
nav ul:after { content:''; display:block; clear:both; height:0; width:100%; }
nav li { display:block; float:left; border-right:1px solid #ddd; line-height:1.4em; }
nav li:last-child { border-right:0; }
nav li > a { display:block; padding:8px 15px 7px; }
nav li > a:hover { text-decoration:none; }
nav li > a.category { font-size:16px; color:#b9002d !important; }
nav ul#global-nav {
display:block;
background:#eee;
background:-moz-linear-gradient(top, #fbfbfb 0%, #eeeeee 100%);
background:-webkit-gradient(linear, left top, left bottom, color-stop(0%,#fbfbfb), color-stop(100%,#eeeeee));
background:-webkit-linear-gradient(top, #fbfbfb 0%,#eeeeee 100%);
background:-o-linear-gradient(top, #fbfbfb 0%,#eeeeee 100%);
background:-ms-linear-gradient(top, #fbfbfb 0%,#eeeeee 100%);
background:linear-gradient(to bottom, #fbfbfb 0%,#eeeeee 100%);
border-top:1px solid #ddd;
border-bottom:1px solid #ddd;
height:auto;
text-align:left;
}
nav #global-nav li > a { color:#333; }
nav #global-nav li > a.current { color:#b9002d; background:#fff; border-bottom:1px solid #fff; margin-bottom:-1px; }
/* Social Icons in Primary Nav */
nav #global-nav .social { float:right; padding:9px 15px 0 0; border-right:0; height:auto; position:static; margin:0; }
nav #global-nav .social .icon { display:block; float:left; padding:0; }
nav #global-nav .social .icon:before { content:''; display:block; width:16px; height:16px; background-image:url(//cdn.oreillystatic.com/assets/images/social-icons-16.png); margin:0 0 0 8px; font-size:0; }
nav #global-nav .social .icon.twitter:before { background-position:0 0; }
nav #global-nav .social .icon.youtube:before { background-position:0 -20px; }
nav #global-nav .social .icon.facebook:before { background-position:0 -40px; }
nav #global-nav .social .icon.googleplus:before { background-position:0 -60px; }
nav #global-nav .social .icon.rss:before { background-position:0 -80px; }
nav #contextual-nav { display:block; clear:both; padding:0 7px 0; border-bottom:1px solid #ddd; }
nav #contextual-nav > li { padding:8px 0 7px; position:relative; border-right:0; }
nav #contextual-nav > li:after { content:''; display:block; top:8px; right:0; position:absolute; height:1.4em; border-right:1px solid #ddd; }
nav #contextual-nav > li.no-divider:after { display:none; }
nav #contextual-nav > li > a { color:#b9002d; padding:0; margin:0 8px; }
nav #contextual-nav > li > a:hover { color:#333; }
/* Labels in Secondary Nav */
nav #contextual-nav > li.label { margin:0 0 0 8px; color:#999; }
nav #contextual-nav > li.label:after { display:none; }
/* Contacts in Secondary Nav */
nav #contextual-nav li.contact { float:right; padding:9px 0 7px 0; font-weight:bold; font-size:12px; color:#333; }
nav #contextual-nav li.contact:after { display:none; }
nav #contextual-nav li.contact > a { padding:0; margin:0 8px 0 0; display:inline; color:#333; }
nav li.sub > ul { /*display:none;*/ left:-9999px; top:-9999px; position:absolute; z-index:100; background:#fff; background:rgb(255,255,255); background:rgba(255,255,255,.98); -webkit-box-shadow:1px 1px 1px 0px rgba(0, 0, 0, .3); -moz-box-shadow:1px 1px 1px 0px rgba(0, 0, 0, .3); box-shadow:1px 1px 1px 0px rgba(0, 0, 0, .3); border-left:1px solid #ddd; margin-left:-1px; border:1px solid #ddd\9; border-top:0 solid #ddd\9; margin:0 -1px\9; }
nav #global-nav > li.sub:hover > ul, nav #contextual-nav > li.sub:hover > ul { top:auto; left:auto; }
nav ul.vertical > li.sub.hover > ul { top:auto; left:auto; }
nav #contextual-nav ul.vertical > li.sub.hover > a { position:relative; }
nav #contextual-nav ul.horizontal > li:hover > a { color:#b9002d; }
nav #contextual-nav ul.vertical > li.sub.hover > a:after { right:0; border:solid transparent; content:" "; height:0; width:0; position:absolute; pointer-events:none; top:50%; border-color:#fff; border-left-color:#ccc; border-width:6px; margin-top:-6px; }
nav #global-nav > li.sub:hover .title { background:rgba(255,255,255,.5); }
nav #global-nav li.sub > ul.vertical li:hover > a, nav #contextual-nav ul li:hover > a { color:#b9002d; }
nav li.sub > ul.vertical li { clear:both; width:100%; }
nav li.sub > ul.vertical li:first-child { border-top:1px solid #ddd; }
nav #global-nav li.sub > ul.vertical li { border-top:1px solid #ddd; }
nav li.sub > ul.vertical li:last-child { border-bottom:0; }
nav #contextual-nav li.sub > ul.vertical { top:100%; border-top:1px solid #ddd; margin-left:-8px; border-left:1 solid #ddd\9; }
nav #contextual-nav li.sub > ul.vertical > li { padding: 0; border:0; min-width:210px; max-width:300px; }
nav #contextual-nav li.sub > ul.vertical > li > a, nav #contextual-nav li.sub > ul.horizontal > li > a { padding: 4px 15px 4px; margin-right:-2px; }
nav #contextual-nav li.sub > ul:before, nav #contextual-nav li.sub > ul:after { content:''; display:block; clear:both; height:7px; }
nav #contextual-nav li.sub > ul.horizontal { min-height:100%; margin-left:0px; border-top:1px solid #ddd; border-left:1 solid #ddd\9; border-top:0 solid #ddd\9; }
nav #contextual-nav .vertical > li.sub.hover > ul.horizontal { left:100%; top:-1px; top:0px\9; }
nav #contextual-nav li > ul li > a { color:#333; }
nav #contextual-nav > li:hover > a { color:#222; }
nav #contextual-nav ul.horizontal li { float:none; padding: 0; border:0; width:210px; position:relative; z-index:10; }
</style>
<!-- Advertisement Styles -->
<style type="text/css">
nav #contextual-nav ul.horizontal li.ad.data { width:425px; min-height:560px; position:absolute; z-index:-1; top:0; bottom:0; left:0; margin-right:-55px; background:transparent url(//cdn.oreillystatic.com/oreilly/promos/ad-data-bg.png) left bottom no-repeat; }
nav #contextual-nav ul.horizontal li.ad.photography { width:370px; min-height:560px; position:absolute; z-index:-1; top:0; bottom:0; left:0; background:transparent url(//cdn.oreillystatic.com/oreilly/promos/ad-photography-bg.jpg) left bottom no-repeat; }
nav #contextual-nav ul.horizontal li.ad.programming { width:425px; min-height:585px; position:absolute; z-index:-1; top:0; bottom:0; left:0; margin-bottom:-25px; background:transparent url(//cdn.oreillystatic.com/oreilly/promos/ad-programming-bg.png) left bottom no-repeat; }
</style>
<nav role="navigation">
<ul id="global-nav" role="menubar">
<li role="menuitem"><a href="http://www.oreilly.com" class="current">Home</a></li>
<li role="menuitem"><a href="http://shop.oreilly.com">Shop Books & Videos</a></li>
<li role="menuitem"><a href="http://radar.oreilly.com">Radar</a></li>
<li role="menuitem"><a href="http://www.safaribooksonline.com/?utm_source=oreilly&utm_medium=referral&utm_campaign=publisher&utm_content=nav">Safari Books Online</a></li>
<li role="menuitem"><a href="http://conferences.oreilly.com/">Conferences</a></li>
<li role="menuitem"><a href="http://www.oreillyschool.com/">IT Courses & Certificates</a></li>
<li class="social"><a href="http://twitter.com/oreillymedia" class="icon twitter" title="O'Reilly on Twitter"></a><a href="http://www.youtube.com/subscription_center?add_user=oreillymedia" class="icon youtube" title="O'Reilly on YouTube"></a><a href="http://www.facebook.com/OReilly" class="icon facebook" title="O'Reilly on Facebook"></a><a href="https://plus.google.com/+oreillymedia/" class="icon googleplus" title="O'Reilly on Google+"></a><a href="http://oreilly.com/feeds/" class="icon rss" title="Subscribe to Feed"></a></li>
</ul>
<!-- Home Subnav -->
<!-- ncs sc/2608 --><ul id="contextual-nav" role="menubar">
<li class="label">Popular Topics:</li>
<li role="menuitem"><a href="http://shop.oreilly.com/category/browse-subjects/programming.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-subnav-topics-programming'; s.eVar23='orm-home-t1-subnav-topics-programming'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Programming</a></li>
<li role="menuitem"><a href="http://shop.oreilly.com/category/browse-subjects/web-development/javascript.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-subnav-topics-javascript'; s.eVar23='orm-home-t1-subnav-topics-javascript'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">JavaScript</a></li>
<li role="menuitem"><a href="http://shop.oreilly.com/category/browse-subjects/mobile-devices/ipad-iphone-ipod.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-subnav-topics-iphone'; s.eVar23='orm-home-t1-subnav-topics-iphone'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">iPhone</a></li>
<li role="menuitem"><a href="http://shop.oreilly.com/category/browse-subjects/mobile-devices/android.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-subnav-topics-android'; s.eVar23='orm-home-t1-subnav-topics-android'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Android</a></li>
<li role="menuitem"><a href="http://shop.oreilly.com/category/browse-subjects/programming/python.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-subnav-topics-python'; s.eVar23='orm-home-t1-subnav-topics-python'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Python</a></li>
<li role="menuitem"><a href="http://shop.oreilly.com/category/series/head-first.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-subnav-topics-head-first'; s.eVar23='orm-home-t1-subnav-topics-head-first'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Head First</a></li>
<li role="menuitem"><a href="http://shop.oreilly.com/category/browse-subjects/web-development/html-css.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-subnav-topics-html-css'; s.eVar23='orm-home-t1-subnav-topics-html-css'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">HTML5 & CSS</a></li>
<li role="menuitem"><a href="http://shop.oreilly.com/category/browse-subjects/microsoft.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-subnav-topics-microsoft'; s.eVar23='orm-home-t1-subnav-topics-microsoft'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Microsoft</a></li>
<li role="menuitem"><a href="http://shop.oreilly.com/category/browse-subjects/programming/java.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-subnav-topics-java'; s.eVar23='orm-home-t1-subnav-topics-java'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Java</a></li>
<li role="menuitem"><a href="http://shop.oreilly.com/category/browse-subjects/programming/perl.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-subnav-topics-perl'; s.eVar23='orm-home-t1-subnav-topics-perl'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Perl</a></li>
<li role="menuitem" class="no-divider"><a href="http://shop.oreilly.com/category/browse-subjects/system-administration/linux-unix.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-subnav-topics-linux'; s.eVar23='orm-home-t1-subnav-topics-linux'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Linux</a></li>
</ul>
</nav>
</div> <!--CatNav End-->
</td>
</tr>
<tr><td id="search2" class="v2">
<div id="search-box" class="yui-skin-sam">
<form name="searchform" method="get" id="search-form" action="http://search.oreilly.com/"><div class="search">
<fieldset>
<span id="search-input">
<div class="searchInput">
<span id="search-field"><input type="text" value="Search" name="q" maxlength="200" id="q" onfocus="this.value=checkIfDefault(this.value);"></span>
</div>
<span id="search-button"><input type="image" value="SEARCH" src="http://cdn.oreillystatic.com/images/oreilly/large-search.png" border="0" style="float:left" alt="Search" align="top"></span>
</span>
<div id="autocomplete"></div>
</fieldset>
</div></form>
</div>
</td></tr>
<tr valign="top">
<td>
<div id="content-09">
<!-- Home Template 1 -->
<style type="text/css">
.orm .subnav .social, #sf-menu-text-nav .GlobalNavInfo .social {
width:auto !important;
}
</style>
<div class="orm ml">
<div class="row">
<!--
<a href="http://shop.oreilly.com/category/deals/celebrating-maker-faire.do?code=WKMKRFR" onclick="var s=s_gi(s_account); s.products=';orm-home-t1-global-maker-faire'; s.eVar23='orm-home-t1-global-maker-faire'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');"><img src="http://cdn.oreillystatic.com/assets/images/global-mf-20130508.png" width="974" height="51" alt="Save 50% on all Ebooks & Videos for Makers" /></a>
<a href="http://shop.oreilly.com/category/customer-service/b2g1f.do" onclick="var s=s_gi(s_account); s.products=';orm-home-t1-global-b2g1f-gray'; s.eVar23='orm-home-t1-global-b2g1f-gray'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');"><img src="http://cdn.oreillystatic.com/oreilly/promos/global-b2g1f-gray-20120423.png" width="974" height="51" alt="Buy 2, Get the 3rd FREE. Use discount code OPC10" /></a>
-->
</div>
<!-- Columns 1 & 2 -->
<div class="col w742">
<div class="row mr">
<!-- Tabbed Promotions -->
<style type="text/css">
.orm .bg-dark-gray { background-color:#161616; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#222222', endColorstr='#161616'); background: -webkit-gradient(linear, left top, left bottom, from(#222222), to(#161616)); background: -moz-linear-gradient(top, #222222, #161616); }
</style>
<div class="tabbed-content">
<ul class="tabs">
<li class="bg-strata-red"><a href="#" class="selected"></a></li>
<li class="bg-web-green"><a href="#"></a></li>
<li class="bg-blue"><a href="#"></a></li>
</ul>
<ul class="body">
<!-- Strata + HW Europe 2014 -->
<li class="selected"><a href="http://strataconf.com/strataeu2014?intcmp=il-strata-confreg-home-steu14_home_tabbed_promo" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-tab1-strata-hw-eu'; s.eVar23='orm-home-t1-tab1-strata-hw-eu'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');"><img src="http://cdn.oreillystatic.com/oreilly/promos/ba-strata-hw-eu-20141105.png" width="720" height="298" alt="Strata + Hadoop World is happening in Barcelona Spain, Nov 19-21, 2014. See what you'll learn." /></a></li>
<!-- Velocity EU -->
<li><a href="http://velocityconf.com/velocityeu2014?intcmp=il-velocity-confreg-home-vleu14_home_tabbed_promo" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-tab2-velocity-eu-2014'; s.eVar23='orm-home-t1-tab2-velocity-eu-2014'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');"><img src="http://cdn.oreillystatic.com/oreilly/promos/ba-velocity-eu-20141017.png" width="720" height="298" alt="O'Reilly Velocity Conference, Barcelona Spain - See what you'll learn" /></a></li>
<!-- Video Training -->
<li><a href="http://shop.oreilly.com/category/videos.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-tab3-videos'; s.eVar23='orm-home-t1-tab3-videos'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');"><img src="http://cdn.oreillystatic.com/oreilly/promos/ba-videos-20141023-test.png" width="720" height="298" alt="O'Reilly Video Training - Learn something new today. See the latest videos." /></a></li>
</ul>
</div>
</div>
<!-- Column 1 -->
<div class="col w247">
<div class="row">
<!-- Column 1-1 - Online Events -->
<div class="module">
<h2 class="header bg-gray">
<div class="fsl fwb"><a href="http://www.oreilly.com/webcasts/index.html" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_1-webcast'; s.eVar23='orm-home-t1-c1_1-webcast'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" class="fc-dark">Free Online Events</a></div>
</h2>
<div class="body">
<img src="http://cdn.oreillystatic.com/images/people/weblogs/laura_busche.jpg" alt="Laura Busche" width="50" class="media floatl" />
<h3><a href="http://www.oreilly.com/pub/e/3158" class="fsl fwb" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_1-webcast'; s.eVar23='orm-home-t1-c1_1-webcast'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Lean Branding: 15 Hacks to Create, Communicate & Sell Your Startup's Brand</a></h3>
<p style="clear:both;">
<span class='fwb'>Presented by</span> <a href="http://www.oreilly.com/pub/au/5791">Laura Busche</a><br />
<span class="fwb">Date:</span>
Friday, Nov 7
at
<script language="javascript">
eDate = '2014-11-07';
eYear = eDate.substring(0,4);
eMonth = eDate.substring(5,7) - 1;
eDay = eDate.substring(8,10);
eTime = '10:00:00';
eHour = eTime.substring(0,2);
eMin = eTime.substring(3,5);
eSec = eTime.substring(6,8);
eAM = '';
var event = new Date();
event.setUTCFullYear(eYear);
event.setUTCMonth(eMonth);
event.setUTCDate(eDay);
event.setUTCHours(eHour);
event.setUTCMinutes(eMin);
event.setUTCSeconds(eSec);
eLocalTime = event.toLocaleTimeString();
eLocalTime = eLocalTime.substring(0,5);
if (eHour > 12) { eHour = eHour - 12; }
if( eMin > "00"){
document.write(eHour + ":" + eMin + eAM + ' PT');
}else{
document.write(eHour + eAM + ' PT');
}
</script>
</p>
<h3 class="fwb mb">Upcoming Events</h3>
<ul class="disc mb">
<li><a href="http://www.oreilly.com/pub/e/3116" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_1-webcast'; s.eVar23='orm-home-t1-c1_1-webcast'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Wild World Web: Web Development in a World of Ever-Changing Browsers, Platforms & Compatibilities</a></li>
<li><a href="http://www.oreilly.com/pub/e/3210" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_1-webcast'; s.eVar23='orm-home-t1-c1_1-webcast'; s.events='event5'; s.linkTrackVars='eVar23,pr
oducts,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Thoughtful Machine Learning: Sentiment Analysis Using Support Vector Machines in Ruby</a></li>
<li><a href="http://www.oreilly.com/pub/e/3234" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_1-webcast'; s.eVar23='orm-home-t1-c1_1-webcast'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Spark + Cassandra: Technical Integration Details</a></li>
<li><a href="http://www.oreilly.com/pub/e/3247" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_1-webcast'; s.eVar23='orm-home-t1-c1_1-webcast'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Rails 4 Application Security</a></li>
</ul>
<a href="http://www.oreilly.com/webcasts/index.html" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_1-webcast'; s.eVar23='orm-home-t1-c1_1-webcast'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" class="fwb">All Online Events ></a>
</div>
</div>
</div>
<div class="row">
<!-- Column 1-1 - Affiliate Program -->
<div class="module">
<h2 class="header bg-gray">
<div class="fsl fwb"><a href="http://www.oreilly.com/affiliates/index.html" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_1-affiliate'; s.eVar23='orm-home-t1-c1_1-affiliate'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" class="fc-dark">Earn Commissions</a></div>
</h2>
<div class="body">
<h3 class="fsl fwb mb">Announcing O'Reilly's Affiliate Program<br /><span class="fsm">Earn $ Promoting O'Reilly Products</span></h3>
<a href="http://www.oreilly.com/affiliates/index.html" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_1-affiliate'; s.eVar23='orm-home-t1-c1_1-affiliate'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" class="btn-green-arrow" style="font-size:13px; line-height:17px; padding:3px 10px 3px 22px;"><span class="arrow">Learn More</span></a>
</div>
</div>
</div>
<!-- Column 1-2 - Radar -->
<div class="row">
<div class="module">
<h2 class="header bg-gray">
<a href="http://radar.oreilly.com/" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_2-radar'; s.eVar23='orm-home-t1-c1_2-radar'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" class="fsl fwb fc-dark">O'Reilly Radar</a>
</h2>
<div class="body">
<h4 class="fsl fwb mb">News & Commentary</h4>
<ul class="disc mb"><li><a href="http://radar.oreilly.com/2014/06/microsoft-google-your-money-or-your-life.html" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_2-radar'; s.eVar23='orm-home-t1-c1_2-radar'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Your money or your life</a></li><li><a href="http://radar.oreilly.com/2014/06/untapped-opportunities-in-ai.html" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_2-radar'; s.eVar23='orm-home-t1-c1_2-radar'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Untapped opportunities in AI</a></li><li><a href="http://radar.oreilly.com/2014/06/welcome-back-weblandians.html" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_2-radar'; s.eVar23='orm-home-t1-c1_2-radar'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Welcome back, Weblandians</a></li><li><a href="http://radar.oreilly.com/2014/06/nasas-smart-spheres-robot-teams-up-with-project-tango.html" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_2-radar'; s.eVar23='orm-home-t1-c1_2-radar'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">NASA’s Smart SPHERES robot teams up with Project Tango</a></li><li><a href="http://radar.oreilly.com/2014/05/why-paypal-jumped-the-software-hardware-gap.html" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_2-radar'; s.eVar23='orm-home-t1-c1_2-radar'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Why PayPal jumped the software-hardware gap</a></li></ul>
<a href="http://radar.oreilly.com/" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_2-radar'; s.eVar23='orm-home-t1-c1_2-radar'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" class="fwb">Read More ></a>
</div>
</div>
</div>
<!-- Column 1-2 - Safari Promotion -->
<!--
<div class="row">
<csinclude record="sc/2381" field="html">
</div>
-->
<!-- Column 1-3 - Jobs -->
<div class="row">
<div class="module">
<h2 class="header bg-gray">
<a href="http://www.oreilly.com/jobs/" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_3-jobs'; s.eVar23='orm-home-t1-c1_3-jobs'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" class="fsl fwb fc-dark">We're Hiring at O'Reilly</a>
</h2>
<div class="body">
<ul class="disc mb">
<li><a href="http://hire.jobvite.com/CompanyJobs/Careers.aspx?c=q319VfwS&jvi=oIy2Yfw0,job" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_3-jobs'; s.eVar23='orm-home-t1-c1_3-jobs'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Email Marketing Manager</a></li>
<li><a href="http://hire.jobvite.com/CompanyJobs/Careers.aspx?c=q319VfwS&jvi=oKwlZfwk,job" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_3-jobs'; s.eVar23='orm-home-t1-c1_3-jobs'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Strategic Accounts Manager</a></li>
</ul>
<a href="http://www.oreilly.com/jobs/" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c1_3-jobs'; s.eVar23='orm-home-t1-c1_3-jobs'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" class="fwb">Learn more ></a>
</div>
</div>
</div>
<!-- Column 1-3 - About O'Reilly -->
<!--
<div class="row nm">
<csinclude record="sc/2300" field="html">
</div>
-->
</div>
<!-- Column 2 -->
<div class="col w495">
<!-- Column 2-1 - Livestream Radar -->
<!--
<div class="row">
<csinclude record="sc/2683" field="html">
</div>
-->
<!-- Column 2-1 - Livestream Webcasts -->
<!--
<div class="row">
<csinclude record="sc/2366" field="html">
</div>
-->
<!-- Column 2-1 - Livestream Google+ Hangout -->
<!--
<div class="row">
<csinclude record="sc/2515" field="html">
</div>
-->
<!-- Column 2-1 - Livestream OSCON -->
<!--
<div class="row">
<csinclude record="sc/2477" field="html">
</div>
-->
<!-- Column 2-1 - Livestream Velocity -->
<!--
<div class="row">
<csinclude record="sc/2441" field="html">
</div>
-->
<!-- Column 2-1 - Livestream Strata -->
<!--
<div class="row">
<csinclude record="sc/2514" field="html">
</div>
-->
<!-- Column 2-1 - Conf Wrap Blurb -->
<!--
<div class="row">
<csinclude record="sc/2459" field="html">
</div>
-->
<!-- Column 2-1 - Extra Video -->
<!--
<div class="row">
<csinclude record="sc/2417" field="html">
</div>
-->
<!-- Column 2-1 - Early Release Ebooks -->
<!-- div class="row">
<csinclude record="sc/2414" field="html">
</div -->
<!-- Column 2-2 - Book Slider -->
<div class="row">
<div class="module">
<h3 class="header bg-gray">
<a href="http://shop.oreilly.com/category/new.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c2_2-slider-new'; s.eVar23='orm-home-t1-c2_2-slider-new'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" class="fsl fwb fc-dark">New Books & Videos</a>
</h3>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
<div class="scrollable-list no-nav" name="Data">
<div class="title-list-nav"></div>
<div class="item-sublist" name="New" link="http://shop.oreilly.com/category/new.do">
<span class="item">
<a href="http://shop.oreilly.com/product/9781593275884.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c2_2-slider-9781593275884'; s.eVar23='orm-home-t1-c2_2-slider-9781593275884'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" ><span class="src">http://akamaicovers.oreilly.com/images/9781593275884/thumb.gif </span><span class="alt">The Art of the Brick </span></a>
<span class="item-info">
<a href="http://shop.oreilly.com/product/9781593275884.do" class="item-title">
The Art of the Brick
</a>
<span class='item-imprint'>(No Starch)</span><br />
</span><!-- /.item-info -->
<span class="clear"></span>
</span><!-- /.item -->
<span class="item">
<a href="http://shop.oreilly.com/product/0636920035053.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c2_2-slider-0636920035053'; s.eVar23='orm-home-t1-c2_2-slider-0636920035053'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" ><span class="src">http://akamaicovers.oreilly.com/images/9781491912485/rc_thumb.gif </span><span class="alt">High Performance Android Apps </span></a>
<span class="item-info">
<a href="http://shop.oreilly.com/product/0636920035053.do" class="item-title">
High Performance Android Apps
</a>
<br />
</span><!-- /.item-info -->
<span class="clear"></span>
</span><!-- /.item -->
<span class="item">
<a href="http://shop.oreilly.com/product/0636920035381.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c2_2-slider-0636920035381'; s.eVar23='orm-home-t1-c2_2-slider-0636920035381'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" ><span class="src">http://akamaicovers.oreilly.com/images/9781491914625/thumb.gif </span><span class="alt">Mobile HTML5 </span></a>
<span class="item-info">
<a href="http://shop.oreilly.com/product/0636920035381.do" class="item-title">
Mobile HTML5
</a>
<br />
</span><!-- /.item-info -->
<span class="clear"></span>
</span><!-- /.item -->
<span class="item">
<a href="http://shop.oreilly.com/product/0636920032502.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c2_2-slider-0636920032502'; s.eVar23='orm-home-t1-c2_2-slider-0636920032502'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" ><span class="src">http://akamaicovers.oreilly.com/images/9781491945940/thumb.gif </span><span class="alt">Lightweight Django </span></a>
<span class="item-info">
<a href="http://shop.oreilly.com/product/0636920032502.do" class="item-title">
Lightweight Django
</a>
<br />
</span><!-- /.item-info -->
<span class="clear"></span>
</span><!-- /.item -->
<span class="item">
<a href="http://shop.oreilly.com/product/9781593275808.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c2_2-slider-9781593275808'; s.eVar23='orm-home-t1-c2_2-slider-9781593275808'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" ><span class="src">http://akamaicovers.oreilly.com/images/9781593275808/thumb.gif </span><span class="alt">The Book of CSS3 </span></a>
<span class="item-info">
<a href="http://shop.oreilly.com/product/9781593275808.do" class="item-title">
The Book of CSS3
</a>
<span class='item-imprint'>(No Starch)</span><br />
<span class='item-edition'>Second Edition</span><br />
</span><!-- /.item-info -->
<span class="clear"></span>
</span><!-- /.item -->
<span class="item">
<a href="http://shop.oreilly.com/product/0636920034827.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c2_2-slider-0636920034827'; s.eVar23='orm-home-t1-c2_2-slider-0636920034827'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" ><span class="src">http://akamaicovers.oreilly.com/images/9781491911952/thumb.gif </span><span class="alt">Introducing iOS 8 </span></a>
<span class="item-info">
<a href="http://shop.oreilly.com/product/0636920034827.do" class="item-title">
Introducing iOS 8
</a>
<br />
</span><!-- /.item-info -->
<span class="clear"></span>
</span><!-- /.item -->
<span class="item">
<a href="http://shop.oreilly.com/product/0636920034834.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c2_2-slider-0636920034834'; s.eVar23='orm-home-t1-c2_2-slider-0636920034834'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" ><span class="src">http://akamaicovers.oreilly.com/images/9781491911969/thumb.gif </span><span class="alt">Introduction to Data Science with R </span></a>
<span class="item-info">
<a href="http://shop.oreilly.com/product/0636920034834.do" class="item-title">
Introduction to Data Science with R
</a>
<br />
</span><!-- /.item-info -->
<span class="clear"></span>
</span><!-- /.item -->
<span class="item">
<a href="http://shop.oreilly.com/product/0636920035190.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c2_2-slider-0636920035190'; s.eVar23='orm-home-t1-c2_2-slider-0636920035190'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" ><span class="src">http://akamaicovers.oreilly.com/images/9781491913321/thumb.gif </span><span class="alt">BioCoder #5 </span></a>
<span class="item-info">
<a href="http://shop.oreilly.com/product/0636920035190.do" class="item-title">
BioCoder #5
</a>
<br />
</span><!-- /.item-info -->
<span class="clear"></span>
</span><!-- /.item -->
<span class="item">
<a href="http://shop.oreilly.com/product/9781941222942.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c2_2-slider-9781941222942'; s.eVar23='orm-home-t1-c2_2-slider-9781941222942'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" ><span class="src">http://akamaicovers.oreilly.com/images/9781941222942/thumb.gif </span><span class="alt">Learn to Program with Minecraft Plugins </span></a>
<span class="item-info">
<a href="http://shop.oreilly.com/product/9781941222942.do" class="item-title">
Learn to Program with Minecraft Plugins
</a>
<span class='item-imprint'>(Pragmatic Bookshelf)</span><br />
<span class='item-edition'>Second Edition</span><br />
</span><!-- /.item-info -->
<span class="clear"></span>
</span><!-- /.item -->
<span class="item">
<a href="http://shop.oreilly.com/product/9781783553358.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c2_2-slider-9781783553358'; s.eVar23='orm-home-t1-c2_2-slider-9781783553358'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" ><span class="src">http://akamaicovers.oreilly.com/images/9781783553365/thumb.gif </span><span class="alt">Python Data Analysis </span></a>
<span class="item-info">
<a href="http://shop.oreilly.com/product/9781783553358.do" class="item-title">
Python Data Analysis
</a>
<br />
</span><!-- /.item-info -->
<span class="clear"></span>
</span><!-- /.item -->
<span class="item">
<a href="http://shop.oreilly.com/product/9781783554638.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c2_2-slider-9781783554638'; s.eVar23='orm-home-t1-c2_2-slider-9781783554638'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" ><span class="src">http://akamaicovers.oreilly.com/images/9781783554645/thumb.gif </span><span class="alt">Wireshark Essentials </span></a>
<span class="item-info">
<a href="http://shop.oreilly.com/product/9781783554638.do" class="item-title">
Wireshark Essentials
</a>
<br />
</span><!-- /.item-info -->
<span class="clear"></span>
</span><!-- /.item -->
<span class="item">
<a href="http://shop.oreilly.com/product/9781783988785.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c2_2-slider-9781783988785'; s.eVar23='orm-home-t1-c2_2-slider-9781783988785'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" ><span class="src">http://akamaicovers.oreilly.com/images/9781783988792/thumb.gif </span><span class="alt">R Graphs Cookbook </span></a>
<span class="item-info">
<a href="http://shop.oreilly.com/product/9781783988785.do" class="item-title">
R Graphs Cookbook
</a>
<br />
</span><!-- /.item-info -->
<span class="clear"></span>
</span><!-- /.item -->
</div> <!-- /.item-sublist -->
</div><!-- /.scrollable-list -->
</div>
</div>
<!-- Column 2-3 - OST Promotion -->
<!--
<div class="row">
<csinclude record="sc/2413" field="html">
</div>
-->
<!-- Column 2-3 - Featured Video -->
<!-- -->
<div class="row">
<div class="module">
<h2 class="header bg-gray">
<a href="http://shop.oreilly.com/category/videos.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c2_3-featured-video'; s.eVar23='orm-home-t1-c2_3-featured-video'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" class="fsl fc-dark"><strong>Video Training</strong> – Learn something new from an expert today.</a>
</h2>
<div id="video-preview">
<a href="http://shop.oreilly.com/product/110000632.do" data-video="//www.youtube.com/embed/molJiqEJa9U?p=1&wmode=opaque&showinfo=0&modestbranding=1&rel=0&autoplay=1" class="video-placeholder" style="background: transparent url('//cdn.oreillystatic.com/oreilly/promos/video-preview-110000632.jpg') 0 0 no-repeat;"></a>
</div>
<div class="body bg-lightgray">
<p class="fsl nm"><strong>Bestselling Video: <a href="http://shop.oreilly.com/product/110000632.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c2_3-featured-video'; s.eVar23='orm-home-t1-c2_3-featured-video'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">An Introduction to d3.js</a></strong></p>
<p class="fsm">By Scott Murray</p>
<p class="fsm nm"><strong>Exclusive to oreilly.com, this video course will have you transforming data into visual images in no time at all,</strong> starting from scratch and building an interactive scatterplot by the end of the session. We'll use d3.js, the web's most powerful library for data visualization, to load data and translate values into SVG elements—drawing lines, points, and scaled axes to label our data. <a href="http://shop.oreilly.com/product/110000632.do" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-c2_3-featured-video'; s.eVar23='orm-home-t1-c2_3-featured-video'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Learn more ></a></p>
</div>
</div>
<style type="text/css">
#video-preview { position: relative; overflow: hidden; height:274px; margin-bottom:0; }
#video-preview iframe { position: absolute; top:0; z-index:10; width:100% !important; }
#video-preview .video-placeholder { display: block; position: relative; width: 487px; height: 274px; z-index:1; }
#video-preview .video-placeholder:after { display: block; content: ""; position: absolute; top: 109px; left: 203px; height: 56px; width: 80px; background: transparent url('//cdn.oreillystatic.com/oreilly/promos/video-preview-play-80x56.png') 0 0 no-repeat; opacity: .9; }
#video-preview .video-placeholder:hover:after { opacity: 1; }
</style>
<script type="text/javascript">
//<!--
jQuery(document).ready(function() {
var previewPlaying = false;
jQuery('#video-preview > .video-placeholder').click(function(e) {
e.preventDefault();
var that = jQuery(this);
var placeholderSrc = that.attr('data-video');
that.parent().prepend('<iframe src="' + placeholderSrc + '" width="487" frameborder="0" height="274">Your browser</iframe>');
previewPlaying = true;
});
});
//-->
</script>
</div>
<!-- Column 2-3 - Free Reports and Ebooks -->
<!--
<div class="row">
<csinclude record="sc/2684" field="html">
</div>
-->
<!-- Column 2-2 - Data Science Starter Kit -->
<!--<div class="row">
<csinclude record="sc/2382" field="html">
</div>-->
<!-- Column 2-4 - About O'Reilly -->
<div class="row">
<div class="module">
<div class="body border-top">
<h4 class="fsl fwb">What is O'Reilly Media?</h4>
<p class="fwb mb">Technology Books, Tech Conferences, IT Courses & News</p>
<p>O'Reilly spreads the knowledge of innovators through its technology books, online services, magazines, research, and tech conferences. Since 1978, O'Reilly has been a chronicler and catalyst of leading-edge development, homing in on the technology trends that really matter and galvanizing their adoption by amplifying "faint signals" from the alpha geeks who are creating the future. An active participant in the technology community, O'Reilly has a long history of advocacy, meme-making, and evangelism.</p>
</div>
</div>
</div>
<div class="row">
<!-- Column 2-1 - Velocity OLC -->
<!-- <csinclude record="sc/2380" field="html"> -->
<!-- Column 2-1 - Velocity Europe -->
<!-- <csinclude record="sc/2387" field="html"> -->
<!-- Column 2-1 - Conference Wrapup -->
<!-- <csinclude record="sc/2370" field="html"> -->
<!-- Column 2-1 - Online Training Event -->
<!-- <csinclude record="sc/2371" field="html"> -->
</div>
</div>
</div>
<!-- Column 3 -->
<div class="col w240">
<div class="row cta-v1">
<div class="module" id="shop-cta1">
<a href="http://shop.oreilly.com/" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-shop-now'; s.eVar23='orm-home-t1-shop-now'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');"><img src="http://cdn.oreillystatic.com/images/oreilly/cta-v1.jpg" alt="Shop our wide selection of books, ebooks, and videos now" /></a>
</div>
<div class="module" id="shop-cta2">
<div class="body border-top bg-lightgray">
<p class="fsl" style="line-height:1.3em; margin-bottom:5px;"><strong>Shop 8000+ titles from publishers you trust, including:</strong> O'Reilly Media, Wiley, No Starch, SitePoint, Wrox, and more.</p>
<a href="http://shop.oreilly.com/" class="btn-green-arrow" onClick="var s=s_gi(s_account); s.products=';orm-home-t1-shop-now'; s.eVar23='orm-home-t1-shop-now'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');"><span class="arrow">Start Browsing</span></a>
</div>
</div>
<style type="text/css">
#shop-cta1 { display:none; }
.orm a.btn-green-arrow {
display:block;
float:left;
padding:5px 10px 5px 22px;
line-height:22px;
font-size:20px;
font-weight:bold;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
border:1px solid #f2ba12;
color:#222;
background: rgb(247,209,69);
background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiNmN2QxNDUiIHN0b3Atb3BhY2l0eT0iMSIvPgogICAgPHN0b3Agb2Zmc2V0PSI1MCUiIHN0b3AtY29sb3I9IiNmNWM1MTciIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background: -moz-linear-gradient(top, rgba(247,209,69,1) 50%, rgba(245,197,23,1) 50%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(50%,rgba(247,209,69,1)), color-stop(50%,rgba(245,197,23,1)));
background: -webkit-linear-gradient(top, rgba(247,209,69,1) 50%,rgba(245,197,23,1) 50%);
background: -o-linear-gradient(top, rgba(247,209,69,1) 50%,rgba(245,197,23,1) 50%);
background: -ms-linear-gradient(top, rgba(247,209,69,1) 50%,rgba(245,197,23,1) 50%);
background: linear-gradient(to bottom, rgba(247,209,69,1) 50%,rgba(245,197,23,1) 50%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f7d145', endColorstr='#f5c517',GradientType=0 );
}
.orm a.btn-green-arrow:hover {
text-decoration:none;
}
.orm a.btn-green-arrow .arrow {
display:block;
min-height:18px;
background:transparent url(//cdn.oreillystatic.com/oreilly/images/btn-green-arrow-overlay.png) left center no-repeat;
margin:0 0 0 -25px;
padding:0 0 0 25px;
}
</style>
</div>
<!-- Deals of the Day -->
<div id="deal-control">
<script src="http://cdn.oreillystatic.com/oreilly/ml/js/pwr-full.js" type="text/javascript"></script>
<script type="text/javascript">
// global variables for power reviews integration setup.
var pr_locale= "en_US";
var pr_zip_location= "http://shop.oreilly.com/text/";
var pr_style_sheet= "http://cdn.oreillystatic.com/oreilly/ml/css/reviews_social.css";
</script>
<div class="row">
<div class="module">
<!-- O'Reilly DotD -->
<h2 class="header bg-green"><span class="fsl fwb">Ebook Deals of the Day</span></h2>
<div class="body" style="overflow:hidden;">
<div style="margin: 0; padding-left: 0; padding-right: 0; padding-top: 3px; padding-bottom: 0;">
<a href="http://shop.oreilly.com/category/deals/javascript.do?code=DEAL" onclick="var s=s_gi(s_account); s.products=';orm-home-t1-dotd';
s.eVar23='orm-home-t1-dotd'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" rel="nofollow,noindex" class="fsm fwb" target="_parent">
<strong>Save 50% - Discover what JavaScript can do today</strong></a>
</div>
<a href="http://shop.oreilly.com/category/deals/javascript.do?code=DEAL" onclick="var s=s_gi(s_account); s.products=';orm-home-t1-dotd';
s.eVar23='orm-home-t1-dotd'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" target="_parent"><img alt="" border="0" src="http://cdn.oreillystatic.com/oreilly/promos/ebook-JavaScript-fan-20141105-320.png" style="padding:0 0 0 0; margin: 0; max-width: 172px;" /></a><br clear="all" />
<div class="fwb"><a href="http://shop.oreilly.com/category/deals/javascript.do?code=DEAL" onclick="var s=s_gi(s_account); s.products=';orm-home-t1-dotd';
s.eVar23='orm-home-t1-dotd'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" target="_parent">View the titles now ></a></div>
<br clear="all" />
<div class="dotd-subs clear-both">
<span class="fwb">Get O'Reilly Deals</span>
<form method="POST" id="example_form2" action="http://post.oreilly.com/client/o/oreilly/forms/quicksignup.cgi">
<input type="hidden" name="client_token" value="oreilly">
<input type="hidden" name="subscribe" value="optin">
<input type="hidden" name="success_url" value="http://oreilly.com/store/newsletter-thankyou.html">
<input type="hidden" name="error_url" value="http://oreilly.com/store/newsletter-signup-error.html">
<input type="hidden" value="1" name="topic_or_dod">
<input type="hidden" name="source" value="orm-home-t1-dotd">
<fieldset>
<input type="text" name="email_addr" class="email_address long" value="Enter your email here" maxlength="200" size="25">
<button class="skinny" alt="Join" name="submit" value="submit" onclick="return addClickTracking('orm','ebook','rightrail','dod');">Join</button>
</fieldset>
</form>
</div>
</div>
<!-- Business DotD -->
<div class="body" style="overflow:hidden;">
<a onclick="var s=s_gi(s_account); s.products=';orm-home-t1-dotd'; s.eVar23='orm-home-t1-dotd'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" href="http://shop.oreilly.com/product/9781118857663.do?code=MSDEAL" target="_parent"><img alt="" src="http://covers.oreillystatic.com/images/9781118857663/bkt.gif" class="floatl book-cover media"></a><span style="display:block; overflow:hidden;"><a onclick="var s=s_gi(s_account); s.products=';orm-home-t1-dotd'; s.eVar23='orm-home-t1-dotd'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" href="http://shop.oreilly.com/product/9781118857663.do?code=MSDEAL" class="fwb" target="_parent">All In Startup</a><h3 class="fwb mb">Ebook
– <span class="fc-highlight">
$12.47 (Save 50%)
</span></h3>
<span>Use code: <span class="fwb">MSDEAL</span></span>
<script type="text/javascript">
/* <![CDATA[ */
POWERREVIEWS.display.snippet(document, {
pr_page_id:'9781118857663.IP',
pr_snippet_min_reviews : '3'
});
/* ]]> */
</script>
</span>
<div class="dotd-subs clear-both">
<span class="fwb">Get Business Deals</span>
<form method="POST" id="example_form2" action="http://post.oreilly.com/client/o/oreilly/forms/quicksignup.cgi">
<input type="hidden" name="client_token" value="oreilly">
<input type="hidden" name="subscribe" value="optin">
<input type="hidden" name="success_url" value="http://oreilly.com/store/newsletter-thankyou.html">
<input type="hidden" name="error_url" value="http://oreilly.com/store/newsletter-signup-error.html">
<input type="hidden" value="1" name="topic_biz_dod">
<input type="hidden" name="source" value="orm-home-t1-dotd">
<fieldset>
<input type="text" name="email_addr" class="email_address long" value="Enter your email here" maxlength="200" size="25">
<button class="skinny" alt="Join" name="submit" value="submit" onclick="return addClickTracking('orm','biz','rightrail','dod');">Join</button>
</fieldset>
</form>
</div>
</div>
</div>
</div>
<div class="row">
<div class="module">
<!-- Video DotD -->
<h2 class="header bg-green"><span class="fsl fwb">Video Deal of the Week</span></h2>
<div class="body">
<a onclick="var s=s_gi(s_account); s.products=';orm-home-t1-dotd'; s.eVar23='orm-home-t1-dotd'; s.
events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" href="http://shop.oreilly.com/product/110000226.do?code=VDWK" target="_parent"><img alt="" src="http://covers.oreillystatic.com/images/110000226/bkt.gif" class="floatl book-cover media"></a><span style="display:block; overflow:hidden;"><a onclick="var s=s_gi(s_account); s.products=';orm-home-t1-dotd'; s.eVar23='orm-home-t1-dotd'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" href="http://shop.oreilly.com/product/110000226.do?code=VDWK" class="fwb" target="_parent">Adobe Photoshop CC</a><h3 class="fwb mb">Video
– <span class="fc-highlight">
$49.98 (Save 50%)
</span></h3>
<span>Use code: <span class="fwb">VDWK</span></span>
<script type="text/javascript">
/* <![CDATA[ */
POWERREVIEWS.display.snippet(document, {
pr_page_id:'110000226.IP',
pr_snippet_min_reviews : '3'
});
/* ]]> */
</script>
</span>
<div class="dotd-subs clear-both">
<span class="fwb">Get Weekly Video Deals</span>
<form method="POST" id="example_form2" action="http://post.oreilly.com/client/o/oreilly/forms/quicksignup.cgi">
<input type="hidden" name="client_token" value="oreilly">
<input type="hidden" name="subscribe" value="optin">
<input type="hidden" name="success_url" value="http://oreilly.com/store/newsletter-thankyou.html">
<input type="hidden" name="error_url" value="http://oreilly.com/store/newsletter-signup-error.html">
<input type="hidden" value="1" name="topic_video_dow">
<input type="hidden" name="source" value="orm-home-t1-dotd">
<fieldset>
<input type="text" name="email_addr" class="email_address long" value="Enter your email here" maxlength="200" size="25">
<button class="skinny" alt="Join" name="submit" value="submit" onclick="return addClickTracking('orm','video','rightrail','dow');">Join</button>
</fieldset>
</form>
</div>
</div>
</div>
</div>
<script type="text/javascript">
function addClickTracking(efSite, efTopic, efLoc, efEtype){
var s=s_gi(s_account)
s.eVar23= efSite + '-' + efTopic + '-' + efLoc + '-' + efEtype;
s.events='event5';
s.linkTrackVars='eVar23,events';
s.linkTrackEvents='event5';
s.tl(this,'o','Internal Ad Click');
}
</script></div>
<div class="row">
<!-- Get Satisfaction -->
<div class="module">
<div class="body border-top">
<h3 class="fsl fwb">Got a Question?</h3>
<p class="fwb nm">Do you have a question about O'Reilly's products and services? <a href="http://support.oreilly.com/oreilly?from_gsfn=true" onclick="var s=s_gi(s_account); s.products=';orm-home-t1-c3_2-getsatisfaction'; s.eVar23='orm-home-t1-c3_2-getsatisfaction'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');">Ask it here ></a></p>
</div>
</div>
</div>
<!-- col 3-3 - Safari -->
<div class="row nm">
<div class="module">
<div class="body border-top">
<a href="https://www.safaribooksonline.com/?utm_medium=referral&utm_campaign=publisher&utm_source=oreilly&utm_content=homepage" onclick="var s=s_gi(s_account); s.products=';orm-home-t1-c3_3-safari'; s.eVar23='orm-home-t1-c3_3-safari'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');"><img src="http://cdn.oreillystatic.com/oreilly/promos/safari-logo-202x68.png" width="202" height="68" alt="Safari" class="mb" /></a>
<ul class="fwb disc mb">
<li>Subscription access to 25,000+ books/videos from top publishers</li>
<li>The best books and courses from the brightest minds</li>
</ul>
<p class="nm"><a href="https://www.safaribooksonline.com/?utm_medium=referral&utm_campaign=publisher&utm_source=oreilly&utm_content=homepage" onclick="var s=s_gi(s_account); s.products=';orm-home-t1-c3_3-safari'; s.eVar23='orm-home-t1-c3_3-safari'; s.events='event5'; s.linkTrackVars='eVar23,products,events'; s.linkTrackEvents='event5'; s.tl(this,'o','Ad Click');" class="fwb">Learn more ></a></p>
</div>
</div>
</div>
</div>
</div>
</div>
<!--footer -->
<!-- home -->
</td>
</tr>
<tr>
<td class="eightPixel"> </td>
</tr>
<tr valign="bottom">
<td align="center" class="navfooterbg"><!--BottomNav Start-->
<table border="0" cellspacing="0" cellpadding="0" class="emailSignUpTable">
<tr>
<td style="width:516px;">
<form method="GET" id="emailSignUp" action="http://post.oreilly.com/client/o/oreilly/forms/quicksignup.cgi">
<table border="0" cellspacing="0" cellpadding="0" width="500">
<tbody>
<tr>
<td width="275">
<div style="padding-left: 12px;">Sign up today to receive special discounts,<br /> product alerts, and news from O'Reilly.</div>
</td>
<td width="172">
<input type="hidden" name="client_token" value="oreilly"><input type="hidden" name="subscribe" value="optin">
<input type="hidden" name="success_url" value="http://oreilly.com/store/newsletter-thankyou.html">
<input type="hidden" name="error_url" value="http://oreilly.com/store/newsletter-signup-error.html">
<input type="hidden" name="nl_oreilly" value="1">
<input type="text" name="email_addr" value='Enter Email' maxlength="100" size="12" class="NavSearchBottom">
</td>
<td width="53">
<input border="0" type="image" alt="Submit" src="//cdn.oreillystatic.com/images/sitewide-headers/emailsignup_btn.gif" type="submit" name="submit" value="submit" />
</td>
</tr>
</tbody>
</table>
</form>
</td>
<td>
<a href="http://www.oreilly.com/privacy.html">Privacy Policy ></a><br />
<a href="http://cdn.oreillystatic.com/pdf/sample-newsletter.pdf" alt="View Sample Newsletter >">View Sample Newsletter ></a>
</td>
<td style="text-align:right">
<ul class="utility social">
<li><a class="twitter" href="http://twitter.com/oreillymedia" target="_blank"><span class="hidden">Twitter</span></a></li>
<!--<li><a class="youtube" href="http://youtube.com/oreillymedia" target="_blank"><span class="hidden">YouTube</span></a></li>-->
<li><a class="youtube" href="http://www.youtube.com/subscription_center?add_user=oreillymedia" target="_blank"><span class="hidden">YouTube</span></a></li>
<li><a class="slideshare" href="http://slideshare.net/oreillymedia" target="_blank"><span class="hidden">Slideshare</span></a></li>
<li><a class="facebook" href="http://www.facebook.com/OReilly" target="_blank"><span class="hidden">Facebook</span></a></li>
<li><a class="googleplus" href="https://plus.google.com/108442503368488643007?prsrc=3"><span class="hidden">Google Plus</span></a></li>
<li><a class="rss" href="http://feeds.feedburner.com/oreilly/news" target="_blank"><span class="hidden">RSS</span></a></li>
<li><a class="all-rss" href="http://www.oreilly.com/feeds/index.html">View All RSS Feeds ></a></li>
</ul>
</td>
</tr>
</table>
<div id="multiColumnFooter">
<div id="footer-branding">
<p class="copyright">© 2014, O’Reilly Media, Inc.</p>
<p>
<span class="phone-number">(707) 827-7019</span>
<span class="phone-number">(800) 889-8969</span>
</p>
<p class="trademarks">All trademarks and registered trademarks appearing on oreilly.com are the property of their respective owners.</p>
</div>
<div class="contentSectionBlock">
<div class="contentSectionContainer" >
<span id="footerColumn-1" class="contentSection">
<h3>About O'Reilly</h3>
<ul>
<li><a class="footer" href="http://www.oreilly.com/academic/index.html">Academic Solutions</a></li>
<li><a class="footer" href="http://www.oreilly.com/jobs/index.html">Jobs</a></li>
<li><a class="footer" href="http://www.oreilly.com/about/contact.html">Contacts</a></li>
<li><a class="footer" href="http://www.oreilly.com/about/index.html">Corporate Information</a></li>
<li><a class="footer" href="http://www.oreilly.com/press/index.html">Press Room</a></li>
<li><a class="footer" href="http://www.oreilly.com/privacy.html">Privacy Policy</a></li>
<li><a class="footer" href="http://www.oreilly.com/terms/index.html">Terms of Service</a></li>
<li><a class="footer" href="http://www.oreilly.com/work-with-us.html">Work with Us</a></li>
<li><a class="footer" href="http://www.oreilly.com/about/editorial_independence.html">Editorial Independence</a></li>
</ul>
</span>
</div><!--end contentSectionContainer-->
<div class="contentSectionContainer" >
<span id="footerColumn-2" class="contentSection">
<h3>Community</h3>
<ul>
<li><a class="footer" href="http://animals.oreilly.com/">Animals</a></li>
<li><a class="footer" href="http://www.oreilly.com/authors/index.html">Authors</a></li>
<li><a class="footer" href="http://www.oreilly.com/webcasts/index.html">Webcasts</a></li>
<li><a class="footer" href="http://oreilly.com/community/">Community & Featured Users</a></li>
<li><a class="footer" href="http://forums.oreilly.com/">Forums</a></li>
<li><a class="footer" href="http://post.oreilly.com/form/oreilly/signup">Newsletters</a></li>
<li><a class="footer" href="http://answers.oreilly.com/">O'Reilly Answers</a></li>
<li><a class="footer" href="http://www.oreilly.com/feeds/index.html">RSS Feeds</a></li>
<li><a class="footer" href="http://www.oreilly.com/ug/index.html">Meetups & User Groups</a></li>
<li><a class="footer" href="http://chimera.labs.oreilly.com/">O'Reilly Atlas (beta)</a></li>
</ul>
</span>
</div><!--end contentSectionContainer-->
<div class="contentSectionContainer" >
<span id="footerColumn-3" class="contentSection">
<h3>Partner Sites</h3>
<ul>
<li><a class="footer" href="http://makezine.com/">makezine.com</a></li>
<li><a class="footer" href="http://makerfaire.com/">makerfaire.com</a></li>
<li><a class="footer" href="http://craftzine.com/">craftzine.com</a></li>
<li><a class="footer" href="http://igniteshow.com/">igniteshow.com</a></li>
<li><a class="footer" href="https://developer.paypal.com/">PayPal Developer Zone</a></li>
<li><a class="footer" href="http://blogs.forbes.com/oreillymedia/">O'Reilly Insights on Forbes.com</a></li>
</ul>
</span>
</div><!--end contentSectionContainer-->
<div class="contentSectionContainer" >
<span id="footerColumn-4" class="contentSection">
<h3>Shop O'Reilly</h3>
<ul>
<li><a class="footer" href="http://shop.oreilly.com/category/customer-service.do">Customer Service</a></li>
<li><a class="footer" href="http://shop.oreilly.com/category/customer-service.do">Contact Us</a></li>
<li><a class="footer" href="http://shop.oreilly.com/category/customer-service/shipping-information.do">Shipping Information</a></li>
<li><a class="footer" href="http://shop.oreilly.com/category/customer-service/ordering-payment.do">Ordering & Payment</a></li>
<li><a class="footer" href="http://www.oreilly.com/affiliates/index.html">Affiliate Program</a></li>
<li><a class="footer" href="http://shop.oreilly.com/category/customer-service/oreilly-guarantee.do">The O'Reilly Guarantee</a></li>
</ul>
</span>
</div> <!--end contentSectionContainer-->
<div style="clear:both;"></div>
</div><!--end contentSectionBlock-->
</div><!--end multiColumnFooter-->
</td><!--BottomNav End-->
</tr>
</table>
</div> <!-- / content-09-->
</div> <!-- / page-->
<script type="text/javascript" src="//cdn.oreillystatic.com/oreilly/ml/js/footerScripts.js"></script>
<!-- MyBuys Page Parameters Place in body element -->
<script type="text/javascript">
mybuys.setPageType("HOME");
</script>
<!-- MyBuys Page Initialization -->
<script type="text/javascript">
mybuys.initPage();
</script>
<style type="text/css">
.mbzone2 {width: 232px !important;}
.mbzone2 .mbitem { width: 190px; !important;}
</style>
<!-- autocomplete scripts - autocomplete_data.js updated 8/23/12 -cp -->
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/yui/2.8.0r4/build/utilities/utilities.js"></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/yui/2.8.0r4/build/datasource/datasource-min.js"></script>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/yui/2.8.0r4/build/autocomplete/autocomplete-min.js"></script>
<script type="text/javascript" src="//content.atomz.com/sp10049ed9/publish/autocomplete_data.js"></script>
<!-- sc/2109 -->
<script type="text/javascript">
var cbjspath = "static.chartbeat.com/js/chartbeat.js?uid=1632&domain=oreilly.com";
var cbjsprotocol = (("https:" == document.location.protocol) ? "https://s3.amazonaws.com/" : "http://");
document.write(unescape("%3Cscript src='"+cbjsprotocol+cbjspath+"' type='text/javascript'%3E%3C/script%3E"))
</script>
<!-- also crazyegg-->
<script type="text/javascript">
setTimeout(function(){var a=document.createElement("script");
var b=document.getElementsByTagName('script')[0];
a.src=document.location.protocol+"//dnn506yrbagrg.cloudfront.net/pages/scripts/0011/6381.js";
a.async=true;a.type="text/javascript";b.parentNode.insertBefore(a,b)}, 1);
</script>
<!-- #sc/2109 -->
<!-- begin per Laura Painter request - Crazyegg Heatmapping code -->
<script type="text/javascript">
setTimeout(function()
{var a=document.createElement("script"); var b=document.getElementsByTagName("script")[0]; a.src=document.location.protocol+"//dnn506yrbagrg.cloudfront.net/pages/scripts/0011/6381.js?"+Math.floor(new Date().getTime()/3600000); a.async=true;a.type="text/javascript";b.parentNode.insertBefore(a,b)}
, 1);
</script></body>
<!-- end per Laura Painter request - Crazyegg Heatmapping code -->
</html>