{"id":1893,"date":"2026-08-22T13:14:57","date_gmt":"2026-08-22T13:14:57","guid":{"rendered":"https:\/\/www.allendowney.com\/blog\/?p=1893"},"modified":"2026-08-22T13:14:59","modified_gmt":"2026-08-22T13:14:59","slug":"think-java-but-interactive","status":"publish","type":"post","link":"https:\/\/www.allendowney.com\/blog\/2026\/08\/22\/think-java-but-interactive\/","title":{"rendered":"Think Java, but interactive"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/chrismayfield.github.io\/ThinkJava2\/\">online version of <em>Think Java<\/em><\/a> now features interactive widgets that <strong>run the code examples in the browser<\/strong>. For readers, it means you can try out the examples, modify them, and test your code. And for us it means we can publish an interactive version of the book without providing servers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The widgets use <a href=\"https:\/\/github.com\/ChrisMayfield\/java-runner\">java-runner<\/a>, an in-browser Java editor and interpreter developed by <em>Think Java<\/em> co-author Chris Mayfield.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">java-runner implements a subset of Java with the features needed for most programming classes, plus some safety features &#8212; like a maximum instruction count to stop infinite loops. It provides a code editor and a REPL.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s an example of the code editor, from <a href=\"https:\/\/chrismayfield.github.io\/ThinkJava2\/ch06.html#the-while-statement\">Section 6.1<\/a>:<\/p>\n\n\n\n<iframe\n  src=\"https:\/\/chrismayfield.github.io\/ThinkJava2\/embed\/collatz-conjecture.html\"\n  width=\"100%\"\n  height=\"420\"\n  style=\"border:1px solid #e0e0e0;border-radius:6px;\"\n  loading=\"lazy\"\n  title=\"Collatz conjecture \u2014 interactive Java\">\n<\/iframe>\n\n\n\n<p class=\"wp-block-paragraph\">And here&#8217;s an example of the REPL, from <a href=\"https:\/\/chrismayfield.github.io\/ThinkJava2\/ch06.html#characters\">Section 6.6:<\/a>:<\/p>\n\n\n\n<iframe\n  src=\"https:\/\/chrismayfield.github.io\/ThinkJava2\/embed\/fruit-charat-repl.html\"\n  width=\"100%\"\n  height=\"320\"\n  style=\"border:1px solid #e0e0e0;border-radius:6px;\"\n  loading=\"lazy\"\n  title=\"String charAt \u2014 Java REPL\">\n<\/iframe>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;re aware of <a href=\"https:\/\/github.com\/ChrisMayfield\/java-runner\/issues\/2\">one example<\/a> where the behavior of java-runner differs from the Java language specification &#8212; so we&#8217;re working on that.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The online version of Think Java now features interactive widgets that run the code examples in the browser. For readers, it means you can try out the examples, modify them, and test your code. And for us it means we can publish an interactive version of the book without providing servers. The widgets use java-runner, an in-browser Java editor and interpreter developed by Think Java co-author Chris Mayfield. java-runner implements a subset of Java with the features needed for most&#8230;<\/p>\n<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.allendowney.com\/blog\/2026\/08\/22\/think-java-but-interactive\/\"> Read More<span class=\"screen-reader-text\">  Read More<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1],"tags":[138,140],"class_list":["post-1893","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-java","tag-java-runner"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Think Java, but interactive - Probably Overthinking It<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.allendowney.com\/blog\/2026\/08\/22\/think-java-but-interactive\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Think Java, but interactive - Probably Overthinking It\" \/>\n<meta property=\"og:description\" content=\"The online version of Think Java now features interactive widgets that run the code examples in the browser. For readers, it means you can try out the examples, modify them, and test your code. And for us it means we can publish an interactive version of the book without providing servers. The widgets use java-runner, an in-browser Java editor and interpreter developed by Think Java co-author Chris Mayfield. java-runner implements a subset of Java with the features needed for most... Read More Read More\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.allendowney.com\/blog\/2026\/08\/22\/think-java-but-interactive\/\" \/>\n<meta property=\"og:site_name\" content=\"Probably Overthinking It\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-22T13:14:57+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-22T13:14:59+00:00\" \/>\n<meta name=\"author\" content=\"AllenDowney\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@AllenDowney\" \/>\n<meta name=\"twitter:site\" content=\"@AllenDowney\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"AllenDowney\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/2026\\\/08\\\/22\\\/think-java-but-interactive\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/2026\\\/08\\\/22\\\/think-java-but-interactive\\\/\"},\"author\":{\"name\":\"AllenDowney\",\"@id\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/#\\\/schema\\\/person\\\/4e5bfb2e9af6c3446cb0031a7bf83207\"},\"headline\":\"Think Java, but interactive\",\"datePublished\":\"2026-08-22T13:14:57+00:00\",\"dateModified\":\"2026-08-22T13:14:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/2026\\\/08\\\/22\\\/think-java-but-interactive\\\/\"},\"wordCount\":152,\"publisher\":{\"@id\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/#organization\"},\"keywords\":[\"java\",\"java-runner\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/2026\\\/08\\\/22\\\/think-java-but-interactive\\\/\",\"url\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/2026\\\/08\\\/22\\\/think-java-but-interactive\\\/\",\"name\":\"Think Java, but interactive - Probably Overthinking It\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-22T13:14:57+00:00\",\"dateModified\":\"2026-08-22T13:14:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/2026\\\/08\\\/22\\\/think-java-but-interactive\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/2026\\\/08\\\/22\\\/think-java-but-interactive\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/2026\\\/08\\\/22\\\/think-java-but-interactive\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Think Java, but interactive\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/\",\"name\":\"Probably Overthinking It\",\"description\":\"Data science, Bayesian Statistics, and other ideas\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/#organization\",\"name\":\"Probably Overthinking It\",\"url\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/probably_logo.png\",\"contentUrl\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/03\\\/probably_logo.png\",\"width\":714,\"height\":784,\"caption\":\"Probably Overthinking It\"},\"image\":{\"@id\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/AllenDowney\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/allendowney\\\/\",\"https:\\\/\\\/bsky.app\\\/profile\\\/allendowney.bsky.social\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/#\\\/schema\\\/person\\\/4e5bfb2e9af6c3446cb0031a7bf83207\",\"name\":\"AllenDowney\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fb01b3a7f7190bea1bbf7f0852e686c2f8c03b099222df2ce4bc7926f15bcb43?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fb01b3a7f7190bea1bbf7f0852e686c2f8c03b099222df2ce4bc7926f15bcb43?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fb01b3a7f7190bea1bbf7f0852e686c2f8c03b099222df2ce4bc7926f15bcb43?s=96&d=mm&r=g\",\"caption\":\"AllenDowney\"},\"url\":\"https:\\\/\\\/www.allendowney.com\\\/blog\\\/author\\\/allendowney_6dbrc4\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Think Java, but interactive - Probably Overthinking It","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.allendowney.com\/blog\/2026\/08\/22\/think-java-but-interactive\/","og_locale":"en_US","og_type":"article","og_title":"Think Java, but interactive - Probably Overthinking It","og_description":"The online version of Think Java now features interactive widgets that run the code examples in the browser. For readers, it means you can try out the examples, modify them, and test your code. And for us it means we can publish an interactive version of the book without providing servers. The widgets use java-runner, an in-browser Java editor and interpreter developed by Think Java co-author Chris Mayfield. java-runner implements a subset of Java with the features needed for most... Read More Read More","og_url":"https:\/\/www.allendowney.com\/blog\/2026\/08\/22\/think-java-but-interactive\/","og_site_name":"Probably Overthinking It","article_published_time":"2026-08-22T13:14:57+00:00","article_modified_time":"2026-08-22T13:14:59+00:00","author":"AllenDowney","twitter_card":"summary_large_image","twitter_creator":"@AllenDowney","twitter_site":"@AllenDowney","twitter_misc":{"Written by":"AllenDowney","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.allendowney.com\/blog\/2026\/08\/22\/think-java-but-interactive\/#article","isPartOf":{"@id":"https:\/\/www.allendowney.com\/blog\/2026\/08\/22\/think-java-but-interactive\/"},"author":{"name":"AllenDowney","@id":"https:\/\/www.allendowney.com\/blog\/#\/schema\/person\/4e5bfb2e9af6c3446cb0031a7bf83207"},"headline":"Think Java, but interactive","datePublished":"2026-08-22T13:14:57+00:00","dateModified":"2026-08-22T13:14:59+00:00","mainEntityOfPage":{"@id":"https:\/\/www.allendowney.com\/blog\/2026\/08\/22\/think-java-but-interactive\/"},"wordCount":152,"publisher":{"@id":"https:\/\/www.allendowney.com\/blog\/#organization"},"keywords":["java","java-runner"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.allendowney.com\/blog\/2026\/08\/22\/think-java-but-interactive\/","url":"https:\/\/www.allendowney.com\/blog\/2026\/08\/22\/think-java-but-interactive\/","name":"Think Java, but interactive - Probably Overthinking It","isPartOf":{"@id":"https:\/\/www.allendowney.com\/blog\/#website"},"datePublished":"2026-08-22T13:14:57+00:00","dateModified":"2026-08-22T13:14:59+00:00","breadcrumb":{"@id":"https:\/\/www.allendowney.com\/blog\/2026\/08\/22\/think-java-but-interactive\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.allendowney.com\/blog\/2026\/08\/22\/think-java-but-interactive\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.allendowney.com\/blog\/2026\/08\/22\/think-java-but-interactive\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.allendowney.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Think Java, but interactive"}]},{"@type":"WebSite","@id":"https:\/\/www.allendowney.com\/blog\/#website","url":"https:\/\/www.allendowney.com\/blog\/","name":"Probably Overthinking It","description":"Data science, Bayesian Statistics, and other ideas","publisher":{"@id":"https:\/\/www.allendowney.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.allendowney.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.allendowney.com\/blog\/#organization","name":"Probably Overthinking It","url":"https:\/\/www.allendowney.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.allendowney.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.allendowney.com\/blog\/wp-content\/uploads\/2025\/03\/probably_logo.png","contentUrl":"https:\/\/www.allendowney.com\/blog\/wp-content\/uploads\/2025\/03\/probably_logo.png","width":714,"height":784,"caption":"Probably Overthinking It"},"image":{"@id":"https:\/\/www.allendowney.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/AllenDowney","https:\/\/www.linkedin.com\/in\/allendowney\/","https:\/\/bsky.app\/profile\/allendowney.bsky.social"]},{"@type":"Person","@id":"https:\/\/www.allendowney.com\/blog\/#\/schema\/person\/4e5bfb2e9af6c3446cb0031a7bf83207","name":"AllenDowney","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/fb01b3a7f7190bea1bbf7f0852e686c2f8c03b099222df2ce4bc7926f15bcb43?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fb01b3a7f7190bea1bbf7f0852e686c2f8c03b099222df2ce4bc7926f15bcb43?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fb01b3a7f7190bea1bbf7f0852e686c2f8c03b099222df2ce4bc7926f15bcb43?s=96&d=mm&r=g","caption":"AllenDowney"},"url":"https:\/\/www.allendowney.com\/blog\/author\/allendowney_6dbrc4\/"}]}},"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":689,"url":"https:\/\/www.allendowney.com\/blog\/2021\/12\/19\/data-structures-and-information-retrieval-in-python\/","url_meta":{"origin":1893,"position":0},"title":"Data Structures and Information Retrieval in Python","author":"AllenDowney","date":"December 19, 2021","format":false,"excerpt":"I am happy to announce the first release of a new book, Data Structures and Information Retrieval in Python, which is an introduction to data structures organized around a motivating example: building a search engine. The elements of the search engine are the Crawler, which downloads web pages and follows\u2026","rel":"","context":"In \"computer science\"","block_context":{"text":"computer science","link":"https:\/\/www.allendowney.com\/blog\/tag\/computer-science\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1357,"url":"https:\/\/www.allendowney.com\/blog\/2024\/08\/23\/probably-the-book\/","url_meta":{"origin":1893,"position":1},"title":"Probably the Book","author":"AllenDowney","date":"August 23, 2024","format":false,"excerpt":"Last week I had the pleasure of presenting a keynote at posit::conf(2024). When the video is available, I will post it here [UPDATE here it is]. https:\/\/www.youtube.com\/watch?v=YKMZIzYBgTk In the meantime, you can read the slides, if you don't mind spoilers. For people at the conference who don't know me, this\u2026","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.allendowney.com\/blog\/wp-content\/uploads\/2024\/08\/are_you_normal_windshield_wiper.gif?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.allendowney.com\/blog\/wp-content\/uploads\/2024\/08\/are_you_normal_windshield_wiper.gif?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.allendowney.com\/blog\/wp-content\/uploads\/2024\/08\/are_you_normal_windshield_wiper.gif?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.allendowney.com\/blog\/wp-content\/uploads\/2024\/08\/are_you_normal_windshield_wiper.gif?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":451,"url":"https:\/\/www.allendowney.com\/blog\/2020\/06\/03\/think-dsp-v1-1\/","url_meta":{"origin":1893,"position":2},"title":"Think DSP v1.1","author":"AllenDowney","date":"June 3, 2020","format":false,"excerpt":"For the last week or so I have been working on an update to Think DSP. The latest version is available now from Green Tea Press. Here are some of the changes I made: Running on Colab All notebooks now run on Colab. Judging by my inbox, many readers find\u2026","rel":"","context":"In \"digital signal processing\"","block_context":{"text":"digital signal processing","link":"https:\/\/www.allendowney.com\/blog\/tag\/digital-signal-processing\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":308,"url":"https:\/\/www.allendowney.com\/blog\/2019\/09\/19\/what-should-i-do\/","url_meta":{"origin":1893,"position":3},"title":"What should I do?","author":"AllenDowney","date":"September 19, 2019","format":false,"excerpt":"I am planning to be on sabbatical from June 2020 to August 2021, so I am thinking about how to spend it. Let me tell you what I can do, and you can tell me what I should do. Data Science I consider myself a data scientist, but that means\u2026","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1541,"url":"https:\/\/www.allendowney.com\/blog\/2025\/04\/06\/announcing-think-stats-3e\/","url_meta":{"origin":1893,"position":4},"title":"Announcing Think Stats 3e","author":"AllenDowney","date":"April 6, 2025","format":false,"excerpt":"The third edition of Think Stats is on its way to the printer! You can preorder now from Bookshop.org and Amazon (those are affiliate links), or if you can't wait to get a paper copy, you can read the free, online version here. Here's the new cover, still featuring a\u2026","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.allendowney.com\/blog\/wp-content\/uploads\/2025\/04\/image-2.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.allendowney.com\/blog\/wp-content\/uploads\/2025\/04\/image-2.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.allendowney.com\/blog\/wp-content\/uploads\/2025\/04\/image-2.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.allendowney.com\/blog\/wp-content\/uploads\/2025\/04\/image-2.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":122,"url":"https:\/\/www.allendowney.com\/blog\/2018\/12\/27\/how-to-write-a-book\/","url_meta":{"origin":1893,"position":5},"title":"How to write a book","author":"AllenDowney","date":"December 27, 2018","format":false,"excerpt":"All of my books were written in LaTeX.\u00a0 For a long time I used emacs to compose, pdflatex to convert to PDF, Hevea to convert to HTML, and a hacked-up version of plasTeX to convert to DocBook, which is one of the formats I can submit to my publisher, O'Reilly\u2026","rel":"","context":"Similar post","block_context":{"text":"Similar post","link":""},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.allendowney.com\/blog\/wp-content\/uploads\/2018\/12\/IMG_2691-300x225.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.allendowney.com\/blog\/wp-json\/wp\/v2\/posts\/1893","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.allendowney.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.allendowney.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.allendowney.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.allendowney.com\/blog\/wp-json\/wp\/v2\/comments?post=1893"}],"version-history":[{"count":4,"href":"https:\/\/www.allendowney.com\/blog\/wp-json\/wp\/v2\/posts\/1893\/revisions"}],"predecessor-version":[{"id":1897,"href":"https:\/\/www.allendowney.com\/blog\/wp-json\/wp\/v2\/posts\/1893\/revisions\/1897"}],"wp:attachment":[{"href":"https:\/\/www.allendowney.com\/blog\/wp-json\/wp\/v2\/media?parent=1893"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.allendowney.com\/blog\/wp-json\/wp\/v2\/categories?post=1893"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.allendowney.com\/blog\/wp-json\/wp\/v2\/tags?post=1893"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}