CINXE.COM
9780786445691 — NiceBooks
<!DOCTYPE html> <html class="" lang="en-CA"> <head> <script> function loadFonts(url) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { var css = xhr.responseText; css = css.replace(/}/g, 'font-display: swap; }'); var head = document.getElementsByTagName('head')[0]; var style = document.createElement('style'); style.appendChild(document.createTextNode(css)); head.appendChild(style); } }; xhr.send(); } loadFonts('//fonts.googleapis.com/css?family=Roboto:400,700|Roboto+Condensed'); </script> <title>9780786445691 — NiceBooks</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="description" content=""> <meta name="keywords" content=""> <meta name="robots" content="noindex"> <link rel="stylesheet" href="//static.nicebooks.com/css/public.css?1728338258"> <link rel="search" type="application/opensearchdescription+xml" title="NiceBooks (ca-en)" href="/openSearch"> <link rel="alternate" hreflang="x-default" href="https://nicebooks.com/search?q=9780786445691"> <link rel="alternate" hreflang="en-CA" href="https://ca-en.nicebooks.com/search?q=9780786445691"> <link rel="alternate" hreflang="fr-CA" href="https://ca-fr.nicebooks.com/search?q=9780786445691"> <link rel="alternate" hreflang="de-DE" href="https://de.nicebooks.com/search?q=9780786445691"> <link rel="alternate" hreflang="es-ES" href="https://es.nicebooks.com/search?q=9780786445691"> <link rel="alternate" hreflang="fr-FR" href="https://fr.nicebooks.com/search?q=9780786445691"> <link rel="alternate" hreflang="en-GB" href="https://uk.nicebooks.com/search?q=9780786445691"> <link rel="alternate" hreflang="it-IT" href="https://it.nicebooks.com/search?q=9780786445691"> <link rel="alternate" hreflang="en-US" href="https://us.nicebooks.com/search?q=9780786445691"> <link rel="canonical" href="https://ca-en.nicebooks.com/search"> <script> /* remove #_=_ Facebook artefact after redirection */ if (window.location.hash === '#_=_') { const uri = window.location.toString(); const withNoHash = uri.substring(0, uri.indexOf('#')); window.history.replaceState({}, document.title, withNoHash); } </script> <script src="https://polyfill-fastly.io/v2/polyfill.min.js?features=Element.prototype.matches,Element.prototype.closest,URL,Promise,Promise.prototype.finally" defer></script> <script src="//static.nicebooks.com/vendor/axios-0.18.0/axios.min.js" defer></script> <script src="//static.nicebooks.com/scripts/modal.js?1728338258" defer></script> <script src="//static.nicebooks.com/scripts/public.js?1728338258" defer></script> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@10"></script> <script> // create the $ function to defer callbacks after DOMContentLoaded (function() { var callbacks = []; var eventFired = false; document.addEventListener('DOMContentLoaded', function() { callbacks.forEach(function(callback) { callback(); }); callbacks = []; eventFired = true; }); window.$ = function(callback) { if (eventFired) { callback(); } else { callbacks.push(callback); } }; })(); // initialize Google global site tag window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'AW-1032358671'); // initialize Bing Ads Universal Event Tracking window.uetq = window.uetq || []; // ---------- function trackMerchantClick() { gtag('event', 'conversion', {'send_to': 'AW-1032358671/-Mh0CJ_8zmUQj5ai7AM'}); // Google window.uetq.push({ea: 'merchant-click'}); // Bing } </script> <link rel="icon" type="image/png" sizes="32x32" href="//static.nicebooks.com/images/icons/32px.png?1728338258"> <link rel="icon" type="image/png" sizes="16x16" href="//static.nicebooks.com/images/icons/16px.png?1728338258"> <link rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'" href="//static.nicebooks.com/vendor/fontawesome-pro-5.13.0/css/all.min.css"> <script> /*! loadCSS. [c]2017 Filament Group, Inc. MIT License */ (function( w ){ "use strict"; if( !w.loadCSS ){ w.loadCSS = function(){}; } var rp = loadCSS.relpreload = {}; rp.support = (function(){ var ret; try { ret = w.document.createElement( "link" ).relList.supports( "preload" ); } catch (e) { ret = false; } return function(){ return ret; }; })(); rp.bindMediaToggle = function( link ){ var finalMedia = link.media || "all"; function enableStylesheet(){ link.media = finalMedia; } if( link.addEventListener ){ link.addEventListener( "load", enableStylesheet ); } else if( link.attachEvent ){ link.attachEvent( "onload", enableStylesheet ); } setTimeout(function(){ link.rel = "stylesheet"; link.media = "only x"; }); setTimeout( enableStylesheet, 3000 ); }; rp.poly = function(){ if( rp.support() ){ return; } var links = w.document.getElementsByTagName( "link" ); for( var i = 0; i < links.length; i++ ){ var link = links[ i ]; if( link.rel === "preload" && link.getAttribute( "as" ) === "style" && !link.getAttribute( "data-loadcss" ) ){ link.setAttribute( "data-loadcss", true ); rp.bindMediaToggle( link ); } } }; if( !rp.support() ){ rp.poly(); var run = w.setInterval( rp.poly, 500 ); if( w.addEventListener ){ w.addEventListener( "load", function(){ rp.poly(); w.clearInterval( run ); } ); } else if( w.attachEvent ){ w.attachEvent( "onload", function(){ rp.poly(); w.clearInterval( run ); } ); } } if( typeof exports !== "undefined" ){ exports.loadCSS = loadCSS; } else { w.loadCSS = loadCSS; } }( typeof global !== "undefined" ? global : this ) ); </script> </head> <body> <div id="wrapper"> <div id="content-wrapper" class=""> <header> <div class="row"> <div class="small-6 columns"> <a class="logo is-white has-image" href="/"><img src="//static.nicebooks.com/images/logo.svg?1728338258" alt=""></a> </div> <div class="small-6 columns"> <div id="header-menu"> <span style="font-size: .9rem;"> <a href="/auth/login" class="is-white">Log in</a> </span> </div> </div> </div> </header> <section> <!-- Main content --> <div id="search"> <form method="get" action="/search"> <div class="row"> <div class="column"> <div class="row collapse"> <div class="medium-7 medium-offset-1 large-6 large-offset-2 columns"> <input type="text" name="q" class="nb-input nb-input-group-left" value="9780786445691"> </div> <div class="medium-3 large-2 columns end"> <input type="submit" class="nb-button is-blue nb-input-group-right" value="Search"> </div> </div> </div> </div> </form> <div id="search-results"> <!-- Placeholder --> </div> <div class="failure" hidden> <p>Could not load search results.</p> <p><button type="button" class="nb-button is-orange">Try again</button></p> </div> <div class="spinner" hidden> <div class="circle"></div> </div> <noscript> <div class="row"> <div class="column"> <div class="alert is-red" lang="en"> Your browser must have JavaScript enabled to use the search functionality. </div> </div> </div> </noscript> </div> <script> $(function() { var searchResultPath = "\/search\/result?q=9780786445691&p=1"; var searchStringTooLong = false; if (searchStringTooLong) { return; } var spinner = document.querySelector('.spinner'); var searchResults = document.querySelector('#search-results'); var failure = document.querySelector('.failure'); var tryAgainButton = failure.querySelector('button'); let searchCanceler = null; const loadSearchResults = function(path, replace) { if (searchCanceler) { searchCanceler(); } if (replace) { searchResults.innerHTML = ''; } const CancelToken = axios.CancelToken; const source = CancelToken.source(); searchCanceler = source.cancel; spinner.hidden = false; axios.get(path) .then(function(response) { nb.append(searchResults, response.data); }) .catch(function(thrown) { if (axios.isCancel(thrown)) { return; } failure.hidden = false; tryAgainButton.dataset.path = path; }) .finally(function() { spinner.hidden = true; searchCanceler = null; }); }; nb.on('click', tryAgainButton, function() { failure.hidden = true; loadSearchResults(this.dataset.path); }); nb.delegate('click', searchResults, '.more-results button', function() { loadSearchResults(this.dataset.path); nb.remove(this); }); loadSearchResults(searchResultPath); nb.delegate('click', '#buttons-order-by', 'button', function() { const buttonsInGroup = this.parentElement.querySelectorAll('button'); const buttonActiveClass = 'is-blue'; const buttonInactiveClass = 'is-outlined'; // Toggle button classes buttonsInGroup.forEach(function(button) { button.classList.remove(buttonActiveClass); button.classList.add(buttonInactiveClass); }); this.classList.remove(buttonInactiveClass); this.classList.add(buttonActiveClass); const url = searchResultPath.replace(/([?&])o=[^?&]+/, '$1o=' + this.value); loadSearchResults(url, true); }); }); </script> </section> </div> <footer> <div class="row"> <div class="medium-6 columns"> <ul class="fa-ul"> <li><i class="fas fa-li fa-home"></i> <a href="/" class="is-white">Home</a></li> <li><i class="fas fa-li fa-info"></i> <a href="/help" class="is-white">Help</a></li> <li><i class="fas fa-li fa-map-marker-alt"></i> <a href="/contact" class="is-white">Contact us</a></li> <li><i class="fas fa-li fa-gavel"></i> <a href="/legal" class="is-white">Legal notice</a></li> <li><i class="far fa-li fa-eye"></i> <a href="/privacy" class="is-white">Privacy Policy</a></li> <li><i class="fas fa-li fa-shopping-cart"></i> <a href="/bookstores" class="is-white">Bookstores</a></li> </ul> </div> <div class="medium-6 columns"> <div id="nicebooks-worldwide"> <ul> <li> <a href="https://ca-en.nicebooks.com/search?q=9780786445691" lang="en-CA" hreflang="en-CA" class="is-white" style="background-image: url(//static.nicebooks.com/images/flags/CA.gif?1728338258);"> Canada (English) </a> </li> <li> <a href="https://ca-fr.nicebooks.com/search?q=9780786445691" lang="fr-CA" hreflang="fr-CA" class="is-white" style="background-image: url(//static.nicebooks.com/images/flags/CA.gif?1728338258);"> Canada (Français) </a> </li> <li> <a href="https://de.nicebooks.com/search?q=9780786445691" lang="de-DE" hreflang="de-DE" class="is-white" style="background-image: url(//static.nicebooks.com/images/flags/DE.gif?1728338258);"> Deutschland </a> </li> <li> <a href="https://es.nicebooks.com/search?q=9780786445691" lang="es-ES" hreflang="es-ES" class="is-white" style="background-image: url(//static.nicebooks.com/images/flags/ES.gif?1728338258);"> España </a> </li> <li> <a href="https://fr.nicebooks.com/search?q=9780786445691" lang="fr-FR" hreflang="fr-FR" class="is-white" style="background-image: url(//static.nicebooks.com/images/flags/FR.gif?1728338258);"> France </a> </li> <li> <a href="https://uk.nicebooks.com/search?q=9780786445691" lang="en-GB" hreflang="en-GB" class="is-white" style="background-image: url(//static.nicebooks.com/images/flags/GB.gif?1728338258);"> United Kingdom </a> </li> <li> <a href="https://it.nicebooks.com/search?q=9780786445691" lang="it-IT" hreflang="it-IT" class="is-white" style="background-image: url(//static.nicebooks.com/images/flags/IT.gif?1728338258);"> Italia </a> </li> <li> <a href="https://us.nicebooks.com/search?q=9780786445691" lang="en-US" hreflang="en-US" class="is-white" style="background-image: url(//static.nicebooks.com/images/flags/US.gif?1728338258);"> United States </a> </li> </ul> </div> </div> </div> <div lang="en" id="footer-banner"> <div class="row"> <div class="column"> <div id="footer-banner-container"> <div> <i class="fas fa-fw fa-copyright"></i> NiceBooks 2009-2024 </div> <div> <i class="fas fa-fw fa-bolt"></i> Powered by <a href="https://github.com/brick" target="_blank">Brick</a> </div> </div> </div> </div> </div> </footer> </div> <div id="overlay"></div> <div id="ajax-modal" class="modal" role="dialog" aria-modal="true" style="width: 100%; max-width: 640px;"> <!-- Placeholder --> </div> <div id="auth-modal" class="modal" role="dialog" aria-modal="true"> <div class="modal-box" style="max-width: 500px;"> <div id="login" class="auth"> <button type="button" class="modal-close" data-modal-close></button> <h2 style="font-size: 2.2rem; margin-top: 0;">Welcome!</h2> <p style="color: #666;">Share your readings and manage your online library, it's completely free. Join us!</p> <p style="margin-top: 2rem;"> <a href="/auth/facebook-login" class="nb-button is-facebook full medium"> <i class="fab fa-fw fa-facebook-f"></i> Log in with Facebook </a> </p> <p class="divider">or</p> <form method="post" action="/auth/login"> <p><input type="email" name="email" required class="nb-input is-fullwidth" placeholder="Email address" style=""></p> <p><input type="password" name="password" required class="nb-input is-fullwidth" placeholder="Password"></p> <p><button type="submit" class="nb-button full medium is-blue">Log in</button></p> </form> <p style="text-align: center;"><a href="/auth/signup">Create an account</a></p> <p style="text-align: center;"><a href="/auth/recover">Forgot your password?</a></p> </div> </div> </div> <div id="cover-modal" class="modal" role="dialog" aria-modal="true"> <button class="cover-modal-close" data-modal-close></button> <img class="cover-modal-image" src="" alt=""> </div> <!-- Global site tag (gtag.js) - Google AdWords: 1032358671 --> <script async src="https://www.googletagmanager.com/gtag/js?id=AW-1032358671"></script> <!-- Bing Ads Universal Event Tracking --> <script>(function(w,d,t,r,u){var f,n,i;w[u]=w[u]||[],f=function(){var o={ti:"5011923"};o.q=w[u],w[u]=new UET(o),w[u].push("pageLoad")},n=d.createElement(t),n.src=r,n.async=1,n.onload=n.onreadystatechange=function(){var s=this.readyState;s&&s!=="loaded"&&s!=="complete"||(f(),n.onload=n.onreadystatechange=null)},i=d.getElementsByTagName(t)[0],i.parentNode.insertBefore(n,i)})(window,document,"script","//bat.bing.com/bat.js","uetq");</script> <!-- Google Analytics --> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', "UA-9151806-9", 'auto'); ga('send', 'pageview'); </script> </body> </html>