1<!DOCTYPE html> 2<html class='' id='publicDialog'> 3<head> 4<!-- Google Tag Manager -->
5<script>
vendor: 327 bytes, lines 5-9
5(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 6new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 7j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 8'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 9})(window,document,'script','dataLayer','
9GTM-WG4J29S
vendor: 3 bytes, line 9
9');
9</script>
vendor: 1 bytes, line 9
9
10<script>
vendor: 327 bytes, lines 10-14
10(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 11new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 12j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 13'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 14})(window,document,'script','dataLayer','
14GTM-TRZX7BZ
vendor: 3 bytes, line 14
14');
14</script>
14 15<!-- End Google Tag Manager --> 16 17<!-- Analytics Here --> 18<!-- Global site tag (gtag.js) - Google Analytics -->
vendor: 64 bytes, lines 18-19
18 19<script async src="https://www.googletagmanager.com/gtag/js?id=
19UA-46858978-2
vendor: 12 bytes, line 19
19"></script>
20<script> 21
vendor: 136 bytes, lines 21-25
21window.dataLayer = window.dataLayer || []; 22 function gtag(){dataLayer.push(arguments);} 23 gtag('js', new Date()); 24 25 gtag('config', '
25UA-46858978-2
vendor: 39 bytes, lines 25-26
25', { 'optimize_id': 'GTM-M9B6M8R'}); 26
26gtag('config', 'AW-951733091'); 27</script>
27 28<!-- Facebook Pixel Code -->
29<script>
vendor: 417 bytes, lines 29-38
29 30 !function(f,b,e,v,n,t,s) 31 {if(f.fbq)return;n=f.fbq=function(){n.callMethod? 32 n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 33 if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 34 n.queue=[];t=b.createElement(e);t.async=!0; 35 t.src=v;s=b.getElementsByTagName(e)[0]; 36 s.parentNode.insertBefore(t,s)}(window, document,'script', 37 'https://connect.facebook.net/en_US/fbevents.js'); 38 fbq('init', '
38120259081996654
vendor: 55 bytes, lines 38-45
38', { 39 em: '', 40 }); 41 42 fbq('track', 'PageView'); 43 44 45
46</script>
46 47<noscript><img height="1" width="1" style="display:none" 48 src="https://www.facebook.com/tr?id=120259081996654&ev=PageView&noscript=1" 49/></noscript> 50<!-- End Facebook Pixel Code --> 51 52 53<meta charset='UTF-8'> 54<title>Login | Learn Enough to Be Dangerous</title> 55<link as='script' href='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-AMS_HTML' rel='preload'> 56<link href='https://www.learnenough.com/login' rel='canonical'>
57<script src='//use.typekit.net/nbl5sqs.js'></script>
vendor: 1 bytes, line 57
57
58<script> 59try{Typekit.load();}catch(e){} 60</script>
60 61<link href='/favicon-le.png' rel='icon'> 62<link href='/le/apple-touch-icon-precomposed.png' rel='apple-touch-icon-precomposed'> 63<link rel="stylesheet" href="https://www.learnenough.com/assets/novo_le-903f5a37a26b9e9cb92d162745da9a9ce767b40ab20118088e7cf4bc464badf4.css" media="screen" /> 64<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/styles/default.min.css">
65<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/highlight.min.js"></script>
vendor: 1 bytes, line 65
65
66<script></script>
66 67 68<meta name="csrf-param" content="authenticity_token" /> 69<meta name="csrf-token" content="9hXZF04tyuFYDVS0tb36U_7Rwr3IpPssBBrRIUtbdKVbiV-8o2QbhEy8IO-8K6c_4QyyKEgFNSSfl06CadOAeQ" /> 70<meta content='Learn Enough to Be Dangerous is designed to unleash your technical genius by teaching you technical sophistication.' name='description'> 71<meta content='width=device-width, initial-scale=1' name='viewport'> 72<meta content='https://www.learnenough.com' property='og:url'> 73<meta content='Learn Enough to Be Dangerous' property='og:title'> 74<meta content='Learn Enough to Be Dangerous is designed to unleash your technical genius by teaching you technical sophistication.' property='og:description'> 75<meta content='Learnenough.com' property='og:site_name'> 76<meta content='http://softcover-static.s3.amazonaws.com/og_le.png' property='og:image'> 77<meta content='https://softcover-static.s3.amazonaws.com/og_le.png' property='og:image:secure_url'> 78<meta content='image/png' property='og:image:type'> 79<meta content='500' property='og:image:width'> 80<meta content='500' property='og:image:height'> 81<link href="https://vjs.zencdn.net/5.5.3/video-js.css" rel="stylesheet">
82<script> 83 window.Config = { 84 env: "production", 85 bucket: "softcover", 86 previewBucket: "softcover-cloud", 87 userId: false 88 } 89</script>
vendor: 1 bytes, line 89
89
90<script async data-version='4' log-level='warn' src='https://www.paypalobjects.com/api/checkout.js' type='text/javascript'></script>
vendor: 1 bytes, line 90
90
91<script src='https://js.braintreegateway.com/web/3.42.0/js/client.min.js' type='text/javascript'></script>
vendor: 1 bytes, line 91
91
92<script src='https://js.braintreegateway.com/web/3.42.0/js/paypal-checkout.min.js' type='text/javascript'></script>
vendor: 1 bytes, line 92
92
93<script crossorigin='anonymous' integrity='sha384-5BJxsRUsHmz1Kk/hmquvrNXoqth2fWO8TW4G5MbuwrD7g7eyanb4SJ9KV+VGChAT' src='https://code.jquery.com/jquery-2.0.3.min.js' type='text/javascript'></script>
vendor: 1 bytes, line 93
93
94<script crossorigin='anonymous' integrity='sha384-K+ZWtBPyZCUebtL8tOnHvM9ROMqYQ6mw9ikSlKZezZ10u5b8cVzCLnHFubDPWW9e' src='https://cdn.jsdelivr.net/formalize/0.1/js/jquery.formalize.min.js' type='text/javascript'></script>
vendor: 1 bytes, line 94
94
95<script crossorigin='anonymous' integrity='sha384-3vojR0D/VZNPM9rutbkAQlVZeDVrc50TkyBVfVpqoZzVQpWA65x5mQXOij0vt2Cu' src='https://cdn.jsdelivr.net/underscorejs/1.6.0/underscore-min.js' type='text/javascript'></script>
vendor: 1 bytes, line 95
95
96<script async src='https://js.stripe.com/v3/' type='text/javascript'></script>
vendor: 1 bytes, line 96
96
97<script src="https://www.learnenough.com/assets/application-9cbd5b2cfece6fa1847aba9fbdf722803fc20d152c79fe36b86264f6fc0c2b33.js"></script>
97 98 99<link href='//cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.1/jquery.qtip.min.css' rel='stylesheet'>
100<script src='//cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.1/jquery.qtip.min.js' type='text/javascript'></script>
100 101<meta content='on' name='twitter:widgets:csp'> 102<meta content='n4FYakgLVe1smRPU7gMdoXLgAUHVQDHevdSPlKGqLO4' name='google-site-verification'> 103</head> 104<body class=' '> 105<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 105-106
105 106<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
106GTM-WG4J29S
vendor: 150 bytes, lines 106-108
106" 107height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 108<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
108GTM-TRZX7BZ
vendor: 83 bytes, lines 108-109
108" 109height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
110<!-- End Google Tag Manager (noscript) --> 111 112<div class='container topHeader'> 113 114<div class='le_sidemenu checkout_sidemenu'> 115<div class='checkout-close'> 116<a onClick="$('.le_sidemenu').removeClass('open');$('.le_sidemenu-bg').removeClass('open');" href="javascript://"><i class='fas fa-times'></i> 117</a></div> 118<div class='page-form'> 119<div id='j_cartForm'><div id='j_checkoutFormWr'> 120<form id="j_checkoutForm" action="/cart/complete" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" autocomplete="off" /><input type="hidden" name="authenticity_token" value="fKv46Dli-MalYqnTwR1UzpWGX5G8fdR7qLJ6ig3z6fhSSLKqEHgPWREqCaioMi2nAsFnKoF2Eh8pTf69NK2GCA" autocomplete="off" /> 121<input type="hidden" name="pap_custom" value="" id="pap_tdx8v2s5a" /> 122<h5 class='header-with-link'> 123Create Account 124<span> 125(or 126<a class="fancylink_stand-bg" href="/login?after=%2Flogin%23cart-checkout">log in</a> 127) 128</span> 129</h5> 130<div> 131<label for="cart_new_user_email">Email</label> 132<input type="email" name="cart[new_user_email]" id="cart_new_user_email" required="required" autocomplete="email" /> 133</div> 134<div> 135<label for="cart_new_user_username">Public Username</label> 136<input type="text" name="cart[new_user_username]" id="cart_new_user_username" required="required" autocomplete="username" /> 137</div> 138<div> 139<label for="cart_new_user_password">Password</label> 140<input type="password" name="cart[new_user_password]" id="cart_new_user_password" required="required" autocomplete="new-password" /> 141</div> 142<div> 143<label for="cart_new_user_password_confirmation">Password Confirmation</label> 144<input type="password" name="cart[new_user_password_confirmation]" id="cart_new_user_password_confirmation" required="required" autocomplete="new-password" /> 145</div> 146<div class='optin-wr'> 147<div class='optin-error_msg'>You have to make a choice. Choose...wisely.</div> 148<label class='fancyCheckLabel optin-check'> 149<input id='cart-opt-in' name='cart[new_user_opt_in]' type='radio' value='1'> 150receive announcement and update emails? 151<label></label> 152</label> 153<p class='optin-msg'> 154Get occasional notifications about things like product discounts, blog posts, and new or updated tutorials. Unsubscribe at any time. 155 156</p> 157<label class='fancyCheckLabel optout-check'> 158<input id='cart-opt-out' name='cart[new_user_opt_in]' type='radio' value='0'> 159No thanks. 160<label></label> 161</label> 162</div> 163<div class='checkout_gifting' id='gift-options'> 164<label class='fancyCheckLabel'> 165<input name='cart[is_gift]' onclick='toggleGiftForm($(event.target))' type='checkbox'> 166Is this a gift? 167<label></label> 168</label> 169<div class='checkout_gifting-form' id='gift-form'> 170<h5>Gift Delivery Options</h5> 171<div> 172<label class='fancyCheckLabel'> 173<input checked name='cart[gift][to_print]' onchange='togglePrint()' type='radio' value='0'> 174<label></label> 175Send Gift by Email 176<small>(Weâll email the recipient for you)</small> 177</label> 178</div> 179<div> 180<label class='fancyCheckLabel'> 181<input name='cart[gift][to_print]' onchange='togglePrint()' type='radio' value='1'> 182<label></label> 183Print Gift Yourself 184<small>(Give the gift in a card/envelope)</small> 185</label> 186</div> 187<div> 188<label for="cart_gift_from_name">From Name</label> 189<input type="text" name="cart[gift][from_name]" id="cart_gift_from_name" /> 190</div> 191<div> 192<label for="cart_gift_name">Recipient Name</label> 193<input type="text" name="cart[gift][name]" id="cart_gift_name" /> 194</div> 195<div id='gift_recipient_email'> 196<label for="cart_gift_email">Recipient Email</label> 197<input type="email" name="cart[gift][email]" id="cart_gift_email" /> 198</div> 199<div> 200<label for="cart_gift_message">Personalized Gift Message (optional)</label> 201<textarea name="cart[gift][message]" id="cart_gift_message" rows="3" style="min-height:auto"> 202</textarea> 203</div> 204<div id='gift_delivery_date'> 205<label for="cart_gift_to_deliver_at">Delivery Date (MM/DD/YYYY - Optional)</label> 206<input type="date" name="cart[gift][to_deliver_at]" id="cart_gift_to_deliver_at" placeholder="MM/DD/YYYY" /> 207</div> 208</div> 209</div>
210<script> 211 (function() { 212 window.toggleGiftForm = function(ch) { 213 return $('#gift-form').toggle(ch.is(':checked')); 214 }; 215 216 window.togglePrint = function() { 217 return $('#gift_recipient_email, #gift_delivery_date').toggle($('input[name="cart[gift][to_print]"]:checked').val() === '0'); 218 }; 219 220 $(function() { 221 return toggleGiftForm($('#gift-options input[name="cart[is_gift]"]')); 222 }); 223 224 }).call(this); 225</script>
225 226<div class='cartNotFree' id='j_quickCheckout'> 227<h5>Quick Checkout</h5> 228<div id='payment-request-button'></div> 229<div class='paypal-wr'> 230<div id='paypal-button'></div> 231<div id='paypal-details' style='display:none'> 232<strong>Using PayPal Account:</strong> 233<br> 234<span id='paypal-name'></span> 235( 236<span id='paypal-email'></span> 237) 238<br> 239<a href='javascript://' id='cancel-paypal-btn' onclick='Purchase.cancelPaypal()'>Change</a> 240</div> 241</div> 242 243<h5>or Pay by Credit Card</h5> 244<div class='creditCardInput'> 245<div id='j_cc_form'> 246<div class='checkoutFull'> 247<label>Card Info</label> 248<div class='card-element' id='card-element'></div> 249<div id='card-errors'></div> 250</div> 251</div> 252</div> 253</div> 254<div class='le_cart-errors userErrors'></div> 255<div class='le_cart-errors purchaseErrors'></div> 256<div class='le_cart-errors checkoutOptinErrors'> 257<h5>Error processing your payment</h5> 258<ul> 259<li>You didn't choose whether or not to be added to the mailing list</li> 260</ul> 261</div> 262<h5>Confirm</h5> 263<div class='cart_lastconfirm'> 264<label>Total Today</label> 265<div id='j_cartTotal'>$0.00</div> 266<label>(7 day free trial - Payment will be charged after trial ends)</label> 267</div> 268<div class='cart'></div> 269<div class='submitWr'>
vendor: 82 bytes, lines 269-270
269 270<script src="https://www.recaptcha.net/recaptcha/api.js" defer="defer"></script>
271<p class='recaptcha-notice'></p> 272<button class='g-recaptcha j_submitButton danger' data-callback='onSubmit' data-error-callback='recaptchaCartErrored' data-expired-callback='recaptchaCartExpired' data-sitekey='6LeUMkckAAAAACfQJqE0y43Fa8pSrKJKBWT3_yKQ'> 273Complete Checkout 274</button> 275</div> 276<div class='payment-details'> 277<img class="payment-cards" src="https://www.learnenough.com/assets/payment-d6532f21f3d0117c7b88578c5666d2abf8598dc306db1198909969d73efb9de6.webp" /> 278<p> 279Payments and credit card details are securely managed and protected by Learn Enough's payment processor, Stripe. More information on their site: 280<br> 281<a target="_blank" class="stripeLogo" href="https://www.stripe.com"><img src="https://www.learnenough.com/assets/stripe-697e04c779dd1f74593ce93803987137493cffc44c593b5a73399025cf64820a.webp" /></a> 282</p> 283</div>
284<script> 285 $(function(){ 286 Cart.init({ 287 availableBundles: [{"id":6,"name":"Learn Enough JavaScript to Be Dangerous","code":"learn_enough_javascript","price_in_dollars":29.0,"book_ids":[301]},{"id":1,"name":"Learn Enough Command Line to Be Dangerous","code":"learn_enough_command_line","price_in_dollars":19.0,"book_ids":[164]},{"id":7,"name":"Learn Enough Ruby to Be Dangerous","code":"learn_enough_ruby","price_in_dollars":29.0,"book_ids":[305]},{"id":2,"name":"Learn Enough Text Editor to Be Dangerous","code":"learn_enough_text_editor","price_in_dollars":19.0,"book_ids":[183]},{"id":3,"name":"Learn Enough Git to Be Dangerous","code":"learn_enough_git","price_in_dollars":19.0,"book_ids":[191]},{"id":15,"name":"Ruby on Rails Tutorial 6th Edition","code":"ruby_on_rails_tutorial_6th_edition","price_in_dollars":39.0,"book_ids":[319]},{"id":4,"name":"Learn Enough HTML to Be Dangerous","code":"learn_enough_html","price_in_dollars":19.0,"book_ids":[234]},{"id":5,"name":"Learn Enough CSS \u0026 Layout to Be Dangerous","code":"learn_enough_css","price_in_dollars":29.0,"book_ids":[268]},{"id":17,"name":"Learn Enough Python to Be Dangerous","code":"learn_enough_python","price_in_dollars":39.0,"book_ids":[439]},{"id":8,"name":"Ruby on Rails Tutorial (Rails 5)","code":"ruby_on_rails_tutorial_4th_edition","price_in_dollars":39.0,"book_ids":[216]},{"id":9,"name":"Learn Enough Action Cable to Be Dangerous","code":"learn_enough_action_cable","price_in_dollars":19.0,"book_ids":[322]},{"id":11,"name":"Developer Fundamentals","code":"developer_fundamentals","price_in_dollars":19.0,"book_ids":[164,183,191]},{"id":16,"name":"Ruby on Rails Tutorial 7th Edition","code":"ruby_on_rails_tutorial_7th_edition","price_in_dollars":39.0,"book_ids":[438]},{"id":13,"name":"Beginning Development","code":"beginning_development","price_in_dollars":19.0,"book_ids":[301,305]},{"id":12,"name":"Web Basics","code":"web_basics","price_in_dollars":29.0,"book_ids":[234,268,301]},{"id":18,"name":"Annual All Access","code":"annual_all_access","price_in_dollars":468.0,"book_ids":[164,183,191,234,268,439,301,305,322,438,484]},{"id":14,"name":"Application Development","code":"application_development","price_in_dollars":39.0,"book_ids":[439,305,484,322]},{"id":10,"name":"All Access","code":"all_access","price_in_dollars":49.0,"book_ids":[164,183,191,234,268,439,301,305,322,438,484]},{"id":19,"name":"Ruby on Rails Tutorial 8th Edition","code":"ruby_on_rails_tutorial_8th_edition","price_in_dollars":39.0,"book_ids":[484]}], 288 stripeKey: "pk_live_Xn1p0BfxqKxkAxtEr03P7wmd", 289 useCardOnFile: false, 290 existingPaymentLabel: "", 291 existingPaymentText: "", 292 discount: false,
293 data: {"courseBundles":[],"bookOptions":[],"subscriptionDiscount":null,"is_gift":null,"totalToday":0.0}, 294 braintreeToken: "eyJ2ZXJzaW9uIjoyLCJhdXRob3JpemF0aW9uRmluZ2VycHJpbnQiOiJleUpyYVdRaU9pSXlNREU0TURReU5qRTJMWEJ5YjJSMVkzUnBiMjRpTENKcGMzTWlPaUpvZEhSd2N6b3ZMMkZ3YVM1aWNtRnBiblJ5WldWbllYUmxkMkY1TG1OdmJTSXNJbUZzWnlJNklrVlRNalUySW4wLmV5SmxlSEFpT2pFM09URXhOREEyTlRBc0ltcDBhU0k2SW1Gak5HVmpOMkl6TFRRellqY3ROR0prTlMxaU1qSmhMVGt4TURRNE1qRTJaall3TUNJc0luTjFZaUk2SWpObVptUXplbUozWW5ab2JtTmtNbTBpTENKcGMzTWlPaUpvZEhSd2N6b3ZMMkZ3YVM1aWNtRnBiblJ5WldWbllYUmxkMkY1TG1OdmJTSXNJbTFsY21Ob1lXNTBJanA3SW5CMVlteHBZMTlwWkNJNklqTm1abVF6ZW1KM1luWm9ibU5rTW0waUxDSjJaWEpwWm5sZlkyRnlaRjlpZVY5a1pXWmhkV3gwSWpwMGNuVmxMQ0oyWlhKcFpubGZkMkZzYkdWMFgySjVYMlJsWm1GMWJIUWlPbVpoYkhObGZTd2ljbWxuYUhSeklqcGJJbTFoYm1GblpWOTJZWFZzZENKZExDSnpZMjl3WlNJNld5SkNjbUZwYm5SeVpXVTZWbUYxYkhRaUxDSkNjbUZwYm5SeVpXVTZRMnhwWlc1MFUwUkxJbDBzSW05d2RHbHZibk1pT25zaWNHRjVjR0ZzWDJOc2FXVnVkRjlwWkNJNklrRlpSa0pWYkhZelIxQmFTbEUxZW1sdlVsWnJjbmxZVGpCNWNXOWpjMFZsZUZSZk9XOVVjVkZKUTI5aGJHNTFVbVpSZGpJMlZGZDBXbE5JZUZoU2QySXhNRkpDZEdNdGIzcHRjRUZMVlZWWEluMTkuTk9iZ21LazBlT1Z1eUgxemlOQjJYZUQzWi0tRnVqejlpQmNvWWVIN084LTJiNkZScWhZbjRvdlVpdFg5NGRVYVV0c0Q1N0dHaTZkWG40SHZzdUFkNmciLCJjb25maWdVcmwiOiJodHRwczovL2FwaS5icmFpbnRyZWVnYXRld2F5LmNvbTo0NDMvbWVyY2hhbnRzLzNmZmQzemJ3YnZobmNkMm0vY2xpZW50X2FwaS92MS9jb25maWd1cmF0aW9uIiwiZ3JhcGhRTCI6eyJ1cmwiOiJodHRwczovL3BheW1lbnRzLmJyYWludHJlZS1hcGkuY29tL2dyYXBocWwiLCJkYXRlIjoiMjAxOC0wNS0wOCIsImZlYXR1cmVzIjpbInRva2VuaXplX2NyZWRpdF9jYXJkcyJdfSwiY2xpZW50QXBpVXJsIjoiaHR0cHM6Ly9hcGkuYnJhaW50cmVlZ2F0ZXdheS5jb206NDQzL21lcmNoYW50cy8zZmZkM3pid2J2aG5jZDJtL2NsaWVudF9hcGkiLCJlbnZpcm9ubWVudCI6InByb2R1Y3Rpb24iLCJtZXJjaGFudElkIjoiM2ZmZDN6YndidmhuY2QybSIsImFzc2V0c1VybCI6Imh0dHBzOi8vYXNzZXRzLmJyYWludHJlZWdhdGV3YXkuY29tIiwiYXV0aFVybCI6Imh0dHBzOi8vYXV0aC52ZW5tby5jb20iLCJ2ZW5tbyI6Im9mZiIsImNoYWxsZW5nZXMiOltdLCJ0aHJlZURTZWN1cmVFbmFibGVkIjpmYWxzZSwiYW5hbHl0aWNzIjp7InVybCI6Imh0dHBzOi8vY2xpZW50LWFuYWx5dGljcy5icmFpbnRyZWVnYXRld2F5LmNvbS8zZmZkM3pid2J2aG5jZDJtIn0sInBheXBhbEVuYWJsZWQiOnRydWUsInBheXBhbCI6eyJiaWxsaW5nQWdyZWVtZW50c0VuYWJsZWQiOnRydWUsImVudmlyb25tZW50Tm9OZXR3b3JrIjpmYWxzZSwidW52ZXR0ZWRNZXJjaGFudCI6ZmFsc2UsImFsbG93SHR0cCI6ZmFsc2UsImRpc3BsYXlOYW1lIjoiTGVhcm4gRW5vdWdoIiwiY2xpZW50SWQiOiJBWUZCVWx2M0dQWkpRNXppb1JWa3J5WE4weXFvY3NFZXhUXzlvVHFRSUNvYWxudVJmUXYyNlRXdFpTSHhYUndiMTBSQnRjLW96bXBBS1VVVyIsImJhc2VVcmwiOiJodHRwczovL2Fzc2V0cy5icmFpbnRyZWVnYXRld2F5LmNvbSIsImFzc2V0c1VybCI6Imh0dHBzOi8vY2hlY2tvdXQucGF5cGFsLmNvbSIsImRpcmVjdEJhc2VVcmwiOm51bGwsImVudmlyb25tZW50IjoibGl2ZSIsImJyYWludHJlZUNsaWVudElkIjoiQVJLcllSRGgzQUdYRHpXN3NPXzNiU2txLVUxQzdIR191V05DLXo1N0xqWVNETlVPU2FPdElhOXE2VnBXIiwibWVyY2hhbnRBY2NvdW50SWQiOiJMZWFybkVub3VnaF9pbnN0YW50IiwiY3VycmVuY3lJc29Db2RlIjoiVVNEIn19", 295 loggedIn: false, 296 hasSubscription: false, 297 currentMonthlyCost: 0, 298 currentCourseBundleIds: [], 299 authenticity_token: "kmJzdAdYx6hYkTydV6AviGT4Jt2M0t8qskE9pqHia60__vXf6hEWzUwgSMZeNnLkeyVWSAxzESIpzKIFg2qfcQ" 300 }) 301 }) 302 function onSubmit(token) { 303 return Cart.submitForm() 304 } 305</script>
305 306</form> 307 308</div> 309</div> 310</div> 311</div> 312<div class='le_sidemenu cart_sidemenu'> 313<div class='checkout-close'> 314<a onClick="$('.le_sidemenu').removeClass('open');$('.le_sidemenu-bg').removeClass('open');" href="javascript://"><i class='fas fa-times'></i> 315</a></div> 316<div class='page-form le_cart-full' id='j_cart-contain'> 317<h5>CART</h5> 318<div id='j_cart'><div class='j_leCart'> 319<div class='cart-items'> 320</div> 321<h5>Total</h5> 322<div> 323<table class='subscription-total'> 324<tr> 325<td> 326<label>Total Today</label> 327</td> 328<td id='j_totalCartToday'>$0.00</td> 329</tr> 330</table> 331<label>(7 day free trial - Payment will be charged after trial ends)</label> 332</div> 333</div> 334</div> 335<div class='landing-pricing_cta'> 336<a onClick="Cart.sidebarCheckout()" href="javascript://"><button class='attention' id='checkout-now-btn'>Checkout Now</button> 337</a></div> 338</div> 339<div class='page-form le_cart-empty open' id='j_cart-empty'> 340<img class="le_cart-empty_icon" src="https://www.learnenough.com/assets/learnenough/cart_empty-d05104a77de6d5b902a3be3569c6c7ba841d8bcc2530593da0f69dd3764cdb43.webp" /> 341<h3>Your Cart is Empty</h3> 342<div class='le_cart-empty_cta'> 343<a href="https://www.learnenough.com/courses"><button class='btn-small attention'> 344See the Tutorials 345</button> 346</a></div> 347</div> 348</div> 349<div class='le_sidemenu-bg' onClick='$('.le_sidemenu').removeClass('open');$('.le_sidemenu-bg').removeClass('open');'></div> 350<div class='le_footermenu'> 351<div class='checkout-close'> 352<a onClick="$('.le_footermenu').removeClass('open')" href="javascript://"><i class='fas fa-times'></i> 353</a></div> 354<div class='le_footermenu_content le_footermenu_change'> 355<div class='le_footermenu_copy'> 356<div class='le_footermenu_cost-current'> 357<label>Current $ /mo</label> 358<div class='j_currentMonthlyCost'> 359$30 360</div> 361</div> 362<div class='le_footermenu_cost-new'> 363<label> 364New $ / 365<div class='j_newBillingInterval'>mo</div> 366</label> 367<div class='j_newMonthlyCost'> 368$300 369</div> 370</div> 371<div class='le_footermenu_cost-today j_costToday'> 372<label>Change</label> 373<div class='j_newTodayCost'> 374$300 375</div> 376</div> 377</div> 378<div class='le_footermenu_cta'> 379<a onClick="Cart.footerCheckout()" href="javascript://"><button class='small attention btn-small'> 380<span id='j_footerCheckoutBtn'> 381Checkout Now / Update Subscription 382</span> 383</button> 384</a><a onClick="Cart.cancel()" href="javascript://"><button class='small danger btn-small'> 385<span id='j_footerCheckoutBtn'> 386Cancel 387</span> 388</button> 389</a></div> 390</div> 391<div class='le_footermenu_content le_footermenu_confirm'> 392<div class='le_footermenu_copy'> 393<div class='le_footermenu_cost-new'> 394<label> 395Just to confirm, new $ / 396<div class='j_newBillingInterval'>mo</div> 397</label> 398<div class='j_newMonthlyCost'>$XY</div> 399</div> 400<div class='le_footermenu_cost-new j_costToday'> 401<label class='j_costTodayLabel'>Cost Today</label> 402<div class='j_newTodayCost'>$XY</div> 403</div> 404<div class='le_footermenu_cost j_existingPayment'> 405<label class='j_existingPaymentLabel'>On card ending</label> 406<div class='j_existingPaymentText'>1234</div> 407</div> 408</div> 409<div class='le_footermenu_cta'> 410<a onClick="Cart.footerConfirmChange()" href="javascript://"><button class='small menu_warning-btn btn-small'> 411<span id='j_footerConfirmChangeBtn'> 412Confirm Change 413</span> 414</button> 415</a><a onClick="Cart.cancel()" href="javascript://"><button class='small menu_warning-btn danger btn-small'> 416<span id='j_footerCheckoutBtn'> 417Cancel 418</span> 419</button> 420</a></div> 421</div> 422</div> 423 424<div class='site-header'> 425<div class='side-menu-toggle'> 426<a class="side-menu-close" href="javascript://"><i class='fas fa-times'></i> 427</a><a class="side-menu-open" href="javascript://"><i class='fas fa-bars'></i> 428</a></div> 429<nav class='nav'> 430<a class="logoLink artLogo" href="/"><div class='svg le-logo'><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 801 1041" style="enable-background:new 0 0 801 1041;" xml:space="preserve"> 431<path d="M569.9,478.6l3.5-3.5v-41.7l-1-2.5l-24.3-24.3l-2.5-1H410.5l-3.5,3.5v358.6l1,2.5l24.3,24.3l1.9,0.5l0.5,0.5h135.1l3.5-3.5v-41.7l-1-2.5l-24.3-24.3l-2.5-1H488v-89.9h77l3.5-3.5v-41.7l-1-2.5l-24.3-24.3l-2.5-1H488v-81H569.9z M544.2,412.6l17.3,17.3H436.2L419,412.6H544.2z M414,417.6l17.3,17.3v348.7L414,766.3V417.6z M544.2,729.5l17.3,17.3H488v-17.3H544.2z M539.2,566.6l17.3,17.3H488v-17.3H539.2z M484.5,471.6l-3.5,3.5v112.3l3.5,3.5h77v34.7h-77l-3.5,3.5v121.2l3.5,3.5h81.9v34.7H438.3V436.9h128.1v34.7H484.5z"/> 432<path d="M401.5,747.8l-24.3-24.3l-2.5-1h-55.7V433.4l-0.2-0.2l-0.8-2.3l-24.3-24.3l-2.5-1h-49.7l-3.5,3.5v358.6l1,2.5l24.3,24.3l1.9,0.5l0.6,0.6H399l3.5-3.5v-41.7L401.5,747.8z M373.3,729.5l17.3,17.3h-71.5v-17.3H373.3z M307.1,429.9h-39.8l-17.3-17.3h39.8L307.1,429.9z M245.1,417.6l17.3,17.3v348.7l-17.3-17.3V417.6z M395.5,788.5H269.4V436.9h42.7v313.4l3.5,3.5h79.9V788.5z"/> 433<path d="M691.8,600.3c0-77.2-30-149.7-84.6-204.3c-47.3-47.3-108.2-76.2-173.9-83c0.4-22.2,0.6-35.3,0.6-35.7l-2.6-3.8c-1.8-0.6-3.5-2.2-5.1-4.2l5.1,0c1.8,0.1,22.1,0.8,33.2-11.2c5.5-6,8.5-14,8.5-23.4l0.1-13.3l-3.5-3.5l-16-0.1l-3.5,3.5l-0.1,13.3c0,3.3-0.7,5.5-2.4,7.3c-3.7,4-12.4,4.9-15.4,4.9l-11.9,0c1.4-13.4,3.7-39.7,3.9-72.2c0.1-34.4-5.7-68.9-6.6-73.7c4.9-5.8,7.6-13.5,7.6-21.6C425.2,62,413,47.9,398,47.8c0,0-0.1,0-0.1,0c-15,0-27.2,14-27.3,31.2c0,8.1,2.6,15.8,7.5,21.7c-0.9,4.8-7,39.3-7.2,73.6c-0.1,32.5,2,58.9,3.3,72.3l-11.1,0c-1.8-0.
4331-22.1-0.8-33.2,11.2c-5.5,6-8.5,14-8.5,23.4l-0.1,13.3l3.5,3.5l16.2,0.1l3.5-3.5l0.1-13.3c0-3.3,0.7-5.5,2.4-7.3c3.7-4,12.3-4.9,15.3-4.9l5.9,0c-1.6,1.9-3.4,3.5-5.2,4.1l-2.6,3.8c0,0.5,0.2,14.2,0.6,37.4c-61.2,8.9-117.8,37.1-162.3,81.6C144.1,450.6,114,523.1,114,600.3s30,149.7,84.6,204.3c49,49,112.4,78.2,180.7,83.7c6.4,96.9,11.7,103.7,14.1,106.6l3.3,2.6l2.9-2.6c2.4-2.9,7.8-9.7,14.3-105.9c73-2.7,141.3-32.4,193.2-84.4C661.8,750,691.8,677.5,691.8,600.3z M377.6,79.1c0.1-13.4,9.1-24.2,20.3-24.2c0,0,0,0,0.1,0c7.7,0,14.5,5.3,17.8,13l-10.6-4.3c1.1,1.6,2.1,3.4,2.8,5.5l9.4,3.8c0.5,2,0.7,4.2,0.7,6.4c0,0.2,0,0.5,0,0.7l-8.4-3.4c0.1,0.8,0.1,1.7,0.1,2.5c0,0.6,0,1.2-0.1,1.8l8,3.2c-0.4,2.1-1,4.2-1.8,6.1l-7.3-2.9c-0.4,1.3-0.9,2.6-1.4,3.7l6.8,2.8c-0.6,1-1.3,1.9-2,2.8c-0.7,0.8-1.5,1.6-2.3,2.3l-0.8-0.3l-5.3-2.2c-1.1,1.2-2.3,2.1-3.6,2.9l5.7,2.3c-2.5,1.2-5.1,1.9-7.9,1.9c-5.3,0-10.3-2.5-14.1-7C379.8,91.9,377.6,85.7,377.6,79.1z M377.9,174.4c0.1-28.2,4.4-57,6.3-68.1c4.1,2.7,8.7,4.2,13.5,4.2c0,0,0.1,0,0.1,0c4.8,0,9.4-1.4,13.5-4.1c0.2,1.3,0.5,2.9,0.7,4.7l-2.1-0.9l-2.9,3.1l5.7,2.3c0.3,2.2,0.6,4.6,1,7.3l-17.4-7.1c0.2,1.4,0.4,3,0.6,4.6l17.3,7c0.3,2.3,0.5,4.7,0.8,7.2l-17.2-7c0.2,1.5,0.3,3,0.5,4.5l17.2,7c0.2,2.3,0.4,4.7,0.6,7.1l-19.6-8c-1.7,0.1-3.7-0.4-3.7-0.4s0.8,1.7,1.9,4l21.7,8.8c0.2,2.3,0.3,4.7,0.4,7l-18.3-7.4c0.9,2.1,1.5,3.9,1.7,5l16.8,6.8c0.1,2.3,0.1,4.6,0.2,6.9l-16.6-6.7c0.1,1.5,0.1,2.9,0.1,4.4l16.5,6.7c0,0.4,0,0.8,0,1.2c0,1.9,0,3.8,0,5.7l-16.7-6.8c-1.1,1.7-5.8-0.2-5.8-0.2s0.4,1,0.9,2.5l21.6,8.7c0,2.3-0.1,4.6-0.2,6.8l-18.6-7.5c0.6,1.8,1.2,3.6,1.6,5l16.9,6.8c-0.1,2.3-0.2,4.6-0.3,6.8l-16.2-6.6c0,1.5-0.1,2.9-0.2,4.3l16.2,6.6c-0.1,2.3-0.2,4.5-0.4,6.7l-16.1-6.5c0,0.7-0.1,1.4-0.1,2.1c0,0.9-0.4,1.4-0.8,1.8l16.8,6.8c-0.1,2.3-0.3,4.5-0.5,6.7l-20-8.1c0.3,1.4,0.7,3.1,1.1,4.7l18.6,7.6c-0.2,2.3-0.4,4.6-0.6,6.6l-16.6-6.8c0.3,1.8,0.4,3.3,0.4,4.1c0,0.1,0,0.2,0,0.3l15.9,6.5c-0.2,2.5-0.5,4.7-0.7,6.6l-15.9-6.4c-0.1,1.5-0.3,2.9-0.4,4.2l8,3.2l-23.7-0.1C380,233.6,377.8,207,377.9,174.4z M362.3,262.1c-1.4,0-14,0.2-20.4,7.1c-2.8,3-4.2,7-4.2,12l0,9.8l-9.2,0l0-9.8c0-7.5,2.3-14,6.6-18.6l0,0c9.1-9.8,27.6-9,27.8-9l69.2,0.2c1.4,0,14.1-0.2,20.6-7.1c2.8-3,4.2-7,4.2-12l0-9.8l9,0l0,9.8c0,7.5-2.3,14-6.6,18.6c-9.1,9.8-27.6,9-27.8,9L362.3,262.1z M407.6,348.5l1.1,0.4h-1.1L407.6,348.5z M403.6,348.9h-5.3l-3.5-79.8l17.2,0.1L403.6,348.9z M408.1,344.3l0.7-6.6l15.9,6.4c0,1.6-0.1,3.1-0.1,4.7h-5.2L408.1,344.3z M409.2,333.6l0.7-6.6l15,6.1c0,2.2-0.1,4.5-0.1,6.8L409.2,333.6z M410.3,322.9l0.7-6.6l14.1,5.7c0,2.2-0.1,4.5-0.1,6.8L410.3,322.9z M411.5,312.2l0.7-6.6l13.1,5.3c0,2.2-0.1,4.5-0.1,6.8L411.5,312.2z M412.6,301.4l0.7-6.6l12.2,4.9c0,2.1-0.1,4.4-0.1,6.8L412.6,301.4z M413.7,290.7l0.7-6.6l11.3,4.6c0,2-0.1,4.3-0.1,6.8L413.7,290.7z M414.9,280l0.7-6.6l5.5,2.2c1.5,1.6,3.1,3,4.8,4c0,1.2,0,2.8-0.1,4.8L414.9,280z M416,269.3L416,269.3l0.3,0c0,0.1,0.1,0.1,0.1,0.2L416,269.3z M390.3,348.9h-20.7c-0.7-36.5-1.1-61.7-1.2-69.5c3.9-2.4,7.2-6.4,9.6-10.3l8.8,0L390.3,348.9z M392.6,951.2c-2-18-4.2-44.3-6.4-82.7c-0.3-5.2-0.6-10.6-0.9-16.2h7.4l2.5,115.9L392.6,951.2z M400.7,959.3l-0.1-20.9l1,0.2C401.4,940.3,400.8,957.7,400.7,959.3z M401.6,934.5l-1-0.4v-6.9l1.7,0.7C402.1,930.2,401.8,932.4,401.6,934.5z M402.7,923.8l-2.2-0.9v-6.9l2.8,1.1C403.2,919.4,403,921.6,402.7,923.8z M403.8,913l-3.2-1.3l0-6.9l3.8,1.6C404.2,908.7,404,910.9,403.8,913z M404.8,902.3l-4.2-1.7v-6.9l4.8,1.9C405.2,897.8,405,900.1,404.8,902.3z M405.7,891.4l-5.1-2.1l0-6.9l5.6,2.3C406,887,405.9,889.2,405.7,891.4z M406.5,880.6l-5.9-2.4l0-6.9l6.4,2.6C406.8,876.1,406.6,878.4,406.5,880.6z M407.3,868.6c0,0.4,0,0.7-0.1,1.1l-6.6-2.7l0-6.9l7,2.8C407.5,864.9,407.4,866.8,407.3,868.6z M407.9,858.8l-7.3-2.9l0-3.5h7.6C408.1,854.5,408,856.6,407.9,858.8z M414.5,880.9c0.6-8.8,1.2-18.3,1.7-28.6h27v-7h-91v7h25c0.6,10,1.1,19.2,1.6,27.8c-66-5.6-127.2-33.9-174.6-81.2C151.2,745.9,122,675.3,122,600.3s29.2-145.6,82.3-198.6c43.1-43.1,97.6-70.4,156.8-79.2c0.1,7.9,0.3,16.8,0.5,26.4h-16.1v7h109.8v-7h-22.7c0.2-10.2,0.4-19.6,0.5-27.9c63.6,6.8,122.6,34.8,168.4,80.7c53.1,53.1,82.3,123.6,82.3,198.6s-29.2,145.6-82.3,198.6C551.2,849.2,485.2,878.1,414.5,880.9z"/> 434</svg> 435</div> 436<span>LEARN ENOUGH</span> 437</a><ul class='headerMenu'> 438<li> 439<a href='tel:1 (888) 979-2398'> 4401 (888) 979-2398 441</a> 442</li> 443<li><a href="https://www.learnenough.com/courses">Courses</a></li> 444<li><a href="https://www.learnenough.com/plans">Plans</a></li> 445<li><a href="https://www.learnenough.com/gifting">Gifting</a></li> 446<li><a href="https://www.learnenough.com/ruby-on-rails-8th-edition">
446The Rails Tutorial</a></li> 447<li><a href="https://www.learnenough.com/for-teams">For Teams</a></li> 448<li><a href="https://www.learnenough.com/blog">Blog</a></li> 449<li><a href="https://www.learnenough.com/login">Log In</a></li> 450<li class='header-cart'> 451<a onClick="Cart.openCart()" class="header-cart_link" href="javascript://"><i class='fas fa-shopping-cart'></i> 452<span class='header-cart_label'>Cart</span> 453</a></li> 454<li> 455<a class="header_search-icon" href="javascript://"><i class='fas fa-search'></i> 456</a><div class='header_search'> 457<form action='//www.learnenough.com/search' method='get'> 458<input id='j_searchInput' name='q' placeholder='Search in tutorials...' type='text'> 459</form> 460</div> 461</li> 462</ul> 463</nav> 464<div id='dropBG'></div> 465</div> 466 467<div class='le-content'> 468 469 470<div class='logReg'> 471<div class='logReg-sidebyside'> 472<div class='wrapper wrapperForm'> 473<h2>Log In</h2> 474<form class="new_user" id="new_user" action="/login" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="✓" autocomplete="off" /><input type="hidden" name="authenticity_token" value="pkel7Mwr6X7yWogDD-bK8EVonH-ZcoT6DY-72S7_557kkdC6a1jZ0GZpg4i_A2mzOaa-Kc1z27CNzB2FbRbqEQ" autocomplete="off" /><div> 475<label for="user_login">Email or Username</label> 476<input autocomplete="username" type="text" name="user[login]" id="user_login" /> 477</div> 478<div> 479<label for="user_password">Password</label> 480<input autocomplete="current-password" type="password" name="user[password]" id="user_password" /> 481</div> 482<div> 483<input name="user[remember_me]" type="hidden" value="0" autocomplete="off" /><input type="checkbox" value="1" name="user[remember_me]" id="user_remember_me" /> 484<label class="checkLabel" for="user_remember_me">Remember me</label> 485</div> 486<div class='logregLinks'> 487<a href="/account/sign_up">Register new account</a> 488<br> 489<a href="/password/new">Forgot your password?</a> 490<br> 491<a href="/confirmation/new">Didn't receive confirmation?</a> 492<br> 493</div> 494 495<div class='submitWr'> 496<input type="submit" name="commit" value="Log In" data-disable-with="Log In" /> 497</div> 498</form></div> 499<div class='form-notice team_signin'> 500<div class='team_signin-content'> 501<h2 class='team_signin-title'>Team Log In</h2> 502<p>If you are a part of a Learn Enough team license, you will need to click an option below to log in and get access to the tutorials.</p> 503</div> 504<div class='team_signin-cta'> 505<div class='form-notice-cta'> 506<a href="/auth/google_oauth2"><button class='attention'> 507<i class='fas fa-users'></i> 508Team Log In 509</button> 510</a></div> 511<div class='team_signin-google'> 512Log in via 513<img class="team_signin-img" src="https://www.learnenough.com/assets/google-91aa4eb1078d18007e19e680463c12068d0273eab219e6c1196f0e3859a8890d.png" /> 514OAuth 515</div> 516<div class='form-notice-cta'> 517<a href="/teams/find_openid"><button class='attention'> 518<i class='fas fa-users'></i> 519OpenID Log In 520</button> 521</a></div> 522<div class='team_signin-google'> 523Log in via Okta OpenID 524</div> 525<div class='form-notice-cta'> 526<a href="/teams/saml_oauth"><button class='attention'> 527<i class='fas fa-users'></i> 528Azure AD Log In 529</button> 530</a></div> 531<div class='team_signin-google'> 532Log in via Azure AD (SAML) 533</div> 534</div> 535</div> 536 537</div> 538</div> 539 540<footer class='footer'> 541<nav class='footer-nav'> 542<div class='footer_logo_wr'> 543<a class="logoLink artLogo" href="/"><div class='svg le-logo'><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 801 1041" style="enable-background:new 0 0 801 1041;" xml:space="preserve"> 544<path d="M569.9,478.6l3.5-3.5v-41.7l-1-2.5l-24.3-24.3l-2.5-1H410.5l-3.5,3.5v358.6l1,2.5l24.3,24.3l1.9,0.5l0.5,0.5h135.1l3.5-3.5v-41.7l-1-2.5l-24.3-24.3l-2.5-1H488v-89.9h77l3.5-3.5v-41.7l-1-2.5l-24.3-24.3l-2.5-1H488v-81H569.9z M544.2,412.6l17.3,17.3H436.2L419,412.6H544.2z M414,417.6l17.3,17.3v348.7L414,766.3V417.6z M544.2,729.5l17.3,17.3H488v-17.3H544.2z M539.2,566.6l17.3,17.3H488v-17.3H539.2z M484.5,471.6l-3.5,3.5v112.3l3.5,3.5h77v34.7h-77l-3.5,3.5v121.2l3.5,3.5h81.9v34.7H438.3V436.9h128.1v34.7H484.5z"/> 545<path d="M401.5,747.8l-24.3-24.3l-2.5-1h-55.7V433.4l-0.2-0.2l-0.8-2.3l-24.3-24.3l-2.5-1h-49.7l-3.5,3.5v358.6l1,2.5l24.3,24.3l1.9,0.5l0.6,0.6H399l3.5-3.5v-41.7L401.5,747.8z M373.3,729.5l17.3,17.3h-71.5v-17.3H373.3z M307.1,429.9h-39.8l-17.3-17.3h39.8L307.1,429.9z M245.1,417.6l17.3,17.3v348.7l-17.3-17.3V417.6z M395.5,788.5H269.4V436.9h42.7v313.4l3.5,3.5h79.9V788.5z"/> 546<path d="M691.8,600.3c0-77.2-30-149.7-84.6-204.3c-47.3-47.3-108.2-76.2-173.9-83c0.4-22.2,0.6-35.3,0.6-35.7l-2.6-3.8c-1.8-0.6-3.5-2.2-5.1-4.2l5.1,0c1.8,0.1,22.1,0.8,33.2-11.2c5.5-6,8.5-14,8.5-23.4l0.1-13.3l-3.5-3.5l-16-0.1l-3.5,3.5l-0.1,13.3c0,3.3-0.7,5.5-2.4,7.3c-3.7,4-12.4,4.9-15.4,4.9l-11.9,0c1.4-13.4,3.7-39.7,3.9-72.2c0.1-34.4-5.7-68.9-6.6-73.7c4.9-5.8,7.6-13.5,7.6-21.6C425.2,62,413,47.9,398,47.8c0,0-0.1,0-0.1,0c-15,0-27.2,14-27.3,31.2c0,8.1,2.6,15.8,7.5,21.7c-0.9,4.8-7,39.3-7.2,73.6c-0.1,32.5,2,58.9,3.3,72.3l-11.1,0c-1.8-0.
5461-22.1-0.8-33.2,11.2c-5.5,6-8.5,14-8.5,23.4l-0.1,13.3l3.5,3.5l16.2,0.1l3.5-3.5l0.1-13.3c0-3.3,0.7-5.5,2.4-7.3c3.7-4,12.3-4.9,15.3-4.9l5.9,0c-1.6,1.9-3.4,3.5-5.2,4.1l-2.6,3.8c0,0.5,0.2,14.2,0.6,37.4c-61.2,8.9-117.8,37.1-162.3,81.6C144.1,450.6,114,523.1,114,600.3s30,149.7,84.6,204.3c49,49,112.4,78.2,180.7,83.7c6.4,96.9,11.7,103.7,14.1,106.6l3.3,2.6l2.9-2.6c2.4-2.9,7.8-9.7,14.3-105.9c73-2.7,141.3-32.4,193.2-84.4C661.8,750,691.8,677.5,691.8,600.3z M377.6,79.1c0.1-13.4,9.1-24.2,20.3-24.2c0,0,0,0,0.1,0c7.7,0,14.5,5.3,17.8,13l-10.6-4.3c1.1,1.6,2.1,3.4,2.8,5.5l9.4,3.8c0.5,2,0.7,4.2,0.7,6.4c0,0.2,0,0.5,0,0.7l-8.4-3.4c0.1,0.8,0.1,1.7,0.1,2.5c0,0.6,0,1.2-0.1,1.8l8,3.2c-0.4,2.1-1,4.2-1.8,6.1l-7.3-2.9c-0.4,1.3-0.9,2.6-1.4,3.7l6.8,2.8c-0.6,1-1.3,1.9-2,2.8c-0.7,0.8-1.5,1.6-2.3,2.3l-0.8-0.3l-5.3-2.2c-1.1,1.2-2.3,2.1-3.6,2.9l5.7,2.3c-2.5,1.2-5.1,1.9-7.9,1.9c-5.3,0-10.3-2.5-14.1-7C379.8,91.9,377.6,85.7,377.6,79.1z M377.9,174.4c0.1-28.2,4.4-57,6.3-68.1c4.1,2.7,8.7,4.2,13.5,4.2c0,0,0.1,0,0.1,0c4.8,0,9.4-1.4,13.5-4.1c0.2,1.3,0.5,2.9,0.7,4.7l-2.1-0.9l-2.9,3.1l5.7,2.3c0.3,2.2,0.6,4.6,1,7.3l-17.4-7.1c0.2,1.4,0.4,3,0.6,4.6l17.3,7c0.3,2.3,0.5,4.7,0.8,7.2l-17.2-7c0.2,1.5,0.3,3,0.5,4.5l17.2,7c0.2,2.3,0.4,4.7,0.6,7.1l-19.6-8c-1.7,0.1-3.7-0.4-3.7-0.4s0.8,1.7,1.9,4l21.7,8.8c0.2,2.3,0.3,4.7,0.4,7l-18.3-7.4c0.9,2.1,1.5,3.9,1.7,5l16.8,6.8c0.1,2.3,0.1,4.6,0.2,6.9l-16.6-6.7c0.1,1.5,0.1,2.9,0.1,4.4l16.5,6.7c0,0.4,0,0.8,0,1.2c0,1.9,0,3.8,0,5.7l-16.7-6.8c-1.1,1.7-5.8-0.2-5.8-0.2s0.4,1,0.9,2.5l21.6,8.7c0,2.3-0.1,4.6-0.2,6.8l-18.6-7.5c0.6,1.8,1.2,3.6,1.6,5l16.9,6.8c-0.1,2.3-0.2,4.6-0.3,6.8l-16.2-6.6c0,1.5-0.1,2.9-0.2,4.3l16.2,6.6c-0.1,2.3-0.2,4.5-0.4,6.7l-16.1-6.5c0,0.7-0.1,1.4-0.1,2.1c0,0.9-0.4,1.4-0.8,1.8l16.8,6.8c-0.1,2.3-0.3,4.5-0.5,6.7l-20-8.1c0.3,1.4,0.7,3.1,1.1,4.7l18.6,7.6c-0.2,2.3-0.4,4.6-0.6,6.6l-16.6-6.8c0.3,1.8,0.4,3.3,0.4,4.1c0,0.1,0,0.2,0,0.3l15.9,6.5c-0.2,2.5-0.5,4.7-0.7,6.6l-15.9-6.4c-0.1,1.5-0.3,2.9-0.4,4.2l8,3.2l-23.7-0.1C380,233.6,377.8,207,377.9,174.4z M362.3,262.1c-1.4,0-14,0.2-20.4,7.1c-2.8,3-4.2,7-4.2,12l0,9.8l-9.2,0l0-9.8c0-7.5,2.3-14,6.6-18.6l0,0c9.1-9.8,27.6-9,27.8-9l69.2,0.2c1.4,0,14.1-0.2,20.6-7.1c2.8-3,4.2-7,4.2-12l0-9.8l9,0l0,9.8c0,7.5-2.3,14-6.6,18.6c-9.1,9.8-27.6,9-27.8,9L362.3,262.1z M407.6,348.5l1.1,0.4h-1.1L407.6,348.5z M403.6,348.9h-5.3l-3.5-79.8l17.2,0.1L403.6,348.9z M408.1,344.3l0.7-6.6l15.9,6.4c0,1.6-0.1,3.1-0.1,4.7h-5.2L408.1,344.3z M409.2,333.6l0.7-6.6l15,6.1c0,2.2-0.1,4.5-0.1,6.8L409.2,333.6z M410.3,322.9l0.7-6.6l14.1,5.7c0,2.2-0.1,4.5-0.1,6.8L410.3,322.9z M411.5,312.2l0.7-6.6l13.1,5.3c0,2.2-0.1,4.5-0.1,6.8L411.5,312.2z M412.6,301.4l0.7-6.6l12.2,4.9c0,2.1-0.1,4.4-0.1,6.8L412.6,301.4z M413.7,290.7l0.7-6.6l11.3,4.6c0,2-0.1,4.3-0.1,6.8L413.7,290.7z M414.9,280l0.7-6.6l5.5,2.2c1.5,1.6,3.1,3,4.8,4c0,1.2,0,2.8-0.1,4.8L414.9,280z M416,269.3L416,269.3l0.3,0c0,0.1,0.1,0.1,0.1,0.2L416,269.3z M390.3,348.9h-20.7c-0.7-36.5-1.1-61.7-1.2-69.5c3.9-2.4,7.2-6.4,9.6-10.3l8.8,0L390.3,348.9z M392.6,951.2c-2-18-4.2-44.3-6.4-82.7c-0.3-5.2-0.6-10.6-0.9-16.2h7.4l2.5,115.9L392.6,951.2z M400.7,959.3l-0.1-20.9l1,0.2C401.4,940.3,400.8,957.7,400.7,959.3z M401.6,934.5l-1-0.4v-6.9l1.7,0.7C402.1,930.2,401.8,932.4,401.6,934.5z M402.7,923.8l-2.2-0.9v-6.9l2.8,1.1C403.2,919.4,403,921.6,402.7,923.8z M403.8,913l-3.2-1.3l0-6.9l3.8,1.6C404.2,908.7,404,910.9,403.8,913z M404.8,902.3l-4.2-1.7v-6.9l4.8,1.9C405.2,897.8,405,900.1,404.8,902.3z M405.7,891.4l-5.1-2.1l0-6.9l5.6,2.3C406,887,405.9,889.2,405.7,891.4z M406.5,880.6l-5.9-2.4l0-6.9l6.4,2.6C406.8,876.1,406.6,878.4,406.5,880.6z M407.3,868.6c0,0.4,0,0.7-0.1,1.1l-6.6-2.7l0-6.9l7,2.8C407.5,864.9,407.4,866.8,407.3,868.6z M407.9,858.8l-7.3-2.9l0-3.5h7.6C408.1,854.5,408,856.6,407.9,858.8z M414.5,880.9c0.6-8.8,1.2-18.3,1.7-28.6h27v-7h-91v7h25c0.6,10,1.1,19.2,1.6,27.8c-66-5.6-127.2-33.9-174.6-81.2C151.2,745.9,122,675.3,122,600.3s29.2-145.6,82.3-198.6c43.1-43.1,97.6-70.4,156.8-79.2c0.1,7.9,0.3,16.8,0.5,26.4h-16.1v7h109.8v-7h-22.7c0.2-10.2,0.4-19.6,0.5-27.9c63.6,6.8,122.6,34.8,168.4,80.7c53.1,53.1,82.3,123.6,82.3,198.6s-29.2,145.6-82.3,198.6C551.2,849.2,485.2,878.1,414.5,880.9z"/> 547</svg> 548</div> 549<span>LEARN ENOUGH</span> 550</a></div> 551<ul class='footer-sub-menu'> 552<li><a href="https://www.learnenough.com/courses">Courses</a></li> 553<li><a href="https://www.learnenough.com/plans">Plans</a></li> 554<li><a href="https://www.learnenough.com/scholarship">Scholarship</a></li> 555<li><a href="/for-teams">For Teams</a></li> 556<li><a href="https://www.learnenough.com/login">Log In</a></li> 557</ul> 558<ul class='footer-sub-menu'> 559<li><a href="https://www.learnenough.com/all-access">All Access</a></li> 560<li><a href="https://www.learnenough.com/ruby-on-rails-8th-edition">
560The Rails Tutorial</a></li> 561<li><a href="https://www.learnenough.com/our-philosophy">Our Philosophy</a></li> 562<li><a href="https://www.learnenough.com/about">About</a></li> 563<li><a href="https://news.learnenough.com">News</a></li> 564</ul> 565<ul class='footer-sub-menu'> 566<li><a href="https://www.learnenough.com/why-rails">Why Use Ruby on Rails?</a></li> 567<li><a href="https://www.learnenough.com/why-ruby">Why Use the Ruby Language?</a></li> 568<li><a href="https://www.learnenough.com/why-program">Why Program?</a></li> 569<li><a href="https://www.learnenough.com/understand-devs">Why Understand Devs?</a></li> 570<li><a href="https://www.learnenough.com/for-beginners">For Beginners</a></li> 571</ul> 572<ul class='footer-sub-menu'> 573<li><a href="https://www.learnenough.com/legal">Legal</a></li> 574<li><a href="mailto:[email protected]">Contact</a></li> 575</ul> 576<div class='footer-social-menu'> 577<ul class='footer-sub-menu'> 578<li> 579Learn Enough 580<a class="footer-social-icon" target="_blank" href="https://www.youtube.com/c/LearnEnough"><i class='fab fa-youtube-square'></i> 581</a></li> 582<li> 583<a class="footer-social-icon" target="_blank" href="https://twitter.com/learnenough"><i class='fab fa-twitter-square'></i> 584</a></li> 585<li> 586Rails Tutorial 587<a class="footer-social-icon" target="_blank" href="https://twitter.com/railstutorial"><i class='fab fa-twitter-square'></i> 588</a></li> 589</ul> 590</div> 591</nav> 592</footer> 593<!-- MODALS ----------------------- --> 594<div class='le-modal le-modal_allacess'> 595<div class='le-modal_bg' onClick='leModalClose()'></div> 596<a onClick="leModalClose()" class="modal_close" href="javascript://"><i class='fas fa-times'></i> 597</a><div class='modal_content'> 598<div class='cols'> 599<div class='col'> 600<h2 class='modal_title'>All Access Subscription</h2> 601<p> 602Get free access to all 10 Learn Enough courses (including the Ruby on Rails Tutorial) for 7 days! 603</p> 604<h5>Free 7 Day trial details</h5> 605<p>We require a credit card for security purposes, but it will not be charged during the trial period. After 7 days, you will be enrolled automatically in the monthly All Access subscription.</p> 606<p>BUT you can cancel any time and still get the rest of the 7 days for free!</p> 607<p>All Learn Enough tutorials come with a <strong>60-day 100% money-back guarantee</strong>.</p> 608</div> 609<div class='col le-modal_allacess-cta'> 610<div class='modal_covers'> 611<div class='bundle-covers_content bundle-covers_all'> 612<div class='bundle-covers_img'><img class="covers_img" src="https://softcover.s3.amazonaws.com/636/learn_enough_command_line/images/cover-web.png" /></div> 613<div class='bundle-covers_img'><img class="covers_img" src="https://softcover.s3.amazonaws.com/636/learn_enough_text_editor/images/cover-web.png" /></div> 614<div class='bundle-covers_img'><img class="covers_img" src="https://softcover.s3.amazonaws.com/636/learn_enough_git/images/cover-web.png" /></div> 615<div class='bundle-covers_img'><img class="covers_img" src="https://softcover.s3.amazonaws.com/636/learn_enough_html/images/cover-web.png" /></div> 616<div class='bundle-covers_img'><img class="covers_img" src="https://softcover.s3.amazonaws.com/636/learn_enough_css/images/cover-web.png" /></div> 617<div class='bundle-covers_img'><img class="covers_img" src="https://softcover.s3.amazonaws.com/636/learn_enough_python/images/cover-web.png" /></div> 618<div class='bundle-covers_img'><img class="covers_img" src="https://softcover.s3.amazonaws.com/636/learn_enough_javascript/images/cover-web.png" /></div> 619<div class='bundle-covers_img'><img class="covers_img" src="https://softcover.s3.amazonaws.com/636/learn_enough_ruby/images/cover-web.png" /></div> 620<div class='bundle-covers_img bundle-cover_railstut'><img class="covers_img" src="https://softcover.s3.amazonaws.com/304499/ruby_on_rails_tutorial_8th_edition/images/cover-web.png" /></div> 621</div> 622 623</div> 624<div class='toggle_pricing-box'> 625<div class='toggle_pricing-option show-yearly active'> 626Billed Yearly 627<div class='toggle_pricing-option-saved show-yearly active'> 628Save up to 20% 629</div> 630</div> 631<div class='toggle_pricing-btn-box'> 632<div class='show-yearly toggle_pricing_btn active'></div> 633<div class='show-monthly toggle_pricing_btn'></div> 634</div> 635<div class='toggle_pricing-option show-monthly'> 636Billed Monthly 637</div> 638</div>
639<script> 640 (function() { 641 $(".show-monthly").click(function() { 642 $(".yearly-all-access").hide(); 643 $(".monthly-all-access").show(); 644 $(".show-monthly").addClass("active"); 645 return $(".show-yearly").removeClass("active"); 646 }); 647 648 $(".show-yearly").click(function() { 649 $(".monthly-all-access").hide(); 650 $(".yearly-all-access").show(); 651 $(".show-monthly").removeClass("active"); 652 return $(".show-yearly").addClass("active"); 653 }); 654 655 }).call(this); 656</script>
656 657 658<div class='modal_cta monthly-all-access' style='display: none;'> 659<p class='modal_cta-originally'> 660Monthly Cost: 661<strong> 662$49 663</strong> 664</p> 665<a data-id="10-subscription" data-name="all_access" data-type="product" data-value="49.0" onClick="leModalClose()" class="btn_addBundleToCart jLinkText" id="add-cart-modal-btn" href="#add.bundle.to.cart"><button class='attention'> 666<i class='fas fa-shopping-cart'></i> 667Add to Cart : 668Free Trial 669</button> 670</a><p class='modal_cta-more'> 671<a href="https://www.learnenough.com/all-access"><button class='btn-small'> 672MORE INFO 673<i class='fas fa-arrow-circle-right'></i> 674</button> 675</a></p> 676</div> 677<div class='modal_cta yearly-all-access'> 678<p class='modal_cta-originally'> 679Monthly Cost: 680<strong> 681$39 682</strong> 683<div class='billed_annually'> 684Billed $ 685468.0 686Anually 687</div> 688</p> 689<a data-is-annual="true" data-id="18-subscription" data-name="annual_all_access" data-type="product" data-value="468.0" onClick="leModalClose()" class="btn_addBundleToCart jLinkText" id="add-cart-modal-btn" href="#add.bundle.to.cart"><button class='attention'> 690<i class='fas fa-shopping-cart'></i> 691Add to Cart : 692Free Trial 693</button> 694</a><p class='modal_cta-more'> 695<a href="https://www.learnenough.com/all-access"><button class='btn-small'> 696MORE INFO 697<i class='fas fa-arrow-circle-right'></i> 698</button> 699</a></p> 700</div> 701</div> 702</div> 703</div> 704</div> 705<div class='le-modal le-modal_landing-video'> 706<div class='le-modal_bg' onClick='leModalVideoClose()'></div> 707<a onClick="leModalVideoClose()" class="modal_close" href="javascript://"><i class='fas fa-times'></i> 708</a><div class='le-modal_video' id='le-modal_video'> 709<iframe allow='accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture' allowfullscreen='allowfullscreen' class='le-modal_video-embed' frameborder='0' src='http://'></iframe> 710</div> 711</div> 712<div class='le-modal le-modal_yourcourses-guide'> 713<div class='le-modal_bg' onClick='leModalClose('leYourCoursesGuide')'></div> 714<div class='modal_content'> 715<a onClick="leModalClose('leYourCoursesGuide')" class="modal_close" href="javascript://"><i class='fas fa-times'></i> 716</a><div class='courses_guide'> 717<h2> 718<div class='sub-title'>A quick guide to</div> 719Your Courses 720<div class='sub-title'>Welcome to Learn Enough!</div> 721</h2> 722<img class="courses_guide-img" src="https://www.learnenough.com/assets/learnenough/yourcourses_guide_subscribed-compressed-958e0facdb4d53ea70798819653ff9a690857f34a4c607a56c5ddc2057e178a3.jpg" /> 723</div> 724 725</div> 726</div> 727 728</div> 729</div>
730<script> 731 if (localStorage['sideOpen'] == 'no') { 732 $('body').addClass('side-menu-closed'); 733 }; 734 bookCheckMobile(); 735</script>
735 736</body> 737</html> 738
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.