index.html 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <!-- configuration parameters -->
  5. <meta name="defaultView" content="slideshow" />
  6. <meta name="controlVis" content="hidden" />
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  8. <meta name="generator" content="pandoc" />
  9. <style type="text/css" media="projection" id="slideProj">
  10. /* Do not edit or override these styles! The system will likely break if you do. */
  11. div#header, div#footer, div#controls, .slide {position: absolute;}
  12. html>body div#header, html>body div#footer,
  13. html>body div#controls, html>body .slide {position: fixed;}
  14. .handout {display: none;}
  15. .layout {display: block;}
  16. .slide, .hideme, .incremental {visibility: hidden;}
  17. #slide0 {visibility: visible;}
  18. /* The following styles size, place, and layer the slide components.
  19. Edit these if you want to change the overall slide layout.
  20. The commented lines can be uncommented (and modified, if necessary)
  21. to help you with the rearrangement process. */
  22. /* target = 1024x768 */
  23. div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
  24. div#header {top: 0; height: 3em; z-index: 1;}
  25. div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
  26. .slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
  27. div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
  28. div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
  29. margin: 0;}
  30. #currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
  31. html>body #currentSlide {position: fixed;}
  32. /*
  33. div#header {background: #FCC;}
  34. div#footer {background: #CCF;}
  35. div#controls {background: #BBD;}
  36. div#currentSlide {background: #FFC;}
  37. */
  38. /* Following are the presentation styles -- edit away! */
  39. body {background: #FFF url(bodybg.gif) -16px 0 no-repeat; color: #000; font-size: 2em;}
  40. :link, :visited {text-decoration: none; color: #00C;}
  41. #controls :active {color: #88A !important;}
  42. #controls :focus {outline: 1px dotted #227;}
  43. h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
  44. ul, pre {margin: 0; line-height: 1em;}
  45. html, body {margin: 0; padding: 0;}
  46. blockquote, q {font-style: italic;}
  47. blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
  48. blockquote p {margin: 0;}
  49. blockquote i {font-style: normal;}
  50. blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
  51. blockquote b i {font-style: italic;}
  52. kbd {font-weight: bold; font-size: 1em;}
  53. sup {font-size: smaller; line-height: 1px;}
  54. .slide code {padding: 2px 0.25em; font-weight: bold; color: #533;}
  55. .slide code.bad, code del {color: red;}
  56. .slide code.old {color: silver;}
  57. .slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
  58. .slide pre code {display: block;}
  59. .slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
  60. .slide li {margin-top: 0.75em; margin-right: 0;}
  61. .slide ul ul {line-height: 1;}
  62. .slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
  63. .slide img.leader {display: block; margin: 0 auto;}
  64. div#header, div#footer {background: #005; color: #AAB;
  65. font-family: Verdana, Helvetica, sans-serif;}
  66. div#header {background: #005 url(bodybg.gif) -16px 0 no-repeat;
  67. line-height: 1px;}
  68. div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;}
  69. #footer h1, #footer h2 {display: block; padding: 0 1em;}
  70. #footer h2 {font-style: italic;}
  71. div.long {font-size: 0.75em;}
  72. .slide h1 {position: absolute; top: 0.7em; left: 87px; z-index: 1;
  73. margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap;
  74. font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize;
  75. color: #DDE; background: #005;}
  76. .slide h3 {font-size: 130%;}
  77. h1 abbr {font-variant: small-caps;}
  78. div#controls {position: absolute; left: 50%; bottom: 0;
  79. width: 50%;
  80. text-align: right; font: bold 0.9em Verdana, Helvetica, sans-serif;}
  81. html>body div#controls {position: fixed; padding: 0 0 1em 0;
  82. top: auto;}
  83. div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
  84. margin: 0; padding: 0;}
  85. #controls #navLinks a {padding: 0; margin: 0 0.5em;
  86. background: #005; border: none; color: #779;
  87. cursor: pointer;}
  88. #controls #navList {height: 1em;}
  89. #controls #navList #jumplist {position: absolute; bottom: 0; right: 0; background: #DDD; color: #227;}
  90. #currentSlide {text-align: center; font-size: 0.5em; color: #449;}
  91. #slide0 {padding-top: 3.5em; font-size: 90%;}
  92. #slide0 h1 {position: static; margin: 1em 0 0; padding: 0;
  93. font: bold 2em Helvetica, sans-serif; white-space: normal;
  94. color: #000; background: transparent;}
  95. #slide0 h2 {font: bold italic 1em Helvetica, sans-serif; margin: 0.25em;}
  96. #slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
  97. #slide0 h4 {margin-top: 0; font-size: 1em;}
  98. ul.urls {list-style: none; display: inline; margin: 0;}
  99. .urls li {display: inline; margin: 0;}
  100. .note {display: none;}
  101. .external {border-bottom: 1px dotted gray;}
  102. html>body .external {border-bottom: none;}
  103. .external:after {content: " \274F"; font-size: smaller; color: #77B;}
  104. .incremental, .incremental *, .incremental *:after {color: #DDE; visibility: visible;}
  105. img.incremental {visibility: hidden;}
  106. .slide .current {color: #B02;}
  107. /* diagnostics
  108. li:after {content: " [" attr(class) "]"; color: #F88;}
  109. */
  110. </style>
  111. <style type="text/css" media="projection" id="operaFix">
  112. /* DO NOT CHANGE THESE unless you really want to break Opera Show */
  113. .slide {
  114. visibility: visible !important;
  115. position: static !important;
  116. page-break-before: always;
  117. }
  118. #slide0 {page-break-before: avoid;}
  119. </style>
  120. <style type="text/css" media="screen" id="outlineStyle">
  121. /* don't change this unless you want the layout stuff to show up in the outline view! */
  122. .layout div, #footer *, #controlForm * {display: none;}
  123. #footer, #controls, #controlForm, #navLinks, #toggle {
  124. display: block; visibility: visible; margin: 0; padding: 0;}
  125. #toggle {float: right; padding: 0.5em;}
  126. html>body #toggle {position: fixed; top: 0; right: 0;}
  127. /* making the outline look pretty-ish */
  128. #slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
  129. #slide0 h1 {padding-top: 1.5em;}
  130. .slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
  131. border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
  132. #toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
  133. </style>
  134. <style type="text/css" media="print" id="slidePrint">
  135. /* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */
  136. .slide, ul {page-break-inside: avoid; visibility: visible !important;}
  137. h1 {page-break-after: avoid;}
  138. body {font-size: 12pt; background: white;}
  139. * {color: black;}
  140. #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;}
  141. #slide0 h3 {margin: 0; padding: 0;}
  142. #slide0 h4 {margin: 0 0 0.5em; padding: 0;}
  143. #slide0 {margin-bottom: 3em;}
  144. h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;}
  145. .extra {background: transparent !important;}
  146. div.extra, pre.extra, .example {font-size: 10pt; color: #333;}
  147. ul.extra a {font-weight: bold;}
  148. p.example {display: none;}
  149. #header {display: none;}
  150. #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;}
  151. #footer h2, #controls {display: none;}
  152. /* The following rule keeps the layout stuff out of print. Remove at your own risk! */
  153. .layout, .layout * {display: none !important;}
  154. </style>
  155. <script type="text/javascript">
  156. // S5 v1.1 slides.js -- released into the Public Domain
  157. //
  158. // Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
  159. // about all the wonderful and talented contributors to this code!
  160. var undef;
  161. var slideCSS = '';
  162. var snum = 0;
  163. var smax = 1;
  164. var incpos = 0;
  165. var number = undef;
  166. var s5mode = true;
  167. var defaultView = 'slideshow';
  168. var controlVis = 'visible';
  169. var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
  170. var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
  171. var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
  172. function hasClass(object, className) {
  173. if (!object.className) return false;
  174. return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
  175. }
  176. function hasValue(object, value) {
  177. if (!object) return false;
  178. return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
  179. }
  180. function removeClass(object,className) {
  181. if (!object) return;
  182. object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
  183. }
  184. function addClass(object,className) {
  185. if (!object || hasClass(object, className)) return;
  186. if (object.className) {
  187. object.className += ' '+className;
  188. } else {
  189. object.className = className;
  190. }
  191. }
  192. function GetElementsWithClassName(elementName,className) {
  193. var allElements = document.getElementsByTagName(elementName);
  194. var elemColl = new Array();
  195. for (var i = 0; i< allElements.length; i++) {
  196. if (hasClass(allElements[i], className)) {
  197. elemColl[elemColl.length] = allElements[i];
  198. }
  199. }
  200. return elemColl;
  201. }
  202. function isParentOrSelf(element, id) {
  203. if (element == null || element.nodeName=='BODY') return false;
  204. else if (element.id == id) return true;
  205. else return isParentOrSelf(element.parentNode, id);
  206. }
  207. function nodeValue(node) {
  208. var result = "";
  209. if (node.nodeType == 1) {
  210. var children = node.childNodes;
  211. for (var i = 0; i < children.length; ++i) {
  212. result += nodeValue(children[i]);
  213. }
  214. }
  215. else if (node.nodeType == 3) {
  216. result = node.nodeValue;
  217. }
  218. return(result);
  219. }
  220. function slideLabel() {
  221. var slideColl = GetElementsWithClassName('*','slide');
  222. var list = document.getElementById('jumplist');
  223. smax = slideColl.length;
  224. for (var n = 0; n < smax; n++) {
  225. var obj = slideColl[n];
  226. var did = 'slide' + n.toString();
  227. obj.setAttribute('id',did);
  228. if (isOp) continue;
  229. var otext = '';
  230. var menu = obj.firstChild;
  231. if (!menu) continue; // to cope with empty slides
  232. while (menu && menu.nodeType == 3) {
  233. menu = menu.nextSibling;
  234. }
  235. if (!menu) continue; // to cope with slides with only text nodes
  236. var menunodes = menu.childNodes;
  237. for (var o = 0; o < menunodes.length; o++) {
  238. otext += nodeValue(menunodes[o]);
  239. }
  240. list.options[list.length] = new Option(n + ' : ' + otext, n);
  241. }
  242. }
  243. function currentSlide() {
  244. var cs;
  245. if (document.getElementById) {
  246. cs = document.getElementById('currentSlide');
  247. } else {
  248. cs = document.currentSlide;
  249. }
  250. cs.innerHTML = '<span id="csHere">' + snum + '<\/span> ' +
  251. '<span id="csSep">\/<\/span> ' +
  252. '<span id="csTotal">' + (smax-1) + '<\/span>';
  253. if (snum == 0) {
  254. cs.style.visibility = 'hidden';
  255. } else {
  256. cs.style.visibility = 'visible';
  257. }
  258. }
  259. function go(step) {
  260. if (document.getElementById('slideProj').disabled || step == 0) return;
  261. var jl = document.getElementById('jumplist');
  262. var cid = 'slide' + snum;
  263. var ce = document.getElementById(cid);
  264. if (incrementals[snum].length > 0) {
  265. for (var i = 0; i < incrementals[snum].length; i++) {
  266. removeClass(incrementals[snum][i], 'current');
  267. removeClass(incrementals[snum][i], 'incremental');
  268. }
  269. }
  270. if (step != 'j') {
  271. snum += step;
  272. lmax = smax - 1;
  273. if (snum > lmax) snum = lmax;
  274. if (snum < 0) snum = 0;
  275. } else
  276. snum = parseInt(jl.value);
  277. var nid = 'slide' + snum;
  278. var ne = document.getElementById(nid);
  279. if (!ne) {
  280. ne = document.getElementById('slide0');
  281. snum = 0;
  282. }
  283. if (step < 0) {incpos = incrementals[snum].length} else {incpos = 0;}
  284. if (incrementals[snum].length > 0 && incpos == 0) {
  285. for (var i = 0; i < incrementals[snum].length; i++) {
  286. if (hasClass(incrementals[snum][i], 'current'))
  287. incpos = i + 1;
  288. else
  289. addClass(incrementals[snum][i], 'incremental');
  290. }
  291. }
  292. if (incrementals[snum].length > 0 && incpos > 0)
  293. addClass(incrementals[snum][incpos - 1], 'current');
  294. ce.style.visibility = 'hidden';
  295. ne.style.visibility = 'visible';
  296. jl.selectedIndex = snum;
  297. currentSlide();
  298. number = 0;
  299. }
  300. function goTo(target) {
  301. if (target >= smax || target == snum) return;
  302. go(target - snum);
  303. }
  304. function subgo(step) {
  305. if (step > 0) {
  306. removeClass(incrementals[snum][incpos - 1],'current');
  307. removeClass(incrementals[snum][incpos], 'incremental');
  308. addClass(incrementals[snum][incpos],'current');
  309. incpos++;
  310. } else {
  311. incpos--;
  312. removeClass(incrementals[snum][incpos],'current');
  313. addClass(incrementals[snum][incpos], 'incremental');
  314. addClass(incrementals[snum][incpos - 1],'current');
  315. }
  316. }
  317. function toggle() {
  318. var slideColl = GetElementsWithClassName('*','slide');
  319. var slides = document.getElementById('slideProj');
  320. var outline = document.getElementById('outlineStyle');
  321. if (!slides.disabled) {
  322. slides.disabled = true;
  323. outline.disabled = false;
  324. s5mode = false;
  325. fontSize('1em');
  326. for (var n = 0; n < smax; n++) {
  327. var slide = slideColl[n];
  328. slide.style.visibility = 'visible';
  329. }
  330. } else {
  331. slides.disabled = false;
  332. outline.disabled = true;
  333. s5mode = true;
  334. fontScale();
  335. for (var n = 0; n < smax; n++) {
  336. var slide = slideColl[n];
  337. slide.style.visibility = 'hidden';
  338. }
  339. slideColl[snum].style.visibility = 'visible';
  340. }
  341. }
  342. function showHide(action) {
  343. var obj = GetElementsWithClassName('*','hideme')[0];
  344. switch (action) {
  345. case 's': obj.style.visibility = 'visible'; break;
  346. case 'h': obj.style.visibility = 'hidden'; break;
  347. case 'k':
  348. if (obj.style.visibility != 'visible') {
  349. obj.style.visibility = 'visible';
  350. } else {
  351. obj.style.visibility = 'hidden';
  352. }
  353. break;
  354. }
  355. }
  356. // 'keys' code adapted from MozPoint (http://mozpoint.mozdev.org/)
  357. function keys(key) {
  358. if (!key) {
  359. key = event;
  360. key.which = key.keyCode;
  361. }
  362. if (key.which == 84) {
  363. toggle();
  364. return;
  365. }
  366. if (s5mode) {
  367. switch (key.which) {
  368. case 10: // return
  369. case 13: // enter
  370. if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
  371. if (key.target && isParentOrSelf(key.target, 'controls')) return;
  372. if(number != undef) {
  373. goTo(number);
  374. break;
  375. }
  376. case 32: // spacebar
  377. case 34: // page down
  378. case 39: // rightkey
  379. case 40: // downkey
  380. if(number != undef) {
  381. go(number);
  382. } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
  383. go(1);
  384. } else {
  385. subgo(1);
  386. }
  387. break;
  388. case 33: // page up
  389. case 37: // leftkey
  390. case 38: // upkey
  391. if(number != undef) {
  392. go(-1 * number);
  393. } else if (!incrementals[snum] || incpos <= 0) {
  394. go(-1);
  395. } else {
  396. subgo(-1);
  397. }
  398. break;
  399. case 36: // home
  400. goTo(0);
  401. break;
  402. case 35: // end
  403. goTo(smax-1);
  404. break;
  405. case 67: // c
  406. showHide('k');
  407. break;
  408. }
  409. if (key.which < 48 || key.which > 57) {
  410. number = undef;
  411. } else {
  412. if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
  413. if (key.target && isParentOrSelf(key.target, 'controls')) return;
  414. number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
  415. }
  416. }
  417. return false;
  418. }
  419. function clicker(e) {
  420. number = undef;
  421. var target;
  422. if (window.event) {
  423. target = window.event.srcElement;
  424. e = window.event;
  425. } else target = e.target;
  426. if (target.getAttribute('href') != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
  427. if (!e.which || e.which == 1) {
  428. if (!incrementals[snum] || incpos >= incrementals[snum].length) {
  429. go(1);
  430. } else {
  431. subgo(1);
  432. }
  433. }
  434. }
  435. function findSlide(hash) {
  436. var target = null;
  437. var slides = GetElementsWithClassName('*','slide');
  438. for (var i = 0; i < slides.length; i++) {
  439. var targetSlide = slides[i];
  440. if ( (targetSlide.name && targetSlide.name == hash)
  441. || (targetSlide.id && targetSlide.id == hash) ) {
  442. target = targetSlide;
  443. break;
  444. }
  445. }
  446. while(target != null && target.nodeName != 'BODY') {
  447. if (hasClass(target, 'slide')) {
  448. return parseInt(target.id.slice(5));
  449. }
  450. target = target.parentNode;
  451. }
  452. return null;
  453. }
  454. function slideJump() {
  455. if (window.location.hash == null) return;
  456. var sregex = /^#slide(\d+)$/;
  457. var matches = sregex.exec(window.location.hash);
  458. var dest = null;
  459. if (matches != null) {
  460. dest = parseInt(matches[1]);
  461. } else {
  462. dest = findSlide(window.location.hash.slice(1));
  463. }
  464. if (dest != null)
  465. go(dest - snum);
  466. }
  467. function fixLinks() {
  468. var thisUri = window.location.href;
  469. thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
  470. var aelements = document.getElementsByTagName('A');
  471. for (var i = 0; i < aelements.length; i++) {
  472. var a = aelements[i].href;
  473. var slideID = a.match('\#slide[0-9]{1,2}');
  474. if ((slideID) && (slideID[0].slice(0,1) == '#')) {
  475. var dest = findSlide(slideID[0].slice(1));
  476. if (dest != null) {
  477. if (aelements[i].addEventListener) {
  478. aelements[i].addEventListener("click", new Function("e",
  479. "if (document.getElementById('slideProj').disabled) return;" +
  480. "go("+dest+" - snum); " +
  481. "if (e.preventDefault) e.preventDefault();"), true);
  482. } else if (aelements[i].attachEvent) {
  483. aelements[i].attachEvent("onclick", new Function("",
  484. "if (document.getElementById('slideProj').disabled) return;" +
  485. "go("+dest+" - snum); " +
  486. "event.returnValue = false;"));
  487. }
  488. }
  489. }
  490. }
  491. }
  492. function externalLinks() {
  493. if (!document.getElementsByTagName) return;
  494. var anchors = document.getElementsByTagName('a');
  495. for (var i=0; i<anchors.length; i++) {
  496. var anchor = anchors[i];
  497. if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
  498. anchor.target = '_blank';
  499. addClass(anchor,'external');
  500. }
  501. }
  502. }
  503. function createControls() {
  504. var controlsDiv = document.getElementById("controls");
  505. if (!controlsDiv) return;
  506. var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
  507. var hideDiv, hideList = '';
  508. if (controlVis == 'hidden') {
  509. hideDiv = hider;
  510. } else {
  511. hideList = hider;
  512. }
  513. controlsDiv.innerHTML = '<form action="#" id="controlForm"' + hideDiv + '>' +
  514. '<div id="navLinks">' +
  515. '<a accesskey="t" id="toggle" href="javascript:toggle();">&#216;<\/a>' +
  516. '<a accesskey="z" id="prev" href="javascript:go(-1);">&laquo;<\/a>' +
  517. '<a accesskey="x" id="next" href="javascript:go(1);">&raquo;<\/a>' +
  518. '<div id="navList"' + hideList + '><select id="jumplist" onchange="go(\'j\');"><\/select><\/div>' +
  519. '<\/div><\/form>';
  520. if (controlVis == 'hidden') {
  521. var hidden = document.getElementById('navLinks');
  522. } else {
  523. var hidden = document.getElementById('jumplist');
  524. }
  525. addClass(hidden,'hideme');
  526. }
  527. function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
  528. if (!s5mode) return false;
  529. var vScale = 22; // both yield 32 (after rounding) at 1024x768
  530. var hScale = 32; // perhaps should auto-calculate based on theme's declared value?
  531. if (window.innerHeight) {
  532. var vSize = window.innerHeight;
  533. var hSize = window.innerWidth;
  534. } else if (document.documentElement.clientHeight) {
  535. var vSize = document.documentElement.clientHeight;
  536. var hSize = document.documentElement.clientWidth;
  537. } else if (document.body.clientHeight) {
  538. var vSize = document.body.clientHeight;
  539. var hSize = document.body.clientWidth;
  540. } else {
  541. var vSize = 700; // assuming 1024x768, minus chrome and such
  542. var hSize = 1024; // these do not account for kiosk mode or Opera Show
  543. }
  544. var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
  545. fontSize(newSize + 'px');
  546. if (isGe) { // hack to counter incremental reflow bugs
  547. var obj = document.getElementsByTagName('body')[0];
  548. obj.style.display = 'none';
  549. obj.style.display = 'block';
  550. }
  551. }
  552. function fontSize(value) {
  553. if (!(s5ss = document.getElementById('s5ss'))) {
  554. if (!isIE) {
  555. document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
  556. s5ss.setAttribute('media','screen, projection');
  557. s5ss.setAttribute('id','s5ss');
  558. } else {
  559. document.createStyleSheet();
  560. document.s5ss = document.styleSheets[document.styleSheets.length - 1];
  561. }
  562. }
  563. if (!isIE) {
  564. while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
  565. s5ss.appendChild(document.createTextNode('body {font-size: ' + value + ' !important;}'));
  566. } else {
  567. document.s5ss.addRule('body','font-size: ' + value + ' !important;');
  568. }
  569. }
  570. function notOperaFix() {
  571. slideCSS = document.getElementById('slideProj').href;
  572. var slides = document.getElementById('slideProj');
  573. var outline = document.getElementById('outlineStyle');
  574. slides.setAttribute('media','screen');
  575. outline.disabled = true;
  576. if (isGe) {
  577. slides.setAttribute('href','null'); // Gecko fix
  578. slides.setAttribute('href',slideCSS); // Gecko fix
  579. }
  580. if (isIE && document.styleSheets && document.styleSheets[0]) {
  581. document.styleSheets[0].addRule('img', 'behavior: url(ui/default/iepngfix.htc)');
  582. document.styleSheets[0].addRule('div', 'behavior: url(ui/default/iepngfix.htc)');
  583. document.styleSheets[0].addRule('.slide', 'behavior: url(ui/default/iepngfix.htc)');
  584. }
  585. }
  586. function getIncrementals(obj) {
  587. var incrementals = new Array();
  588. if (!obj)
  589. return incrementals;
  590. var children = obj.childNodes;
  591. for (var i = 0; i < children.length; i++) {
  592. var child = children[i];
  593. if (hasClass(child, 'incremental')) {
  594. if (child.nodeName == 'OL' || child.nodeName == 'UL') {
  595. removeClass(child, 'incremental');
  596. for (var j = 0; j < child.childNodes.length; j++) {
  597. if (child.childNodes[j].nodeType == 1) {
  598. addClass(child.childNodes[j], 'incremental');
  599. }
  600. }
  601. } else {
  602. incrementals[incrementals.length] = child;
  603. removeClass(child,'incremental');
  604. }
  605. }
  606. if (hasClass(child, 'show-first')) {
  607. if (child.nodeName == 'OL' || child.nodeName == 'UL') {
  608. removeClass(child, 'show-first');
  609. if (child.childNodes[isGe].nodeType == 1) {
  610. removeClass(child.childNodes[isGe], 'incremental');
  611. }
  612. } else {
  613. incrementals[incrementals.length] = child;
  614. }
  615. }
  616. incrementals = incrementals.concat(getIncrementals(child));
  617. }
  618. return incrementals;
  619. }
  620. function createIncrementals() {
  621. var incrementals = new Array();
  622. for (var i = 0; i < smax; i++) {
  623. incrementals[i] = getIncrementals(document.getElementById('slide'+i));
  624. }
  625. return incrementals;
  626. }
  627. function defaultCheck() {
  628. var allMetas = document.getElementsByTagName('meta');
  629. for (var i = 0; i< allMetas.length; i++) {
  630. if (allMetas[i].name == 'defaultView') {
  631. defaultView = allMetas[i].content;
  632. }
  633. if (allMetas[i].name == 'controlVis') {
  634. controlVis = allMetas[i].content;
  635. }
  636. }
  637. }
  638. // Key trap fix, new function body for trap()
  639. function trap(e) {
  640. if (!e) {
  641. e = event;
  642. e.which = e.keyCode;
  643. }
  644. try {
  645. modifierKey = e.ctrlKey || e.altKey || e.metaKey;
  646. }
  647. catch(e) {
  648. modifierKey = false;
  649. }
  650. return modifierKey || e.which == 0;
  651. }
  652. function startup() {
  653. defaultCheck();
  654. if (!isOp)
  655. createControls();
  656. slideLabel();
  657. fixLinks();
  658. externalLinks();
  659. fontScale();
  660. if (!isOp) {
  661. notOperaFix();
  662. incrementals = createIncrementals();
  663. slideJump();
  664. if (defaultView == 'outline') {
  665. toggle();
  666. }
  667. document.onkeyup = keys;
  668. document.onkeypress = trap;
  669. document.onclick = clicker;
  670. }
  671. }
  672. window.onload = startup;
  673. window.onresize = function(){setTimeout('fontScale()', 50);}</script>
  674. <meta name="author" content="John Melesky" />
  675. <meta name="date" content="2007-05-10" />
  676. <title>Bayes' Theorem</title>
  677. </head>
  678. <body>
  679. <div class="layout">
  680. <div id="controls"></div>
  681. <div id="currentSlide"></div>
  682. <div id="header"></div>
  683. <div id="footer">
  684. <h1>2007-05-10</h1>
  685. <h2>Bayes' Theorem</h2>
  686. </div>
  687. </div>
  688. <div class="presentation">
  689. <div class="slide">
  690. <h1>Bayes' Theorem</h1>
  691. <h3>John Melesky</h3>
  692. <h4>2007-05-10</h4>
  693. </div>
  694. <div class="slide">
  695. <h1>What is Bayes' Theorem?</h1>
  696. <p>
  697. It's a method for determining conditional probabilities.
  698. </p>
  699. <p>
  700. Duh.
  701. </p>
  702. <p>
  703. See? <a target="new" href="Bayes%27_theorem.html">Wikipedia says so</a>.
  704. </p>
  705. </div>
  706. <div class="slide">
  707. <h1>Um, dude, whut?</h1>
  708. </div>
  709. <div class="slide">
  710. <h1>Um, dude, whut?</h1>
  711. <p>
  712. Seriously, i don't know, either.
  713. </p>
  714. </div>
  715. <div class="slide">
  716. <h1>An example</h1>
  717. </div>
  718. <div class="slide">
  719. <h1>An example</h1>
  720. <p>
  721. 1000 Python programmers walk into a conference.
  722. </p>
  723. </div>
  724. <div class="slide">
  725. <h1>An example</h1>
  726. <p>
  727. 1000 Python programmers walk into a conference.
  728. </p>
  729. <p>
  730. 10 of them (1%) harbour a dark secret.
  731. </p>
  732. </div>
  733. <div class="slide">
  734. <h1>A test!</h1>
  735. </div>
  736. <div class="slide">
  737. <h1>A test!</h1>
  738. <p>
  739. &quot;Do you prefer list comprehensions to 'map'?&quot;
  740. </p>
  741. </div>
  742. <div class="slide">
  743. <h1>A test!</h1>
  744. <p>
  745. &quot;Do you prefer list comprehensions to 'map'?&quot;
  746. </p>
  747. <p>
  748. How accurate is it?
  749. </p>
  750. <ul class="incremental">
  751. <li>If you harbour the dark secret, it will return positive 90% of
  752. the time</li>
  753. <li>If you don't harbour that secret, it will return positive only
  754. 10% of the time</li>
  755. </ul>
  756. </div>
  757. <div class="slide">
  758. <h1>A question</h1>
  759. <p>
  760. Joe takes the test, and it returns positive.
  761. </p>
  762. </div>
  763. <div class="slide">
  764. <h1>A question</h1>
  765. <p>
  766. Joe takes the test, and it returns positive.
  767. </p>
  768. <p>
  769. How likely is he to harbour this dark secret?
  770. </p>
  771. </div>
  772. <div class="slide">
  773. <h1>The answer</h1>
  774. <p>
  775. 90% !
  776. </p>
  777. <p>
  778. Duh.
  779. </p>
  780. </div>
  781. <div class="slide">
  782. <h1>The answer</h1>
  783. <p>
  784. Probably not what you think.
  785. </p>
  786. </div>
  787. <div class="slide">
  788. <h1>The answer: Bayes' Theorem</h1>
  789. <p>
  790. Bayes' Theorem tells us how to compute this.
  791. </p>
  792. </div>
  793. <div class="slide">
  794. <h1>The answer: Bayes' Theorem</h1>
  795. <p>
  796. Bayes' Theorem tells us how to compute this.
  797. </p>
  798. <p>
  799. But we don't know Bayes' Theorem yet, so let's puzzle through it.
  800. </p>
  801. </div>
  802. <div class="slide">
  803. <h1>The question</h1>
  804. <p>
  805. Joe takes the test, and it returns positive.
  806. </p>
  807. <p>
  808. How likely is he to harbour this dark secret?
  809. </p>
  810. </div>
  811. <div class="slide">
  812. <h1>The question, step-by-step</h1>
  813. <p>
  814. If we test <em>everyone</em>, how many people will get positive
  815. results?
  816. </p>
  817. </div>
  818. <div class="slide">
  819. <h1>The question, step-by-step</h1>
  820. <p>
  821. If we test <em>everyone</em>, how many people will get positive
  822. results?
  823. </p>
  824. <p>
  825. And of those, how many will actually be evil?
  826. </p>
  827. </div>
  828. <div class="slide">
  829. <h1>The question, step-by-step</h1>
  830. <p>
  831. If we test <em>everyone</em>, how many people will get positive
  832. results?
  833. </p>
  834. <p>
  835. And of those, how many will actually be evil?
  836. </p>
  837. <p>
  838. We can use those two numbers to figure out how likely Joe is to be
  839. evil.
  840. </p>
  841. </div>
  842. <div class="slide">
  843. <h1>The population</h1>
  844. <p>
  845. 1000 Python programmers
  846. </p>
  847. </div>
  848. <div class="slide">
  849. <h1>The population</h1>
  850. <p>
  851. 1000 Python programmers
  852. </p>
  853. <p>
  854. 10% harbour the secret
  855. </p>
  856. </div>
  857. <div class="slide">
  858. <h1>The population</h1>
  859. <p>
  860. 1000 Python programmers
  861. </p>
  862. <ul class="incremental">
  863. <li>990 Pure and stout of heart</li>
  864. <li>10 Dark-hearted functional bastards</li>
  865. </ul>
  866. </div>
  867. <div class="slide">
  868. <h1>The bad population</h1>
  869. <p>
  870. 10 Dark souls
  871. </p>
  872. </div>
  873. <div class="slide">
  874. <h1>The bad population</h1>
  875. <p>
  876. 10 Dark souls
  877. </p>
  878. <p>
  879. ... with 90% positive test results ...
  880. </p>
  881. </div>
  882. <div class="slide">
  883. <h1>The bad population</h1>
  884. <p>
  885. 10 Dark souls
  886. </p>
  887. <p>
  888. ... with 90% positive test results ...
  889. </p>
  890. <p>
  891. ... means that if we administer the test to everyone, we'll
  892. identify 9 functional bastards.
  893. </p>
  894. </div>
  895. <div class="slide">
  896. <h1>The bad population</h1>
  897. <p>
  898. 10 Dark souls
  899. </p>
  900. <p>
  901. ... with 90% positive test results ...
  902. </p>
  903. <p>
  904. ... means that if we administer the test to everyone, we'll
  905. identify 9 functional bastards.
  906. </p>
  907. <p>
  908. ... oh, and 1 will get through.
  909. </p>
  910. </div>
  911. <div class="slide">
  912. <h1>The good population</h1>
  913. <p>
  914. 990 Stout hearts
  915. </p>
  916. </div>
  917. <div class="slide">
  918. <h1>The good population</h1>
  919. <p>
  920. 990 Stout hearts
  921. </p>
  922. <p>
  923. ... with a mere 10% positive test results ...
  924. </p>
  925. </div>
  926. <div class="slide">
  927. <h1>The good population</h1>
  928. <p>
  929. 990 Stout hearts
  930. </p>
  931. <p>
  932. ... with a mere 10% positive test results ...
  933. </p>
  934. <p>
  935. ... means that if we administer the test to everyone, we'll clear
  936. 891 pure pythonic souls.
  937. </p>
  938. </div>
  939. <div class="slide">
  940. <h1>The good population</h1>
  941. <p>
  942. 990 Stout hearts
  943. </p>
  944. <p>
  945. ... with a mere 10% positive test results ...
  946. </p>
  947. <p>
  948. ... means that if we administer the test to everyone, we'll clear
  949. 891 pure pythonic souls.
  950. </p>
  951. <p>
  952. ... <em>BUT</em> 99 will be falsely misrepresented!
  953. </p>
  954. </div>
  955. <div class="slide">
  956. <h1>The total population</h1>
  957. <p>
  958. 1000 Python programmers
  959. </p>
  960. <ul class="incremental">
  961. <li><p>
  962. 10 evildoers
  963. </p>
  964. <ul class="incremental">
  965. <li><p>
  966. 9 rightly identified
  967. </p></li>
  968. <li><p>
  969. 1 slips through the cracks
  970. </p></li>
  971. </ul></li>
  972. <li><p>
  973. 990 true and stout-hearted pythonists
  974. </p>
  975. <ul class="incremental">
  976. <li><p>
  977. 99 falsely accused
  978. </p></li>
  979. <li><p>
  980. 891 cleared by the test
  981. </p></li>
  982. </ul></li>
  983. </ul>
  984. </div>
  985. <div class="slide">
  986. <h1>The positive-test population</h1>
  987. <p>
  988. 108 people will test positive (99 + 9)
  989. </p>
  990. </div>
  991. <div class="slide">
  992. <h1>The positive-test population</h1>
  993. <p>
  994. 108 people will test positive (99 + 9)
  995. </p>
  996. <p>
  997. 9 of which are actual wrong-headed fools.
  998. </p>
  999. </div>
  1000. <div class="slide">
  1001. <h1>The positive-test population</h1>
  1002. <p>
  1003. 108 people will test positive (99 + 9)
  1004. </p>
  1005. <p>
  1006. 9 of which are actual wrong-headed fools.
  1007. </p>
  1008. <p>
  1009. Which means that 8.33% (9 / 108) of those with a positive test
  1010. result will be nasty, worthless functional programmers.
  1011. </p>
  1012. </div>
  1013. <div class="slide">
  1014. <h1>The positive-test population</h1>
  1015. <p>
  1016. 108 people will test positive (99 + 9)
  1017. </p>
  1018. <p>
  1019. 9 of which are actual wrong-headed fools.
  1020. </p>
  1021. <p>
  1022. Which means that 8.33% (9 / 108) of those with a positive test
  1023. result will be nasty, worthless functional programmers.
  1024. </p>
  1025. <p>
  1026. Which is a far cry from 90%
  1027. </p>
  1028. </div>
  1029. <div class="slide">
  1030. <h1>The total population</h1>
  1031. <p>
  1032. 1000 Python programmers
  1033. </p>
  1034. <p>
  1035. 1% incidence of dark secret, 90% positive test rate for those who
  1036. harbour dark secret, 10% positive test rate for those who are
  1037. innocent.
  1038. </p>
  1039. <ul>
  1040. <li><p>
  1041. 1% - 10 functional programmers
  1042. </p>
  1043. <ul>
  1044. <li><p>
  1045. .9% - 9 rightly identified
  1046. </p></li>
  1047. <li><p>
  1048. .1% - 1 slips through the cracks
  1049. </p></li>
  1050. </ul></li>
  1051. <li><p>
  1052. 99% - 990 true pythonists
  1053. </p>
  1054. <ul>
  1055. <li><p>
  1056. 9.9% - 99 falsely accused
  1057. </p></li>
  1058. <li><p>
  1059. 89.1% - 891 cleared by the test
  1060. </p></li>
  1061. </ul></li>
  1062. </ul>
  1063. </div>
  1064. <div class="slide">
  1065. <h1>The total population</h1>
  1066. <p>
  1067. 1000 Python programmers
  1068. </p>
  1069. <p>
  1070. 1% incidence of dark secret, 95% positive test rate for those who
  1071. harbour dark secret, 10% positive test rate for those who are
  1072. innocent.
  1073. </p>
  1074. <ul>
  1075. <li><p>
  1076. 1% - 10 functional programmers
  1077. </p>
  1078. <ul>
  1079. <li><p>
  1080. .95% - 9.5 rightly identified
  1081. </p></li>
  1082. <li><p>
  1083. .05% - 0.5 slips through the cracks
  1084. </p></li>
  1085. </ul></li>
  1086. <li><p>
  1087. 99% - 990 true pythonists
  1088. </p>
  1089. <ul>
  1090. <li><p>
  1091. 9.9% - 99 falsely accused
  1092. </p></li>
  1093. <li><p>
  1094. 89.1% - 891 cleared by the test
  1095. </p></li>
  1096. </ul></li>
  1097. </ul>
  1098. </div>
  1099. <div class="slide">
  1100. <h1>The total population</h1>
  1101. <p>
  1102. 1000 Python programmers
  1103. </p>
  1104. <p>
  1105. 1% incidence of dark secret, 95% positive test rate for those who
  1106. harbour dark secret, 2% positive test rate for those who are
  1107. innocent.
  1108. </p>
  1109. <ul>
  1110. <li><p>
  1111. 1% - 10 functional programmers
  1112. </p>
  1113. <ul>
  1114. <li><p>
  1115. .95% - 9.5 rightly identified
  1116. </p></li>
  1117. <li><p>
  1118. .05% - 0.5 slips through the cracks
  1119. </p></li>
  1120. </ul></li>
  1121. <li><p>
  1122. 99% - 990 true pythonists
  1123. </p>
  1124. <ul>
  1125. <li><p>
  1126. 1.98% - 19.8 falsely accused
  1127. </p></li>
  1128. <li><p>
  1129. 97.02% - 970.2 cleared by the test
  1130. </p></li>
  1131. </ul></li>
  1132. </ul>
  1133. </div>
  1134. <div class="slide">
  1135. <h1>Bayes' Theorem</h1>
  1136. <p>
  1137. probability(guilt, given a positive test result) =
  1138. </p>
  1139. <p>
  1140. probability(positive test result, given guilt) * probability(guilt)
  1141. </p>
  1142. <p>
  1143. over
  1144. </p>
  1145. <p>
  1146. probability(positive test result)
  1147. </p>
  1148. </div>
  1149. <div class="slide">
  1150. <h1>Bayes' Theorem</h1>
  1151. <p>
  1152. probability(guilt, given a positive test result) =
  1153. </p>
  1154. <p>
  1155. probability(positive test result, given guilt) * 1%
  1156. </p>
  1157. <p>
  1158. over
  1159. </p>
  1160. <p>
  1161. probability(positive test result)
  1162. </p>
  1163. </div>
  1164. <div class="slide">
  1165. <h1>Bayes' Theorem</h1>
  1166. <p>
  1167. probability(guilt, given a positive test result) =
  1168. </p>
  1169. <p>
  1170. 90% * 1%
  1171. </p>
  1172. <p>
  1173. over
  1174. </p>
  1175. <p>
  1176. probability(positive test result)
  1177. </p>
  1178. </div>
  1179. <div class="slide">
  1180. <h1>Bayes' Theorem</h1>
  1181. <p>
  1182. probability(guilt, given a positive test result) =
  1183. </p>
  1184. <p>
  1185. 90% * 1%
  1186. </p>
  1187. <p>
  1188. over
  1189. </p>
  1190. <p>
  1191. hmmm....
  1192. </p>
  1193. </div>
  1194. <div class="slide">
  1195. <h1>probability(positive test result)</h1>
  1196. <p>
  1197. population with positive test result
  1198. </p>
  1199. <p>
  1200. over
  1201. </p>
  1202. <p>
  1203. total population
  1204. </p>
  1205. </div>
  1206. <div class="slide">
  1207. <h1>probability(positive test result)</h1>
  1208. <p>
  1209. population of true positives + population of false positives
  1210. </p>
  1211. <p>
  1212. over
  1213. </p>
  1214. <p>
  1215. total population
  1216. </p>
  1217. </div>
  1218. <div class="slide">
  1219. <h1>probability(positive test result)</h1>
  1220. <p>
  1221. 9 + population of false positives
  1222. </p>
  1223. <p>
  1224. over
  1225. </p>
  1226. <p>
  1227. total population
  1228. </p>
  1229. </div>
  1230. <div class="slide">
  1231. <h1>probability(positive test result)</h1>
  1232. <p>
  1233. 9 + 99
  1234. </p>
  1235. <p>
  1236. over
  1237. </p>
  1238. <p>
  1239. total population
  1240. </p>
  1241. </div>
  1242. <div class="slide">
  1243. <h1>probability(positive test result)</h1>
  1244. <p>
  1245. 9 + 99
  1246. </p>
  1247. <p>
  1248. over
  1249. </p>
  1250. <p>
  1251. 1000
  1252. </p>
  1253. </div>
  1254. <div class="slide">
  1255. <h1>probability(positive test result)</h1>
  1256. <p>
  1257. (9 + 108) / 1000 = 10.8%
  1258. </p>
  1259. </div>
  1260. <div class="slide">
  1261. <h1>Bayes' Theorem</h1>
  1262. <p>
  1263. probability(guilt, given a positive test result) =
  1264. </p>
  1265. <p>
  1266. 90% * 1%
  1267. </p>
  1268. <p>
  1269. over
  1270. </p>
  1271. <p>
  1272. 10.8%
  1273. </p>
  1274. </div>
  1275. <div class="slide">
  1276. <h1>Bayes' Theorem</h1>
  1277. <p>
  1278. probability(guilt, given a positive test result) =
  1279. </p>
  1280. <p>
  1281. 90% * 1% / 10.8% =
  1282. </p>
  1283. <p>
  1284. 8.33%
  1285. </p>
  1286. </div>
  1287. <div class="slide">
  1288. <h1>Bayes' Theorem</h1>
  1289. <p>
  1290. probability(guilt, given a positive test result) =
  1291. </p>
  1292. <p>
  1293. 90% * 1% / 10.8% =
  1294. </p>
  1295. <p>
  1296. 8.33%
  1297. </p>
  1298. <p>
  1299. And it's just that simple
  1300. </p>
  1301. </div>
  1302. <div class="slide">
  1303. <h1>But....</h1>
  1304. <p>
  1305. What's this got to do with spam?
  1306. </p>
  1307. </div>
  1308. </div>
  1309. </body>
  1310. </html>