[{"id":6917,"date":"2023-06-28T11:46:26","date_gmt":"2023-06-28T10:46:26","guid":{"rendered":"https:\/\/breakfastdinnertea.co.uk\/?p=6917"},"modified":"2023-07-03T13:34:17","modified_gmt":"2023-07-03T12:34:17","slug":"book-review-wool-by-hugh-howey","status":"publish","type":"post","link":"https:\/\/breakfastdinnertea.co.uk\/2023\/06\/book-review-wool-by-hugh-howey\/","title":{"rendered":"Book Review &#8211; &#8220;Wool&#8221; by Hugh Howey"},"content":{"rendered":"<p>I\u2019m an absolute sucker for fictional dystopia. It&#8217;s the perfect arena to discuss complex real world issues and hypothesise what the extremes of those might look like. Hugh Howey&#8217;s &#8216;Wool&#8217; does all of this brilliantly, scratching an itch for me that\u2019s not been touched since 2016\u2019s The Power.<\/p>\n<p>I discovered Wool through its engrossing television adaptation, &#8216;Silo&#8217;, on Apple TV. While it excels at character development and gives it an intriguing detective noir spin, I found myself needing to know what happens next. So, when I saw book two in the series on offer, it was a great excuse to get the first two to see how the source material compares.<\/p>\n<p>I&#8217;m pretty sure it&#8217;s a bit trite &#8211; I&#8217;ve come across a lot of the ideas and tropes before. But I expect that that\u2019s what I needed at this point in time &#8211; fast paced, gripping, comfort food.<\/p>\n<p>To sum it up, &#8216;Wool&#8217; is a well-crafted tale that had me hooked, made me think, and left me wanting more. So much so, that the only thing stopping me from starting on the second book, &#8216;Shift&#8217;, is writing this.<\/p>\n<p><em>Also posted on <a href=\"https:\/\/ramblingreaders.org\/book\/112244\/s\/wool\">RamblingReaders<\/a><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I\u2019m an absolute sucker for fictional dystopia. It&#8217;s the perfect arena to discuss complex real world issues and hypothesise what the extremes of those might look like. Hugh Howey&#8217;s &#8216;Wool&#8217; does all of this brilliantly, scratching an itch for me that\u2019s not been touched since 2016\u2019s The Power. I discovered Wool through its engrossing television [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6918,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[32,127],"tags":[134,3070,132,129],"class_list":["post-6917","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-personal","category-social-stream","tag-book","tag-fiction","tag-read","tag-review"],"_links":{"self":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/6917","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/comments?post=6917"}],"version-history":[{"count":3,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/6917\/revisions"}],"predecessor-version":[{"id":6925,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/6917\/revisions\/6925"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/media\/6918"}],"wp:attachment":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/media?parent=6917"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/categories?post=6917"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/tags?post=6917"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":4121,"date":"2022-02-28T22:20:03","date_gmt":"2022-02-28T22:20:03","guid":{"rendered":"https:\/\/breakfastdinnertea.co.uk\/?p=4121"},"modified":"2022-02-28T22:20:03","modified_gmt":"2022-02-28T22:20:03","slug":"monthly-review-february-2022","status":"publish","type":"post","link":"https:\/\/breakfastdinnertea.co.uk\/2022\/02\/monthly-review-february-2022\/","title":{"rendered":"Monthly Review: February 2022"},"content":{"rendered":"<div class=\"\" data-block=\"true\" data-editor=\"2m198\" data-offset-key=\"3o4nn-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"3o4nn-0-0\"><span data-offset-key=\"3o4nn-0-0\">So that\u2019s February done. I said in my last review that my focuses or themes for the month would be writing, diet, and injury recovery. I didn\u2019t do great, but given the circumstances, it wasn\u2019t too bad.<\/span><\/div>\n<\/div>\n<div class=\"\" data-block=\"true\" data-editor=\"2m198\" data-offset-key=\"8ci9h-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"8ci9h-0-0\"><span data-offset-key=\"8ci9h-0-0\">The big headline for the month in our household has been that Covid has finally visited us. So far, four out of five of us have tested positive, with myself completing of a week of snotty coughing. Needless to say, it\u2019s affected pretty much all our plans. Running has <\/span><span class=\"passivevoice\"><span data-offset-key=\"8ci9h-1-0\">been reduced<\/span><\/span><span data-offset-key=\"8ci9h-2-0\"> to 1 milers for the majority of February. Although the <\/span><a href=\"https:\/\/www.runeveryday.com\/uk_active_streaks.php\"><span data-offset-key=\"8ci9h-3-0\">running streak continues.<\/span><\/a><span data-offset-key=\"8ci9h-4-0\"> I tested positive as the government removed legal restrictions on leaving the house. But I\u2019ve been managing risks \u2013 only going out at around 9 pm, and swapping sides of the road whenever I see a pedestrian ahead.<\/span><\/div>\n<\/div>\n<h2>Last month&#8217;s goals<\/h2>\n<p><span data-offset-key=\"asndn-0-0\">Because of the enforced rest, my piriformis injury has improved a lot. This <\/span><span class=\"passivevoice\"><span data-offset-key=\"asndn-1-0\">was helped<\/span><\/span><span data-offset-key=\"asndn-2-0\"> along by stretches and bridging. I\u2019m hoping over the next couple of weeks to start testing it a little, <\/span><span class=\"qualifier\"><span data-offset-key=\"asndn-3-0\">just<\/span><\/span><span data-offset-key=\"asndn-4-0\"> as soon as my LFTs turn negative.<\/span><\/p>\n<p><span data-offset-key=\"8bklh-0-0\">I arrived at some changes to my diet. The primary changes were to consume more carbs, while restricting processed sugars. The improvements started well. <\/span><span class=\"hardreadability\"><span data-offset-key=\"8bklh-1-0\">My weight was stabilising, and I intended to incorporate some principles from <\/span><\/span><a href=\"https:\/\/www.goodreads.com\/book\/show\/7192581-racing-weight\"><span data-offset-key=\"8bklh-2-0\">Racing Weight<\/span><\/a><span class=\"hardreadability\"><span data-offset-key=\"8bklh-3-0\"> into my training<\/span><\/span><span data-offset-key=\"8bklh-4-0\">. The main principles were to focus on running performance and body fat percentage. But, the Covid issue has led the past couple of weeks to a LOT of compromising. Myself and various meal delivery services have become very well acquainted. <\/span><span class=\"qualifier\"><span data-offset-key=\"8bklh-5-0\">I hope to<\/span><\/span><span data-offset-key=\"8bklh-6-0\"> fix that as we all start to heal up.<\/span><\/p>\n<p><span data-offset-key=\"c8m1v-0-0\">The goal around writing more went ok-ish this month. Each week, I\u2019ve been completing different prompts from Tracy Winchell\u2019s <\/span><a href=\"https:\/\/rebootspodcast.podia.com\/tame-your-monkey-mind-7-stacks-to-engage-your-rational-brain\"><span data-offset-key=\"c8m1v-1-0\">Tame Your Monkey Mind.<\/span><\/a><span data-offset-key=\"c8m1v-2-0\"> I&#8217;ve found it to be valuable. The most recent exercise I tried was writing a letter to your tomorrow\u2019s self. <\/span><span class=\"hardreadability\"><span data-offset-key=\"c8m1v-3-0\">This exercise externalises the events and feelings of today and sets out expectations for tomorrow<\/span><\/span><span data-offset-key=\"c8m1v-4-0\">. <\/span><span class=\"adverb\"><span data-offset-key=\"c8m1v-5-0\">Serendipitously<\/span><\/span><span data-offset-key=\"c8m1v-6-0\">, RJ Nestor writes about this metaphor in his <\/span><a href=\"https:\/\/signup.rjnestor.com\/posts\/weekend-upgrade-3-what-s-next\"><span data-offset-key=\"c8m1v-7-0\">most recent newsletter.<\/span><\/a><span data-offset-key=\"c8m1v-8-0\"> I recommend it if you\u2019re at all interested in the \u201ctools for thought\u201d space. <\/span><span class=\"hardreadability\"><span data-offset-key=\"c8m1v-9-0\">He describes it as &#8220;meta-work&#8221;, drawing a line between this exercise and the way modern teams communicate using tools like Trello<\/span><\/span><span data-offset-key=\"c8m1v-10-0\">. I\u2019m going to endeavour to continue doing this, with more of a work-hat on over the next month.<\/span><\/p>\n<h2>Playground<\/h2>\n<p><span data-offset-key=\"3uund-0-0\">When I considered what I did in the <\/span><a href=\"https:\/\/playground.breakfastdinnertea.co.uk\/\"><span data-offset-key=\"3uund-1-0\">playground<\/span><\/a><span data-offset-key=\"3uund-2-0\"> this month, I didn\u2019t feel like I\u2019d achieved all that much. In my head, I&#8217;d iterated what was already there and made the weight graph useful. But when I look at my <\/span><a href=\"https:\/\/github.com\/SimonS\/tdee-plaything\/commits\/master\"><span data-offset-key=\"3uund-3-0\">commit log<\/span><\/a><span data-offset-key=\"3uund-4-0\"> for it, I achieved a fair bit:<\/span><\/p>\n<ul>\n<li><span data-offset-key=\"ek2b5-0-0\"><span data-text=\"true\">I introduced some rudimentary navigation. This involved getting all my check-ins and \u201cwindowing\u201d them a week at a time.<\/span><\/span><\/li>\n<li><span style=\"font-family: var(--list--font-family); background-color: var(--global--color-background); color: var(--global--color-primary); font-size: var(--global--font-size-base);\">I ripped out all the previous individual weight log pages (which was only ever going to be a temporary hack).<\/span><\/li>\n<li>And I implemented a trend line, based on the ancient, but still useful <a href=\"https:\/\/www.fourmilab.ch\/hackdiet\/e4\/\">Hacker&#8217;s Diet<\/a>. That was more fun than I expected.<\/li>\n<\/ul>\n<p><span data-offset-key=\"2fut-0-0\">You can see my <\/span><a href=\"https:\/\/playground.breakfastdinnertea.co.uk\/weight\"><span data-offset-key=\"2fut-1-0\">weight graph in action over here.<\/span><\/a><span data-offset-key=\"2fut-2-0\"> It won\u2019t show much activity over the past couple of weeks, due to a combination of illness and avoiding the truth.<\/span><\/p>\n<p><span data-offset-key=\"76ug7-0-0\">Up next in playground land, I\u2019ll attempt to integrate a calendar view. It may resemble the Contributions feature present on GitHub profiles. <\/span><span class=\"adverb\"><span data-offset-key=\"76ug7-1-0\">Originally<\/span><\/span><span data-offset-key=\"76ug7-2-0\">, I wanted to wait until I had more data to display. But instead, I&#8217;d like to understand whether my data types are right before having to rework them later.<\/span><\/p>\n<h2>Podcast<\/h2>\n<p><span data-offset-key=\"f67cv-0-0\">I had the pleasure of chatting to <\/span><a href=\"https:\/\/sijobling.com\/\"><span data-offset-key=\"f67cv-1-0\">Si Jobling<\/span><\/a><span data-offset-key=\"f67cv-2-0\"> on his always-fascinating podcast <\/span><a href=\"https:\/\/makelifeworkpodcast.com\/habit-trackers-simon-scarfe\/\"><span data-offset-key=\"f67cv-3-0\">Make Life Work<\/span><\/a><span data-offset-key=\"f67cv-4-0\">. We talked about my day job before diving into some of the history and learnings from my <\/span><a href=\"https:\/\/playground.breakfastdinnertea.co.uk\/\"><span data-offset-key=\"f67cv-5-0\">playground<\/span><\/a><span data-offset-key=\"f67cv-6-0\">. It\u2019s weird listening to yourself talk about this stuff. But it has given me some insight into what skills I can work on. For example, communicating complex subject matter. It&#8217;s a key part of my job, so to get some real-life introspection like this is borderline priceless.<\/span><\/p>\n<h2>March<\/h2>\n<div class=\"\" data-block=\"true\" data-editor=\"2m198\" data-offset-key=\"2gg11-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"2gg11-0-0\">Thinking about what I want to do in March has been straight forwards, there\u2019s a lot of carry-over from last month:<\/div>\n<ul>\n<li><span data-offset-key=\"bpumh-0-0\"><span data-text=\"true\">More writing. This month though, I\u2019d like to focus on my Zettelkasten. We\u2019re starting a book club at work on the <\/span><\/span><a href=\"https:\/\/www.amazon.co.uk\/Devops-Handbook-World-Class-Reliability-Organizations-dp-1950508404\/dp\/1950508404\/ref=dp_ob_title_bk\"><span data-offset-key=\"bpumh-1-0\"><span data-text=\"true\">DevOps Handbook.<\/span><\/span><\/a><span data-offset-key=\"bpumh-2-0\"><span data-text=\"true\"> It has made me realise that I\u2019ve amassed unprocessed fleeting notes for my Zettelkasten. I\u2019ve fallen out of the habit of focused writing\/thinking. So with that, I wish to make an effort to process and develop my backlog. Also, to get in the habit of processing them as I create them.<\/span><\/span><\/li>\n<li>My fitness plan is going to resemble to plan for February. I&#8217;d like to rebuild my running, eat well, and do more support exercises to help protect against injury.<\/li>\n<li>And a little stretch goal \u2013 I want to start moving my musical muscles again. I don\u2019t yet know what that will look like \u2013 Guitar, Ableton, Jazz, Chiptune? All three? Regardless of which, I\u2019d like to shift my default fallback leisure activity from playing copious amounts of Slay The Spire.<\/li>\n<\/ul>\n<\/div>\n<h2>Consumption Highlights<\/h2>\n<h3>Films<\/h3>\n<p>Good movie watching month, helped on by Covid layup. Highlights were aplenty, but I&#8217;ll stick to three for now:<\/p>\n<ul>\n<li><a href=\"https:\/\/letterboxd.com\/simonscarfe\/films\/diary\/for\/2022\/02\/04\/\">Free Solo<\/a><\/li>\n<li><a href=\"https:\/\/letterboxd.com\/simonscarfe\/films\/diary\/for\/2022\/02\/25\/\">The French Dispatch<\/a><\/li>\n<li><a href=\"https:\/\/letterboxd.com\/simonscarfe\/films\/diary\/for\/2022\/02\/26\/\">Stop Making Sense<\/a><\/li>\n<\/ul>\n<h3>TV<\/h3>\n<p><span data-offset-key=\"cnvu2-0-0\">This month we blazed through <\/span><a href=\"https:\/\/www.imdb.com\/title\/tt15264192\/\"><span data-offset-key=\"cnvu2-1-0\">Murderville<\/span><\/a><span data-offset-key=\"cnvu2-2-0\">, while <\/span><a href=\"https:\/\/www.imdb.com\/title\/tt13659418\/\"><span data-offset-key=\"cnvu2-3-0\">Pam and Tommy<\/span><\/a><span data-offset-key=\"cnvu2-4-0\"> has proven compelling. We\u2019ve watched lots of other stuff too, but I don\u2019t want to use this as a place for negativity. Those two were my definite highlights.<\/span><\/p>\n<h3>Podcasts<\/h3>\n<p><span data-offset-key=\"8004h-0-0\">Reviewing my podcast listening for the month, two things occur to me. First, I need to take some notes on these, if only so I <\/span><span class=\"complexword\"><span data-offset-key=\"8004h-1-0\">retain<\/span><\/span><span data-offset-key=\"8004h-2-0\"> more from them than mere passive listening gives. And two, a lot of my favourite\/most memorable listens come from the same source podcasts. But rather than regurgitate the same three sources, I\u2019ve picked out a few different ones this time:<\/span><\/p>\n<ul>\n<li>Syntax.fm had a <a href=\"https:\/\/syntax.fm\/show\/430\/creator-of-wordle-josh-wardle\"><span data-offset-key=\"8f7vl-1-0\">fun interview with the creator of Wordle, Josh Wardle<\/span><\/a>. It was fascinating to hear what hosting looks like, how he scaled it, and how little maintenance there was. These are the benefits of building a very straightforward PWA and letting the client do all the work.<\/li>\n<li>I&#8217;m a massive fan of SongExploder, and I enjoyed their breakdown of <a href=\"https:\/\/songexploder.net\/the-shins\">The Shins&#8217; &#8220;New Slang&#8221;<\/a>.<\/li>\n<li>Via Reply All, I listened to <a href=\"https:\/\/gimletmedia.com\/shows\/reply-all\/gmhjv6v\/presenting-science-vs-joe-rogan-the\">Science Vs&#8217;s piece by piece rebuttal of a Joe Rogan interview with an Anti Vax scientist<\/a>. <span data-offset-key=\"9q1pf-2-0\">It was interesting to hear how risks presented by the vaccines were much greater in people who got Covid. A real lesson in how you can use data <\/span><span class=\"adverb\"><span data-offset-key=\"9q1pf-3-0\">selectively<\/span><\/span><span data-offset-key=\"9q1pf-4-0\"> to tell many conflicting stories.<\/span><\/li>\n<li><span data-offset-key=\"dmsph-0-0\">A bit of a Norwich City niche one, but the TNC lads have a <\/span><a href=\"https:\/\/soundcloud.com\/user-77650364\/an-exclusive-interview-with-ben-gibson\"><span data-offset-key=\"dmsph-1-0\">great interview with Ben Gibson<\/span><\/a><span data-offset-key=\"dmsph-2-0\"> up. I always go out of my way for a Ben Gibson chat. He\u2019s a candid interviewee and brings a lot of insight into how things are running and received at the club. <\/span><\/li>\n<\/ul>\n<h3>Books<\/h3>\n<ul>\n<li>In February I finished Ursula Le Guin&#8217;s <a href=\"https:\/\/www.goodreads.com\/book\/show\/25328607-a-wizard-of-earthsea\">A Wizard of Earthsea<\/a>. A lovely book with some great lessons contained within it in a non-preachy way. I expect to look at more of her canon in the future.<\/li>\n<li>I completed <a href=\"https:\/\/www.goodreads.com\/book\/show\/44135420-team-topologies\">Team Topologies<\/a>, it gets referenced a lot at my workplace, and for good reason. It overlaps with concepts found in literature such as <a href=\"https:\/\/breakfastdinnertea.co.uk\/2020\/09\/review-recap-accelerate-the-science-of-lean-software-and-devops-building-and-scaling-high-performing-technology-organizations\/\">Accelerate.<\/a> As well as modern architectural principles like micro-services and event-driven architectures.<\/li>\n<li>I started Greg Egan&#8217;s <a href=\"https:\/\/www.goodreads.com\/book\/show\/156785.Diaspora\">Diaspora<\/a>, which is so far heavy but already rewarding if only in the amount it makes you think.<\/li>\n<li>And I started <a href=\"https:\/\/www.goodreads.com\/book\/show\/59624416-making-work-visible\">Making Work Visible<\/a>, another much-cited book at work. It&#8217;s too early to have formed an opinion yet though.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>So that\u2019s February done. I said in my last review that my focuses or themes for the month would be writing, diet, and injury recovery. I didn\u2019t do great, but given the circumstances, it wasn\u2019t too bad. The big headline for the month in our household has been that Covid has finally visited us. So [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[32],"tags":[134,1304,993,981,39,990,978,66,987,41,33,996,46,37,1301],"class_list":["post-4121","post","type-post","status-publish","format-standard","hentry","category-personal","tag-book","tag-covid-19","tag-films","tag-fitness","tag-guitar","tag-journaling","tag-monthly-review","tag-music","tag-podcasts","tag-projects-2","tag-running","tag-tv","tag-weight","tag-writing","tag-zettelkasten"],"_links":{"self":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/4121","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/comments?post=4121"}],"version-history":[{"count":6,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/4121\/revisions"}],"predecessor-version":[{"id":4135,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/4121\/revisions\/4135"}],"wp:attachment":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/media?parent=4121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/categories?post=4121"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/tags?post=4121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":3804,"date":"2022-01-30T21:58:02","date_gmt":"2022-01-30T21:58:02","guid":{"rendered":"https:\/\/breakfastdinnertea.co.uk\/?p=3804"},"modified":"2022-01-30T21:58:02","modified_gmt":"2022-01-30T21:58:02","slug":"monthly-review-january-2022","status":"publish","type":"post","link":"https:\/\/breakfastdinnertea.co.uk\/2022\/01\/monthly-review-january-2022\/","title":{"rendered":"Monthly Review: January 2022"},"content":{"rendered":"<p>At the beginning of the year, my only resolution was to review the past month and set some focuses, themes, and goals according to where my life was at that point. Hopefully as a way to try to avoid the pitfalls of all or nothing boolean resolutions. Consider this a trial into having a semi-public semi-regular monthly review.<\/p>\n<p>The goal I set for January was to recover my fitness and get back to my pre-Christmas weight. Fortunately, as of this morning, not only am I sub-pre-Christmas, but my weight hit the goal I set back at the beginning of August when I started this journey. I have a couple of potential blog posts around the past 6 months and how I got to here &#8211; joining a running club, slow-carb-dieting &#8211; but they deserve some time and thought to themselves.<\/p>\n<p>It&#8217;s not a direct goal or aim, but I need to figure out where to go next. I&#8217;ve never got to my goal weight before &#8211; when I&#8217;ve lost significant weight previously, it&#8217;s been until &#8220;that&#8217;ll do&#8221; and then it&#8217;s gradually (or sometimes quickly) piled back on again. So my focus needs to be, what about this eating program has really worked for me, and how do I adapt that to focusing on other things like fitness, strength, and not necessarily a calorie deficit? This is something I will think about over the next week, and in the meantime, I&#8217;m going to keep &#8220;slow-carbing&#8221; &#8211; if only because I have a leg injury right now and am running minimum mileage.<\/p>\n<p>With that goal in mind, throughout the last month, fitness has been my main non-work focus. I&#8217;ve run in a couple of cross country events, and started to see some gains in my speed.<\/p>\n<p>Outside of fitness, I made some decent progress on my playground project, without doing much more than fiddling with code while I watched TV. I did a bit of CSS tidying up &#8211; although that&#8217;s something I&#8217;m hoping to revisit after I have a calendar-like visualisation implemented (which might be a month or two away). It looks horrible, almost as if I&#8217;ve just mashed a bunch of styling together without much thought. Mad that &#x1f440;.<\/p>\n<p>I got generic WordPress pages loading in, which allowed me to initially bring my <a href=\"https:\/\/playground.breakfastdinnertea.co.uk\/now\/\">\/now<\/a> page across &#8211; so I can not keep that up to date in two places, rather than one.<\/p>\n<p>I think that most significantly, I got <a href=\"https:\/\/playground.breakfastdinnertea.co.uk\/podcasts\/\">podcast integration<\/a> working. I&#8217;m really pleased with this, it&#8217;s a set of data that I can&#8217;t look at at a glance anywhere else. It also might serve as a jumping-off point if I ever want to write anything about the stuff that I&#8217;m consuming day-to-day. I have a bunch of Permanent Notes in my Zettelkasten that start off as Fleeting Notes from podcasts, maybe there&#8217;s something I can do here to make some of that process public?<\/p>\n<p>And I started in earnest doing something with my Weight data. There&#8217;s a bit of a spike over at <a href=\"https:\/\/playground.breakfastdinnertea.co.uk\/weight\/,\">https:\/\/playground.breakfastdinnertea.co.uk\/weight\/,<\/a> but that might change significantly in the next week or two. I might even pivot libraries, given my experience with Nivo so far.<\/p>\n<h2>February<\/h2>\n<p>Next month, there are a few things I wish to focus on:<\/p>\n<ul>\n<li>I want to write more. Not necessarily on here, but rather in Roam (or maybe DayOne, depending on what&#8217;s more natural) &#8211; whether that&#8217;s free journaling, morning pages, or something else. I know that if I want to write better, I need to write more. I also want to do more reflecting on what I&#8217;m doing to take stock a little and figure out whether I&#8217;m just doing stuff for the sake of doing it.<\/li>\n<li>I want to lock down an approach to pivoting my diet and fitness regime to something more long-term sustainable and runner-friendly. I have something in my head around this, but I need to better formalise it &#8211; it&#8217;s a combination of things that work for me across <a href=\"https:\/\/www.goodreads.com\/book\/show\/7148931-the-4-hour-body\">Slow Carb<\/a>, <a href=\"https:\/\/www.goodreads.com\/book\/show\/235869.Intuitive_Eating\">Intuitive Eating<\/a>, and <a href=\"https:\/\/www.goodreads.com\/book\/show\/7192581-racing-weight\">Racing Weight<\/a>. But I guess I have to play with it and see if it meets my longer-term goals (improve running performance, don&#8217;t put weight back on, maybe lean up along the way), and whether it is sustainable as a set of life-long habits.<\/li>\n<li>Finally, don&#8217;t let my ego get the best of me, and fully recover from this injury, even if it means my weekly mileage suffers temporarily.<\/li>\n<\/ul>\n<h2>Consumption highlights<\/h2>\n<h3>Films<\/h3>\n<p>Not a massive movie month, but saw some corkers.<\/p>\n<ul>\n<li><a href=\"https:\/\/letterboxd.com\/film\/minding-the-gap\/\">Minding The Gap<\/a><\/li>\n<li><a href=\"https:\/\/letterboxd.com\/film\/blind-detective\/\">Blind Detective<\/a><\/li>\n<li><a href=\"https:\/\/letterboxd.com\/film\/the-warriors\/\">The Warriors<\/a><\/li>\n<\/ul>\n<h3>TV<\/h3>\n<p>I caught quite a bit of good TV this month. <a href=\"https:\/\/www.imdb.com\/title\/tt11041332\/\">Yellowjackets<\/a> was by far my favourite. Our lunchtime light binge has been <a href=\"https:\/\/en.wikipedia.org\/wiki\/Mortimer_%26_Whitehouse:_Gone_Fishing\">Mortimer and Whitehouse: Gone Fishing<\/a>, which I&#8217;m now sad to have finished.<\/p>\n<h3>Podcasts<\/h3>\n<ul>\n<li>This week, one of my favourite podcasts, The Tip Off which covers stories of fascinating and important investigative journalism cases, returned. <a href=\"https:\/\/shows.acast.com\/thetipoff\/episodes\/ep-54-how-it-gets-built\">This one covers slave labour in the British building industry<\/a>, it is a great listen.<\/li>\n<li>One from back in July, but I listened to a fascinating interview with UK Ultrarunner, <a href=\"https:\/\/strengthrunning.libsyn.com\/203-how-ultra-endurance-athlete-damian-hall-runs-250-miles-and-you-can-too\">Damian Hall on the Strength Running podcast<\/a> &#8211; great listen, all about the dangers of drinking too much water and his experiences running stupidly long distances.<\/li>\n<li>If you&#8217;ve not caught one yet, you should give Blindboy&#8217;s podcast a listen. His &#8220;hot takes&#8221; are amazing, I would love to see his process for putting this stuff together, because they go all over the place, make a billion great points, and then always seem to resolve to a nice take-home message full of nuance and humanity. I listened to one about <a href=\"https:\/\/play.acast.com\/s\/blindboy\/pineapplefolly\">pineapples in Ireland<\/a> this month, and it didn&#8217;t disappoint.<\/li>\n<\/ul>\n<h3>Books<\/h3>\n<ul>\n<li>This month saw me finally complete <a href=\"https:\/\/www.goodreads.com\/book\/show\/56481725-staff-engineer\">Staff Engineer: Leadership Beyond the Management Track<\/a> &#8211; a book that I finished the meat of earlier in the year, but I trickled the interview section as and when I had the breadth. Well worth a read for anyone wanting to know what a software engineer might do beyond senior. (Without spoiling much, it is one of a billion things).<\/li>\n<li>I&#8217;ve also progressed and nearly finished <a href=\"https:\/\/www.goodreads.com\/book\/show\/44135420-team-topologies\">Team Topologies<\/a>, which is full of pragmatic wisdom about how to create teams that foster both autonomy and alignment. And in fictionland, I&#8217;ve been really enjoying <a href=\"https:\/\/www.goodreads.com\/book\/show\/13642.A_Wizard_of_Earthsea\">A Wizard of Earthsea<\/a>, one of those many &#8220;classics&#8221; that I&#8217;m only now getting around to.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>At the beginning of the year, my only resolution was to review the past month and set some focuses, themes, and goals according to where my life was at that point. Hopefully as a way to try to avoid the pitfalls of all or nothing boolean resolutions. Consider this a trial into having a semi-public [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[32],"tags":[134,993,981,990,978,987,41,191,33,984,996,46,37],"class_list":["post-3804","post","type-post","status-publish","format-standard","hentry","category-personal","tag-book","tag-films","tag-fitness","tag-journaling","tag-monthly-review","tag-podcasts","tag-projects-2","tag-roam","tag-running","tag-slow-carb","tag-tv","tag-weight","tag-writing"],"_links":{"self":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/3804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/comments?post=3804"}],"version-history":[{"count":1,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/3804\/revisions"}],"predecessor-version":[{"id":3813,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/3804\/revisions\/3813"}],"wp:attachment":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/media?parent=3804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/categories?post=3804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/tags?post=3804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":3693,"date":"2022-01-26T23:51:22","date_gmt":"2022-01-26T23:51:22","guid":{"rendered":"https:\/\/breakfastdinnertea.co.uk\/?p=3693"},"modified":"2022-01-26T23:53:31","modified_gmt":"2022-01-26T23:53:31","slug":"exposing-a-personal-api-using-withings-wordpress-and-graphql","status":"publish","type":"post","link":"https:\/\/breakfastdinnertea.co.uk\/2022\/01\/exposing-a-personal-api-using-withings-wordpress-and-graphql\/","title":{"rendered":"Exposing a Personal API using Withings, WordPress, and GraphQL"},"content":{"rendered":"<p><span style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\" data-offset-key=\"feq4h-0-0\">My <\/span><a style=\"background-color: var(--global--color-background); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\" href=\"https:\/\/playground.breakfastdinnertea.co.uk\/\"><span data-offset-key=\"feq4h-1-0\">playground project<\/span><\/a><span style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\" data-offset-key=\"feq4h-2-0\"> started from a Google Sheet I found on Reddit to track my weight. I initially only wanted to play about and create some visualisations for it. But,eventually I stopped using that spreadsheet and, like most of my weight-loss escapades, got fat again. In the meantime, the playground developed into a hodgepodge of data sources. There was little rhyme or reason to a lot of it but kept me busy and off the streets.<\/span><\/p>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"566l4-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"566l4-0-0\"><span style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\">Since then, I bought myself a fancy Withings body fat scale and have continued to track my weight with that. It does a job, but I don&#8217;t like that it locks me into Withings&#8217; platform forever. One day it might shut down &#8211; leaving me at best with the hope that they&#8217;ll make my data available as a half-arsed CSV file.<\/span><\/div>\n<\/div>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"dq3j4-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"dq3j4-0-0\"><span style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\">I also missed some of the features in the original weight tracker. For instance, I implemented rolling average graphs. These give an idea of how my weight is trending over time, rather than day-to-day fluctuations. As much as I care about how big the poo I did was that day, the average is much more useful.<\/span><\/div>\n<\/div>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"fb2se-0-0\"><span style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\">So I set to extract that weight to my own data store of choice, WordPress. It is not the first place I&#8217;d visit for storing time-series data that I could later display as graphs. Or to create an Event store to create my own personal audit trail. It is also not what I would consider a &#8220;sexy&#8221; technology choice. The primary APIs are all in PHP, a language I&#8217;ve not written in any significant manner since 2015. But it&#8217;s free, open-source, has a huge vault of useful plugins, and is malleable.<\/span><\/div>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"dep1p-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"dep1p-0-0\"><span style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\" data-offset-key=\"cps32-0-0\">The querying\/visualisation is still a work in progress. <\/span><span class=\"hardreadability\" style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\"><span data-offset-key=\"cps32-1-0\">You can see how it&#8217;s going at this top-secret, hard to guess URL: <\/span><\/span><a style=\"background-color: var(--global--color-background); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\" href=\"https:\/\/playground.breakfastdinnertea.co.uk\/weight\/\"><span data-offset-key=\"cps32-2-0\">https:\/\/playground.breakfastdinnertea.co.uk\/weight\/<\/span><\/a><span style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\" data-offset-key=\"cps32-3-0\">. With that said, the main method of data ingress has been up and running for well over 6 months now. It feels stable enough to talk about.<\/span><\/div>\n<\/div>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"345a2-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"345a2-0-0\"><span style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\" data-offset-key=\"3h62n-0-0\">I was recently sharing this with a new Slack that I&#8217;ve joined (<\/span><a style=\"background-color: var(--global--color-background); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\" href=\"https:\/\/sijobling.com\/\"><span data-offset-key=\"3h62n-1-0\">Si Jobling<\/span><\/a><span style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\" data-offset-key=\"3h62n-2-0\">&#8216;s <\/span><a style=\"background-color: var(--global--color-background); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\" href=\"http:\/\/ontheside.network\/\"><span data-offset-key=\"3h62n-3-0\">On The Side slack<\/span><\/a><span style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\" data-offset-key=\"3h62n-4-0\">). Si asked me about this particular integration, which I&#8217;ve taken as a prompt to make me write some of this down. If only so that when it next breaks, I have a little dummies guide to help me debug it all.<\/span><\/div>\n<\/div>\n<h2>Overview<\/h2>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"76ftl-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"76ftl-0-0\"><span data-offset-key=\"76ftl-0-0\">Here&#8217;s a bit of a dodgy and incomplete diagram showing what the information flow looks like. The &#8220;A&#8221; logo at the right is for the fantastic <\/span><a href=\"https:\/\/hemingwayapp.com\/astro.build\/\"><span data-offset-key=\"76ftl-1-0\">Astro<\/span><\/a><span data-offset-key=\"76ftl-2-0\"> framework which I use to render the playground. It is very early in its development, but a lot of fun to use. I&#8217;d encourage you to give it a look over if that&#8217;s your bag.<\/span><\/div>\n<\/div>\n<p><img decoding=\"async\" title=\"\" src=\"https:\/\/firebasestorage.googleapis.com\/v0\/b\/firescript-577a2.appspot.com\/o\/imgs%2Fapp%2Fsimonscarfe%2FaDY38UHvBy.png?alt=media&amp;token=23f53458-db6f-45f2-8d3d-c7d47aef497a\" \/><\/p>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"2prrc-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"2prrc-0-0\"><span data-offset-key=\"2prrc-0-0\">I won&#8217;t go into too much detail on the rendering part, if only because it&#8217;s still early days. But the rest of it, I&#8217;ll dig into a little below.<\/span><\/div>\n<\/div>\n<h2>Custom Post Types<\/h2>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"e1eus-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"e1eus-0-0\"><span data-offset-key=\"e1eus-0-0\">WordPress allows you to create your own data types using Custom Post Types. There are plugins to define these, but I like having the control you get from setting them yourself. Also, the custom post types API is dead simple. Custom types are exposable using WPGraphQL. Which gives the added bonus of not worrying about a domino chain of dependencies being up to date.<\/span><\/div>\n<\/div>\n<p>You can find the code to register these fields in this method &#8211; <a href=\"https:\/\/github.com\/SimonS\/tdee-plaything\/blob\/06bf8d55849db72792c24dcb78ae20b3baa1ee31\/packages\/bdt-customisations\/lib\/register-weighins.php#L11\">https:\/\/github.com\/SimonS\/tdee-plaything\/blob\/06bf8d55849db72792c24dcb78ae20b3baa1ee31\/packages\/bdt-customisations\/lib\/register-weighins.php#L11<\/a><\/p>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"4veqd-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"4veqd-0-0\"><span data-offset-key=\"4veqd-0-0\">It registers the 3 main fields in that custom post type. The &#8220;sanitize_callback&#8221; property allows you to translate from Withings format to something UTC-like.<\/span><\/div>\n<\/div>\n<h2>WPGraphQL<\/h2>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"frq4a-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"frq4a-0-0\"><span data-offset-key=\"frq4a-0-0\">GraphQL allows me to export those post types for consumption off-site. From there, I can <\/span><span class=\"complexword\"><span data-offset-key=\"frq4a-1-0\">aggregate<\/span><\/span><span data-offset-key=\"frq4a-2-0\"> and filter data without having to write custom business logic. I didn&#8217;t choose GraphQL from the outset. I started using it because I was integrating against Gatsby, where the primary API is GraphQL. <\/span><span class=\"adverb\"><span data-offset-key=\"frq4a-3-0\">Fortunately<\/span><\/span><span data-offset-key=\"frq4a-4-0\">, it&#8217;s a common interchange method, so I have stuck with it.<\/span><\/div>\n<\/div>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"bn3re-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"bn3re-0-0\"><span data-offset-key=\"bn3re-0-0\">WPGraphQL is a plugin that allows you to expose data in your blog as a GraphQL schema. Once installed, it provides a single endpoint from which I can query for lots of different data at once. For simple integrations like a single feed of weights, this is likely overkill. But here it presents new interesting opportunities. I could one day, for example, create a no-extra-code <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/FriendFeed\"><span data-offset-key=\"bn3re-1-0\">FriendFeed<\/span><\/a><span data-offset-key=\"bn3re-2-0\">-like aggregation. Because no, I still haven&#8217;t realised it&#8217;s not 2008 anymore.<\/span><\/div>\n<\/div>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"7mphb-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"7mphb-0-0\"><span data-offset-key=\"7mphb-0-0\">WPGraphQL supports many other WordPress plugins. I could use these to do a lot of this with little to no code. But as we&#8217;ve already established, I&#8217;m a boilerplate masochist. <\/span><span class=\"veryhardreadability\"><span data-offset-key=\"7mphb-1-0\">Further down the file in which I register those post types, I also set-up the GraphQL types for it: <\/span><\/span><a href=\"https:\/\/github.com\/SimonS\/tdee-plaything\/blob\/06bf8d55849db72792c24dcb78ae20b3baa1ee31\/packages\/bdt-customisations\/lib\/register-weighins.php#L74\"><span data-offset-key=\"7mphb-2-0\">https:\/\/github.com\/SimonS\/tdee-plaything\/blob\/06bf8d55849db72792c24dcb78ae20b3baa1ee31\/packages\/bdt-customisations\/lib\/register-weighins.php#L74<\/span><\/a><\/div>\n<\/div>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"6dv94-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"6dv94-0-0\"><span data-offset-key=\"6dv94-0-0\">It is a bit repetitive, but it allows me to tune the schema and set up some of the fields I want to filter and sort by. <\/span><span class=\"hardreadability\"><span data-offset-key=\"6dv94-1-0\">It also gives me extra resilience &#8211; I can keep the APIs inline myself, instead of being at the mercy of plugin authors staying up to date with each other<\/span><\/span><span data-offset-key=\"6dv94-2-0\">. <\/span><span class=\"hardreadability\"><span data-offset-key=\"6dv94-3-0\">This generally isn&#8217;t a problem, but I have seen instances where one plugin in a dependency chain updates before the others follow<\/span><\/span><span data-offset-key=\"6dv94-4-0\">. <\/span><span class=\"hardreadability\"><span data-offset-key=\"6dv94-5-0\">This has created some dead hard to debug problems, sometimes only solvable by pinning to specific plugin versions<\/span><\/span><span data-offset-key=\"6dv94-6-0\">.<\/span><\/div>\n<\/div>\n<p><span style=\"font-family: var(--heading--font-family); font-size: var(--heading--font-size-h2); font-weight: var(--heading--font-weight); letter-spacing: var(--heading--letter-spacing-h2); background-color: var(--global--color-background); color: var(--global--color-primary);\">WordPress JSON Rest API<\/span><\/p>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"a5ee7-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"a5ee7-0-0\"><span data-offset-key=\"a5ee7-0-0\">I don&#8217;t know how well known it is, but WordPress has <\/span><a href=\"https:\/\/developer.wordpress.org\/rest-api\/\"><span data-offset-key=\"a5ee7-1-0\">an incredible REST API<\/span><\/a><span data-offset-key=\"a5ee7-2-0\">. <\/span><span class=\"adverb\"><span data-offset-key=\"a5ee7-3-0\">Seriously<\/span><\/span><span data-offset-key=\"a5ee7-4-0\">, a <\/span><a href=\"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\"><span data-offset-key=\"a5ee7-5-0\">really good API<\/span><\/a><span data-offset-key=\"a5ee7-6-0\">. <\/span><span class=\"veryhardreadability\"><span data-offset-key=\"a5ee7-7-0\">Without doing anything special, once you&#8217;ve turned it on, you can post into it (and read from it, if you&#8217;re a traditionalist) and it will act on those posts as if you were entering data into its admin interface<\/span><\/span><span data-offset-key=\"a5ee7-8-0\">. The only problem you need to solve is authentication. There are a billion plugins for this &#8211; from OAuth2 through to basic HTTP. <\/span><span class=\"hardreadability\"><span data-offset-key=\"a5ee7-9-0\">You should only use basic HTTP if you&#8217;re comfortable giving a third party service your username and password<\/span><\/span><span data-offset-key=\"a5ee7-10-0\">. (You should not be comfortable doing that, btw).<\/span><\/div>\n<\/div>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"5aruc-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"5aruc-0-0\"><span class=\"hardreadability\"><span data-offset-key=\"5aruc-0-0\">I use the fantastic <\/span><\/span><a href=\"https:\/\/wordpress.org\/plugins\/indieauth\/\"><span data-offset-key=\"5aruc-1-0\">IndieAuth<\/span><\/a><span class=\"hardreadability\"><span data-offset-key=\"5aruc-2-0\"> plugin &#8211; it&#8217;s a bit of a hangover from when I integrated everything with the <\/span><\/span><a href=\"https:\/\/indieweb.org\/WordPress\/Plugins\"><span data-offset-key=\"5aruc-3-0\">IndieWeb suite.<\/span><\/a> <span class=\"hardreadability\"><span data-offset-key=\"5aruc-5-0\">I <\/span><\/span><span class=\"adverb\"><span data-offset-key=\"5aruc-6-0\">ultimately<\/span><\/span><span class=\"hardreadability\"><span data-offset-key=\"5aruc-7-0\"> stepped away from that suite because all my customisations broke anytime the plugins updated<\/span><\/span><span data-offset-key=\"5aruc-8-0\">. I should <\/span><span class=\"adverb\"><span data-offset-key=\"5aruc-9-0\">probably<\/span><\/span><span data-offset-key=\"5aruc-10-0\"> switch out to the OAuth2 plugin at some point, but this works for me as it stands. <\/span><span class=\"hardreadability\"><span data-offset-key=\"5aruc-11-0\">You generate a token with a scope of what it can do in your WP instance, and then use that token anytime you need to use a privilege<\/span><\/span><span data-offset-key=\"5aruc-12-0\">.<\/span><\/div>\n<\/div>\n<p><span style=\"font-family: var(--heading--font-family); font-size: var(--heading--font-size-h2); font-weight: var(--heading--font-weight); letter-spacing: var(--heading--letter-spacing-h2); background-color: var(--global--color-background); color: var(--global--color-primary);\">IFTTT<\/span><\/p>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"6hgdf-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"6hgdf-0-0\"><a href=\"https:\/\/ifttt.com\/\"><span data-offset-key=\"6hgdf-0-0\">IFTTT<\/span><\/a><span data-offset-key=\"6hgdf-1-0\"> is a nice little service that pipes data between lots of different APIs. <\/span><span class=\"hardreadability\"><span data-offset-key=\"6hgdf-2-0\">It has connectors for both Withings and WordPress, although the WordPress one only covers basic post types<\/span><\/span><span data-offset-key=\"6hgdf-3-0\">. So I make heavy use of its &#8220;Make A Web Request&#8221; connector.<\/span><\/div>\n<\/div>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"uong-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"uong-0-0\"><span class=\"hardreadability\" style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\"><span data-offset-key=\"99kjv-0-0\">A previous iteration of this web connector sent a request to a relay lambda I created to pass through the access token<\/span><\/span><span style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\" data-offset-key=\"99kjv-1-0\">. But at the end of last year, IFTTT added the ability to create custom headers to your web requests. This means I can now retire that relay. I enjoy deleting code.<\/span><\/div>\n<\/div>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"1b046-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"1b046-0-0\"><span data-offset-key=\"1b046-0-0\">So now, my web request looks a bit like this:<\/span><\/div>\n<\/div>\n<ul>\n<li>URL: &#8220;<a href=\"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/bdt_weighin&quot;\">https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/bdt_weighin&#8221;<\/a><\/li>\n<li>Method: POST<\/li>\n<li>Content-Type: application\/json<\/li>\n<li>Additional Headers: <code>Authorization: Bearer {YOUR OAUTH TOKEN GOES HERE}<\/code><\/li>\n<li>Body:\n<ul>\n<li>\n<pre><code>{\r\n  \"meta\": {\r\n      \"weight\": {{Weight}},\r\n      \"weighin_time\": \"{{DateAndTime}}\",\r\n      \"body_fat_percentage\": {{FatMassPercent}}\r\n  },\r\n  \"status\": \"publish\"\r\n}\r\n<\/code><\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>I have that hooked up to the Withings connector. And now, any time I weigh in, data starts trickling into WordPress.<\/p>\n<h2>And that&#8217;s pretty much it<\/h2>\n<p>At this point, I have a database slowly filling up with my weigh-ins from Withings:<\/p>\n<p><a href=\"https:\/\/firebasestorage.googleapis.com\/v0\/b\/firescript-577a2.appspot.com\/o\/imgs%2Fapp%2Fsimonscarfe%2FIY3bGLuyZF.png?alt=media&amp;token=47484d9d-7b30-45f8-922a-71a0ce97734b\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"https:\/\/firebasestorage.googleapis.com\/v0\/b\/firescript-577a2.appspot.com\/o\/imgs%2Fapp%2Fsimonscarfe%2FIY3bGLuyZF.png?alt=media&amp;token=47484d9d-7b30-45f8-922a-71a0ce97734b\" alt=\"A screenshot of the wordpress admin interface with a list of weights and dates. Each contains a link simply saying &quot;Untitled&quot;.\" width=\"1186\" height=\"561\" \/><\/a><\/p>\n<p>It&#8217;s far from pretty, but it works. There is a TODO somewhere to fix that &#8220;Untitled&#8221; link. And it&#8217;s also queryable from GraphQL, in a much more digestible format:<\/p>\n<p><a href=\"https:\/\/firebasestorage.googleapis.com\/v0\/b\/firescript-577a2.appspot.com\/o\/imgs%2Fapp%2Fsimonscarfe%2FYk9VEONt9k.png?alt=media&amp;token=ce88f9dd-e277-445f-9930-258e316ee4b2\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"https:\/\/firebasestorage.googleapis.com\/v0\/b\/firescript-577a2.appspot.com\/o\/imgs%2Fapp%2Fsimonscarfe%2FYk9VEONt9k.png?alt=media&amp;token=ce88f9dd-e277-445f-9930-258e316ee4b2\" alt=\"A screenshot of the WPGraphQL interface showing a simple query for weighins\" width=\"1742\" height=\"820\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"49u4v-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"49u4v-0-0\"><span class=\"adverb\"><span data-offset-key=\"49u4v-0-0\">Admittedly<\/span><\/span><span data-offset-key=\"49u4v-1-0\">, this a fair bit of messing on, and it is <\/span><span class=\"adverb\"><span data-offset-key=\"49u4v-2-0\">absolutely<\/span><\/span><span data-offset-key=\"49u4v-3-0\"> too much work to justify a single content type. But I now have films, podcasts, and weigh-ins wired up and I intend to pull in more. I&#8217;m hoping that the benefits multiply as I add more stuff. <\/span><span class=\"hardreadability\"><span data-offset-key=\"49u4v-4-0\">But even if they don&#8217;t, the worst-case scenario is that I have a nice <\/span><\/span><a href=\"https:\/\/indieweb.org\/PESOS\"><span data-offset-key=\"49u4v-5-0\">PESOS<\/span><\/a><span class=\"hardreadability\"><span data-offset-key=\"49u4v-6-0\"> style backup for when services either shut down or <\/span><\/span><span class=\"adverb\"><span data-offset-key=\"49u4v-7-0\">arbitrarily<\/span><\/span><span class=\"hardreadability\"><span data-offset-key=\"49u4v-8-0\"> kick me off<\/span><\/span><span data-offset-key=\"49u4v-9-0\">.<\/span><\/div>\n<\/div>\n<div class=\"\" data-block=\"true\" data-editor=\"1jpom\" data-offset-key=\"7f1au-0-0\">\n<div class=\"public-DraftStyleDefault-block public-DraftStyleDefault-ltr\" data-offset-key=\"7f1au-0-0\"><span style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\" data-offset-key=\"fthgv-0-0\">And with that cheery thought, thanks very much for reading this far. I hope it is of some use to someone out there. <\/span><span class=\"hardreadability\" style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\"><span data-offset-key=\"fthgv-1-0\">If you want to dig into the implementation, it&#8217;s <\/span><\/span><span class=\"adverb\" style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\"><span data-offset-key=\"fthgv-2-0\">poorly<\/span><\/span><span class=\"hardreadability\" style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\"><span data-offset-key=\"fthgv-3-0\"> documented but available in my mini-repo<\/span><\/span><span style=\"background-color: var(--global--color-background); color: var(--global--color-primary); font-family: var(--global--font-secondary); font-size: var(--global--font-size-base);\" data-offset-key=\"fthgv-4-0\">. Some pointers of where to look:<\/span><\/div>\n<\/div>\n<ul>\n<li>The main repo. I need to rename it &#8211; <a href=\"https:\/\/github.com\/SimonS\/tdee-plaything\">https:\/\/github.com\/SimonS\/tdee-plaything<\/a><\/li>\n<li>The WordPress customisations &#8211; <a href=\"https:\/\/github.com\/SimonS\/tdee-plaything\/tree\/master\/packages\/bdt-customisations\">https:\/\/github.com\/SimonS\/tdee-plaything\/tree\/master\/packages\/bdt-customisations<\/a><\/li>\n<li>What a basic Node fetcher for this data looks like &#8211; <a href=\"https:\/\/github.com\/SimonS\/tdee-plaything\/blob\/master\/packages\/weight-fetcher\/src\/getWeighins.ts\">https:\/\/github.com\/SimonS\/tdee-plaything\/blob\/master\/packages\/weight-fetcher\/src\/getWeighins.ts<\/a><\/li>\n<li>Finally, how I display it in Astro &#8211; <a href=\"https:\/\/github.com\/SimonS\/tdee-plaything\/blob\/master\/packages\/bdt-astro\/src\/pages\/weight.astro\">https:\/\/github.com\/SimonS\/tdee-plaything\/blob\/master\/packages\/bdt-astro\/src\/pages\/weight.astro<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>My playground project started from a Google Sheet I found on Reddit to track my weight. I initially only wanted to play about and create some visualisations for it. But,eventually I stopped using that spreadsheet and, like most of my weight-loss escapades, got fat again. In the meantime, the playground developed into a hodgepodge of [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[32,23,1],"tags":[907,904,187,120,913,46,188,24,910],"class_list":["post-3693","post","type-post","status-publish","format-standard","hentry","category-personal","category-projects","category-technical","tag-apollo","tag-custom-types","tag-ifttt","tag-indieweb","tag-pesos","tag-weight","tag-withings","tag-wordpress","tag-wpgraphql"],"_links":{"self":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/3693","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/comments?post=3693"}],"version-history":[{"count":8,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/3693\/revisions"}],"predecessor-version":[{"id":3754,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/3693\/revisions\/3754"}],"wp:attachment":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/media?parent=3693"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/categories?post=3693"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/tags?post=3693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":3173,"date":"2021-11-12T00:20:32","date_gmt":"2021-11-12T00:20:32","guid":{"rendered":"https:\/\/breakfastdinnertea.co.uk\/?p=3173"},"modified":"2021-11-12T00:20:32","modified_gmt":"2021-11-12T00:20:32","slug":"tab-count-redux","status":"publish","type":"post","link":"https:\/\/breakfastdinnertea.co.uk\/2021\/11\/tab-count-redux\/","title":{"rendered":"Tab count redux"},"content":{"rendered":"<p><a href=\"https:\/\/breakfastdinnertea.co.uk\/2020\/08\/how-many-tabs\/\">A while back<\/a>, I documented a silly approach to trying to keep, erm, tabs on the way I use Firefox.<\/p>\n<p>This worked pretty well until I decided to have a play with <a href=\"https:\/\/vivaldi.com\">Vivaldi<\/a>, a power-user focussed browser based on Chromium. I ended up ripping out that functionality from my dotfiles.<\/p>\n<p>This evening I realised I still have the same problem, so had a go at reimplementing it for my new browser, to discover that it&#8217;s <a href=\"https:\/\/github.com\/SimonS\/dotfiles\/blob\/master\/hammerspoon\/lib\/tabs.lua\">far simpler now without having to hack<\/a> around with Firefox&#8217;s massive saved session file.<\/p>\n<p>Since I wrote that post, someone else has looked into taking the idea to the next level and <a href=\"https:\/\/dopedesi.com\/2021\/08\/10\/i-closed-a-lot-of-browser-tabs\/\">graphing it all in grafana<\/a>. Something that when I find some spare time, I might look at replicating (although I&#8217;m sure my solution will be far less elegant).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A while back, I documented a silly approach to trying to keep, erm, tabs on the way I use Firefox. This worked pretty well until I decided to have a play with Vivaldi, a power-user focussed browser based on Chromium. I ended up ripping out that functionality from my dotfiles. This evening I realised I [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[1],"tags":[181,15,178,180,43,179,182],"class_list":["post-3173","post","type-post","status-publish","format-standard","hentry","category-technical","tag-dotfiles","tag-firefox","tag-hammerspoon","tag-lua","tag-quantified-self","tag-tabs","tag-workflow"],"_links":{"self":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/3173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/comments?post=3173"}],"version-history":[{"count":1,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/3173\/revisions"}],"predecessor-version":[{"id":3175,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/3173\/revisions\/3175"}],"wp:attachment":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/media?parent=3173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/categories?post=3173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/tags?post=3173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":2922,"date":"2021-05-06T22:41:19","date_gmt":"2021-05-06T21:41:19","guid":{"rendered":"https:\/\/breakfastdinnertea.co.uk\/?p=2922"},"modified":"2021-05-06T22:41:19","modified_gmt":"2021-05-06T21:41:19","slug":"link-how-generative-music-works","status":"publish","type":"post","link":"https:\/\/breakfastdinnertea.co.uk\/2021\/05\/link-how-generative-music-works\/","title":{"rendered":"Link: How Generative Music Works"},"content":{"rendered":"<p>Amazing presentation, exploration, interactive&#8230; thing on generative music and the role of systems in creating that stuff.<\/p>\n<p>Beautifully put together.<\/p>\n<p>Link: <a href=\"https:\/\/teropa.info\/loop\">How Generative Music Works<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Amazing presentation, exploration, interactive&#8230; thing on generative music and the role of systems in creating that stuff. Beautifully put together. Link: How Generative Music Works<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[53,1],"tags":[199,198,66,201,200],"class_list":["post-2922","post","type-post","status-publish","format-standard","hentry","category-links","category-technical","tag-art","tag-generative-music","tag-music","tag-sonification","tag-visualisation"],"_links":{"self":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/2922","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/comments?post=2922"}],"version-history":[{"count":1,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/2922\/revisions"}],"predecessor-version":[{"id":2923,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/2922\/revisions\/2923"}],"wp:attachment":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/media?parent=2922"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/categories?post=2922"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/tags?post=2922"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":2911,"date":"2021-04-25T12:58:14","date_gmt":"2021-04-25T11:58:14","guid":{"rendered":"https:\/\/breakfastdinnertea.co.uk\/?p=2911"},"modified":"2021-04-25T12:59:30","modified_gmt":"2021-04-25T11:59:30","slug":"link-you-are-a-strange-loop","status":"publish","type":"post","link":"https:\/\/breakfastdinnertea.co.uk\/2021\/04\/link-you-are-a-strange-loop\/","title":{"rendered":"Link: You Are A Strange Loop"},"content":{"rendered":"<p><iframe loading=\"lazy\" title=\"You Are A Strange Loop\" width=\"580\" height=\"326\" src=\"https:\/\/www.youtube.com\/embed\/hQsnHkfs3sA?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<p>Fantastic video, amazing summary of the work of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Douglas_Hofstadter\">Douglas Hofstadter<\/a>. But rather than being a tl;dr, it has served to make me pick up and study <a href=\"https:\/\/www.goodreads.com\/book\/show\/24113.G_del_Escher_Bach\">G\u00f6del, Escher, Bach<\/a> again, I never made it through the whole thing first time around.<\/p>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=hQsnHkfs3sA\">Link &#8211; You Are A Strange Loop<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fantastic video, amazing summary of the work of Douglas Hofstadter. But rather than being a tl;dr, it has served to make me pick up and study G\u00f6del, Escher, Bach again, I never made it through the whole thing first time around. Link &#8211; You Are A Strange Loop<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[53],"tags":[134,196,197],"class_list":["post-2911","post","type-post","status-publish","format-standard","hentry","category-links","tag-book","tag-hofstadter","tag-philosophy"],"_links":{"self":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/2911","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/comments?post=2911"}],"version-history":[{"count":3,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/2911\/revisions"}],"predecessor-version":[{"id":2914,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/2911\/revisions\/2914"}],"wp:attachment":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/media?parent=2911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/categories?post=2911"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/tags?post=2911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":2895,"date":"2021-04-13T19:26:20","date_gmt":"2021-04-13T18:26:20","guid":{"rendered":"https:\/\/breakfastdinnertea.co.uk\/?p=2895"},"modified":"2021-04-21T12:13:12","modified_gmt":"2021-04-21T11:13:12","slug":"link-the-power-of-yes-if-iterating-on-our-rfc-process","status":"publish","type":"post","link":"https:\/\/breakfastdinnertea.co.uk\/2021\/04\/link-the-power-of-yes-if-iterating-on-our-rfc-process\/","title":{"rendered":"Link: The Power of \u201cYes, if\u201d: Iterating on our RFC Process"},"content":{"rendered":"<p data-content-field=\"title\">Awesome humanistic approach to RFCs from <a href=\"https:\/\/noidea.dog\/blog\">Tanya Reilly<\/a> &#8211; moving from binary &#8220;computer says no&#8221;s to a more iterative process by changing some simple wording.<\/p>\n<p data-content-field=\"title\"><a href=\"https:\/\/engineering.squarespace.com\/blog\/2019\/the-power-of-yes-if\">Link &#8211; <\/a><a href=\"https:\/\/engineering.squarespace.com\/blog\/2019\/the-power-of-yes-if\">The Power of \u201cYes, if\u201d: Iterating on our RFC Process<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Awesome humanistic approach to RFCs from Tanya Reilly &#8211; moving from binary &#8220;computer says no&#8221;s to a more iterative process by changing some simple wording. Link &#8211; The Power of \u201cYes, if\u201d: Iterating on our RFC Process<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[53,1],"tags":[194,195],"class_list":["post-2895","post","type-post","status-publish","format-standard","hentry","category-links","category-technical","tag-rfcs","tag-software-engineering"],"_links":{"self":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/2895","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/comments?post=2895"}],"version-history":[{"count":3,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/2895\/revisions"}],"predecessor-version":[{"id":2907,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/2895\/revisions\/2907"}],"wp:attachment":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/media?parent=2895"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/categories?post=2895"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/tags?post=2895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":2830,"date":"2021-01-29T23:12:18","date_gmt":"2021-01-29T23:12:18","guid":{"rendered":"https:\/\/breakfastdinnertea.co.uk\/?p=2830"},"modified":"2021-04-21T12:12:22","modified_gmt":"2021-04-21T11:12:22","slug":"link-letters-of-exclusion","status":"publish","type":"post","link":"https:\/\/breakfastdinnertea.co.uk\/2021\/01\/link-letters-of-exclusion\/","title":{"rendered":"Link: Letters of Exclusion"},"content":{"rendered":"<p>Jeremy is spot on here. Acronyms are such a simple way to keep someone needlessly out of the conversation.<\/p>\n<p>This is certainly something I need to work on within myself.<\/p>\n<p><a href=\"https:\/\/adactio.com\/journal\/17770\">Link &#8211; Letters of Exclusion<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jeremy is spot on here. Acronyms are such a simple way to keep someone needlessly out of the conversation. This is certainly something I need to work on within myself. Link &#8211; Letters of Exclusion<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[53,1],"tags":[],"class_list":["post-2830","post","type-post","status-publish","format-standard","hentry","category-links","category-technical"],"_links":{"self":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/2830","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/comments?post=2830"}],"version-history":[{"count":3,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/2830\/revisions"}],"predecessor-version":[{"id":2906,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/2830\/revisions\/2906"}],"wp:attachment":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/media?parent=2830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/categories?post=2830"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/tags?post=2830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}},{"id":2797,"date":"2021-01-08T18:25:51","date_gmt":"2021-01-08T18:25:51","guid":{"rendered":"https:\/\/breakfastdinnertea.co.uk\/?p=2797"},"modified":"2021-01-08T18:27:21","modified_gmt":"2021-01-08T18:27:21","slug":"link-letterboxd-love-letter","status":"publish","type":"post","link":"https:\/\/breakfastdinnertea.co.uk\/2021\/01\/link-letterboxd-love-letter\/","title":{"rendered":"Link: Letterboxd Love Letter"},"content":{"rendered":"<p>Jim Cummings directed and starred in two great films I&#8217;ve watched in the past year, <a href=\"https:\/\/letterboxd.com\/film\/thunder-road-2018\/\">Thunder Road<\/a> and <a href=\"https:\/\/letterboxd.com\/film\/the-wolf-of-snow-hollow\/\">The Wolf of Snow Hollow<\/a>. <a href=\"https:\/\/www.youtube.com\/watch?v=jFfnfWOVauM\">Here he talks about<\/a> why <a href=\"https:\/\/letterboxd.com\">Letterboxd<\/a> is such a great platform. I just subscribed at the end of last year, and going forward, I&#8217;ll definitely be keeping it going.<\/p>\n<p><iframe loading=\"lazy\" title=\"Letterboxd Love Letter\" width=\"580\" height=\"435\" src=\"https:\/\/www.youtube.com\/embed\/jFfnfWOVauM?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jim Cummings directed and starred in two great films I&#8217;ve watched in the past year, Thunder Road and The Wolf of Snow Hollow. Here he talks about why Letterboxd is such a great platform. I just subscribed at the end of last year, and going forward, I&#8217;ll definitely be keeping it going.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[53,32,127],"tags":[193,192],"class_list":["post-2797","post","type-post","status-publish","format-standard","hentry","category-links","category-personal","category-social-stream","tag-jim-cummings","tag-letterboxd"],"_links":{"self":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/2797","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/comments?post=2797"}],"version-history":[{"count":2,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/2797\/revisions"}],"predecessor-version":[{"id":2799,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/posts\/2797\/revisions\/2799"}],"wp:attachment":[{"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/media?parent=2797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/categories?post=2797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/breakfastdinnertea.co.uk\/wp-json\/wp\/v2\/tags?post=2797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}]