PageSourceSearch

https://www.learnenough.com/login?after=%2F%23cart-checkout

html learnenough.com collected 2026-10-03 19:04:11 UTC 45,252 bytes, 738 lines download raw bytes

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="$(&#39;.le_sidemenu&#39;).removeClass(&#39;open&#39;);$(&#39;.le_sidemenu-bg&#39;).removeClass(&#39;open&#39;);" 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="&#x2713;" 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="$(&#39;.le_sidemenu&#39;).removeClass(&#39;open&#39;);$(&#39;.le_sidemenu-bg&#39;).removeClass(&#39;open&#39;);" 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='$(&#39;.le_sidemenu&#39;).removeClass(&#39;open&#39;);$(&#39;.le_sidemenu-bg&#39;).removeClass(&#39;open&#39;);'></div>
350<div class='le_footermenu'>
351<div class='checkout-close'>
352<a onClick="$(&#39;.le_footermenu&#39;).removeClass(&#39;open&#39;)" 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="&#x2713;" 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&#39;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 &nbsp;
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 &nbsp;
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(&#39;leYourCoursesGuide&#39;)'></div>
714<div class='modal_content'>
715<a onClick="leModalClose(&#39;leYourCoursesGuide&#39;)" 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.