[{"content":"Hi, I\u0026rsquo;m James.\nProfessionally, I am a Senior Software Engineer.\nUnprofessionally, I do things and write about them here.\nContact me via the links above, or see what I\u0026rsquo;m up to now\n","date":null,"permalink":"https://jamesjarvis.io/","section":"About Me","summary":"\u003cp\u003eHi, I\u0026rsquo;m James.\u003c/p\u003e\n\u003cp\u003eProfessionally, I am a Senior Software Engineer.\u003c/p\u003e","title":"About Me"},{"content":"Professional #I am currently a contracting Senior Software Engineer, more to be announced soon.\nI\u0026rsquo;m always open to new connections, if you want to chat about finances, AI, engineering, or anything else - drop me a line!\nUnprofessional #I\u0026rsquo;ve just come back from a week in Guiyang, China with my girlfriend and her family. I\u0026rsquo;m a bit sad I couldn\u0026rsquo;t always write stuff for my blog easily without a whole laptop set up, so I\u0026rsquo;m attempting to run this a bit differently from now on!\nIf you haven\u0026rsquo;t seen, I have been recording a second of my life every day since I turned 18. You can see my experience here: One Second Every Day\n","date":"7 September 2026","permalink":"https://jamesjarvis.io/now/","section":"About Me","summary":"\u003ch2 id=\"professional\" class=\"relative group\"\u003eProfessional \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#professional\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eI am currently a contracting Senior Software Engineer, more to be announced soon.\u003c/p\u003e","title":"Now"},{"content":"","date":null,"permalink":"https://jamesjarvis.io/posts/","section":"","summary":"","title":""},{"content":"","date":null,"permalink":"https://jamesjarvis.io/tags/","section":"","summary":"","title":""},{"content":"From the 23rd June 2025 to 23rd June 2026.\nI\u0026rsquo;ve been spending less time in England during the summers as of late, so I went back to my roots and spent more time in and around London, with the occasional camping trip. I love England in the summer and would rather spend time escaping it during the winters!\nI\u0026rsquo;ve been upping the distance I cycle, with the occasional commute to and from London in nice weather, which I\u0026rsquo;ve absolutely loved getting back to. Some time exploring Poland with Filip (who had left the UK) was a highlight of the late summer. On the topic of friends leaving, Majuran, Caitlin and Raph later followed suit - seeking new experiences or their own brexit!\nHousework continued, with some rip outs from the garden, a new bathroom/carpet and using up some excess flooring at the parent\u0026rsquo;s house!\nAI has been a big influence this year - it\u0026rsquo;s been a love-fear relationship but I\u0026rsquo;m back into my high learning curve era, which I\u0026rsquo;ve been thoroughly enjoying! Not all things were hunky dory with the day-job and from November I had been looking to move on/receiving compelling offers elsewhere - should have done this sooner but I had been in a lower-risk mindset - something to leave behind for the future! I\u0026rsquo;m diving into this new year with some new faces, and a proper, exciting challenge ahead!\nTrips round central Europe with Raphael, Istanbul, Beijing, Chengdu, Chongqing and Wuhan with Feiyang, California with Konrad and Elisabeth and my first time Skiing! Happy I was attacking red routes by the end of it, but not everyone on our trip was so lucky 😬.\nAs I enter into my proper late-20s era I\u0026rsquo;m looking forward to focusing on maximising risk and seeking exciting adventures again. It\u0026rsquo;s been fun renovating the house but that project is nearly over (garden permitting), so my focus is turning back to a larger \u0026ldquo;misogi\u0026rdquo; for this year.\n","date":"23 June 2026","permalink":"https://jamesjarvis.io/posts/2026/06/27-years-old/","section":"","summary":"\u003cp\u003eFrom the 23rd June 2025 to 23rd June 2026.\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;ve been spending less time in England during the summers as of late, so I went back to my roots and spent more time in and around London, with the occasional camping trip.\nI love England in the summer and would rather spend time escaping it during the winters!\u003c/p\u003e","title":"27 Years Old"},{"content":" 🎥\nSince the 23rd June 2016, my 18th birthday, I have been recording one second of every day of my life.\nThis all started out after watching Cesar Kuriyama\u0026rsquo;s (link) fantastic TED talk (link) on his project of the same name and nature.\nI wouldn\u0026rsquo;t be lying if I said this has been one of my favourite projects I have ever embarked on in my life. As my care for social media has dwindled, this project has remained. I started this project with the goal of making myself accountable to do at least one worthwhile thing every day, and it has flourished into a way to reflect on my growth as a person.\nThis could mean anything, it could be that I visited a place/did something for the first time, or treated someone special to me, or just took time to enjoy the little moments of life.\nYou can watch my whole adult life back to back, or if you\u0026rsquo;d rather watch something a little bit cooler, you can check out some of my other videos on youtube where I have recorded some more ambitious moments. Or alternatively, one of my favourite videos of all time.\nDo one thing every day that scares you - Various Sources\n","date":null,"permalink":"https://jamesjarvis.io/tags/one-second-everyday/","section":"","summary":"\u003cblockquote\u003e\n\u003cp\u003e🎥\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eSince the 23rd June 2016, my 18th birthday, I have been recording one second of every day of my life.\u003c/p\u003e","title":"One Second Every Day"},{"content":"Bit late this year as I\u0026rsquo;m only posting this in April, but here are the reviews I wrote for the (12) books I read in 2025. For each book I read, I try and write a short (often scrappy) review as a way of remembering what I learnt from each book. I\u0026rsquo;ve also started writing more notes on books while I\u0026rsquo;m reading them, but those are more private.\nThe following has been extracted from a short script I reused from last years post, to export all of my reviews made in 2025.\nThe Lean Startup #5/5 ⭐\nI “read” this book as an audiobook, but I feel this does not do it justice, and I would have benefit more with a physical copy for later reference. The book repeats itself a bit, but has some valid case studies of companies who have benefitted from some of the “lean startup” approaches. Principally, the methods of “innovation accounting” seem to be key for ensuring a project is actually capturing a market fit, without wasting too much effort on untested hypotheses.\nEric mentions some other concepts that interest me, namely the concept of keeping known “innovators” on innovative work, with the assumption that some are better suited for the implementation, scale up, or maintenance types of work/management. This could perhaps explain the rarity of founder/ceos lasting much beyond the initial starting phase.\nInterestingly, in the epilogue Eric notes on the general unproductive nature of modern business enterprises. Focusing on the wrong metrics, spreading themselves too thin taking too long on too many projects that are ultimately doomed for failure lead to higher than required rates of failure.\nInvisible Women: Data Bias in a World Designed for Men #4/5 ⭐\nFundamentally a brilliant book to reshape your perspective on gender issues, from a bottom up approach. I\u0026rsquo;m not convinced all case studies mentioned are as simple as stated, but the root problem is indeed a lack of gender disaggregated data.\nSupercommunicators: How to Unlock the Secret Language of Connection #4/5 ⭐\n(not provided)\nThe Climate Book: The Facts and the Solutions #3/5 ⭐\nIt took me 9 months to finish this book. Why? On one hand, almost every page is covered in a stream of factoids, which I\u0026rsquo;ve either read before elsewhere, or seen elsewhere in this book! On the other hand, this book is effectively a collation of small articles + accounts from climate activists from around the globe, with a connecting piece written by Greta in-between sections of the book. This format was interesting for about the first hundred pages, but after a while became a bit of a slog to read through, with the last 40 feeling like repeats of the first.\nWhilst this isn\u0026rsquo;t the most flattering review, I want to make it clear that I agree with the majority of the book. Some suggestions are a bit delusional (yes, the richest nations must spearhead fossil fuel replacements through technological improvements, but pay reparations? That\u0026rsquo;s just not practical), but the overwhelming majority of the book is quite reasonable, if a little alarmist.\nA Philosophy of Software Design #4/5 ⭐\nOverall a brilliant collection of strong opinions that I generally think are good to follow, or to at least consider and oppose meaningfully. A similar resource for this is grugbrain.dev, a personal bible for me.\nIt’s very much a theoretical book for those with the luxury of time though, as allocating time for a good design is inherently expensive, something that unfortunately must be traded off with implementation work. John coins a term “tactical tornadoes” for those who go around improving systems quickly, rather than holistically. I believe this is somewhat childish, as anyone can and must become this persona in times of need.\nOverall I would recommend the talk John gives at Google instead of this book (find it on YouTube), as it provides much of the same core principles (deep interfaces, etc) in a more engaging and concise format.\nDesigning Data-Intensive Applications #4/5 ⭐\n(not provided)\nTaxtopia: How I Discovered the Injustices, Scams and Guilty Secrets of the Tax Evasion Game #5/5 ⭐\n(not provided)\nThe Big Con: How the Consulting Industry Weakens our Businesses, Infantilizes our Governments and Warps our Economies #3/5 ⭐\n(not provided)\nBreakneck: China\u0026rsquo;s Quest to Engineer the Future #4/5 ⭐\nThe “engineering state” vs the “lawyerly society”, an accurate portrayal of china and the US. Dan Wang’s analysis of these two superpowers cuts pretty deep, and isn’t very forgiving for either one. I agree in general with the principle diagnosis, but there isn’t a whole lot more detail other than that. I’m also not entirely sure I agree with the final remarks that china is unable to compete technologically with the USA, I fear that lead is being eroded quickly.\nMr Wilman’s Motoring Adventure: Top Gear, Grand Tour and Twenty Years of Magic and Mayhem #5/5 ⭐\nObviously impossible to fault a deliberate nostalgia trip.\nAppendix #I just reused and slightly modified the script from last year\u0026rsquo;s post - no point wasting good LLM tokens on something already done!\n","date":"5 April 2026","permalink":"https://jamesjarvis.io/posts/2026/04/year-of-books-2025/","section":"","summary":"2025 book reviews","title":"📚 Year of books 2025"},{"content":"","date":null,"permalink":"https://jamesjarvis.io/tags/reading/","section":"","summary":"","title":"Reading"},{"content":"","date":null,"permalink":"https://jamesjarvis.io/tags/thoughts/","section":"","summary":"","title":"Thoughts"},{"content":"TL;DR: Strap in and buckle up, it\u0026rsquo;s (maybe) about to get dicey in the economy\u0026hellip;\nWith hindsight, you can see ups and downs in the markets, in the present you can feel stresses in your life, or periods of time when you are flying high. But every so often you can just tell when you are about to fly into a particularly turbulent patch of air. Right now I think we have just started a new patch of uncertainty, outlined by 3 key forces:\nInflation Global Liquidity AI Inflation #Up until around about the beginning of March 2026, core inflation across most western economies had been higher than targets (specifically since 2022 after the fossil fuel crisis triggered by the Russian invasion of Ukraine), but generally trending downwards, and was assumed to reach the target level either the end of this year, or mid-2027.\nMarkets had generally priced this return to normality in - as had central banks - who were beginning to lower rates, and were assumed to approach approximately 3% by the end of 2026. Indeed, that is what I had also assumed, surely the majority of people can\u0026rsquo;t be wrong about something as important as this?\nThat was, until the USA received a booty call on February 28th from their good friends in Israel, telling them that Iran was days away from enriching weapons grade uranium, and conveniently all gathered in an accessible location. The USA subsequently launched \u0026ldquo;Operation Epic Fury\u0026rdquo; (funnier if you read it in Trump\u0026rsquo;s voice), blowing up Iran\u0026rsquo;s leaders and several military bases - including the nuclear enrichment plant. The original intention was that this would last maybe a week or two before Iran\u0026rsquo;s government fell and a new regime took over - but we\u0026rsquo;ve heard this story before, right? Naturally, Iran is not happy about this, and has been flinging bombs left right and centre towards it\u0026rsquo;s neighbours, and shutting down the Straight of Hormuz (a shipping lane where 20% of the worlds oil flows). Predictably, restricting global supplies of oil by ~20% is a guaranteed method of increasing oil prices.\nWhat\u0026rsquo;s interesting is that since markets generally run on the \u0026ldquo;TACO trade\u0026rdquo; principle (Trump Always Chickens Out), Oil futures hadn\u0026rsquo;t moved by much, as people generally assumed the war would be over within a few weeks with minimal lasting damage to oil infrastructure Well, the 3rd week has just come and gone, and as of this morning (19th March), Iran has managed to damage the Ras Lafan oil refinery quite substantially.\nI\u0026rsquo;ll leave it there, as it\u0026rsquo;s not particular fun to imagine the continuation of global conflicts, but I think it\u0026rsquo;s fair to say that this isn\u0026rsquo;t going to go away quickly or cleanly. At least Trump won\u0026rsquo;t be invading Cuba for the next few months - though if China manages to finally finish purging it\u0026rsquo;s military generals, Taiwan (and the semiconductor industry) could be in for a nasty surprise.\nWhat does this mean?\nInflation was assumed to fall back to 2-3% by end of year, and is looking more and more like we are in for a longer lasting period of 4-6% inflation for the foreseeable future. The markets unwinding their hopes and dreams, along with the friction of lower borrowing will have tangible consequences to investment.\nThis might not sound like much, until you realise that from 2021 -2027, cumulative persistent inflation (from ONS RPI figures) is looking like it will be around 46%. For reference, 2011-2017 was 16%, all whilst base rates were at a record low of 0.5%, as opposed to the 2020\u0026rsquo;s expected average of 4.5%.\nGlobal Liquidity #By this, I mean the accessibility of capital being invested around the world. We\u0026rsquo;ve pretty much covered it above already: higher interest rates will reduce borrowing.\nBut to labour the point, I want to briefly touch on the yen carry trade and private credit. Since the birth of Abenomics, the Japanese central bank has held rock bottom interest rates (at around -0.1%). Recently though it looks like Japan is going to start playing in the same ballpark as it\u0026rsquo;s mikata countries, and has already hiked it\u0026rsquo;s interest rates to 0.75%. So who cares? Well, Japan has for a long time been a great place to borrow money from, and invest the money elsewhere. Surprisingly, the currency was relatively stable throughout this process.\nThis form of infinite money glitch led to a lot of capital being available cheaply to purchase other assets, such as government bonds. As long as the asset being purchased yielded a bit above the ~0.5% it would have cost to borrow the underlying yen, along with some buffer for currency fluctuations, then there was a willing buyer for it. This kept up demand for relatively lower yield socks and bonds elsewhere, like the USA or UK. As this reverses, we are likely to see a reduction in demand for stocks and bonds, requiring higher yields and lower P/E multiples to make it make sense again for investors. Think: lower stock market valuations, higher interest rates. A quick aside from this - every time you hear \u0026ldquo;fiscal sustainability\u0026rdquo; being uttered from a government, remember that they also sell bonds. If your government\u0026rsquo;s borrowing gets more risky, it will annoyingly start to bring up your own borrowing costs. Them\u0026rsquo;s the rules.\nOur only hope for this is that the Swiss Franc remains cheap to borrow and relatively stable, to try and step in where the Yen has run away.\nI\u0026rsquo;d also like to touch briefly upon Private Credit. There have been a bunch of murmurings around default rates increasing as general interest rates have crept up, and economic growth has stalled. If we expect the minimal/no growth to be prolonged due to higher inflation as outllined above, then we would expect to see further defaults in this opaque slice of the financial sector.\nWhy does this matter? If you find out your favourite companies are leveraged on uneasy foundations, then we may start seeing some unwinding here. I\u0026rsquo;m not too concerned about defaults here, as these markets are so locked up and regulation is generally better that any fluctuations will be slow enough as to not cause too much damage. The general point I\u0026rsquo;m trying to make is that if this does wobble, then we will get a reduction in liquidity, and less grease in the economy is always less fun.\nAI #A fun collection of recent, lighthearted and totally-not-depressing quotes from our current overlords:\n\u0026ldquo;By the end of 2028, more of the world’s intellectual capacity could reside inside of data centers than outside of them.\u0026rdquo; - Sam Altman, CEO OpenAI\n\u0026ldquo;Half of all entry-level white-collar jobs could be eliminated within the next one-to-five years\u0026rdquo; - Dario Amodei, CEO Anthropic\n\u0026ldquo;10 times bigger than the Industrial Revolution – and maybe 10 times faster.\u0026rdquo; - Demis Hassabis, CEO Deepmind\n\u0026ldquo;Every job will be affected, and immediately. It is unquestionable… You’re not going to lose your job to an AI, but you’re going to lose your job to someone who uses AI.\u0026rdquo; - Jensen Huang, CEO Nvidia\nIf you glance past the obvious fact that these 4 are incentivised to say scary shit like this to pump their meme-valuations, then you realise, they are kinda right.\nThere\u0026rsquo;s a growing theory on the \u0026ldquo;K-shaped economy\u0026rdquo;, where the rich get richer, and the poor get poorer. This has broadly been happening in the western economies now ever since they started outsourcing labour abroad and debased their currencies from scarce metals, incentivising the speculation on essential commodities like housing. So what\u0026rsquo;s the difference?\nThe difference is a more recent phenomenon called \u0026ldquo;the permanent underclass\u0026rdquo;. If we hold these assumptions to be true\u0026hellip;\nAI will reduce the barrier to entry for \u0026ldquo;information economy\u0026rdquo; jobs, increasing supply and thereby reducing average wages for previously scarce jobs if employees can leverage AI to get a leg up. The best employees will be even better with AI, and thus able to command a higher salary and break out of the now-larger pool of employees in their sector to rise to the top. The lowest performing employees - if unable to keep up with the new influx of entrants into their sector, may end up being crowded out or stuck on salaries below their expectation. \u0026hellip;then we can expect either companies will indeed reduce headcount once they are happy with their newly more productive workforce, or they will just continue with the same structures as they currently have, but reduce wages in real terms to account for the additional cost of each employee once AI tokens are taken into account. Either way, this sure sounds like not fantastic news for:\nHouse prices (if average wages decrease or unemployment increases in economies heavily reliant on services) Wealth inequality (if the spoils increasingly get concentrated into fewer hands) Another way of thinking of this is that the risk-adjusted salaries for knowledge workers may be about to take a nosedive.\nPersonally, I\u0026rsquo;m of the latter opinion, and think broadly that AI will be good overall in terms of economic progress + increasing competition in the markets due to lower barriers to entry for new companies, but that in the medium term this will probably lead to a lot of instability across the incumbent knowledge economy companies, all while shovelling money into foundation model companies, once they remove their subsidies as soon as it becomes critical to productivity. But who knows? The productivity boosting effects may be overstated, as after all a machine cannot be held accountable for the decisions it derives, providing a natural cap on the takeover potential in employment.\nSummary #Phew, that was a bit bleak wasn\u0026rsquo;t it?\nThis is not financial advice, and I am not mystic meg, this is just the ramblings of an ambient observer who works in AI, travels to Asia a lot, and occasionally gambles his money in the stock markets. I barely know what\u0026rsquo;s happening tomorrow, but I wrote this to try and comprehend why it feels like the next 6 months are less certain than the last 6.\nThere\u0026rsquo;s still a potential universe that I\u0026rsquo;m rooting on where:\nThe doomer effect of AI is deemed to be overhyped, and either the majority of jobs remain unaffected but appreciative of the increase in productivity, or everyone is happy becoming plumbers and pothole fillers. Trump chickens out of the Middle East, China doesn\u0026rsquo;t actually want to take over Taiwan, and our silicon wafer/oil prices stay nice and steady Companies don\u0026rsquo;t default on their debt despite increased competition, or do but to a manageable amount that keeps money lubricating the economy Our governments stop running budget deficits, and borrow less, or at least become less risky borrowers Inflation comes back down to that nice magical 2% target, and we ease back into normality. History doesn\u0026rsquo;t repeat, but it does rhyme, the problem is I can\u0026rsquo;t tell where I heard this song from?\n","date":"19 March 2026","permalink":"https://jamesjarvis.io/posts/2026/03/buckle-up/","section":"","summary":"Strap in and buckle up, it\u0026rsquo;s (maybe) about to get dicey in the economy\u0026hellip;","title":"Buckle Up: My Economic Outlook for 2026+"},{"content":"","date":null,"permalink":"https://jamesjarvis.io/tags/projects/","section":"","summary":"","title":"Projects"},{"content":" I bought my first house at the age of 26 in late October 2024, almost exactly 1 year ago.\nI was up for a challenge, so even though I didn\u0026rsquo;t start looking out for a complete fixer-upper, I slowly convinced myself (and my girlfriend) to take a chance on a project house. I wrote a bit previously about how we went about searching for the right house here, but TL;DR is that we could have probably lost less money by renting 😂.\nSo, a year wiser older, after hundreds of hours of work demolishing, planning, painting, plumbing, laying floors, building a kitchen, bathroom and generally fixing-up, this is my advice\u0026hellip;\nPlanning is everything #When selecting flooring, I ordered 12 samples from 4 suppliers, I spent hours planning the herringbone sequence to make sure we didn\u0026rsquo;t get stuck. The kitchen went through 5 different designs, the bathroom went through 6 different designs, and the front fireplace took hours to just measure out.\nIt\u0026rsquo;s a bit annoying but once you\u0026rsquo;ve got experience with it, it\u0026rsquo;s fairly painless and well worth the investment.\nOutside -\u0026gt; in. Top -\u0026gt; bottom.\nSage advice when working on buildings is that you should always sequence your work outside -\u0026gt; in, and top -\u0026gt; bottom.\nRoof need fixing? Any leaky windows? Do those first before decorating the inside.\nWant to plaster the ceiling? Better do that before you paint the walls, and definitely do that before you lay a new floor.\nAnd any significant plumbing work should sequence neatly between outside work and any inner work, as you are definitely going to be ripping stuff apart in the process.\nYou can\u0026rsquo;t do it alone #I\u0026rsquo;ve been incredibly lucky to have taken advantage of a wonderful bunch of wilful workers from my family and friends. None of knew what we were doing, but they\u0026rsquo;ve all gotten stuck in and helped out massively.\nI\u0026rsquo;d like to thank Feiyang, Jason, Celia, Penny, Owen, Jon, Matthew, Brandon, Raphael, Filip and Sam for all of their help.\nInvest in tools #The first things I bought were a mitre saw and handheld combi drill. Alongside a stanley knife, some paint brushes/rollers and a borrowed handheld jigsaw I can\u0026rsquo;t imagine getting this far without them. I had to do almost a thousand cuts with that saw when laying the downstairs floor, and I\u0026rsquo;ve been through several thousand screws with the drill.\nA borrowed chainsaw was way better than the 50 year old wood saw I had for removing some trees, and the laser marker or dedicated scribing tools were far better than me eyeballing a cut.\nDouble/Triple the budget #I think the last year\u0026rsquo;s work (~100sqm of wood flooring, every room redecorated/furnished, all radiators replaced and a new kitchen / bathroom) cost me approximately ~£45k. I had originally thought ~£35k would cover everything comfortably including the gardens and some more furniture - turns out I was off by about double!\nTiming is also something not to be underestimated.\nHow hard can it be? # How hard can it be? \u0026ldquo;Fuck it, let\u0026rsquo;s give it a go\u0026rdquo;\nThis kind of attitude is the most important thing required (possibly more so than capital imho) when taking on a big project.\nYou have to be willing to jump into a domain you know absolutely nothing about, mess stuff up, and figure it.\nUnderstand what you are signing up for #This isn\u0026rsquo;t for the faint-hearted, it\u0026rsquo;s deliberately a massive pain in the arse and can be extremely stressful, not to mention economically exhausting.\nGetting taxed 43%, handing over stamp duty (worse tax ever), only to remember that 20% of your new kitchen\u0026rsquo;s cost is also going to HMRC is a bit of a kick in the teeth.\nWorking a full time job, then spending evenings and weekends on DIY whilst living without heating or running water in a dusty house, eating only microwaveable food gets old real quick - you do need to be slightly stupid to do this.\nNow the itch is scratched, I\u0026rsquo;m itching to do it again #\u0026hellip;and I\u0026rsquo;m not talking about loft insulation!\nIt has been a genuine pain in the ass sometimes, but I can\u0026rsquo;t help but have a huge sense of accomplishment sitting in my home built home office.\nI\u0026rsquo;m not looking to repeat some of the stress of the last year (I almost lost my eyesight twice due to stress!) but I am looking forward to taking on more big projects like this in the future.\nHopefully now, with a little more experience behind me!\nNo pirate builders here\u0026hellip; ","date":"1 November 2025","permalink":"https://jamesjarvis.io/posts/2025/11/a-year-of-house-renovations/","section":"","summary":"Lessons learnt from a whole year of house renovations","title":"🏚️-\u003e🏠 A year of house renovations"},{"content":"The Reality of UK Taxation in 2025 💰 #It\u0026rsquo;s a strange hobby to have - budgeting - but it\u0026rsquo;s something I quite enjoy framing as an optimisation problem.\nRecently there\u0026rsquo;s been quite a bit of chat about the burden of taxation in the UK, with several fiscal \u0026ldquo;black holes\u0026rdquo; being discovered by the government, attempting to be closed via higher taxation, and then somehow doubling in size the next year.\nThis is not going to be a specific opinion piece on taxation, but I wanted to provide some insight into what a typical PAYE employee as a Software Engineer in London may expect to pay in taxes in the UK.\nMy Personal Tax Breakdown #Let me start by being completely transparent about my tax situation in 2025. I\u0026rsquo;m not going to share exact figures, but I will share the percentages and structure that make up my total tax burden.\nFor the purposes of this breakdown, I am sampling an average month of the year, and counting \u0026ldquo;income\u0026rdquo; as any money that I am given by my employer in exchange for my labour. I\u0026rsquo;m not including an outlier month (like paying Stamp Duty or a Capital Gains tax )\nThis particular month is representative of the last year I\u0026rsquo;ve been living in my house, where I\u0026rsquo;ve reduced my \u0026ldquo;lifestyle\u0026rdquo; spend quite a lot, and have been dumping money into my recent house purchase. You\u0026rsquo;ll recognise there\u0026rsquo;s no \u0026ldquo;buffer/savings\u0026rdquo; section at the moment, 🤞 in a couple months I can swap the \u0026ldquo;renovation\u0026rdquo; section with \u0026ldquo;savings\u0026rdquo;, and I\u0026rsquo;ll probably post an update in a couple years, but the taxation breakdown will likely remain the same.\nIncome # Full time Employment, fairly standard Including employer\u0026rsquo;s pension contributions Expenses # Tax (43%) National Insurance (12%) Note: This includes Employers National Insurance, because ultimately I pay for this. Income (25%) Consumption/VAT (4%) Council (2%) Savings/Investments (21%) Pension Housing (20%) Mortgage Interest (15%) Mortgage Capital Repayments (5%) Lifestyle (13%) Eating Out/Groceries House Renovation This section has been tight for a while now, and will increase after House Renovation (~10%) has finished. Bills (2%) Gas/Electricity/Phone/Wifi Transport (1%) TfL The Tax Reality #The taxes I\u0026rsquo;ve included in this are:\nNational Insurance Contributions Employers National Insurance Contribution Income Tax Council Tax VAT Insurance Premium Tax Capital Gains Tax (currently negligible from my amounts) I haven\u0026rsquo;t included:\nImport tariffs Road Tax Any other erroneous tax on specific items that I didn\u0026rsquo;t want to calculate Total Tax Burden as an individual: ~43% Total Cost of Living: ~67%\nI\u0026rsquo;m not going to get too political, but if you assume my situation is fairly standard, and you assume that an economy is just the sum of its population, then it looks an awful lot like the UK economy is 43% government, about 30% housing, and around 3% the stuff you actually see and do.\nWhat if I were a business? # There are some tax benefits that for some reason are only available to corporations, so I thought - what if I was a corporation?\nDisclaimer: I\u0026rsquo;m not an accountant, and this is a bit of a stretched example relying mainly on the fact that expenses can be tax deductible, and completely ignoring the impact of import taxes, sales taxes, employment taxes, private health insurance etc that would be incurred.\nBut the general idea of it is, if an expense is vital for a company, it should be deducted from the tax liability of that company. Whereas if an expense is vital for a person, it cannot be tax deductible.\nInterestingly, you could arguably question whether an employee\u0026rsquo;s income tax should ultimately just fall as a consumption tax on human capital for a corporation (i.e. Employers NI), but as the incentive should be to have companies employing people, I think this is hard to justify.\nTax burdens as a corporation: ~13% Total Cost of Existence: ~36%\nLooking Forward #At the time of writing, the UK is preparing itself for a further round of tax increases in the UK (as opposed to cutting spending, reforming blockers to economic growth, or accruing further debt).\nNobody knows quite what the expected tax increases will be, but they are generally expected to tip into the \u0026ldquo;too much\u0026rdquo; category, risking some civil unrest.\nMost people in the UK have absolutely no idea how much tax they are spending, or the inequality of taxation for an individual compared to a corporation - especially not to the extend that an individual with a certain level of wealth can engineers themselves into being taxed as a corporation, hence avoiding a 43% tax burden and decreasing their proportional cost of existence.\nI am personally hoping for (though not expecting):\nSimplification of the tax system + reducing regulatory barriers to growth See: UK Foundations Whitepaper outlines several blockers. Better public understanding of the true cost of government Even better, a reduction in wasteful or too-generous public spending Policies that address wealth inequality and social mobility See: Fairer Share as one potential tax change targeting \u0026ldquo;council tax\u0026rdquo; reform. But my concern is that we\u0026rsquo;ll see more of the same: hidden tax increases, blissful ignorance of state inefficiencies, corporate tax cuts, and a growing burden on the average worker.\nWhat\u0026rsquo;s your experience with taxation? Is it fairer/worse in your country? I\u0026rsquo;d love to hear your thoughts on the current system and what changes you\u0026rsquo;d like to see. Better yet, message your representative politicians.\n","date":"24 August 2025","permalink":"https://jamesjarvis.io/posts/2025/08/uk-tax-burden-2025/","section":"","summary":"A deep dive into my personal tax burden in the UK for 2025, and concerns about the future of taxation for average UK taxpayers.","title":"💰 My UK Tax Burden in 2025: A Personal Finance Reality Check"},{"content":"","date":null,"permalink":"https://jamesjarvis.io/tags/personal-finance/","section":"","summary":"","title":"Personal Finance"},{"content":"Why I wanted to join incident.io 🔥 #In May 2025 I joined the AI team here at incident.io, in search of new and exciting engineering challenges.\nIt’s now been just over 2 months, so I thought I’d share some of my thoughts on why I decided to join incident.io out of all options available, and how reality has compared to my expectations.\nI want to be a part of the AI revolution #Fun fact: I\u0026rsquo;ve been interested in AI since I watched Iron Man 2 as a wee lad and saw the \u0026ldquo;Jarvis\u0026rdquo; personal assistant, and I\u0026rsquo;ve wanted to be a part of building that ever since.\nI went on to university to take a bachelors in CS with an Artificial Intelligence specialism, though the dream plateaued there - owing to the heavily fintech oriented job market in London.\nSince GPT-3 dropped in late 2020, it\u0026rsquo;s been increasingly obvious that generative AI is sooner or later going to be generating more stuff than humans ever could.\nI believe the outcome of this is not that Software Engineers are going away, but that they will be shipping exponentially more code.\nEvery engineer knows more code == more bugs, and more bugs == more incidents.\nThis frankly necessitates incident management to get proportionally more productive as coding output does. Enter incident.io.\nThe team has aura # I\u0026rsquo;ve been wowed by the output and engineering presence of the incident.io team for a couple of years now, most recently the series on prompt engineering and latency reduction.\nA personal goal of mine has been to write more, speak more, and ultimately just become a better builder - outside of just programming.\nSeeing how almost engineer has the experience, autonomy and support to not only build amazing things, but also share their experience online or at conferences, I was hooked - I want to learn as much as possible from these lot.\nMost of all, I want to be one of them.\nFrom how people in the London tech scene spoke of incident.io, it was also clear that the engineering team radiates Aura 🧑‍🌾, people spoke very highly of their achievements.\nThat\u0026rsquo;s always a good sign.\nHow have I found it so far? #Rewarding #I love working on a tangible project.\nWhat that means, is I like to see the direct impact my input will have on something.\nIt may sound like a small thing, but at some companies, it could take weeks or months before you start to receive feedback on a shipped product.\nOn my third day, I was chatting with an engineer from one of our largest clients about an (albeit small) feature I had shipped to them.\nYou don\u0026rsquo;t get that kind of feedback loop in most places.\nI\u0026rsquo;ve joined into the AI team here at incident.io, where we are working on building an AI SRE, a feature that feels absolutely magical to see in action.\nWe are planning ambitiously, changing priorities ruthlessly, and shipping ultra-fast.\nOn my 60th day, I presented at all-hands the results of the Alpha-release of one of our upcoming AI SRE features that will help manage communications to incident stakeholders on your behalf.\nThe early feedback we have had from our recent release of @incident chat has been extremely positive, and the feedback from our alpha customers on in progress features is extremely promising!\nThe hype is absolutely real.\nCompetition is fierce #The vision from above is crystal clear to others at the forefront of AI adoption, that as the rest of software development gets a massive boost in productivity, incident response needs an equivalent amount of love.\nWhilst growth at incident.io is very good, the prospect of an AI SRE it too tempting for our competitors to just ignore - everyone is going after this goal at a breakneck pace.\nThe competition are well staffed, well funded, and have a similar focus.\nSo we are going to work our socks off to outcompete, out of raw talent and (imho) a better vision of what a complete incident resolution product should be.\nStrong values; crazy productivity #At incident.io, (especially in the AI team) we have an unlimited budget to spend on AI tools that can improve productivity, with the only requirement that you share your findings in our #ai-chat channel.\nTo prepare for this blog post, I asked my current favourite AI tool Claude Code to research current blog posts and mention any current themes, so how did I do?\n⏺ Based on my research of incident.io\u0026#39;s blog, I found several posts from new employees sharing their experiences. Here\u0026#39;s what I discovered: Key Blog Posts About New Employee Experiences: 1. \u0026#34;Why I joined incident.io as VP of Engineering\u0026#34; - Norberto Lopes reflects on his decision after two weeks 2. \u0026#34;Why I joined an engineering team of 6\u0026#34; - Martha\u0026#39;s 6-month reflection on joining the small team 3. \u0026#34;My first week at incident.io\u0026#34; - Megan Batterbury\u0026#39;s week-by-week breakdown 4. \u0026#34;How I started talking to customers in my first week\u0026#34; - Gabriel\u0026#39;s intern experience 5. \u0026#34;They\u0026#39;re not kidding about the pace...\u0026#34; - Macey Baker on shipping 2 features in her first week 6. \u0026#34;Five unexpected lessons from my first two months as an intern\u0026#34; - Lucas\u0026#39;s reflection after 2 months Common Themes Across Posts: Pace \u0026amp; Impact: Everyone mentions the incredible speed - shipping features within days/weeks, not months Trust by Default: New employees get meaningful responsibilities immediately, even interns Customer Focus: Direct customer interaction from day one, including interns Team Culture: Emphasis on collaboration, learning, and supportive environment Technical Philosophy: Simple, intuitive architecture that enables quick onboarding Learning Opportunities: 1:1s, documentation, and systematic support for growth Funnily enough, this maps quite well with our company values:\n⚡ Raise the pace ☀️ Trust by default ✨ Make it magic 🤝 Find a way 🏆 Win together On the second week of my time here, we all jetted off to Greece for the annual offsite (I know, brilliant timing on my part!).\nWith absolute certainty, I can tell you that everyone at this company demonstrates these 5 (quite un-corporate tbh) qualities in abundance.\nI can only apologise as I repeat this in my own post\u0026hellip;\nEveryone pulls weight #The team here is dense with talent, and everyone is marching in the same direction.\nI\u0026rsquo;ve been fortunate enough to have worked in 2 teams already at incident.io, and everyone I have worked with has been extremely helpful, willing to repeat things until they get through my thick skull, and capable of contributing to pretty much any part of the codebase at a moments notice to ship improvements to the product.\nThis does induce a healthy amount of imposters syndrome - nobody is entirely immune from this, and its healthy to admit. Though over the last couple of months of onboarding I’ve been ramping up on larger and larger projects, building back the confidence that drives my passion for engineering.\nI\u0026rsquo;m with some of the best engineers in my career, all heads down focusing on how we can build an industry leading product that can intercept and resolve production incidents as they come up, before you wake up.\nIf you also want to be a part of the future of incident response at incident.io, we are hiring!\n","date":"31 July 2025","permalink":"https://jamesjarvis.io/posts/2025/07/why-i-decided-to-join-incident.io-and-my-impressions-so-far/","section":"","summary":"In May 2025 I joined the AI team here at \u003ca href=\"http://incident.io\" target=\"_blank\" rel=\"noreferrer\"\u003eincident.io\u003c/a\u003e, in search of new and exciting engineering challenges.","title":"🔥 Why I decided to join incident.io and my impressions so far"},{"content":"From the 23rd June 2024 to 23rd June 2025.\nI’m already in China when I kick this year off, finishing off another grand tour of new cities with Feiyang and her parents.\nHeading back into another brilliant British summer I have a few small holidays and then it’s time for Penny and Owen’s wedding! A beautiful day and I have never been happier for my little sis.\nThis year I decided my goal would be to buy a property, as I was tired of not getting value for money from London landlords. I viewed dozens of places as I pondered between a central flat or suburby house, doer upper or turn key.\nIn August my grandads health took a severe turn for the worse, and he unfortunately passed away, surrounded by his loved ones. With all my grandparents now gone I’m saddened to lose another cockney voice from the streets.\nThe first of my school friends got married! I travelled up with the same lads I did DofE with almost a decade ago, but budgets and time keep us apart now. Weeks later one of my best mates moves to Australia in search of a better life.\nI finally move in to my first house! Kicking off months of constant daily improvements, as my wonderful family and friends all chip in to help the DIY renovation efforts. Over the Christmas break Feiyang heads back to China while I replace all the radiators and floors in the house, closely followed by a whole kitchen.\nMy hardworking aunty finally retires, whilst I have a little think and decide its time for me to change jobs. Feiyang and I take a few weeks out to travel South Korea and a bit more of China. I\u0026rsquo;ve joined the local tennis club, but you wouldn\u0026rsquo;t have known if you saw me play!\n","date":"23 June 2025","permalink":"https://jamesjarvis.io/posts/2025/06/26-years-old/","section":"","summary":"\u003cp\u003eFrom the 23rd June 2024 to 23rd June 2025.\u003c/p\u003e\n\u003cp\u003eI’m already in China when I kick this year off, finishing off another grand tour of new cities with Feiyang and her parents.\u003c/p\u003e","title":"26 Years Old"},{"content":"This is the story of how I built (and how you can build) a cute little display that shows you a new famous quote every day.\nThe idea #Way back in December 2022, my family decided that this christmas we would DIY each other some presents.\nFor a few years prior we had been experimenting with a secret santa to alleviate some of the pains of having everyone each buy 10 gifts to give to each person, but when we realised most people\u0026rsquo;s \u0026ldquo;wants\u0026rdquo; aren\u0026rsquo;t within a £50 budget, we gave the \u0026ldquo;make something and give that\u0026rdquo; idea a go.\nMy unlucky victim adoring cousin was to be the recipient of whatever thing I could make, and since she was at the time completing her doctorate, enjoyed reading, and had recently started programming, I thought I would try and make something that combined all of those ridiculously nerdy attributes into one:\nThou shalt build a display to show a new quote every day\nI\u0026rsquo;m sure the baby Jesus would\u0026rsquo;ve preferred one of these over some frankincense and myrrh any day.\nI had come back home for christmas and thought I could start work on making a V2 of my original e-ink display (read more about that one here), so this particular type of display was on my mind, and it fit perfectly with the goal of having a dumb little trinket sitting on a desk for months at a time without having to charge the battery.\nThe parts list # Screenshot of the parts list on pimoroni.com You could 100% do this project for about half the price if you source components on AliExpress / some other site.\nHowever, I only had 1 week left to finish this project by the time I finally stopped procrastinating, I have always had a positive experience with Pimoroni and their shipping is normally only a couple days.\nBesides, I wouldn\u0026rsquo;t have to pull my hair out working out how to build a driver for this display, since the Badger2040 project is pretty well documented, and has a lot of support on their GitHub.\nThe full parts list is:\n1x Pimoroni Badger 2040 (link) 1x LiPo battery pack 1200mAh (link) 1x LiPo Amigo (link) Back of the Badger2040 with battery attached Charging the battery pack with LiPo Amigo You can choose to instead power the badger via a AAA battery pack, but I\u0026rsquo;m not a fan of disposable batteries.\nP.S. Pimoroni if you want to sponsor me I have my eyes on a few other things from your site! 😉\nThe quotes list #For this project I had about ~1.5MB of memory to play with on the Badger2040, so I couldn\u0026rsquo;t have too much data sitting around. Though I did want enough to cover the goal of 1 quote a day, for as long as it takes to forget the other quotes, so around 2,040 quotes should do, assuming 200 characters per quote this\u0026rsquo;ll fit in under 0.5MB.\nFinding the quotes was quite hard, as most sites only host useless stuff like \u0026ldquo;Top 50 inspirational quotes\u0026rdquo;.\nGoodreads had probably the best corpus of material over on https://www.goodreads.com/quotes, and if I were doing this again I would just write a quick script that scraped that page and trim by length of quote so it still fit on the small display.\nThere\u0026rsquo;s even a whole GitHub project for this: github.com/maxhumber/quote, and nowadays a quick bit of ChatGPT / using your brain audible groan could get you this data within a few moments.\nHowever, back in my last minute frantic I used a now-defunct API to scrape this data quickly. You can see my efforts at github.com/jamesjarvis/secret-santa but don\u0026rsquo;t bother running it as the API seemed to have gone offline sometime in the last few years.\nDisplaying quotes on the Badger2040 #Pimoroni offer a really good repository for writing software for the Badger2040.\nThey have an embedded-systems subset of Python with very low resource consumption called \u0026ldquo;micropython\u0026rdquo;, that allows you to run pretty reasonable scripts on the RP2040 chip.\nCombining that with an alright badger2040 library to interact with the buttons and display, and it\u0026rsquo;s a good solid base point to write simple apps for the Badger2040 product.\nYou can view the full source at github.com/jamesjarvis/badger2040 but the gist of it is the display_random_quote function, where we seek to a random line in a \u0026ldquo;quotes\u0026rdquo; file, and write it to the display, wrapping around the screen.\ndef display_random_quote(): display.set_pen(15) display.set_thickness(FONT_THICKNESS) display.clear() # Open the quotes file. quotes = open(text_file, \u0026#34;r\u0026#34;) n = random.randint(0, TOTAL_QUOTES) for i in range(n): quotes.readline() current_quote_json = json.loads(quotes.readline()) # Read a full line and split it into words. words = current_quote_json[\u0026#34;content\u0026#34;].split(\u0026#34; \u0026#34;) lines = [] latest_line = \u0026#34;\u0026#34; for word in words: latest_line_length = display.measure_text(latest_line + word, TEXT_SIZE) if latest_line_length \u0026gt;= TEXT_WIDTH: lines.append(latest_line) latest_line = \u0026#34;\u0026#34; latest_line += word latest_line += \u0026#34; \u0026#34; lines.append(latest_line) lines.append(\u0026#34;- \u0026#34; + current_quote_json[\u0026#34;author\u0026#34;]) row = 0 for line in lines: y = int(row * text_spacing) + int(text_spacing // 2) + TEXT_PADDING display.set_pen(0) if row + 1 == len(lines): # last line is the author, make a bit bolder. display.set_thickness(FONT_THICKNESS+1) display.text(line, TEXT_PADDING, y, TEXT_WIDTH, TEXT_SIZE) row += 1 display.update() If I were to ever productionise this, I would look to find a more efficient way to scan through the file to a random line, as that\u0026rsquo;ll probably save a bit of energy.\nUploading code to the Badger2040 #Normally when you get this kind of project it\u0026rsquo;s all dependent on some random toolchain you haven\u0026rsquo;t installed on your machine, and it\u0026rsquo;s so out of date that you\u0026rsquo;ll spend your first day just debugging how to program the damn thing.\nWith Pimoroni\u0026rsquo;s Badger2040 repo (forked to github.com/jamesjarvis/badger2040) you can exploit the repo\u0026rsquo;s Github actions to build the necessary compiled target for you!\nThe development flow was:\nClone badger2040 repo Make small changes (adding a quotes.py example App) Push commit to github and wait for the Action to build Download the badger2040-micropython-with-badger-os.uf2 file from the Action artifact list Connect badger2040 to computer in boot mode (hold down boot/usr and press rst button as it is plugged in) Copy over the downloaded .uf2 file from step 4 to the badger Bobs your Uncle The outcome # Quotes Display refreshing to new quote The outcome is quite nice if I say so myself.\nIt lasts a few weeks on a single charge, and when you press an up or down button it\u0026rsquo;ll display a new random quote. A simple but effective desk ornament.\nI never took a photo of the original I gave to my cousin, and I\u0026rsquo;m fairly sure it was \u0026ldquo;lost\u0026rdquo; quickly after christmas, so I made myself another one 😄\n","date":"7 February 2025","permalink":"https://jamesjarvis.io/posts/2025/02/secret-santa-a-quote-a-day-e-ink-display/","section":"","summary":"\u003cp\u003eThis is the story of how I built (and how you can build) a cute little display that shows you a new famous quote every day.\u003c/p\u003e","title":"Secret Santa: A Quote-a-day E-Ink display"},{"content":"Building on my last year getting properly back into reading, this is a continuation of my reflections. For each book I read, I try and write a short (often poorly worded) review as a way of remembering what I learnt from each book.\nIn my last post on this topic here, I reflected on my 2024 New Years resolution:\nFor 2024, one of my primary goals is to write more, and to write more publicly (fail fast, thanks Levels).\nNow I didn\u0026rsquo;t do too badly, writing 12 posts to this blog, but I\u0026rsquo;d like to see that go up in the next year, so consider this the continuation of that goal.\nThe following has been extracted from a short script I co-authored with the help of ChatGPT, to export all of my reviews made in 2024.\nThis year, I read and reviewed 20 books, a little down on last years 30, but I feel happy with it.\nThe Lean Startup #5/5 ⭐\nI “read” this book as an audiobook, but I feel this does not do it justice, and I would have benefit more with a physical copy for later reference. The book repeats itself a bit, but has some valid case studies of companies who have benefitted from some of the “lean startup” approaches. Principally, the methods of “innovation accounting” seem to be key for ensuring a project is actually capturing a market fit, without wasting too much effort on untested hypotheses.\nEric mentions some other concepts that interest me, namely the concept of keeping known “innovators” on innovative work, with the assumption that some are better suited for the implementation, scale up, or maintenance types of work/management. This could perhaps explain the rarity of founder/ceos lasting much beyond the initial starting phase.\nInterestingly, in the epilogue Eric notes on the general unproductive nature of modern business enterprises. Focusing on the wrong metrics, spreading themselves too thin taking too long on too many projects that are ultimately doomed for failure lead to higher than required rates of failure.\nBullshit Jobs: A Theory #4/5 ⭐\nDon’t let the intriguing title fool you, this is a genuinely well researched and collated series of thoughts. Caveat here that I have not read deeply into this subject so this book is my first experience with reading on the economics of undervalued human labour.\nThe good: This is a subject that, from what I can tell, does not get the attention it deserves in popular economics. Graeber is clearly one of the most active thinker on this subject, and is able to highlight almost all questions regarding the phenomena at least that I could think of. Lots of interesting/humorous anecdotal case studies throughout the book, from people who have written to the author expressing their opinions of the social value of their own jobs. His theory on the inverse correlation between social value and monetary compensation for a job is a shared belief, but the reasoning appears to favour a belief that the subject is being rewarded by the virtue of producing social value in the job itself, rather than purely monetary value from the salary. It is full of classic case studies of middle-management and bureaucracy bloat, which if not particularly helpful, is somewhat cathartic to read.\nThe bad: Early on, the author makes a point regarding the rise of “services” jobs in both the UK and India. In the UK graph he notes on the increasing proportion of labour working in the service sector, whereas in the India graph he draws comparison on the increasing proportion of the services sector as part of India’s GDP. Whilst I don’t think the point is entirely lost here, the clearly handpicked statistics, each focused on different metrics of an economy, hurt his image as an unbiased commentator somewhat. As the author does foreshadow, the last chapter on Universal Basic Income and his opinions as an anarchist do also devalue the book somewhat. I need more information on UBI to consider whether any of the expressed opinions are valid or not.\nThe God Delusion #4/5 ⭐\nIt’s hard to review this book as I’m just not the target audience for it. I’m already an atheist, so what were presumably controversial topics for religious folk, sailed right past me without much meaning. Thats not to say it hasn’t got merit, some chapters had interesting perspectives on various aspects of life. The ones I remember most being:\nThe analogy of “binker” And the suggestion that religion is a natural continuation of infantile support mechanisms (imaginary friends) The perspective of death Mark Twain “I do not fear death. I had been dead for billions and billions of years.” William Shakespeare’s seven stages of man, suggesting a character dies multiple times throughout their life. The Theseus Paradox, at the atomic level. The thin slice of the universe we are capable of perceiving With the imagery of a burkha, the notion that humans are only capable of experiencing and understanding a subset of all distances, colours, forces. Although I did find that reading as an audiobook, the narrators had a “smarter than thou” tone, intentionally divisive for what purpose I can only assume, to anger some, and deepen a connection with others. I don’t think this is particularly constructive considering the objective nature of the book, so it could have done with a different style of writing/narrating.\nWhat If?: Serious Scientific Answers to Absurd Hypothetical Questions #5/5 ⭐\nLearnt absolutely nothing and loved every page of it.\nNomad Century: How to Survive the Climate Upheaval #3/5 ⭐\nPessimistic, alarmist, but most likely true. Vince argues that humanity is not on track to achieve our climate goals, and will end up with 4-5 degrees of global warming by the end of the century. The implication of this, is that:\nall low lying areas will flood, including the likes of Bangladesh, Netherlands, London, New York and more. forest fires will threaten drier locations with lots of vegetation huge parts of the global south will become uninhabitable due to heat waves all farmland will either become unviable, or will be forced to change their crops Given this set of events, Vince warns us of an incoming mass migration event, from south to north. Large chunks of the book are dedicated to reminding us of the short lifespans of borders, and what is a nation anyway?\nBut I wonder if this is even realistic? Assuming continued population growth, and the loss of both farmland, and existing cities, can we even practically migrate almost 4 billion people into Siberia?\nNot to mention the clear devastation this will bring to whatever remaining wildlife or wilderness in this new frontier, I fear we will only ever be delaying the inevitable. A side chapter on forcing meat free diets, cramming people into high rise buildings and seeding the atmosphere with sulphates appear to reveal the truly dystopian vision the author is subconsciously trending towards.\nI think this is a good explanation of the problem we are likely to face, but draws the wrong conclusion about what a solution might be. A better solution for humanity as a whole, is to shift to sustainable living practises, and increase the efficiency of its use of resources, not to increase the population by any means necessary. For an explanation of some of these ideas, I would recommend the book “degrowth”\nUnnatural Causes: The Life and Many Deaths of Britain\u0026rsquo;s Top Forensic Pathologist #5/5 ⭐\nImagine finding a dead body. Imagine cutting said body up, folding back its tissues, pulling apart organs, re-assembling some part from bags, and imagining all possible ways this person could have died. Pretty horrific, right? Well, it would be for me, and as it turns out, roughly 23,000 postmortems later, it has turned out to be a bit traumatic for Dr Richard Shepherd as well.\nA lifetime in public service, doing the necessary, difficult work most cannot imagine themselves attempting leaves us with this fascinating, very well written memoir.\nNot for the squeamish, but a great read nonetheless as an exploration into one of those topics you’d never think about reading otherwise.\nPersonally my favourite tales are of the doctor’s passion for flying over Kent, something I can fail to accurately reflect the emotion of. In addition, his overall passion for humanity, be it a lonely elderly woman, or a boat full of party-goers. He seems to have truly cared about uncovering the truth for each one, but you can hear the weight of these experiences cumulating on his mind.\nSurrounded by Idiots #3/5 ⭐\nOne of those books that you naturally doubt, and requires a bit more practise to grasp the value of classifying people into one of four colours. The colours are certainly easy to remember, and have a hilarious, “inside-out”-esque character assigned to each one, but this only further accentuates how doubtable it is. If you are willing to take this information at face value, and be a bit crude in your own application of these classifications onto your fellow person, then I could see this being useful as a quick behavioural filter. However I wouldn\u0026rsquo;t consider this an idiot-proof guide and your mileage may vary vastly.\nRed Memory: The Afterlives of China\u0026rsquo;s Cultural Revolution #4/5 ⭐\nNot quite a historical account, not quite a modern day opinion piece, this book leaves the reader wanting to learn more about why such a country could do such things. Some scenes feel lifted straight from 1984, and the author does a good job with helping you to connect to each of the subjects, whose stories she portrays. If this were fiction, it would be interesting at best and yes, Orwellian. Given this is not fiction however, it fills you with sadness and a just a hint of fear for the future. As history is slowly erased during the course of the book, it ends noting that the Party and it\u0026rsquo;s leaders are going nowhere.\nBrave New World #2/5 ⭐\nIn my opinion, this book is not a must read science fiction novel. It has its merits, and the key themes of the book are laid out in plain terms roughly 3/4 of the way through the book in a narrative style, much like some other sci fi novels. However, the reason for the low review is that these themes are neither particularly challenging, nor investigated in an insightful manner.\nYou’ll find the first quarter, and subsequent snapshots of the book to revolve around the somewhat cheap and perverse obsession of communal sexual acts, chiefly amongst children. It serves well as a shock factor, but goes so far as to kind of bore you of the books main plot. The themes of automated and replicated human reproduction are interesting, but really don’t explain the necessity of “orgy porgy” to the plot. Similarly, the manufactured genetic class system, and free distribution of psychedelics are a great concept to explore, but explain nothing about how the “savages” are really so different, given their reliance on religion.\nOverall whilst I’m sure this was groundbreaking for its time, it is one of those books that I might recommend once you have more or less exhausted the science fiction genre.\nSpeed \u0026amp; Scale: A Global Action Plan for Solving Our Climate Crisis Now #4/5 ⭐\nJohn Doerr puts forth the most digestible, compelling plan for combatting climate change in his book/call to arms: Speed and Scale.\nWell structured and pragmatic, the first half of the book covers the “what” needs to be done to reduce CO2e emissions, partitioned by sector. The remainder of the book has a deep dive into the “how” we may hope to achieve this.\nWell referenced with Objectives and Key Results acting as anchors to serve a trackable plan, the only concerning part is that since this book was published, the world is already falling behind on a number of these OKRs.\nI greatly admire Doerr for his determination to have some form of impact against the threat of climate change. Whilst some of his investments (QuantumScape, Beyond Meat) are more of a joke than serious companies, the idea holds true. We must invest more and move quicker.\nThe Manager\u0026rsquo;s Path: A Guide for Tech Leaders Navigating Growth and Change #5/5 ⭐\nI recommend this book to anyone even vaguely interested in managing and growing any organisation, though this may particularly apply to technical ones.\nFournier presents a well thought out breakdown of the challenges, her experience as well as snippets of wisdom from other leaders for various levels of management (mentorship, middle, senior leadership).\nMy key takeaway would be to focus on defining and following the values of your particular chunk of an organisation. I have been fortunate enough to see many of these recommendations play out to varying effects at the companies I have worked for, so I will consider this another slither of knowledge to compare my experience against.\nThat being said, I myself have not yet had the chance to truly live most of these experiences, so I would imagine your mileage may vary.\nRework #3/5 ⭐\nThe introduction starts out by saying “a lot of people…call us a fluke” and then goes on to abashedly gloat about their apparently flukey success. The book is written in this quite abrasive style, but does make a lot of sense, particularly for smaller organisations optimising for low effort, high value output.\nSome things stand out:\nMake small, frequent decisions Half of a product is better than a half arsed product Avoid long todo lists Avoid absolute terms where unnecessary (can’t, must, everyone, no one) ASAP is inflationary Focus on customer service Don’t hire too fast Teaching is the best method of marketing Motivation has a short shelf life Overall, I think it’s worth a read, and I’m appreciative that they kept the book so short (supposedly halving the length between first and last draft). However take it with a pinch of salt, I doubt this will work for all industries/sizes of companies.\nThe Power of Geography: Ten Maps That Reveal the Future of Our World #4/5 ⭐\nSome books you pick up, and wonder why you bother. The first paragraph passes you by without a second thought, and no value is apparent to you. This was not one of those books. I’m not completely blind to geopolitics, but this book presents a great way to reframe how you view a country. Its assets, liabilities and risks are made up of the natural landscape, resources and neighbouring interests.\nTim himself sounds like an interesting character, and I’m left hungry for more of his world takes!\nThe Price Of Money: How to prosper in a financial world that’s rigged against you #4/5 ⭐\nGreat to read, but I forgot to take notes so now I\u0026rsquo;ll need to read again! I\u0026rsquo;m glad the book was kept short, as the value of this book is really just to reset your views on money, investments and the mentality of governments/central banks. It doesn\u0026rsquo;t need to be long to achieve that.\nI miss studying Economics!\nTL;DR: Money does not have any intrinsic value, it is simply a form of value exchange. Money\u0026rsquo;s value used to be tied to it\u0026rsquo;s scarcity, but since the 1970\u0026rsquo;s has been allowed to increase it\u0026rsquo;s own supply. QE and monetary policy are generally levers accessible to governments but have debatable impact. Limited monetary policy and inflation via QE are the likely strategy for the next 20 years, so the classic wisdom of owning assets still generally applies.\nOne of the best things from this book comes down to the fact that most people in charge of central banks simply don\u0026rsquo;t know for sure what effect anything they do will have. Economics only makes sense in hindsight, and normalcy bias will generally mean you do not take action on any signs you may think you see.\nOutlive: The Science \u0026amp; Art of Longevity #4/5 ⭐\nI started reading this based on the recommendation of one of my good friends whilst on a road trip around Washington State. I won\u0026rsquo;t say this has changed my life, but as we drove around partaking in the Standard American Diet, we couldn\u0026rsquo;t help but enjoy learning more about this subject. With my cynical hat on, I can tell that the author is probably just on the wrong side of obsessive over their health, but their final chapter around mental health proves they are at least aware of their condition.\nIf there is anything to take away from the book, it would have to be the general idea of \u0026ldquo;Training for the Centenarian Decathlon\u0026rdquo;. Pick 10 activities you would like to keep doing once you are 100 years old (carrying groceries a few streets, walking around a park, picking up a child etc), then multiply the efforts a few times and train at this level consistently. Sleep more, exercise more, avoid sugar, eat more protein, avoid alcohol. Lifespan != healthspan, and there is no point on living too 100 if you have no reasonable social activities to share your life with, so take all things in moderation, and live a little!\nThe World for Sale: Money, Power and the Traders Who Barter the Earth’s Resources #4/5 ⭐\nA genuinely gripping read for one not previously aware of this shadowy, essential, industry. The high level narrative is that these swashbuckling charismatic corporate figures have managed to corner effectively the entire worlds natural resources through sheer force of will. The detailed accounts of who and how are what keep you turning pages, whether it be tales of foreign policy individuals smoking cigars with Fidel Castro early in to the morning, or a savvy trader propping up entire failed states (or the rebellions overthrowing them).\nThis whole industry is a fascinating eye opener into how the world works, and the unimaginable riches that can be grabbed if the right information is known to the right people. The last chapter begins to map out the demise of the traditional giants as fiddly things like “ethics” start to get in the way (leaving space for some less regulated alternative traders from China to take the mantle).\nOverall, a great read, and some intriguing insight on how traditional finance, plus speculative financial instruments can provide massive accelerants to what I assumed would have been fairly boring, perfectly competitive markets. Highly recommend for anyone interested in macroeconomics!\nConversations on Love #3/5 ⭐\nI doubt anyone who has spent time thinking about love will learn anything new, or discover anything about themselves.\nThe value of this book is in understanding that others have experienced the same situations, with some wonderfully personal stories. For that purpose, it offers a great casual read exploring the experiences of others, but I wouldn’t recommend if you are expecting insight. This isn’t one of those topics where you are likely to learn anything new.\nRadical Candor: Be a Kickass Boss Without Losing Your Humanity #3/5 ⭐\n“Radical Candor” is a phrase I have heard several times over the course of my current career, by some of the most well respected engineers and managers I have yet encountered. So, I thought this would be worth a read.\nThough this is not the first management / organisational book I have read, it deserves a space on the bookshelf. Scott recites her experiences from a whirlwind career starting on the streets of Moscow recruiting diamond cutters, to a pivotal time in the wholly radical early days of google, and scaling a sales team for Adsense, one of the most profitable products of the 21st century.\nFrom these experiences, Scott believes she has found some key characteristics of business leadership that function particularly well. Note that this is less of a groundbreaking new theory, and more of a reminder of good practices that have worked well in the low context, collaborative and progressive western companies, such as google.\nSome key points that can be translated elsewhere:\nMost employees are either “rockstars” (steady performers) or “superstars” (high growth). It is important to have a mix of both, and to reward equally. Nuances between “Radical Candor”, “ruinous empathy”, “obnoxious aggression” and “manipulative insincerity”, primarily with mistaking radical Candor for obnoxious aggression. The rest, such as the need for immediate, direct feedback, and continually seeking constructive criticism, is echoed in many other books of this genre.\nThe Trading Game #5/5 ⭐\nWhat would you do, if you had one shot, one opportunity? The first half of this book reminds you of Eminem, a scrawny white kid attempting to rise against adversity in an industry he adored, whilst battling with the grips of poverty. Gary Stephenson is a unique economist and financial trader, with a compelling series of videos and articles outside of this book to his name, detailing his famous bets against economic recovery and the root cause: wealth inequality.\nIf you are interested in this side of the story, then the first 2/3rds of the book are for you. Having grown up also in east London, admiring the bankers herding their way through the city, I connected with this side of Gary’s story. The economic theory woven through this book is apparent, as he imperfectly competes over each rung in the ladder, towards achieving his first trading job.\nThough his career was short, it was agonisingly intense. The equal but opposite side of his bell curve career at Citi offered a peek into the mind of a man descending into burnout induced insanity.\nWhat would you do, for 4 million pounds?\nFor Gary, this appeared to mean a loss of all human connection, all humanity even.\nJust ask yourself, what would you do? When would you escape?\nThoroughly recommend if you are interested in viewing a slightly different take on a career in trading in the financial markets.\nNever Split the Difference: Negotiating As If Your Life Depended On It #4/5 ⭐\nTypically when picking up these kinds of books, the reader has a particular motivation in mind. Negotiating a salary or a deal at work, practising their haggling at the local boot fair, or attempting to get the best price during a house purchase.\nThis book as far as I can tell, gives some fantastic tips for negotiation, as long as the following constraints apply:\nThe negotiation must be between 1:1 parties. These tactics rely on approaching a deadline, deliberately drawing out the negotiation, and engaging in conversation first to best know your adversary. The negotiator must become comfortable with emotionally manipulating their adversary. These tactics again rely upon an ability to emotionally connect with your adversary, and then convince them they are sucking you dry. Depending on the reader’s disposition, they may either extract some extremely valuable advice from this book, that they can immediately start to practice with. Or, they will likely feel incapable of applying some of these techniques in their own life.\nEither way, this book does have some interesting perspectives on negotiation, with a few case studies from the author’s own career, that make for excellent filler material all can appreciate.\nAppendix #Code for parsing Goodreads data export # ","date":"16 January 2025","permalink":"https://jamesjarvis.io/posts/2025/01/year-of-books-2024/","section":"","summary":"2024 I read a bit less","title":"📚 Year of books 2024"},{"content":"When building an application, you need to know who your users are, and what they should have access to.\nThat’s when “Authentication” (are you who you say you are?) and “Authorisation” (are you allowed to do this thing?) come in to play.\nThese are two similar but separate problems, each with their own challenges.\nMost developers don’t build their own authentication systems. It\u0026rsquo;s not-secure, and more importantly - not part of your products\u0026rsquo; core offering. Thus, it\u0026rsquo;s just not worth the effort / time you\u0026rsquo;ll spend building it.\nAuthorisation is something traditionally built by developers in-house (Just like authentication was a few years ago), but in recent years, there are emerging options in the market that allow you to implement it without building it yourself.\nIn this article we are going to focus on authorisation (authorization for my U.S. friends), covering a step by step integration and implementation with an example Key-Value service, written in the Go programming language.\nWe are going to build our own naive authorisation system to get a feel for how it all works, and compare this with a production-ready implementation from Permit.io.\nWhat is \u0026ldquo;Authorisation\u0026rdquo;? #At some point in the development of any \u0026ldquo;System\u0026rdquo; with \u0026ldquo;Users\u0026rdquo;, you will need some method of determining:\nIs this \u0026ldquo;User\u0026rdquo; actually allowed to do the thing they are trying to do?\nThis is inevitable, whether the \u0026ldquo;system\u0026rdquo; you are building is physical (i.e. a Hotel), or virtual (i.e. a Social Network website).\nFor any sensitive action, we need to make sure that the person performing that action is allowed to do the action. If the scenario is as simple as if request.IsAuthenticated(), then congrats, you can end here, you have \u0026ldquo;authorisation through authentication\u0026rdquo;. But, this means that any user who can authenticate into your system, is also authorised do to anything in your system. For everything but a simple POC, this won\u0026rsquo;t fly.\nIf the scenario is more complex, i.e. if request.GetUser() not in authorisedUsers, then you are now able to restrict access to parts of your system, but you have now inherited a complexity: you need to store and maintain a list of every single user allowed to perform every action in your system. If you have 100 users, and 5 actions in your system (a very small example), this can become a headache to manage very quickly, let alone if you have \u0026gt;1000 users, or more actions to perform.\nTo simplify this, we can instead assign abilities to an abstract concept (Roles), this is where RBAC comes in.\nWhat is \u0026ldquo;Role Based Access Control\u0026rdquo; (RBAC) #Rather than storing a map of user -\u0026gt; allowed actions, or actions -\u0026gt; allowed user, let\u0026rsquo;s abstract this a little. Introducing the concept of \u0026ldquo;Roles\u0026rdquo;: A label you can pin to a whole bunch of users, and check against that.\nBenefits:\nLow cardinality You may have millions of users, but you\u0026rsquo;ll rarely need more than a few dozen \u0026ldquo;roles\u0026rdquo; This is why the CIA has \u0026ldquo;security clearance levels\u0026rdquo;, rather than granting access to information individually Easier to manage Easier to remove 1 \u0026ldquo;role\u0026rdquo; from 1 \u0026ldquo;user\u0026rdquo;, than updating the 1000s of actions a \u0026ldquo;user\u0026rdquo; may have access to This is why the CIA has \u0026ldquo;security clearance levels\u0026rdquo;, rather than granting access to information individually Semantically relevant Wherever possible, as a developer your goal is to simplify the system Example: Seeing that a user has the roles of [\u0026quot;intern\u0026quot;, \u0026quot;employee\u0026quot;, \u0026quot;admin\u0026quot;], it is clearer to spot the problem than seeing a user with access to [\u0026quot;receptionDoor1\u0026quot;, \u0026quot;receptionDoor2\u0026quot;, \u0026quot;cafeDoor3\u0026quot;, \u0026quot;floor4Door4\u0026quot;, \u0026quot;floor2Door3\u0026quot;], if \u0026quot;floor4Door4\u0026quot; is your server room Now that we understand the benefits of simplifying access control through the use of “Roles” users can be assigned to, let’s look at a demo application in Golang.\nExample Application #Let\u0026rsquo;s keep this super simple, and say that you have 2 endpoints to an application that allows users to save and retrieve key-value pairs:\nGET /v1/map/{key} POST /v1/map/{key} Each \u0026ldquo;user\u0026rdquo;, once authenticated, can be in one of two groups (\u0026ldquo;roles\u0026rdquo;):\nreader writer \u0026ldquo;Readers\u0026rdquo; can GET, \u0026ldquo;Writers\u0026rdquo; can POST, a user can have either or both of these roles.\ni.e. If I am a user (”Alice”), and I have the ability to write, I should be able to write a value of “world” to a key of “hello”.\nIf I am a user (”Bob”), and I have the ability to read, I should be able to see the value “world” under key “hello” that alice has just written for me.\nHowever, since Bob cannot write, he should not be able to override the value of “world”, nor should he be able to add any new values to our system.\nTo show how to implement this sort of authorisation control to a system, we are going to start off with a working key-value service for the above, without any access controls in place.\nWe will then build our own RBAC system given the users and roles we know about and integrate it with our system.\nTo top it all off, we are then we are going to showcase a scalable, production ready setup built using the Permit.io Golang SDK for RBAC.\nFirst, our Service setup:\npackage service // StorageClient provides access to a key-value map. type StorageClient interface { Get(key string) (value string, exists bool, err error) Set(key string, value string) error } // Service is an implementation of the key-value service type Service struct { storage StorageClient } // Get accepts a user and a key, and returns either the value associated with that key, // or an error if encountered. func (s *Service) Get(userID string, key string) (string, error) { value, ok, err := s.storage.Get(key) if err != nil { return \u0026#34;\u0026#34;, fmt.Errorf(\u0026#34;error getting value for key:%q error:%w\u0026#34;, key, err) } if !ok { return \u0026#34;\u0026#34;, fmt.Errorf(\u0026#34;error getting value for key:%q error:%w\u0026#34;, key, Error_NOTFOUND) } return value, nil } // Set accepts a user, key and value, and will attempt to set the value with that key, // or return an error if encountered. func (s *Service) Set(userID, key, value string) error { err := s.storage.Set(key, value) if err != nil { return fmt.Errorf(\u0026#34;error setting value for key:%q error:%w\u0026#34;, key, err) } return nil } Using our StorageClient interface, and the Get and Set application APIs, we have the ability to read and write any key-value pair we desire, without any authorisation logic to safeguard access. Get allows any user to extract the value for a given key, and Set allows any user to write the value at a given key.\nSimple, right? Now let’s try and implement our own RBAC!\nRestricting Access to our API #Remember, we now want to restrict access to Get and Set based on whether the given user is a \u0026ldquo;reader\u0026rdquo; or a \u0026ldquo;writer\u0026rdquo;. To build an API for checking the authorisation level of the user, we really only care about whether they are or aren\u0026rsquo;t authorised to access the resource. A good API for this, therefore, would enable us to supply our userID, and their intended action, and allow the API to resolve the user\u0026rsquo;s roles, and the permitted roles for each action, and return us true or false, depending on whether the user can or cannot perform the intended action.\nA good interface for this then, would follow:\n// AccessClient enables the ability to check authorisation for a given user. type AccessClient interface { Check(userID string, action string) bool } Popping this into our implementation is quite simple, as an initial validation step for our API:\nfunc (s *Service) Get(userID string, key string) (string, error) { if !s.access.Check(userID, \u0026#34;get\u0026#34;) { return \u0026#34;\u0026#34;, Error_UNAUTHORISED } ... } func (s *Service) Set(userID, key, value string) error { if !s.access.Check(userID, \u0026#34;set\u0026#34;) { return Error_UNAUTHORISED } ... } For this AccessClientto work however, we need an implementation\u0026hellip;\nDIY: In-memory RBAC #Those with a keen eye for Go would notice we have defined our authorisation API first, ignoring any eventual implementation. This is a good way to focus on your API first, without getting too bogged down with how your API implementation should actually work.\nTo get our heads around the problem, we can look into a simple implementation of this API, using an in-memory map to keep track of our users, the actions that may be performed, and the roles permitted to complete those actions.\nOur objects User and Action :\n// User is a user object, containing the roles this user is a member of. type User struct { Roles []string } // Action is an action that can be performed, along with the roles allowed to perform this action. type Action struct { PermittedRoles []string } Our Check function, needs to answer the question of Does the given user have a role, that is permitted to complete the given action? In reality, this manifests quite easily as a reverse lookup:\n// Check returns true if the user is allowed to perform the action, false otherwise. func (a *Access) Check(userID string, actionID string) bool { user, ok := a.users[userID] if !ok { return false } action, ok := a.actions[actionID] if !ok { return false } for _, role := range user.Roles { if slices.Contains(action.PermittedRoles, role) { return true } } return false } In the above, if the user exists, the action exists, and at least one of the user\u0026rsquo;s roles match with at least one of the action\u0026rsquo;s permitted roles, then we return true, and the action is permitted!\nConversely, if the user is unknown, or the action is unknown or none of the user\u0026rsquo;s roles match with any of the action\u0026rsquo;s permitted roles, then we return false, and the action is denied, at which point an UNAUTHORISED error is returned to the the caller.\nFlaws with DIY #In practise however, I don’t recommend you to actually use the above DIY approach. DIY-ing your own authorisation implementation is something that should really only be attempted by the Googles of this world, as there is a good chance you simply will not have the resources to do it correctly, let alone quickly.\nFocus on outsourcing the implementation of all elements of your system that are not specifically critical to the value you intend to provide:\nDon\u0026rsquo;t build your own database Don\u0026rsquo;t build your own container orchestrator Don\u0026rsquo;t build your own authorisation system Don\u0026rsquo;t do anything that you don\u0026rsquo;t have to\u0026hellip; Alternative: RBAC with permit.io #Permit.io is an authorisation as a service provider, with a whole suite of features that cover use cases from this simple example, all the way to the largest enterprise applications with millions of users and umpteen levels of complexity.\nThis solution was easy enough to work with that I could build this example implementation in \u0026lt;30 mins from reading through their docs (ChatGPT could probably do it faster though!)\nConveniently, the Permit Golang SDK also has it\u0026rsquo;s own Check function, that is similar to ours:\n// PermitClient is the permit.io client interface. type PermitClient interface { Check(user enforcement.User, action enforcement.Action, resource enforcement.Resource) (bool, error) } For our case, to provide a drop in replacement to our DIY solution, we are going to wrap this function. The models in this API are:\n\u0026ldquo;User\u0026rdquo; Identifiers for a given user to the system \u0026ldquo;Action\u0026rdquo; The intent for a given call to \u0026ldquo;Check\u0026rdquo;, in our case this will be \u0026ldquo;get\u0026rdquo; or \u0026ldquo;set\u0026rdquo; \u0026ldquo;Resource\u0026rdquo; The domain for which this action is being performed against In our simple example, we do not have a need for this \u0026ldquo;resource\u0026rdquo;, as we only have a single map domain, but this allows for other rich customisations later on, such as namespaced maps with alternative access controls. Our wrapper:\n// Check returns true if the user is allowed to perform the action, false otherwise. func (p *Permit) Check(userID string, actionID string) bool { user := enforcement.UserBuilder(userID).Build() action := enforcement.Action(actionID) resource := enforcement.ResourceBuilder(\u0026#34;map\u0026#34;).Build() allowed, err := p.permitClient.Check(user, action, resource) if err != nil { fmt.Printf(\u0026#34;permit error: %s\\\\n\u0026#34;, err.Error()) return false } return allowed } Our final application #If you want to dive deeper into the code, and run the application yourself (with both DIY and Permit based authorisation), you can follow the steps on github.com/jamesjarvis/rbac-example.\nOur test data includes the following users, and their roles:\nUserID Role: reader Role: writer alice Y Y bob Y charli Y Our server is a HTTP server running on port :8080, so we can perform a simple test by setting a value \u0026ldquo;world\u0026rdquo; for key \u0026ldquo;hello\u0026rdquo; as user \u0026ldquo;alice\u0026rdquo;:\n$ curl -H \u0026#34;User: alice\u0026#34; -X POST \u0026lt;http://localhost:8080/v1/map/hello\u0026gt; -d \u0026#34;world\u0026#34; \u0026gt; world Fantastic, this works! Alice is indeed able to write to the POST endpoint, as they have the role of \u0026ldquo;writer\u0026rdquo;. We can see since they also have the role of \u0026ldquo;reader\u0026rdquo;, they should also be able to GET this value again:\n$ curl -H \u0026#34;User: alice\u0026#34; -X GET \u0026lt;http://localhost:8080/v1/map/hello\u0026gt; \u0026gt; world But what if Bob tries to read this value?\n$ curl -H \u0026#34;User: bob\u0026#34; -X GET \u0026lt;http://localhost:8080/v1/map/hello\u0026gt; \u0026gt; UNAUTHORISED Bob cannot perform any GET calls, because Bob does not have the \u0026ldquo;reader\u0026rdquo; role, which is required to perform the \u0026ldquo;get\u0026rdquo; action. Bob can, however, perform POST requests.\nSimilarly, our final user Charli does not have the \u0026ldquo;writer\u0026rdquo; role, preventing them from accessing the POST endpoint, but since they are a \u0026ldquo;reader\u0026rdquo;, they can still perform GET requests:\n$ curl -H \u0026#34;User: charli\u0026#34; -X GET \u0026lt;http://localhost:8080/v1/map/hello\u0026gt; \u0026gt; world Summary #Authorisation is the challenge of answering “Is this User actually allowed to do the thing they are trying to do?”\nBy focusing on Roles, rather than Users (RBAC), application writers can greatly simplify both their application logic, and the operation of their application.\nWe have built a working HTTP Key-Value service in Golang, that allows a user to GET (read) and POST (write) values at a given key.\nWe have then extended this application to restrict access to these endpoints based on whether the user has the associated role of “reader” or “writer”.\nWe have explored the pros and cons of two different implementation to this RBAC solution:\nDIY using just the Golang standard library Using Permit.io as our Authentication as a service provider Phew!\nBy this point, you should have a decent understanding of how a simple Role Based Access Control (RBAC) implementation can be integrated into your application.\nFocusing on \u0026ldquo;roles\u0026rdquo; rather than \u0026ldquo;users\u0026rdquo;, provides an easier abstraction for both yourself as a developer, but also your system administrators, and ultimately, your users themselves.\nFinally, another word of caution.\nFocus on outsourcing the implementation of all elements of your system that are not specifically critical to the value you intend to provide:\nDon\u0026rsquo;t build your own databases Don\u0026rsquo;t build your own container orchestrators Don\u0026rsquo;t build your own authorisation systems Do focus on the core offering of your product Thanks for reading!\n","date":"4 November 2024","permalink":"https://jamesjarvis.io/posts/2024/11/role-based-access-control-rbac-authorisation-in-golang-with-permit.io/","section":"","summary":"What is \u0026lsquo;Authorisation\u0026rsquo;, and how to implement a working solution with Permit.io","title":"Role Based Access Control (RBAC) Authorisation in Golang with Permit.io"},{"content":"I have a bit of a confession to make.\nI am horribly, frustratingly, embarrassingly\u0026hellip; indecisive.\nIt took me 4 months to decide on a new bike earlier this year, when I desperately needed one to commute. It took me 3 months the year before that to decide on a new coat for the winter, when I had no waterproofs at all. It took me over a month to decide on a replacement car when mine was crashed in to, and I was out of my most useful mode of transport. But these were comparatively small purchases. What if I were to continue acting the same, but apply this to the largest financial decision of my entire life?\nSo, we arrive at March 2024. The beginning of my search.\nWhy buy? #For context, I have been living primarily in East London (Wapping/Limehouse) for the last 4 years, in flats of varying quality.\nThe rent was roughly ~2kGBP/month, split between myself and my housemates - not all too bad considering I could cycle into work/around London, and that is something I thoroughly enjoyed doing.\nBut there was always the sense of impermanence to the rental situation. Like my housemates, I had never decorated my room, too afraid to knock anything into the walls, or risk losing our deposit. I \u0026ldquo;made do\u0026rdquo; with furniture/appliances/colours/bathrooms I didn\u0026rsquo;t like, because I couldn\u0026rsquo;t get rid of the existing stuff, and I wasn\u0026rsquo;t allowed to change something that wasn\u0026rsquo;t mine.\nCynically, I was starting to assume that landlords fill flats with the cheapest ikea furniture, not because it was cheap for them, but because it would eventually break, and clawing back deposits was another stream of income for them.\nHonestly, I was exhausted of not feeling safe enough to make my place of residence, my home.\nSettled: I\u0026rsquo;ll buy my own place! (After years of aggressively saving for a deposit).\nWhat buy? #It all depends on your lifestyle and your budget really, and there is no good guide for this. But I would recommend you take stock of what you do / what you plan to do during a normal week now and in 5 years, and optimise for that.\nYou basically have a choice of:\nHigh Budget Low Budget Very sociable House/Flat inside city Flat inside city Less sociable House outside city House/Flat outside city Whatever you buy though, watch out for the following:\nTransportation links Floor plan (in flats this is pretty much fixed forever) Service charge and ground rent charges, also check for a sinking fund If it\u0026rsquo;s a flat, does it have an EWS1 certificate? Avoid leasehold as much as possible My personal preferences leant me towards having full ownership of control over wherever I was am living, so flats were out of the question. Terraced, semi, or detached are where I\u0026rsquo;m looking for, I want some physical ground I can build a shed on, or park a car.\nWhere buy? #I\u0026rsquo;ll preface this by saying: I love London.\nI\u0026rsquo;m also from London, the South East.\nNow, the South East of London has without a doubt got the worst transport options out of all of London.\nThe city planners somehow forgot about the South when building out the underground network, and the government was quite happy with selling the national rail network to private companies, with no incentive for improvement.\nHowever, my family all live in South East London, and it\u0026rsquo;s almost affordable, so that\u0026rsquo;s that.\nOne day, I\u0026rsquo;ll move to some nice leafy suburb in the North West, but that goal is not achievable just yet\u0026hellip;\nOverview of Bexley, by CrystalRoof. Sounds about right Useful Resources for Finding a Property #These are some fantastic resources I used to determine my ideal area, and to track down a house on the market:\nCrystalRoof Offers insight into local crime reports, demographics, transport links, and amenities. Really helpful if you aren\u0026rsquo;t sure about an area! HoodMaps Hilarious and vaguely useful community map for rating a location. Zoopla Travel Time If you don\u0026rsquo;t know where to start, but know you want to be able to commute to work by bike in less than 30 mins, this is a great tool. Zoopla Probably the best home finding app. RightMove The most popular home finding app. OnTheMarket Also useful home finding app, covers some extra estate agents. Jitty Honourable mention, has some interesting AI search features, like \u0026ldquo;period property with tall ceilings and a driveway\u0026rdquo;. How buy? #I had been living in rental accommodation for the last few years, with some \u0026ldquo;free\u0026rdquo; months in Singapore, or staying with my parents. I\u0026rsquo;m quite frugal in general, aside from the odd splurge on flight tickets, so as a result I have managed to save approximately 30% of my income (around the same that goes to the taxman, grrr) over my first 6 years of work.\nBy around March 2024, this looked like a good enough amount for a bank to take me seriously as I requested a mortgage offer, and so I started to look for places.\nIf you have followed the writings of Gary Stevenson, the evidence of rising inequality can provide an explanation of why housing is becoming more unaffordable, but since I\u0026rsquo;m in no position to change this, it\u0026rsquo;s worth jumping in to the housing market as soon as you can.\nThe process is fairly simple:\nGet a Mortgage in Principle (MIP). This is generally a crude affordability check for how much you can theoretically borrow from a mortgage lender. This is a maximum value, do not take it as a goal. Remember, you want to own a house, not to be owned by a bank. Go for some viewings. Different areas, different styles, different sizes. This will take a long while (4+ months) but that\u0026rsquo;s ok. You probably won\u0026rsquo;t know what to look for but the most common, most valuable questions are: How old is the boiler? How old is the kitchen? How many plug sockets does the property have? Does the property have good insulation? Does the property have damp? Or any leaks? In what condition is the bathroom? Are there any signs of Asbestos? How are the neighbours? Put in an offer. I would even recommend being a bit cheeky, and putting in an offer ~10% below market value for a property you won\u0026rsquo;t mind losing. You\u0026rsquo;ll get more of an idea of how the process works, and it won\u0026rsquo;t feel so daunting after the first time. Remember, you aren\u0026rsquo;t just buying a property, you are selling yourself as a good buyer, that can be extremely valuable to some people. If you are a first time buyer, you are worth at least 1% of the property value more when compared to another buyer in a long chain. Get a good solicitor It\u0026rsquo;s not worth being cheap here. These guys are expensive, but the difference can be night and day. Go for one with good recommendations, though probably not one from the estate agents, as they normally get a kickback. Get a mortgage Talk to mortgage brokers and go hunting online. Neither one covers the whole market, so try both for the best deal. I used these resources that I would highly recommend: www.mortgageadvicehub.com www.moneysavingexpert.com I would recommend getting a mortgage on the longest term possible (~40 years), as you will always have the ability to overpay and pay it off early, without being forced into it. Get your surveys done You\u0026rsquo;ve got the offer accepted, a solicitor, and a mortgage offer in place. You now need have a professional come round to inspect the property and make sure everything is up to scratch. Your lender may offer a discount here if you use one of their partners, I recommend you take it, as surveys without a discount can be \u0026gt;£500. Your solicitor will also request environmental surveys (the surrounding area), to make sure you aren\u0026rsquo;t about to buy a future swamp. Technically your solicitor is acting on both your behalf, and on the behalf of the mortgage lender, it is in both of your interests that the house does not fall apart or get swallowed up. Negotiate with the sellers Right before completion, you will want to negotiate with the sellers for any furniture or fittings left behind, as well as try to claw back some money for any surprises the survey may have picked up. If the house has a really cool but cumbersome cooker/pizza oven, or turns out you found the roof needs repairing, this is the point at which you want to perform a second round of negotiations. Wait\u0026hellip; This step is frustratingly inevitable. Any time you need to communicate with lawyers, or the Council, you lose both the will to live and a good chunk of your time. Expect the total purchase process to take ~2-6 months. Complete! Completion day is one of those strange days in your life you\u0026rsquo;ll remember for just being a bit odd. It is the day when your solicitor gets given £100k\u0026rsquo;s from the bank, basically all of your savings, and you get the keys to your new place, all at once. If you are in a chain, this day gets even more complicated, but let\u0026rsquo;s pretend life is easy for a second and ignore that. What next? #Grab a paintbrush, a tapemeasure, and your worst clothes. Chances are that if you found a place within your budget, as I did, you have a lot of refurbishment / renovation to do.\nEven if it doesn\u0026rsquo;t need renovation, I\u0026rsquo;d recommend leaving your mark at least.\nAs of writing this post, I\u0026rsquo;m in this stage. All I can say for now is, make sure you budget for it!\nGood luck!\n","date":"2 October 2024","permalink":"https://jamesjarvis.io/posts/2024/10/on-buying-a-house/","section":"","summary":"\u003cp\u003eI have a bit of a confession to make.\u003c/p\u003e\n\u003cp\u003eI am horribly, frustratingly, embarrassingly\u0026hellip; \u003cem\u003eindecisive\u003c/em\u003e.\u003c/p\u003e","title":"🏡 On Buying a House"},{"content":"From 23rd June 2023 to 23rd June 2024.\nThe year I went to Asia.\nI start off the year in “summer” mode, relaxed at work and enjoying time with my (now retired) parents, family and friends, I’m on back to back holidays for almost a month!\nI then set off on one of my most fun challenges to date: the “mini sabbatical”, I spend almost a third of the year living in Singapore where I am visited by Zak, Konrad and my parents (on their own cruise trip), meet some wonderful colleagues, catch back up with Tim, and watch formula one for the first time! I also get to meet Feiyang’s family on a month long tour of China, then embark on a 3 week solo trip around south east Asia as I race to catch my flight back to London from Singapore.\nI come back to London for winter, and I seemingly forget how to socialise, I construe “drink less alcohol” with “hang out less”, I hope to change this. On the other hand, I’ve picked up running, reading and now writing as a hobby, all of which I’ve thoroughly enjoyed and made good progress with.\nI planned to make 2024 the year I bought my first property, but 4 months into the search and I have struggled. I believe the market is overvalued by about 30% but the market ignores my mumbles of frustration and continues to climb further out of reach.\nI became a “senior” software engineer at the company I continue to learn something new from every day. I recall the confusion I had when people told me to go out and celebrate this milestone, 20% of the way through my career. I rename this “senior slave”, as I have not yet figured out a way to diversify my income.\nI go to Ireland to dabble with saunas+sea swimming, I go to Seattle to “hike”, and before you know it I’m back in China enjoying hot pot with Feiyang’s parents.\nAs I enter this next quarter of a century, I’m finding my own priorities, but leaving room for the occasional bit of adventure. I hope more fun challenges await!\n","date":"23 June 2024","permalink":"https://jamesjarvis.io/posts/2024/06/25-years-old/","section":"","summary":"\u003cp\u003eFrom 23rd June 2023 to 23rd June 2024.\u003c/p\u003e\n\u003cp\u003eThe year I went to Asia.\u003c/p\u003e","title":"25 Years Old"},{"content":"This is part of the mini-sabbatical series. Read more here.\nBus across the Cambodian border # The border of Vietnam and Cambodia is remarkably deserted Picking up where we left off in Saigon, are you still with me? I\u0026rsquo;m on a Giant Ibis bus bound for Phnom Penh in Cambodia, a gentle ~7 hour trip across the border and through basically nothing else of note.\nMy seat-neighbour for this trip is a nice lady from Scotland who has chosen to structure her life around travel. Gardening in the UK summer months and exploring for the rest of the year, she\u0026rsquo;s in her mid fifties and sounds like she has no intention of slowing down!\nWhat surprised me is just how much less developed Cambodia felt than Vietnam, with dirt roads being the norm, and the border itself being a strange mix of undeveloped wasteland, and golden casinos. Once you start to near the capital, Phnom Penh, you can see where the money has gone.\nOut of absolutely nowhere springs palatial buildings, and seemingly unnecessary skyscrapers.\nPhnom Penh # Phnom Penh rises out of the dirt almost instantly The city has an inauthentic feel to it, it really doesn\u0026rsquo;t fit in with the rest of the country. The wealth divide is crystal clear as Rolls Royces mix in the traffic with Tuk Tuks. The currency is apparently a locals joke, as I attempt to pay for my dinner with my hard found Riels, and the cashier sighs, pulls out a calculator and types 8 * 4015 to give me a rough amount for Cambodian Riels.\nJapanese food, in Cambodia, priced in Dollars Apparently Dollars are the currency of choice for many here.\nTo get around, you\u0026rsquo;ll be using Grab again, but Grab Bikes are out, with Grab Tuk Tuks taking their place.\nYou\u0026rsquo;ll miss tuk tuks once you leave The night market looked like the place to be, but I was staying a bit further out in the \u0026ldquo;westerners section\u0026rdquo; and just wanted to relax at the hostel for a bit.\nOn a walk around town in the evening, I overheard some American ex-pats catching up and talking about an impending stock market crash. Hilariously, a few weeks prior while I was in China my coworkers texted me to say my company had just announced a large round of layoffs. I texted back with \u0026ldquo;cant be bothered to check my email, can someone just text me if I’ve been fired k thx x\u0026rdquo;, no economic shocks are going to ruin these vibes.\nThe Wealth Gap is real in Cambodia The town is surrounded by armed guards and has a chronic lack of pedestrian walking signals. Not knowing the jaywalking rules in this country, it takes me forever to get back to the hostel.\nTuol Sleng / S-21 #I\u0026rsquo;m only in Phnom Penh for 24 hours, so before my next bus at midday, I\u0026rsquo;m in a Tuk Tuk to visit Security Prison 21.\nThis place is a solid contender for Most Shocking Museum I\u0026rsquo;ve Visited, right alongside the Vietnam War Remnants Museum.\nI had just about had time to research about the Khmer Rouge on the bus through Cambodia, and it shocked me. If you don\u0026rsquo;t know, the Khmer Rouge (Communist Party of Kampuchea) came to power in the late 1970\u0026rsquo;s at the same time that communism was making it\u0026rsquo;s way through South East Asia.\nI still know little about this period of history, but aside from America\u0026rsquo;s intervention in Vietnam, communism made huge waves throughout Asia, with the only notable survivor from this being the \u0026ldquo;communist\u0026rdquo; PRC, who had a similarly devastating cultural revolution before deciding that a good old fashioned capitalist dictatorship works best for them.\nThe Khmer Rouge however defied all logic and entered into a campaign of totalitarian repression, and ultimately, genocide. To put it simply, the Khmer Rouge destroyed almost all of the country\u0026rsquo;s infrastructure (schools, roads, railways), and killed roughly 25% of the total Cambodian population, specifically minority groups and those with enough intelligence to pose a threat to politicians.\nAll told, this set the country back from its peers by decades, with the country still struggling to rebuild to this day.\nFocusing on Tuol Sleng, the former school became a prison/centre for torture, from which only 0.03% of prisoners ever left alive.\nHumans can be pretty nasty sometimes Much of it has been left untouched, with beds placed in the same position as they were found, minus any human remains.\nPhotos of inmates, stories of couples who had been split up and separately executed for no reason, this would shock anyone to the core.\nOn the way out, there were some elderly people sitting behind a booth. The signs said they had been former prisoners (or guards, I can\u0026rsquo;t recall), and that they were there to spread the story of their survival to future generations. They may even be Chum Mey or Bou Meng from this BBC article, but I couldn\u0026rsquo;t talk to them, I didn\u0026rsquo;t know what to say.\nTo think this place of torture was once a school, is sad enough, but to think the barbed wire was there to prolong suffering\u0026hellip; I left, slightly disturbed, but peaceful in the knowledge that at least information about this horrific regime is being spread. History is most likely to repeat itself, when people do not know it happened before.\nSiem Reap #Another bus, another city, I\u0026rsquo;m getting the hang of this.\nI arrive in Siem Reap, dump my bags at the hostel, book a couple activities for the next few days and go for a walk around town to understand what this place has to offer.\nThanks to the lack of good transport in Cambodia, your only real option is to get Buses around, with the downside that by the time you reach anywhere, the chances are that it is now too dark to enjoy.\nBut Siem Reap, a town where over 50% of the locals are employed in the tourism industry, has enough to offer the weary traveller. Each South East Asian tourist town has the same staples: Markets, Pubs, Restaurants, with typically the same stuff. However they also each reserve a slight speciality.\nPub Street For Siem Reap this appeared to be Fish Tanks to eat the dead skin off of your feet. I did not partake.\nTemples # The Southern gate to Angkor The next day, I had hired a bike to explore the nearby remnants of Angkor, littered with temples and indications of a long extinct civilisation.\nSince by now you will be used to the prices of everything in Cambodia being fairly cheap (I think a day\u0026rsquo;s bike rental was $10, and that was on the expensive side), you might get a shock to discover a 3 day pass just to enter the old city of Angkor is $62. Still, it is easily one of the best things to visit in Cambodia, so suck it up and pay.\nAngkor is fantastically impressive, with the grand structures and reservoirs even visible from space (not that I could test it, but the map seemed to confirm).\nFeel like your inner Indiana Jones Once upon a time this place had been one of the largest cities in the world, with a population of up to a million people back when London was still a small town.\nCycling through the complex, you could hardly tell. Not only are the distances between each temple vast (the total journey was almost 40km), between them you would have no idea you are in such a prestigious location.\nOut of seemingly nowhere however, will rise up a series of awe inspiring stone facades.\nThe famous \u0026lsquo;Tomb Raider\u0026rsquo; temple Ta Phrom The face towers of the Bayon, the serenity of Angkor Wat, and -of course- the \u0026ldquo;tomb raider\u0026rdquo; temple of Ta Phrom are all sights to behold.\nOr at least it was until the rain started, and continue to soak me and all of my belongings for the rest of the day. My notebook never truly recovered, so that put an end to a bit of my journalling!\nGot a bit damp, and some funny looks The next day I took part in a very touristic sunrise tour of Angkor Wat. I had avoided the majority of this particular temple the day before as I knew I would be visiting again, but in hindsight I didn\u0026rsquo;t miss much, with most of the tour being spent waiting for the sun to raise behind the temple. It was very pretty, and I was particularly interested in the temple\u0026rsquo;s wall carvings, but for such a peaceful location, the number of tourists did start to detract from the experience.\nThe tourists flock to see the sun rise above a pretty building If you are going yourself, I would recommend going at midday or early afternoon to avoid this tourist trap.\nMarkets #Making it back to the hostel, I realised I had not bought any gifts yet from my travels for the family.\nEach shop will have at least 2-3 copies, apparently nobody understood the concept of \u0026lsquo;perfect competition\u0026rsquo; Luckily Siem Reap has a perfectly suitable \u0026ldquo;old market\u0026rdquo; in the middle of town, which is fairly average as far as south east asian markets go, but has everything you could expect. A couple \u0026ldquo;hippie trousers\u0026rdquo;, lip balms and trinkets later, I decide that\u0026rsquo;s enough haggling for today so settle down.\nBangkok # Local Tuk Tuks of Bangkok I cheated a bit here, and got my first flight of the trip since Hong Kong. It just didn\u0026rsquo;t make much sense to spend so much time on another bus, when the flight was a fraction of the time, and only a little bit more expensive. I also got to see one of Cambodia\u0026rsquo;s newest airports! A vast terminal that had only opened a few weeks prior, I was almost alone in the place, with barely one or two corner shops to keep me busy while I sat around for my departure.\nAnyway, I made it to Bangkok and to the Jam Hostel (next to infamous \u0026ldquo;Mad Monkey\u0026rdquo;), and to be honest, I wasn\u0026rsquo;t looking forward to it.\nUnlike the rest of the trip, I had poor expectations of Bangkok, as being effectively just a Red Light district for 18 year olds on their first trip outside of the western world, where beer and drugs could be found, cheaply.\nThe parallel Thanon Ram Buttri street is much nicer than Khao San (pictured) To a certain extent, Khao San Road was a bit like that, but I think the last few months being in Asia had reset my expectations a bit, to the point where I really wasn\u0026rsquo;t that shocked by anything.\nOn the plus side, staying in one of the more popular hostels did mean that I got to tag along for some great day tours, and meet some fun people for a few days.\nFloating Markets #The next morning, I gathered in the common area to a group of backpackers sitting around making smalltalk. Joining in, I discover everyone is heading to a nearby \u0026ldquo;floating market\u0026rdquo;.\nNot having had enough of markets just yet (and not knowing that this was a thing to see in Bangkok, I sign myself up).\nThe boats of the floating markets The markets themselves are much the same as everywhere else (that is, great for food and small trinkets), but with the key distinction of river boats travelling around and through the maze of canals that make up urban Bangkok.\nThe small cafes and roasted insects were fun to see and taste, but I was primarily focused on these boats. They all consisted of roughly the same wooden hull, but whilst half were paddle powered, the other half were petrol powered. It seemed as though the locals had ripped the engine out of an old toyota truck, cleaned it up a bit (they were spotless), and strapped it to the back.\nSome of them had bright purple air intakes and polished chrome exhaust manifolds, and wouldn\u0026rsquo;t have looked too far out of place from a Fast and Furious floating spinoff.\nMuay Thai #\u0026ldquo;You see Muay Thai, you see Thailand\u0026rdquo; I remember a tannoy speaker blaring out while I sat on a beach in Phuket with my friend a few months ago. My friend was a huge fan of martial arts, whereas I had more or less lost interest after giving up on karate lessons after my 12th birthday.\nThis night in Bangkok promised another adventure, as the entire hostel was invited to a free Muay Thai event. I had assumed we would be going to the \u0026ldquo;Muay Thai Street\u0026rdquo; signposted a few hundred metres from the hostel, but after an hour on a bus it seemed this wouldn\u0026rsquo;t be the case.\nStill, on arrival we found this to be a bit more than a barn yard brawl as some had expected. We were in a fully fledged arena, complete with presenters and live TV streaming!\nYou see Muay Thai, you see Thailand! The fights were fairly tame most of the night, with the odd \u0026ldquo;oohhh shiii\u0026rdquo; thrown in as one of the opponents roundhouse kicks the other\u0026rsquo;s jaw. Still not quite to my liking, and I fear for the participants long term health, but it was a hell of a better adrenaline rush than any tennis match!\nMore temples #The next day, I broke away from the pack of backpackers to see how far I could walk in a single day explore the rest of Bangkok.\nOf course, it had to be The Grand Palace and The Golden Mount.\nThe Grand Palace was quite interesting. Coming from my own monarchist country, I was surprised to see that the royal family of Thailand seems to actually have a presence. You\u0026rsquo;ll see large photos of the king of Thailand on public roads and buildings, but no clear sign of what he contributes to the country.\nThe King of Thailand sure likes to make himself known Whilst it was a nice place to visit, unfortunately if the Grand Palace is all the Thai Monarchy has to show for itself, I\u0026rsquo;d probably vote them out. Oh, wait\u0026hellip;\nAnyway, cris-crossing my way over to the Golden Mount I pass by another monument: The Reclining Buddha.\nsup? nm, you? If I\u0026rsquo;m being honest, this one was a bit of a mistake - I had meant to go see the \u0026ldquo;Golden Buddha\u0026rdquo;, a $370 million solid 18k gold statue of the famous figure. I ended up seeing a very large \u0026ldquo;golden\u0026rdquo; buddha, but this one was about the size of a building and laying down on his side. Still, it was fun to see!\nI had timed my visit to the Golden Mount with the sunset. A great idea, I had thought, if only everyone else hadn\u0026rsquo;t had the same idea. A queue to the top awaited me, but the wait was worth it, with a particularly golden mount thanks to the dusk.\nThe Golden Mount On your way up and down are a series of bells to ring, I\u0026rsquo;m still not sure what they are for, but I assume a healthy blend of religious practice and tourist entertainment, and I\u0026rsquo;m all for it.\nPaying it Forward # This is the view I remember most from my walks At the base of the Golden Mount, I was looking for somewhere to eat for my last night in Bangkok. \u0026ldquo;Thipsamai\u0026rdquo; had been recommended to me as \u0026ldquo;the best Thai food I have ever had\u0026rdquo; from another backpacker. Alas, the queue stretched around the block, so I quickly gave up and shuffled into a quieter restaurant down a side alley.\nLuckily this place had a great balcony with views of the golden mount, and I was alone! After a bit of time journalling, a British couple turned up to also admire the view, I ordered a beer and a Pad Kra Pao.\nThey ordered a couple of glasses of wine, and said they had followed me in to this deserted restaurant and upstairs because I looked like I \u0026ldquo;knew what I was doing\u0026rdquo;, I wish!\nTurns out they were out on their first long trip together after semi-retiring that year. They had each independently travelled to Thailand backpacking 30 years prior, and wanted the rush of an adventure again, we \u0026ldquo;cheers\u0026rdquo;\u0026rsquo;d to that.\nI shared some stories from my past few months of travels, some of which I recorded in this blog. I just remember thinking how nice it is to connect to quickly with strangers, feeling so similar, despite our differences. You just don\u0026rsquo;t get that kind of interaction back home!\nThey left a bit before me as I had food to finish, when I went to pay the server said I owed nothing. \u0026ldquo;The couple paid for you\u0026rdquo;. I never got a chance to say thanks, so consider this my pledge to pay it forward!\nKoh Samui # I got one good day of weather, and made the most of it! My final stopover before heading back home, is a 5 day stint on the island of Koh Samui, where I had hoped to relax, get sunburnt and maybe try out some scuba diving.\nWell, maybe not! I forgot to check the weather beforehand, but suffice to say that November is peak monsoon season in Koh Samui, and no ferries were operating for scuba diving trips.\nI spent a lot of time in a local restaurant 200m from the hostel Still, I took the time to decompress, go for some short hikes, read my books and be a bit of a hermit for the last few days of my trip. I even managed to get a little bit of sunburn!\nSingapore; Farewell # Arab Street is a great location to stay in Singapore My last 24 hours in Singapore. I couldn\u0026rsquo;t believe how time had flown! If you have been reading these blogs, I\u0026rsquo;m sure you could! (I could have made these shorter, I\u0026rsquo;m sorry).\nI don\u0026rsquo;t think there is any one thing in particular that I have learnt from this, but I\u0026rsquo;m grateful for having had these experiences.\nI\u0026rsquo;m grateful that I got to meet my girlfriend\u0026rsquo;s family, that I got to meet some amazing people backpacking, and that I got to relive an experience from my favourite TV show. I\u0026rsquo;m grateful that I continue to get to experience a more vivid life than I could previously afford, and that it feels like an option that remains open to me in the future, should I want it.\nFor now though, I must head back to London. I met up with some coworkers, including ones who acted as my replacement in the company\u0026rsquo;s rotation scheme (they say they have had a predictably chaotic time). For a moment I forgot that I am still employed, and have to go back to work in only 2 days time. The thought unnerves me slightly, but I\u0026rsquo;m happy to return with a renewed clarity.\nFor my last 5 hours, I visited 5 different Muji shops chasing a particular shirt to buy my Dad (and a final Acai bowl for me!), then I head for Changi International Airport.\nBut I\u0026rsquo;ll be back; there is more to see!\nAs I publish this, I\u0026rsquo;m washing my clothes in preparation for another flight to China in a few days time. So, Asia hasn\u0026rsquo;t seen the last of me yet!\nSee you again soon ","date":"10 June 2024","permalink":"https://jamesjarvis.io/posts/2024/06/mini-sabbatical-5-cambodia-to-singapore/","section":"","summary":"My last 12 days in Asia","title":"🇰🇭/🇹🇭/🇸🇬 Mini-Sabbatical Part 5: Final Stretch from Cambodia to Singapore"},{"content":"Between August and November 2023, I paused my normal life in London, and spent some time working and travelling around South East Asia (primarily Singapore).\nThis series of blog posts is my attempt at summarising what I experienced, and what I learnt during this time.\nAs a reader, you may not be the right audience for these posts! These are intended as a way for me to remember these experiences, and share them with those I care about, they are not easily consumable if you don\u0026rsquo;t care about me, and that\u0026rsquo;s ok.\nI also live-blogged about this trip on my Polarsteps \u0026ldquo;Grand Asian Adventure\u0026rdquo;, so you can follow along there as well.\nI hope you get some enjoyment out of reading this, as I did both experiencing and writing.\n","date":null,"permalink":"https://jamesjarvis.io/tags/mini-sabbatical/","section":"","summary":"\u003cp\u003eBetween August and November 2023, I paused my normal life in London, and spent some time working and travelling around South East Asia (primarily Singapore).\u003c/p\u003e","title":"The 'Mini Sabbatical'"},{"content":"","date":null,"permalink":"https://jamesjarvis.io/tags/travel/","section":"","summary":"","title":"Travel"},{"content":"This is part of the mini-sabbatical series. Read more here.\nPrecursor: Top Gear #When I was a wee kid in 2009, the UK series of Top Gear aired an episode that would come to sear itself into my memory.\n\u0026ldquo;The Vietnam Special\u0026rdquo; followed the famous three motoring journalist as they travelled from Saigon to Ha Long Bay on 3 motorbikes over the course of 8 eventful days. If you haven\u0026rsquo;t watched it, I can\u0026rsquo;t recommend it enough. Unfortunately, I can\u0026rsquo;t ride a motorbike, but since Top Gear cheated a bit and took the night train, I thought I would follow in their footsteps on my own interpretation of this challenge.\nFrom Ha Long Bay to Saigon in 8 days, skirting the coastline of Vietnam as I make my way down.\nHa Long Bay # My journal got ruined by a monsoon in Cambodia, more on that later\u0026hellip; I\u0026rsquo;m on flight number VN-593 from Hong Kong to Hanoi, arriving at ~4pm.\nThese kinds of travel days are generally fairly mundane: Train, Plane, Taxi, Hotel, Sleep. On the face of it I\u0026rsquo;m in store for much the same routine, except my final destination for the night is over 150km from the hostel.\nLuckily I booked this hostel a couple weeks back on Hostelworld, and had arranged with the hostel owner to take a \u0026ldquo;limousine\u0026rdquo; they recommended that was both way cheaper than a taxi, and faster than a bus/train combo.\nWell, this \u0026ldquo;limousine\u0026rdquo; turns out to be just some dude in an old toyota - can\u0026rsquo;t complain! The driver can\u0026rsquo;t speak any English, so we communicate via some screen-sharing and laughing, but he isn\u0026rsquo;t following the route on my phone and I\u0026rsquo;m getting a bit confused\u0026hellip; We stop off and pick up some boxes. Then stop off again and pick up another box. Another stop off, we pick up a dog(?)\nI\u0026rsquo;m getting a bit confused here - am I just cargo? One more stop later and I get my answer, as the man picks up his own daughter and she explains the whole situation to me in good English - a common method of transport in Vietnam are these online groups where you can barter for moving goods or people around. Their family lives in Ha Long but works in Hanoi so this is quite a frequent trip for them, picking up a dog or confused tourist along the way just helps pay for their trip!\nA meandering 4 hour trip later (with dinner break), I arrive at the Alex Hostel, grab a Banh Mi from a nearby stall, and conk out on the bed.\nI\u0026rsquo;m only in Ha Long for a day so I thought it would be good to explore the area in the morning. Not quite sure what I was expecting, but it was clear that a lot of investment had been put into the city, with little to no return.\nAn apocalyptic Austria, or Vietnam? I was staying in the Bai Chay region of Ha Long, which is the more modern, touristic section of the city cleaved in two by the Bai Chay bridge. Much of the area in Bai Chay is reclaimed land, upon which has been built a whole section of European-esque buildings, complete with statues of prominent European figures.\n\u0026hellip;That are almost entirely empty\u0026hellip;\nI sat in a cafe with an iced egg coffee (amazing btw), alone aside from a security guard who was there to protect\u0026hellip; nothing.\nStrange place, but I can only imagine that the combination of coronavirus and my arrival during the off season were to blame.\nStill, I\u0026rsquo;m here for one reason: To see Ha Long Bay by boat. At the ferry terminal I\u0026rsquo;m sat next to a group of uncles who tell me they are on holiday from China, I share some stories via google translate from my recent travels, we grab a selfie and then share an even more awkward seat together on the ferry around the islands.\nHe wanted a photo, so I got one too This tour around Ha Long Bay is much the same as one you can take around the Krabi islands of Thailand, with similar Flora, Fauna, caves and beaches. The only difference is that Ha Long Bay is much larger, covering over a thousand islets.\nIn Top Gear, the trio ended their race at a floating fishing village.\n15 years later, I came to the realisation that a tourist\u0026rsquo;s day tour of the bay would not be enough time to reach deep enough into the islands to see floating villages. I\u0026rsquo;ve been told that the thing to do in Ha Long Bay is to go on a multi-day cruise around the islets, but I\u0026rsquo;ve been warned that these types of cruises are almost exclusively old couples, and I didn\u0026rsquo;t fancy spending 1/3rd of my time in Vietnam feeling oppressively single.\nYour typical tour boat Still, I did have enough time on the boat to see some amazing sights, walk around a cave, climb to the top of an island, kayak around a lagoon and relax for a bit on the beach.\nNo time to relax too much though, as I\u0026rsquo;m back in a \u0026ldquo;limo\u0026rdquo; bound for Hanoi as the sun dips below the horizon.\nHanoi # I\u0026rsquo;m staying in the Old Quarter, the cultural heart of Hanoi, also where you will find a hefty number of me-clones. From this point onwards I feel on a well trodden path of 20-somethings finding themselves through a few weeks holiday through South East Asia.\nIn the morning my hostel arranged a walking tour of Hanoi and I get to know a bunch of my fellow hostellers.\nA married couple from England who sold everything to travel non-stop for the last year (one trained to be a travel agent to take advantage of the internal discounts, smart) A New Zealander travelling after her last breakup A Japanese guy on his first trip alone A Californian girl wearing a concerning amount of Patagonia/Arcteryx I had a great time sharing stories with them as we wandered across train tracks and through the bustling Dong Xuan market, sharing tips of where the best fake North Face stall might be.\nMost of the travellers were in Vietnam for longer, and had just come down from the mountains after completing the Ha Giang Loop - a ~4 day motorbike trip in the breathtaking Vietnamese mountains bordering southern China. After hearing their stories I wished I had performed a bit more research other than watching a single 15 year old episode of british tv, but I\u0026rsquo;ll save Ha Giang for next time I visit!\nThe most popular Banh Mi shop in Hanoi, Banh Mi 25 Walking away from the market empty handed, we all bonded over our extra touristic Banh Mi 25 sandwich. Whilst I can\u0026rsquo;t say for sure that it\u0026rsquo;s the best Banh Mi in Hanoi, it\u0026rsquo;s above the bar for me. I\u0026rsquo;m just grateful to finally be back in a country that has good bread!\nHoa Lo/Hanoi Hilton offered a strangely depressing interlude to our day. I hadn\u0026rsquo;t learnt about the Vietnamese war before this trip, so I frantically googled for information to counter the details presented in this museum (some museums can be very one-sided, but I still don\u0026rsquo;t know about this one. For more sad museums skip to \u0026ldquo;Ho Chi Minh\u0026rdquo;). The guillotine and cramped cells were mostly in reference to conditions during the first Indochina war, with the American-Vietnam war mostly being consigned to a section berating the Americans (quite rightly) and detailing how much fun the American prisoners had during their stay at the Hilton (suspicious).\nTrain Street # It doesn\u0026rsquo;t taste better, but it\u0026rsquo;s cheaper, so it\u0026rsquo;s better Despite warnings from our morning tour guide saying that \u0026ldquo;Train Street is closed to the public\u0026rdquo;, we later learned that this was a bit of an untruth.\n\u0026ldquo;Train Street\u0026rdquo; has become synonymous with Vietnam in general, and therefore attracts a ridiculous number of tourists, all hoping to grab their shot of a train passing by. Clearly it would be both dangerous and a downright nuisance to the already struggling vietnamese rail system if the train had to plow through white people every few hours.\nSo, the officials have \u0026ldquo;closed\u0026rdquo; the street.\nOfficially, this means that tour guides and public notices spread the word that the street is closed, the entrance is blocked with gates and \u0026ldquo;nothing for you mr tourist\u0026rdquo; signs.\nUnofficially, you just need a whatsapp contact, or to wait outside these gates like a vampire until someone invites you in. Inside, you\u0026rsquo;ll find that train street is well and truly open for business, though I believe each of the bars are part of a train street cartel. As we sat there with our noodles and beer, a lady wearing purple came over to take payment. She carried a wad of cash and didn\u0026rsquo;t take no for an answer, routing from tourist to tourist like a mosquito in a hostel. Not just the bar we sat at, but every bar in the street, she was the cashier and the boss.\nThe officials will come over and check that the street is \u0026ldquo;closed\u0026rdquo; every couple of hours. You\u0026rsquo;ll know when they come because a whistle will blow, and you have 5 minutes to pick up your beer and head inside as the staff close up shop behind you, turn off the lights, and pay the policeman while he takes a photo of the now dark, empty street.\nDon\u0026rsquo;t worry, give it another 5 minutes and the next whistle blow will turn the lights back on, open the shutters and bring the tourists back out in a stampede.\nYou can see the officer, just before he took some photos Not a phone in sight, just living in the moment I have to say, \u0026ldquo;Train Street\u0026rdquo; is a place you simply can\u0026rsquo;t miss on your trip to Hanoi.\nPub street however, is absolutely just a street with a bunch of pubs, so unless you are there just for the cheap beer and dodgy clubs I\u0026rsquo;d give that a miss.\nCommunist Architecture #My last day in Hanoi I took it a bit slower, grabbing a \u0026ldquo;Grab\u0026rdquo; to the other side of town, where I hoped to walk back from.\nGrab Bikes are the unsung heroes of south east asia As an aside, Grab is another \u0026ldquo;must-have\u0026rdquo; app for south east asia. Highly recommend setting it up before you head off.\nMy destination from the Grab was B-52 lake, so named after the American B52 bomber that fell into the lake during the American-Vietnamese war, where it stayed as neither side could be bothered to move it. It serves as one of the last untouched reminders of the war, but as it abstracts any of the actual atrocities, you can find a few very quiet cafes overlooking the lake.\nThe B52 bomber that was never removed From there I strolled through the botanical gardens and on to the Ho Chi Minh palace and mausoleum. This section of Hanoi has the most \u0026ldquo;communist\u0026rdquo; feel to it, with a large central square flanked by palaces, museums and even a garden where Ho Chi Minhs original stilt house stands, defiant from time. I took a route back to the old quarter along leafy streets flanked by large diplomatic residences in differing styles, and a lot of security guards.\nSupposedly, Ho Chi Minh is still inside Cycling Mafia #I had a train to catch at 7 from Ga Hanoi, but had already been walking all day so looked at getting a grab for the ~2km journey. It was ~30k dong for a car, but the traffic meant the car wouldn\u0026rsquo;t arrive for another few minutes, so I flagged down a cycle rickshaw.\nTop tip: agree on a price before you get on one of these I had taken one of these in India a few years back and know they would cost less than a car, but I also assumed there would be some kind of tourist rate. The guy seemed nice enough however, and we had a pleasant chat for the ~15 minute cycle to the station. Since he was nice, I thought I\u0026rsquo;d be nice and give him a tip, so I gave him 50k dong, more than hiring an entire car.\nBad move, he demanded 400k\u0026hellip; Obviously I wasn\u0026rsquo;t going to pay that, and just regretted not agreeing on the price beforehand. This guy then immediately started recruiting a local taxi driver and some other locals, clearly lying to them saying he had cycled me all day long. They seemed to not care too much, so I asked a lady at the train station how much she would pay for a 15 minute cycle taxi. Her reply? 1.5k dong\u0026hellip;\nThis guy kept yelling at me for a good 15 minutes more, yelling \u0026ldquo;mafia, mafia\u0026rdquo;. I shouted back \u0026ldquo;I\u0026rsquo;m not a mafia!\u0026rdquo;.\nEventually the angry little man settled on 100k, and I went back to sitting outside the station. A couple minutes after he left, a local shop owner came up to me.\n\u0026ldquo;I\u0026rsquo;m sorry for that, they are a mafia around here\u0026rdquo;.\nAh, that explains it\u0026hellip;\nStill, I wasn\u0026rsquo;t alone. Also waiting at the station for a train to Da Nang was another Software Engineer from the UK, Harry.\nBit of a strange way to meet, but it gave us a good conversation starter and we got along pretty well thanks to basically being the same person. He was on a train to Da Nang an hour before mine (I accidentally arrived early, should\u0026rsquo;ve walked!), but we promised to meet up in Hoi An the next day.\nTrain from Hanoi to Hoi An # Waving at the locals as we leave Hanoi If you are going to book a train around Vietnam, and you don\u0026rsquo;t already speak the language, you really only have 1 option: baolau.com. However, you do have a few options to choose from whilst on the train itself: sitting upright, sleeping in a 6 berth and sleeping in a 4 berth. I\u0026rsquo;m happy to travel on a budget, but given the 17 hour travel time, I protected my sanity and dropped a cool 735k dong on a 4 berth bed.\nThe train I was on had been refurbished a few years prior, so was really nice, and came with clean sheets due to Hanoi being the first stop (if you are joining in Da Nang it will already have been slept in, as I found out later). The main telltale sign that the rail network has seen better days was when travelling through the city, I could not believe a train was able to rock so much without coming off the tracks!\nI was hoping it would stop, or at least rock me back to sleep, but banging my head made sure to stop that, at least until we left the city.\nI did eventually fall asleep however, and woke up for the nicest bit of the journey: The Hai Van Pass. I wasn\u0026rsquo;t aware at the time, but this stretch of the journey is classed as one of the prettiest train journeys of all time, and I could see why!\nYou dangle over the cliff, along the hills, and around the beaches, you even pass by the same viewpoint as seen in Top Gear, which caused me to squint in disbelief.\nYou get plenty of time to admire it, as this section of the journey is painfully slow, averaging jogging pace around the hills as the train rocks back and forth, threatening to send you and it down the cliffs.\nSome people stay in Da Nang attempting to catch some waves surfing (as Harry was hoping to), but I had my eyes set on one thing, so jumped in another grab for the short journey to Hoi An.\nHoi An # The trademark lanterns of Hoi An, as seen from a rooftop cafe I had chatted with the hostel host beforehand to sign myself up for a food tour shortly after arrival, but I had forgotten to mention that my friend (Harry) from outside the hostel also wanted to come. She was joking admonishing me as she was afraid there wouldn\u0026rsquo;t be enough push bikes for everyone.\nEverything was fine in the end, but Harry was wondering why every time he saw me, someone was shouting at me!\nThe food tour consisted of a series of pit stops at road side stalls, where we would balance on tiny plastic chairs. I can\u0026rsquo;t recall the names of the food, but we had plenty of noodles, skewers and a bready snack filled with chocolate, all were quite nice!\nSuit Up #I said I had my eyes set on one thing, and that thing was a suit. Specifically, I wanted a pink linen suit that I could wear to my sister\u0026rsquo;s wedding in 2024.\nHarry was down to have a look at suits as well, so we set out, first to have a look at the same tailors as Top Gear, and then to visit the tailors recommended by our hostel host.\nWe only had 35 hours remaining in Hoi An, so tonight we had a fantastic time choosing the styles, colours and materials for our suits, along with some initial measurements. We were like kids in a candy shop, except now quarter aged men in a suit shop. Linen, Cashmere, Wool, Silk, in any colour and any combination it\u0026rsquo;s no wonder that half the town is suit shops catering to tourists. An australian brother and sister we met at the hostel also partook, having a velvet smoking jacket and \u0026ldquo;designer\u0026rdquo; dress made.\nAs for the price, it was pretty good but no doubt you could haggle a better price than me!\nFor 2 linen shirts and 2 three-piece linen suits my total came to 15.5 million Vietnamese Dong (~£500). I thought this was a great deal and I didn\u0026rsquo;t want to spoil the moment with haggling, but talking to a friend from singapore, they managed to get a more classic 2 piece cashmere-wool suit for only ~£100 after knocking half off the price. Your results may vary!\nSuit measurements, featuring my beige linen and Harry in the background The next day we had a series of re-fittings for our suits to go to, so it was mostly a blur of riding our bikes between cafe, tailors, shop, tailors, bar, tailors, bar. Fantastic day!\nIn the evening we picked up our suits, and went out to a \u0026ldquo;tiger tiger\u0026rdquo; bar with people from the hostel. Harry regretted staying in Da Nang, as he had to cling onto the back of a scooter for 45 mins with his suit, whilst not entirely sober.\nTravelling is about meeting people after all Train from Hoi An to Saigon # The views from the train. Somewhere between Hoi An and Saigon I\u0026rsquo;m told the north calls Saigon \u0026ldquo;Ho Chi Minh City\u0026rdquo;, while the south calls Ho Chi Minh City \u0026ldquo;Saigon\u0026rdquo;. I still can\u0026rsquo;t tell which one is right.\nAnyway, I was back on the Vietnamese railway network for an 18.5 hour trip down the coast again. This time, as I\u0026rsquo;m getting on halfway through the train\u0026rsquo;s route from Hanoi -\u0026gt; Ho Chi Minh City, the cabin/bed was a bit less clean, so something to be aware of if you make the journey yourself.\nIn my cabin this time was a Scottish couple in their 60\u0026rsquo;s, continuing their adventurous retirement. I chatted with them for a while, and they shared their plans to travel across Cambodia. I hadn\u0026rsquo;t booked the next leg of my trip yet, so I took their advice and reserved some coaches using 12go.asia, apparently the most trustworthy website to use. Supposedly buses can really start to range in comfort around this area, so while I can\u0026rsquo;t speak for all of them, I can say I used Giant Ibis and they were quite good.\nThis couple reminded me a lot like my girlfriend and I\u0026rsquo;s hero\u0026rsquo;s of 2023: Tony and Elaine. They had taken part on the BBC show Race Across the World, travelling from London to Singapore across 50 days on a budget of only £1329 each.\nI\u0026rsquo;m still working on convincing Feiyang to do this with me\u0026hellip;\nHo Chi Minh City / Saigon #We have just over 24 hours in Saigon, so what else to do besides of course, the Ho Chi Minh war remnants museum.\nWar Remnants Museum # No photos from the inside, it gets quite graphic Harry and I spent a few hours here walking around sombrely, with it\u0026rsquo;s harrowing honest portrayal of the effects of the war playing through our heads. Having never quite understood the impacts of \u0026ldquo;agent orange\u0026rdquo; before, I was horrified. The museum does a traumatically excellent job of conveying the human impact of such dioxins, and shows in graphic detail the deformations and destruction it has wrought upon all generations nearby. The inhumanity of this war, the indecency of the soldiers, the indiscriminate razing of all life shocked me. I wept a bit.\nThis article captures some of the essence of what the museum showed, but the in person experience is something that cannot be conveyed in this article, or any other so far detached.\nCu Chi Tunnels # Snug fit in the Cu Chi Tunnels On the complete other end of the spectrum, the Cu Chi Tunnels.\nFor this, we were granted a ridiculously cheerful tour guide, who insisted on singing his favourite American songs for the entire 2 hour journey to the tunnels.\nOn arrival, it\u0026rsquo;s quite what you would expect, with a medium density forest giving way to the odd stretch of dirt, and a couple holes for the tourists to peek / jump inside.\nComing from the war remnants museum, this was a bit underwhelming, with the only authentic part of the experience being the occasional crack of M16 rifle fire by an American (tourist, this time).\nIt didn\u0026rsquo;t feel very ethical to fire American guns near a war site, but Americans will be Americans Bui Vien #Our time in Saigon - Vietnam in general - was coming to a close.\nWe caught back up with Alfonso (from the train ride earlier) for a few beers down in Bui Vien street.\nWhilst it\u0026rsquo;s not the craziest scene in South East Asia, it\u0026rsquo;s still enough to put you off western tourists, with the classic affair of cheap drinks and soft drugs fuelling a late night culture.\nWe stayed for a bit, but after having our fill of food and Saigon beer and struggling to find a good rooftop bar with live music, we called it a night.\nDrinks with Alfonso and Harry To Cambodia #I left early the next day, with just enough time to grab a last Banh Mi with Harry before jumping on my first Bus of the trip.\nBus stops aren\u0026rsquo;t quite what you would expect, considering the prevalence of this mode of transport.\nI waited for my Giant Ibis coach from Ho Chi Minh to Phnom Penh outside a seemingly random cafe on a normal street. Only the dozen or so confused looking backpackers could give away it\u0026rsquo;s true purpose. I was following in the footsteps of that scottish couple from before, and back to being alone.\nI had achieved a cross country trip in 8 days, the complete reverse of Top Gear from my youth.\nWriting this looking back now, I miss Vietnam, I mmissed it as soon as I left in truth. The chaos, the community, the suits. I know I\u0026rsquo;ll be back for more of them all!\nLooking ahead, my flight to London leaves in 12 days from Singapore. I still have 2 more countries I want to see\u0026hellip;\n","date":"3 June 2024","permalink":"https://jamesjarvis.io/posts/2024/06/mini-sabbatical-4-vietnam/","section":"","summary":"Vietnam by Train","title":"🇻🇳 Mini-Sabbatical Part 4: Vietnam, from the North to the South"},{"content":"This is part of the mini-sabbatical series. Read more here.\nQingchengshan #Before leaving Chengdu (where I unfortunately missed out on my chance to see Pandas thanks to illness ☹️), we were recommended to visit a nearby resort town called Qingchengshan.\nTransport links were good (a short train from Chengdu) and the hotels seemed nice and quite cheap, so why not!\nUpon arrival, it seems this was one of those towns that had been through a \u0026ldquo;boom\u0026rdquo; and \u0026ldquo;bust\u0026rdquo; period and never quite made it made it on the other side.\nAll of the buildings must have been less than 20-30 years old, so quite modern by resort standards, but many had fallen into disrepair.\nThis was next to the tourist information office in Qingchengshan, which was pretty dead when we asked for information Still, more for us! Our hotel (like many in the area) was a hot springs resort hotel, and we were lucky enough to have pretty much the entire place to ourselves, so we inevitably spent most of our time relaxing around the hot springs. At least Feiyang did, my weak British genes kept me out of the hottest pools for the most part.\nWe were also staying opposite to a fantastic traditional style restaurant, where all food was prepared in the same fashion as an ancient village would have done.\nDucks just hanging about This was my first experience of so many dried meats in one place, and we only wished we found out about it earlier, as by the time we got around to visiting, they were only 30 minutes before closing.\nOne of the days we stayed, we went for a couple hours of walking to a nearby tourist village, past the Sichuan University. I think they were having exams that day, as hundreds of students meandered about looking mildly stressed, munching on some sausages and snacks from the food carts that stopped enterprisingly outside of the entrance. We grabbed a 20p spicy processed sausage as we passed, though I\u0026rsquo;m fairly sure that gave us some digestive issues later on.\nIn the village, we found a cute-but-not-quite-Gubei traditional village. It was clearly not quite as affluent as some other areas we had been to, but that made it all the more interesting! Passing by shops with more traditional food, tea houses with Koi fish, local farmers markets or bamboo woodworking shops, the place felt much more \u0026ldquo;real\u0026rdquo; than the cities we had become accustomed to.\nBeneath this bridge you could rent pedalo boats, but we chose to get bubble tea instead Whilst I probably wouldn\u0026rsquo;t recommend Qingchengshan for the first time visitor, if you had more time than us it seemed like a good entrance to the nearby National Park, and I suppose you could always spend a bit more time in the hot springs! We had spent long enough in the region where I had high expectations of Pandas and Sichuan Peppers, and ended up being ill for most of it. We are as fast West as we were going to get on our trip, and we are now looking at having to race down to Hong Kong in one week\u0026rsquo;s time, to make sure Feiyang gets back to England for her Accountancy exams!\nYangshuo # I miss these massage chairs so much as I travel now. £1 and you get 15 minutes of relaxation Leaving Qingchengshan, we make sure to enjoy the £1 train station massage chairs while we wait! The scenery so far has been fairly flat all the way from Beijing to Chengdu, though you can sometimes see mountains in the distance. Yangshuo however greeted us with a completely different, slightly alien landscape. Perhaps that\u0026rsquo;s why this region is famous for inspiring Avatar\u0026rsquo;s imagination-capturing floating cloud forests.\nPandora? For those unaware, Yangshuo lies on the Li river, near the larger town of Guilin. It\u0026rsquo;s at roughly the same latitude as Taiwan, the same Longitude as Hainan, and has a similarly tropical climate to both.\nThe river bank is dotted with rafts where you can rent a traditional outfit, and have your photo taken on the boat, with a bird chained in the background. Not our cup of tea but apparently a hit with the local tourists! It\u0026rsquo;s claim to fame is obviously the jaw dropping scenery afforded by the smooth surrounding mountains, rice fields and bamboo sheltered river. Though quite strangely it appears the town was not much of a tourist hotspot until the foreigners arrived. Supposedly, an American bought up some land by the river in the 80s, and opened a very fancy hotel that is still fully booked out months into the future. Many have tried to capitalise on this success, and our own hotel was owned by a Belgian couple who live on/off in the village, with tales of dozens more airbnb\u0026rsquo;s popping up.\nHotel breakfast views don\u0026rsquo;t get much better I think we may have timed this trip quite well, being slightly out of peak season, and so soon after the lifting of COVID restrictions, we were mostly alone in the hotels we stayed. This one was clearly catering for western tourists, yet it was only us and another Russian couple who were staying. No complaints from us though, as we could reserve the best view every morning!\nBamboo rafts #We had a couple days around town, and decided to spend one of them doing the classic bamboo raft trip down the river. Anticipating lots of sun and some great photos opportunities, we made sure to pick up some nice cheap straw hats before getting on a raft.\nEmbarrassing tourist, me? No\u0026hellip; This was probably the single most memorable thing we did on this trip. A 2 hour float down the Li river, in fantastic weather, with some of the most spectacular views in this corner of the world. You\u0026rsquo;d struggle to find anything else more relaxing than this!\nOur captain(?) kept calling me \u0026ldquo;Hello\u0026rdquo; as the white guy on board, but he made sure to take some nice photos of us!\nYes, yes, it\u0026rsquo;s a cheesy pose I know I recognised the river on one of the banknotes, and found that the 20 yuan banknote denotes a location not too far from where we were!\n20 Yuan close enough You could visit it if you have time, but you basically have to take the ferry from Yangshuo to Guilin, so we made do with a near-enough shot. I have this hobby where for each country I visit, I keep a denomination of the local currency and hang it on my wall at home as a souvenir. It turns out to be a bit more manageable than fridge magnets, but having bank notes represent famous places from the country is certainly more interesting than a random politician!\nFurther down the stream you begin to notice that we are on a bit of a man-made ride though. Aside from the hundreds of bamboo rafts, and sheer abundance of electric mopeds about, you notice that the river banks themselves have been shaped by concrete, and planted with bamboo. Not that I\u0026rsquo;m complaining, I do like some bamboo.\nI wish bamboo like this grew everywhere E-Scootering # These mopeds were everywhere Despite the fact that this town is in the middle of the countryside, it\u0026rsquo;s not quite rural enough to feel like it has been untouched by technology.\nAs I passed, I felt like this photo summed up the feeling of China in one image Again, every car you see (aside from the tour buses) are electric, and you lose count of the seemingly self-replicating electric mopeds that litter the streets. I think it only cost us ~£15 to rent an e-scooter for the day, and nobody checked our licenses or asked for a deposit, they just let us go out on our own adventure.\nWithout ever having ridden a moped before, we set out for the rest of the day on the bike.\nOur magnificent steed A 20 minute drive from our hotel was the start of a riverside drive that was supposed to be dotted with cafes and other shops. To be honest, we didn\u0026rsquo;t have enough time to fully explore the area, but we had fun zipping about from one area to the next, stopping to admire the views and get away from other people for a while.\nAlong the way we stopped at an old lady\u0026rsquo;s stall by the river where Feiyang introduced me to a \u0026ldquo;bean drink\u0026rdquo;. Whilst I can\u0026rsquo;t remember the name of it, it came in a little tub, and you drink from a spoon. The gritty, bland-but-sweet taste wasn\u0026rsquo;t really to my liking, but it took Feiyang back to her childhood.\nWe also stopped by a western style cafe amongst the rice fields, where you can hardly tell where the rice ends and the instagram models begin, due to sheer number of photo-shoots taking place.\nNot ones to miss out, we also took photos, blocking out the others Feiyang clinging on for dear life As the sun set, we booked a full body massage (my first!) at the hotel, and drove back to the scooter rental place.\nTouristy, but deservedly so. 10/10 recommend you visit Guilin/Yangshuo, if only for the nature rather than the cities.\nNot much going on in the town, but good enough for some places to eat and buy some souvenirs Hong Kong #I\u0026rsquo;ll spare you a recap of the ~8 hours it took us to get from Yangshuo to Hong Kong, but it was something like \u0026ldquo;train-train-3(!)-immigration-borders-train-hotel\u0026rdquo;. Around this time it was Feiyang\u0026rsquo;s turn to get ill, so once we checked in to our hotel, she stayed behind to rest while I went out to try and get some laundry done.\nI had bought some e-sims using MobiMatter (use the code JJHAS96592 if you feel the need 😉), and for the most part it had worked fine throughout South East Asia, and even China. However, Hong Kong is a bit of a strange place.\nOnce I had found a laundrette, it was completely automatic. No worries, I had a card for contactless. Ok, Hong Kong has some strange Octopus payment scheme, so not contactless\u0026hellip; No worries, I have WeChat pay. There\u0026rsquo;s no WiFi, but I have an e-sim right? Well, turns out you need to register your identity via a passport scan before using any sim in Hong Kong, so they can explicitly match up any internet traffic to your identity. WTF?\nAnyway, after a quick jaunt back to the hotel to set this up, I finally pay for my laundry and have enough time to quickly check out the view from Kowloon point before I needed to go to sleep.\nProbably the most impressive skyline in all of South East Asia. Looking from Kowloon to Victoria On the way back, I suddenly got a Deja Vu of some of the scenes from one of my favourite cheesy films, Rush Hour 2. In that, Jackie Chan is seen crawling up and fighting on some of the famous Bamboo scaffolding surrounding the cities buildings. I was afraid that 22 years of health and safety regulations would have put an end to this scaffolding practise, or that it was a strange stereotype and bamboo scaffolding didn\u0026rsquo;t actually exist, but no! The bamboo scaffolding is real!\nImagine Jackie Chan up this We had two days in Hong Kong, so split it roughly into a day around Hong Kong Island, and a day around Lantau Island.\nVictoria Peak #Starting out early, we looked up the top things to do in Hong Kong, and chose to travel up to Victoria Peak to get some good views of the city.\nI didn\u0026rsquo;t quite appreciate this from the night before, but Hong Kong is incredibly hilly. We took the Peak Funicular up to the top, and I\u0026rsquo;d recommend this to anyone visiting, despite the fact we got lost a few times trying to find the start of it!\nSince Hong Kong is so hilly, and was kind of built by whoever was in charge at the time, the roads are a bit all over the place as they follow the contours of the land. We were stuck in Hong Kong park for a good 30 minutes before we could find the right exit, and made sure to swear our way through our clothes running up and down the same hills.\nFeels more like a rollercoaster than a train Once on the funicular, you get another dose of how steep Hong Kong can be, as you climb well over a 30% gradient up to the top.\nAt the top, you get another glimpse at the density of Hong Kong.\nYou would have been able to see the infamous Kowloon Walled City were it still standing, but regardless, Hong Kong is still one of the most densely inhabited places you can visit. Almost every building that can be built, has been built as a high rise apartment block.\nSorry for spoiling the view There\u0026rsquo;s a certain beauty to it, and it does remind me of a denser, hillier Singapore, but we\u0026rsquo;ll get to that later.\nThe rest of the day we spent pretty much just walking around, shopping and eating.\nI don\u0026rsquo;t have any pictures, but we explored some of the famous night markets, where you can buy ay designer bag you want, for £5! We also managed to get apparently the best Dim Sum Feiyang has ever tried, but you\u0026rsquo;ll have to ask her for the restaurant as I\u0026rsquo;m quite frankly useless when it comes to food.\nLantau Island #Hong Kong is made up of over 200 islands, of which the bulk of what you might think of as \u0026ldquo;Hong Kong\u0026rdquo; is just contained within the Kowloon Peninsula, and Hong Kong Island. Outside of this, are the New Territories, a collection of landmass that were originally inhaled by the British as part of the now-expired 99 year lease, which actually makes up more than 86% of Hong Kong\u0026rsquo;s total territory.\nLantau Island is the location where you would find Disneyland, Hong Kong Airport (technically reclaimed land), and some beautiful beaches.\nWe decided to visit because it is also the location of a large Buddha statue that seemed quite interesting to us.\n~6km of Cable Car to avoid a half day of hiking, feels worth it To get there, we took the Ngong Ping 360 cable car all the way to the top. This offers a \u0026ldquo;crystal\u0026rdquo; cabin (basically double the price) where you can see through the floor to the passers by below. Not sure it is worth the price delta, but it\u0026rsquo;s certainly fun to see others in your cabin freak out!\nArriving at the top, we found ourselves intruding on a kind of race event. There were 5k/10k/other races going on around the island, with each of them having to run up and down all of the stairs to the main Buddha statue. My hat goes off to some of these people, who are clearly double my age and twice as fit, so that put some things into perspective at least. They also had to contend with an already crowded staircase swarming with Aunties and clueless tourists alike, so I\u0026rsquo;m sorry if I got in the way of anyone\u0026rsquo;s PB.\nFeiyang or Buddha? I wish we had more time on this island, and others, as there are supposedly some amazing hikes you could do!\nLama Island to the South is apparently a bit like Pulau Ubin from Singapore, in that it has mostly been left untouched by technological progress, being kept in a stasis of dirt roads, no internet and simple housing. Whilst I don\u0026rsquo;t know if this is true or not, the islands still hold some secrets that beg to be explored!\nLeaving # Bye, Feiyang! See you in 3 weeks Feiyang left Hong Kong early in the morning, and I gave her most of my cash so she could get a taxi straight to the airport. Her flight was at 7am, mine not until 2pm, so we parted ways as she head back to England. My own flight back to England is booked 20 days later, departing from Changi airport, so I now have ~3 weeks to get from Hong Kong to Singapore on my own.\nI spent some time down by the Kowloon peninsula to think about what I wanted to get up to over the next few weeks. Also, I wanted to reflect on my time in Hong Kong.\nAfter spending some time in Singapore, and having known both were ex-British colonies, I was fully expecting Hong Kong to feel the same as Singapore.\nYet, it felt different.\nHong Kong was much more chaotic, feeling less safe. Despite it also being independent for less time than Singapore, it felt less \u0026ldquo;Westernised\u0026rdquo;. Over 90% of the population of Hong Kong are Chinese according to the latest figures, so you don\u0026rsquo;t get quite the same international mix as you do with Singapore.\nWhilst I can\u0026rsquo;t speak for the population, some citizens we talked to did express some concerns about the new governance. Free speech is no longer as free as it once was, and some inhabitants are struggling to adapt to this power shift. Though the British lease ended over 20 years ago, I feel the nation is still struggling to find it\u0026rsquo;s own place. Or, struggling to lose it.\nI would imagine that the working culture in Hong Kong is very similar to Singapore, but the living conditions appear to be less favourable by most metrics. It is a place I would like to experience fully, but not one that I would readily choose over a similar location, such as Singapore.\nThat being said, the biggest similarity I felt was the airports. Both were absolutely marvellous.\n","date":"13 May 2024","permalink":"https://jamesjarvis.io/posts/2024/05/mini-sabbatical-3-chengdu-to-hongkong/","section":"","summary":"On the way out of China","title":"🇨🇳/🇭🇰 Mini-Sabbatical Part 3: Chengdu to Hong Kong"},{"content":"","date":null,"permalink":"https://jamesjarvis.io/tags/china/","section":"","summary":"","title":"China"},{"content":"This is part of the mini-sabbatical series. Read more here.\nBack in Beijing #Gubei was awesome, but the unrelenting march of time moves on, and so we find ourselves on the way back to Beijing.\nAlong we way we stopped for a quick break to relieve ourselves at a rest stop. Most countries have these places, and they all seem to stand out for different reasons.\nFor the French, it\u0026rsquo;s the nice public toilets and picnic benches.\nFor the British, it\u0026rsquo;s the fact that Welcome Break somehow have a monopoly.\nFor the Americans, it\u0026rsquo;s the strange business-park layout that forces you to drive between buildings.\nFor the Chinese, it\u0026rsquo;s the urinals that measure your glucose levels.\nBit surreal, but we continued regardless (I didn\u0026rsquo;t pay to have it done).\nOlympic Park #We still had a couple of hours of sunlight to kill on the way back to the flat, so we thought it would be a good chance to see the buildings that put Beijing on the map for me. The Beijing 2008 Olympic Games Park!\nThe Beijing Olympic park is not too dissimilar from Olympic parks from other cities to be honest. There is the centrepiece stadium, now used by local sports teams or for concerts. There is of course a huge shopping mall (in this case, under the whole complex) and a few museums to take advantage of the mass transit systems that had to be built.\nA few architectural standouts won\u0026rsquo;t go amiss either, such as the Beijing Olympic Tower (that strangely was only build 6 years after the games). Whilst we didn\u0026rsquo;t go up it, the views would I\u0026rsquo;m sure have been incredible.\nThe last place we visited here was the Olympic Forest Park. For a city so vast and so heavily developed, it is always welcome to escape into nature a bit, and this park absolutely scratches that itch for so many of Beijing\u0026rsquo;s residents. Even offering bike + kayak rental for a small fee, it\u0026rsquo;s a quite literal breath of fresh air.\nEven though it\u0026rsquo;s pretty far out (right on the edge of the city, a couple hours to get to for us!), it was absolutely rammed. I could liken it maybe to Hyde Park in peak summer, but with almost zero tourists (as Beijing didn\u0026rsquo;t really have many outside visitors when I arrived).\nThe running track that goes through the park was quite comical, with people practically queuing to get past one another, but I digress - clearly it has a strong demand and we must be grateful for it\u0026rsquo;s existence.\nWe enjoyed sunset with a short hike, then slowly made our way back to the flat.\nTian Tan Park # More parks!\nIn the morning, we grabbed ourselves a Chinese pancake and McDonalds coffee (don\u0026rsquo;t judge me) from near Feiyang\u0026rsquo;s flat, and set out to tick some more items off the Tripadvisor list.\nTian Tan (also called the Temple of Heaven) is one of the largest parks in Beijing, or at least the largest one located centrally. Within it, you\u0026rsquo;ll fine a well landscaped park, complete with many areas for the traditional \u0026ldquo;Auntie Dance Class\u0026rdquo;.\nThis was probably my favourite thing that I saw throughout Asia that I really wish the West had more of. If you are retired, you need to keep fit somehow, so why not join a group and dance to some wildly out of genre tiktok pop songs in a group? I loved it!\nThere were some Uncles joining in, but typically they would join the Uncle Class, who would be trying out some other activities such as Tai Chi.\nWe spotted one absolute legend of an Uncle travelling around on his new toy, a motorised suitcase.\nThe legend in question Not quite sure what he was trying to do here, as the suitcase was walking pace, and the cobblestone actually forced him to fall over a couple times, but it was funny to see so I grant him that.\nIn the center of the Temple of Heaven is the Hall of Prayer for Good Harvests, and the highest concentration of school field trips.\nI am ashamed to admit that I learnt almost nothing from the countless temples we visited. Big fan of the architecture, but I just can\u0026rsquo;t recall anything in particular that stood out about this temple.\nLama Temple # The Lama Temple. Why can\u0026rsquo;t all buildings be this pretty? In an attempt to experience more, on recommendation from Feiyang\u0026rsquo;s Mum, we went to visit the Lama temple.\nThis was the first Buddhist temple I had ever visited, and what first struck me as intriguing were the large communal Censers.\nThe idea is that you pick up 3 sticks of incense (specifically 3, to transcend towards equilibrium, stability and infinity). Upon lighting your incense, you stand in front of the Censer, say your prayer and place them inside to burn with the rest.\nVery peaceful, I really enjoyed the atmosphere. I was also perhaps starting to get a bit lightheaded from all of the smoke.\nSummer Palace # Summer Palace is a must visit if you are in Beijing for more than a week.\nNot to be confused with the \u0026ldquo;Old Summer Palace\u0026rdquo; (just down the road, but destroyed by the French+British in the mid-1800\u0026rsquo;s), it is a wonderful example of traditional architecture blending in with nature. Of course, all places this beautiful are mired in some form of controversy. For the Summer Palace, a significant proportion of funds that were supposed to be used to upgrade the Chinese Navy were instead rerouted to expanding the Summer Palace in celebration of the Empress\u0026rsquo;s 60th birthday.\nStunning views from the top Besides it\u0026rsquo;s history, nowadays it is simply a tourist attraction that can be booked through WeChat, with great views over the surrounding area, and some great walking routes around the expansive and well maintained gardens.\nWe were visiting in late October, so the nights were beginning to draw in a bit earlier, but sunset gave this place a mystical feeling, and as we walked back to the car, past street artists along the promenade of the lake, we took some time to slow down and watch the sun set.\nMuseums #Entering our second week in Beijing, we were struggling to find things to do.\nThe issue with accidentally aligning our trip with the Belt and Road conference, was that whilst the weather was amazing the previous week, all major attractions near Tiananmen Square were shut. Now that the diplomats have left, a huge wave of bookings via WeChat meant that the Forbidden City along with most other attractions had sold out. Top Tip: Book tickets on WeChat well in advance. Supposedly 85k tickets are available for the forbidden city every day, and they sell out in minutes.\nAlso weirdly enough, as soon as the diplomats left, the pollution came back.\nDespite the health warning, we climbed up a hill to see this view Better luck next time, I guess?\nI still have a few more things to see in Beijing before I can consider it \u0026ldquo;ticked off\u0026rdquo;.\nThe National Museum of China The National Museum of China is one of the largest museums in the world (I actually can\u0026rsquo;t tell whether or not it is the largest, it didn\u0026rsquo;t feel as big as the Louvre to me).\nThe Road to Rejuvenation, this section covered the distressing starts of the cultural revolution We saw one chunk of it, with the impressive but quite politicised The Road to Rejuvenation exhibit covering the highs and lows of the Chinese people over the last 200 years. Since the start of the CCP it has apparently been all highs.\nOf course, I\u0026rsquo;m not blind to propaganda from all sides, and naturally you wouldn\u0026rsquo;t expect a museum funded by a government, showcasing all of the recent failures of that government.\nHe who controls the past controls the present As we cycle back through Tiananmen Square to head back to the flat, I admire the famous smooth face on the wall, and wonder what he\u0026rsquo;s seen over the years perched up there.\nI wanted to get closer but honestly couldn\u0026rsquo;t figure out how to traverse the square, I think I needed another WeChat booking Adventures in Xi\u0026rsquo;an #I knew absolutely nothing about Xi\u0026rsquo;an (much as I did with the rest of China), but there are 2 things I will remember about Xi\u0026rsquo;an. The Wall, and the Statues.\nTerracotta Army #As we pull up to the compound early in the morning, we are faced by a veritable sea of Aunties. No need to worry though, having researched beforehand the fastest route to Pit 1, and armed with our younger legs we pace our way to the front, being some of the first to enter the halls that morning.\nThousands of intricate, lifesize soldiers, built around 70 generations ago As the morning light streamed across the hall, it was a bit corny to say that it was a special sight, but it truly was.\nYou can read up about the army from many other sources if you want to learn more, so I won\u0026rsquo;t bore you too much. However something you might not have realised (I didn\u0026rsquo;t) is that each soldier was once beautifully and vibrantly painted, and this paint was in fact still present when the soldiers were first unearthed in the 70\u0026rsquo;s.\nImagine his armour a deep purple, with red and yellow accents 50 years of public display and tourism subsequently caused this paint to fade and flake away, cautionary tale of how tourism and the commercialisation of history can erode history itself. Leaving the museum, we walk past a McDonalds, Starbucks and a cinema, the irony entirely lost on us.\nThe Wall #An almost perfect rectangle with a 14km circumference.\nWe rented a couple of bikes and marvelled in amazement at what an architectural achievement it must have been to build this defence system so well, so long ago (though only around 500 years in all fairness).\nAt night, there was some kind of theatrical performance inside the main building by the south gate, and the entire perimeter is lit up by LEDs, truly one of the best cities to visit whilst in China.\nA park, some shops, and a Buddhist temple #Outside of the wall are the usual suspects of cool places to visit in a chinese city: A park, some shops, and a Buddhist temple.\nI can\u0026rsquo;t remember the name of this park, but it was pristine I can\u0026rsquo;t remember much about the park, besides the fact that it was quite expensive to enter, pretty empty, and had a wonderful light/fountain show in the main lake.\nAs for the shops, there is this ridiculously over the top main street, with interactive artwork, public performances and at least a dozen electric car brand showrooms flanking either side of it.\nOn the electric car topic, China is so full of such high quality electric cars that it boggles the western mind.\nWe saw everything from small electic Jeep knockoffs for £8k (my favourite), to £25k Tesla-esque cars, all the way up to the wackiest £16k car for babies. I don\u0026rsquo;t really know how to explain it, but they have built a car that is custom designed to fit 2 parents and a baby. The front seats turn around to view the kid, there is a camera in the back trained on the kid with a live view up front, and special baby bottle warmers under the arm rests. I don\u0026rsquo;t necessarily think that it would be the best purchase decision, but they seemed to have some kind of leasing program where you graduate into a proper car after a few years, so I guess it works fine for whatever audience they are targeting\u0026hellip;\nThe temple we visited was pretty memorable, but only for childish reasons (I never seem to learn too much from my travels).\nThe Giant Wild Goose Pagoda In the centre sat the Giant Wild Goose Pagoda, an impressive tower that bears no resemblance to a goose.\nIn one of the surrounding buildings, an intricate wooden carving of The Journey to the West.\nCulture is frankly lost on me Feiyang tried her best to explain it to me, but I couldn\u0026rsquo;t quite get over how some dude, a pig, a monkey and a horse could really get along with each other.\nDisappointment in Chengdu #Ever since first trying \u0026ldquo;proper\u0026rdquo; chinese food (according to Feiyang), I had fallen in love with the Sichuan pepper.\nAs a direct result of this and the allure of seeing pandas where pandas are from, I made sure to extend our route all the way West to Chengdu, despite the considerable length of time we would be stuck on trains.\nUpon arriving in Chengdu however, I was unfortunately hit like a train by what I think was probably the O.G. of COVID-19 strains.\nThis meant we had to sadly cancel our Panda visit, and I spent all day in bed at the hotel whilst Feiyang went cafe hopping, revising for her exams and reading her books.\nI did manage to crawl out of the hotel for just long enough to get a proper Sichuan hotpot at a Jay Chou themed restaurant. Boy was it spicy!\nThose are tears of joy, and a 50/50 blend of spicy/covid nose running ","date":"7 May 2024","permalink":"https://jamesjarvis.io/posts/2024/05/mini-sabbatical-2-beijing-to-chengdu/","section":"","summary":"Travelling West to tick off bucket lists","title":"🇨🇳 Mini-Sabbatical Part 2: Beijing to Chengdu"},{"content":"This is part of the mini-sabbatical series. Read more here.\nLanding in Shanghai # Looking like a proper tourist, I leave my hotel in Singapore for the last time My flight is at 8:05 AM from Changi.\nA week ago I had bought a backpack just for this trip, 2 days ago I started packing, yesterday I dropped off the rest of my stuff with a coworker to pick up on the way back.\nI\u0026rsquo;m ready. Despite the comforts offered to me in Singapore, I feel well prepared for the next 6 weeks living out of this bag. I have sampled the food, hung out with the locals, I feel like I know what to expect from China, and yet it still occasionally feels mysterious.\nMy girlfriend, Feiyang (王飞扬), has been travelling from London since the day before, due to arrive in Shanghai Pudong International Airport just after I leave from Singapore, so we\u0026rsquo;ve planned to meet up at the hotel while she spends the morning with an old school friend.\nI board, so eager to land I forget whatever I was reading on the flight.\nOn arrival, I\u0026rsquo;m immediately reminded that China is not-quite-Singapore, not-quite-Thailand.\nScammed by a taxi #Stepping out of the international arrivals section, a guy comes up to me in a suit, claiming he works for the airport (with an official looking pin on his blazer to qualify himself).\n\u0026ldquo;Do you need a taxi?\u0026rdquo;\nI still believe taxi\u0026rsquo;s are \u0026ldquo;basically free\u0026rdquo;, from my experience so far around South East Asia and, besides, none of my translation/navigation apps work and I can\u0026rsquo;t read Mandarin well enough to communicate with anyone. So I say yes.\nWe proceed to walk towards, and then straight past, the Taxi pickup zone, and towards the car park. \u0026ldquo;Uh, taxi\u0026rsquo;s are here?\u0026rdquo; I point to the queue of at least 15 official taxis, with a matching orderly queue of prospective passengers.\nNever mind that, we continue into the car park, where a very fancy looking xpeng electric car is awaiting me.\n\u0026ldquo;How much?\u0026rdquo; I ask, expecting roughly £15 worth for the 40 minute drive.\n\u0026ldquo;550\u0026rdquo;. This is in Yuan, so my basic maths of converting to GBP already tells me I\u0026rsquo;m getting ripped off.\nUnfortunately, I have absolutely no idea how much things cost in this part of the world, my first impressions are that this place costs roughly the same as New York.\n\u0026ldquo;I only have 300\u0026rdquo; I reply, opening my wallet to prove what little Thai Baht or Indonesian Rupiah I had exchanged on departure had afforded me about half a taxi\u0026rsquo;s worth of currency.\nNo worries though, the man happily shoves his hand into my wallet, takes the cash (all of the cash I had) and waves me into the Taxi.\nWelcome to China!\nIn the taxi, I test out my esim + Wechat account, thankfully it works. Feiyang helpfully informs me I\u0026rsquo;ve been ripped off, and that I should have got one of the official taxis, obviously.\nThe Bund, choking on intestines #We meet at the hotel, but head straight for the Bund to see the sights, and have dinner with her friend.\nFirst time seeing each other for 3 months The place is so crowded! Every restaurant appears to require a booking (not sure why I\u0026rsquo;m surprised, London is the same), and the sea of people in and around the Bund is only broken by the occasional Chinese military sentry guard, standing like a statue on a plinth.\nAt the hotpot, amongst many kinds of meat and veg, we ate some duck intestine. Normally this would be fine, but my recent decision to get braces meant that I could no longer chew very well.\nSo I swallowed it whole, or at least most of it. The end bit got caught on a piece of my braces, leading me to perform the final act of a sword swallower and pull out the entire 30cm strand of intestine from my throat, with the accompanying gagging.\nOn this street is a Huawei shop directly opposite Apple, selling totally-not-copied wares Great first impression with China, and Feiyang\u0026rsquo;s friend. We went back to the hotel shortly afterwards, tired from the days events!\nChina or Europe? #Day 2 we started with a coffee and croissant from the very European feeling old streets.\nShanghai or Europe? Shanghai in general felt very westernised. It was clear that it was somehow different to the rest of China, but we couldn\u0026rsquo;t quite put our finger on it. The Bund was famously owned by various European trading companies, and it\u0026rsquo;s banks are lined with European inspired architecture, but aside from this there was also a slightly different feeling to the people there. It might have something to do with the fact that Feiyang was asked twice if she was a model, so that made us feel quite cool.\nChecking out the Chenghuang temple area, we stopped for some lunch.\nThis was a peculiar mix of very ancient religious temple, with a disney-esque commercial building, with tourist shops, buddhist temples and gold jewellery shops side by side.\nPretty bridge with a tea house in the middle Continuing with the European strangeness, I had my first experience with the Chinese nouveau riche as we had dinner in Xintiandi. For those who don\u0026rsquo;t know, it\u0026rsquo;s basically like the Covent Garden / Mayfair of London, complete with Lululemon, On Running and DJI shops (to summarise our personalities).\nNot something I expected in such a recently wealthy country, but then again totally understandable. This would continue to be a theme with all big cities we visited throughout China. Luxury is IN.\nLuxury is IN in China Oriental Pearl #Of course, no trip to Shanghai would be complete without the obligatory trip to the Oriental Pearl TV Tower.\nBuilt in 1995, the city has extended skywards around it. Whilst it used to be a TV broadcast tower (back when TV was delivered by these large broadcasting antennae), it is now purely a tourist attraction, with a rotating restaurant, and weirdly misplaced arcade inside the red balls.\nI didn\u0026rsquo;t realise this, but it is also designed to look very similar to a sort of sugary caramel street snack (balls on a stick). I think I prefer the look of the building to the taste of this snack though.\nYou can get some great views though! Both looking out, and looking down\u0026hellip;\nThe pollution and skyscrapers extends as far as the eye can see, in all directions Why can\u0026rsquo;t all skyscrapers have glass floors? Day 4, have you settled in yet? Good. Let\u0026rsquo;s go to the Capital.\nBeijing # Trains are quick in China, Shangahi to Beijing in \u0026lt; 5 hours Meeting the GF\u0026rsquo;s Family # We didn\u0026rsquo;t mean to stand in height order \u0026ldquo;Isn\u0026rsquo;t he cold?\u0026rdquo;\nI had packed for a 6 week long beach trip, without first checking the weather in Beijing.\nIt\u0026rsquo;s 14 degrees and I look like a complete mug in my shorts and birkenstocks.\nThe language barrier is quite the challenge, but we seem to get along just fine as they drive us from the train station and around the city (past Tiananmen square and the Mao photo). We stopped for a hearty meal then back to the parent\u0026rsquo;s district where Feiyang and I checked into a hotel opposite their flat. Still easing in gently.\nAwoke to the sound of military training In the morning, we are accompanied to views of the sprawling suburbs of Beijing. The expansiveness of Beijing drew parallels with Los Angeles in my mind. The benefit to Beijing is that even though the easiest way to travel is by car, it at least has a functioning metro system.\nWe are roughly 9 miles from central Beijing. A mere 20 years ago this would have been right in the boonies, as evident by the remnants of farms and military training grounds nearby (we actually awoke to the sounds of horns and distant marching beats!)\nNowadays however, this is prime commuter belt territory, and we took advantage of the tube system every day to get around. Weirdly, I had to scan my passport to enter the tube! Why?\nBelt and Road Summit #Well, turns out the week we decided to come to Beijing was the week of the annual Belt and Road Summit, with Putin in attendance.\nWe would later find out that this high profile summit substantially changes Beijing for it\u0026rsquo;s duration. For one, there was almost no pollution whatsoever (to later change). For another, the security was tight.\nThe yellow barrier in the background had passport checks We were happy though! This was our current issue - if you wanted to get anywhere near Tiananmen square, you needed to scan your identification, and even then you are not actually allowed in the square, designed to hold 1 million people. Since 2021 you have needed to book entrance to the square, to avoid the spread of contrarian ideas COVID.\nThese guys were more tourist attraction than guards Given the fact that all museums and typical attractions were closed, we decided to spend the rest of the day visiting some of Feiyang\u0026rsquo;s favourite districts, and going shopping to get me some slightly warmer clothing.\nGetting a few rental bikes was very easy via WeChat, and I must say that Beijing offer some of the most comfortable cycling paths I\u0026rsquo;ve ever experienced from a major city!\nCycling is fantastic in Beijing Not much else to note from our shopping trip, but it seems that Beijing may have accidentally hired too many reserve police for the week of the B+R Summit, we kept tripping over police cars and off duty officers.\nUniqlo must be a national security risk Qianhai # Beijing was all a bit of a blur, but I do remember Qianhai as one of my favourite spots.\nA short cycle away from Tiananmen Square, it is a little region surrounding Jingshan park and Qianhai lake, where you can get lost amongst old traditional houses-turned-shops, before eventually winding up around the lake for unbeatable sunset views.\nSecluded canal walk to the lake A great place to have a cocktail and watch the sun set We met up with another of Feiyang\u0026rsquo;s old friends here for hotpot, this time I didn\u0026rsquo;t make a fool of myself, but some fascinated locals seemed to want to try out their broken English with me - they say they hadn\u0026rsquo;t met a white person before. I called bull, even as I realised I also hadn\u0026rsquo;t seen another westerner since leaving Singapore.\nTraditional Beijing Hotpot By this point in the trip, we\u0026rsquo;ve finally hit the weekend and Feiyang\u0026rsquo;s parents have promised they would take us on a trip out of town! So we hop in the car for a few hours drive. I\u0026rsquo;m starting to worry about Feiyang\u0026rsquo;s Dad\u0026rsquo;s driving. She gets her good eyesight from him, and he was making full use of the hard shoulder in each traffic jam. We eventually made it though.\nI\u0026rsquo;m completely clueless about what to do around here so I didn\u0026rsquo;t even know the name of the place, but later found out we would be spending some evenings in Gubei Water Town!\nGubei Water Town # Traditional looking entrance, with a Starbucks inside. Highly recommend the Black Tea Soy Latte. Gubei Water Town was probably one of my favourite places I visited in China.\nI know, that\u0026rsquo;s a bit of an uninspiring statement, since it\u0026rsquo;s all quite artificial, but there was something about it I really enjoyed. As far as I know, the town is not actually a historical water town, but a replica of the Wuzhen Water Town from the south of China, and only around 500 years old.\nBut it\u0026rsquo;s not just some quaint old village. The whole place has been converted to house discreet museums, tea houses, restaurants, activities and hot springs in amongst the ancient streets. Maybe it was more surprising for me since I couldn\u0026rsquo;t read any of the maps.\nWillow trees enchant this village Not least, I loved it because it was just so beautiful! We were visiting in Autumn, and the red leaves and crisp air yielded some great sights.\nNever did end up hiking to this tower, but I think it was smaller than it appeared The Wangs Me in Gubei We even found some smol cats Cultural Site #Once we peeled our eyes away from the colourful trees, we ended up stumbling into a few of the town\u0026rsquo;s cultural heritage sites.\nYongshun Dye House was 90% instagram hotspot, 10% museum A bit ashamed to admit I took almost no photos of the ancient textiles factory, alcohol distillery, replica villagers house or the public traditional chinese theatre. You just have to trust me that they existed, and were really interesting, I promise.\nI do however have this one sick photo of me surprising everyone at archery.\nIf you look really closely, you can see my concentration face. If you look even closer you can see my opponent on the left was not impressed Whilst I\u0026rsquo;m not actually much good at it, I at least wasn\u0026rsquo;t useless, which can only be a welcome surprise for the people who have watched me choke on hotpot and fail to converse in basic sentences with them for the last week.\nGreat Wall # 長城 It\u0026rsquo;s been looming over us since we arrived in Gubei.\n長城, Changcheng, Great Wall.\nYou hear about it so much, \u0026ldquo;it can be seen from space\u0026rdquo;, \u0026ldquo;500,000 people died building it\u0026rdquo;, \u0026ldquo;the locals dismantled it to build houses\u0026rdquo;. It feels like it should be a pilgrimage, an arduous trek up a mountain to touch this world wonder.\nNah, turns out you can just take a cable car right to the top!\nThe views were incredible, but this stretch of the Great Wall (Simatai) is not particularly long. You find yourself cut short, unable to go beyond a few of the towers, beyond which the wall returns back to a ruinous state.\nI stared at this view for ages, trying to sear it into my memory Hot Springs #In the evening, we returned back to Gubei and decided to visit one of the Hot Spring baths. By this time the temperature had plunged to ~3 degrees.\nI had been to a few of these places before, I remember the Széchenyi baths in Budapest, a vast hot pool to fit hundreds of people. When I last visited, the air was -15C, with the steam from the baths causing my towel to freeze solid.\nThese baths were much smaller and, calmer. There were maybe 10 small pools indoors and one outdoors, all at varying temperatures between 33 and 46 degrees, with varying mineral content.\nI\u0026rsquo;m less used to this, so whilst Feiyang and her family jumped straight into the hottest one, I took my time to work my way up. I don\u0026rsquo;t want to feel like the boiling frog!\nThe view from the outside pool was mesmerising. I don\u0026rsquo;t know how, but these city planners had managed to cram an LED into every single nook and crevice of each stone wall of Gubei. The results were astonishing, with the already-too-good-to-be-true town transforming into a movie set overnight!\nI wish I took photos, but my phone was dead by this point, so you\u0026rsquo;ll have to do with what everyone else has already taken.\nIt might seem a bit touristy (and it is), but I\u0026rsquo;d recommend giving Gubei a visit if you have a bit too much time in Beijing. It\u0026rsquo;s a remarkably calming place.\n","date":"3 April 2024","permalink":"https://jamesjarvis.io/posts/2024/04/mini-sabbatical-1-shanghai-to-beijing/","section":"","summary":"Embarking on my mini-sabbatical, I must first enter China","title":"🇨🇳 Mini-Sabbatical Part 1: Shanghai to Beijing"},{"content":"This is part of the mini-sabbatical series. Read more here.\nPreconception # \u0026ldquo;Disneyland With the Death Penalty\u0026rdquo; William Gibson - Wired, 1993\nA billionaire\u0026rsquo;s playground An often quoted metaphor, that draws responses from both crowds. \u0026ldquo;I like Disneyland, whats not to like about that?\u0026rdquo;, \u0026ldquo;That\u0026rsquo;s kinda dystopian\u0026rdquo;.\nThe country has progressed quite a bit in the 30 years since that was written, but it still echoes throughout general sentiment.\nArrival # Greeted by robocop I landed in Singapore on Monday, 1st August. I was supposed to originally fly out a week prior, but delayed it due to having already booked tickets with my Dad to see our first ever Formula E (it’s a strange sport, we were sat inside! The races don\u0026rsquo;t last particularly long, but give it a few more years and I could see it taking on Formula 1!)\nHeathrow was… Heathrow-ish? I checked in a bit early and had a few hours to kill, which I duly spent eating a microwaved fish and chips in the overcrowded Wetherspoons at Terminal 5. Anyway, premium economy was nice - I never realised you could have metal cutlery and wine on a plane!\nThe airport of the country is synonymous with the country itself For those who haven’t yet experienced it, let me tell you, Singapore Changi airport is in a league of its own! It’s a masterpiece of architecture and dignified travel, and almost unimaginable to the average european flier.\nNot that I got to see much of it, as my work-booked taxi driver whisked me away immediately on arrival, a mere 20 or so minutes after landing the plane! I almost fail to appreciate this comfortable efficiency, that will come to become thematic of my overall experience of this new country. I ask my driver how he finds Singapore. He says he loved his 30 years in residence, besides some feedback for the weather, and recommends a few touristy activities for me to try out once I settle in. We cross the nation in 25 minutes.\nCommute from the hotel to the office was 100 metres The financial hub My base for the next 90 days is Raffles place, the original British landing site and previous colonial centre point of South East Asia. I find it fitting for my first foray into this part of the world.\nAfter checking in and generally gawking at my new hotel, I enthusiastically change into a pair of shorts, text a co-worker-friend and head out for a few drinks to meet the rest of the crew I’ll be working with.\nChijmes is a fun area for drinks, but I spent most time at Boat Quay The Weather #I had been warned “you’ll be sweating after 5 minutes outside, and frozen after 5 minutes inside”, so I had packed a mix of shorts, trousers and hoodies. As it turns out, I was quite comfortable with both, as long as I didn’t move too much outside, or sit too still inside.\nMonkeys are everywhere around MacRitchie, apparently they steal Koi fish from nearby house\u0026rsquo;s ponds Lizards are rarer, but can still be found around the botanical gardens Cicadas are heard (read: will drive you insane), but rarely seen These trees feel almost mystical, just wish they would grow more in Europe On my second weekend I attempted the MacRitchie Reservoir hike - a 10km hike around one of the few naturally forested areas left in the centre of the island. I highly recommend giving this a go if you visit, as you’ll be tripping over cicadas, frogs, monkeys, turtles, strangling figs and a whole host of other interesting flora and fauna. However, do go with a lot of water, sun cream, bug spray and very breathable clothing! My first naïve hike was performed in a cotton shirt and shorts and, by the end of it, I might as well had swam through the reservoir instead.\nA quick trip to Uniqlo fixed that, and I was lightly draped with breathable, practically disposable clothes for the remainder of my time there. If you are coming from a Northern European country, I’d probably recommend bringing 2 days worth of clothes with you, and just buy whatever you need once you arrive.\nTop tip: Sunrise yoga at the top of Marina Bay Sands is almost the same price as the normal ticket A few weeks into my stay, I thought I’d try and take up running again. I figured the consistent 7am-7pm sunlight hours worked well with my optimistic morning jog + dip-in-the-pool-to-cool-off routine. The challenge (besides my pathetic fitness level) is to run as far as you can before the sun really starts to shine and you become too dehydrated to walk straight. Realistically I only did this just under 20 times, but I loved it, and made some noticeable health improvements whilst out there.\nThe government # Best museum in Singapore I\u0026rsquo;m a sucker for a good museum. I also love a well planned urban environment.\nAs a consequence, it turns out I really loved the Singapore City Gallery! I spent hours reading every little plaque about various iterative designs for how to use the reclaimed land on the south side of the island. Where waste goes, how they ensure energy and water security, to how they plan for the fittingly named Urban Heat Island Effect, I am just continuously in awe at it all.\nThe Supreme Court building looks as if a UFO landed on top I\u0026rsquo;ve always liked the idea of re-attempting a stint at Architecture (I originally went to visit my old university for an architecture open-day, before giving up and enrolling in computer science for the good old fashioned employment prospects). So for anyone interested in a similar thing - I recommend this museum.\nCheck out The food and activities for more recommendations.\nYou reserve a seat at a hawker centre by placing a packet of tissues, this is some strange unspoken rule Also - NO CRIME! The European mind can hardly comprehend this, but you can genuinely accidentally leave your laptop in a cafe, and have full confidence it will still be there by the time you come back, hours later. There is no vandalism, and consequently there are actual public amenities available.\nThe point here is, you don\u0026rsquo;t get this kind of stuff without a good amount of support from the people running the country.\nWhilst \u0026ldquo;From third world to first\u0026rdquo; is still on my reading TODO list, I left with much more confidence in the competence of the government than I\u0026rsquo;ve ever got from living in the UK or the US.\nThe people # Arab street is effectively a street of bars next to a Mosque A bit of a weird topic to reflect on, but I\u0026rsquo;ve found that any time I move somewhere for a while, I notice something different about the people I am surrounded by. So I thought it\u0026rsquo;s worth spending a bit of time reflecting on that.\nShopping is a national pastime Of course, Singapore is more of an international transitory city than a closed-off city. A solid half of everyone I met was an immigrant, but they never seemed to feel \u0026ldquo;out of place\u0026rdquo; (aside from the construction/cleaning workers, who all appeared to be shuttled in to the country on the back of open roof vans every day). You can notice a great variety in the locals between Little India and Chinatown, but on the whole they seem to follow a few patterns:\nThey are typically quite wealthy (I never met ay of \u0026ldquo;the help\u0026rdquo;, but I heard many people talking about how they hire \u0026ldquo;help\u0026rdquo;) They are very kind They respect their community, and in general have a deep appreciation of their Country They are very social, also amongst \u0026ldquo;co-workers\u0026rdquo; This was an interesting realisation, but I found myself hanging out with co-workers on the weekend quite quickly in Singapore, whereas that is less of a cultural norm in London (or perhaps that\u0026rsquo;s just a reflection on me!) Beautifully colourful Hindu temples Honourable mention of course also goes out to my parents and my friends who came over to stay or travel with me for a few weeks.\nThe work # I didn\u0026rsquo;t work in this building, but they do all blur into one Ah yes, that thing\u0026hellip; the reason I was sent to Singapore\u0026hellip;\nI\u0026rsquo;ll be honest, the work was more difficult than I originally imagined. I was sent over with a vague mission of \u0026ldquo;improve \u0026lt; insert general description of company problem here \u0026gt;\u0026rdquo;, and seemingly the only resource available to me was my own time. To make matters worse, the Singapore office of my company is less than one-fifth the size of the London headquarters, and is primarily a sales/marketing outpost, with only a handful of full time Engineers. In summary, it is a satellite office with no engineering leadership.\nAs a result, I emphatically struggled to progress most of my initiatives I tried to introduce, which was a strange new frontier for me to encounter. In London, I can generally have confidence in relying on a support network of peers all around the org chart to progress or bounce ideas off of for a new initiative, and people are welcoming to trying new ideas. In Singapore, we required \u0026ldquo;consensus\u0026rdquo; and \u0026ldquo;approval from management\u0026rdquo; (read: London\u0026rsquo;s approval) to do anything. This is strange to me, as this was even in domains wholly owned by the team out in Singapore.\nFurthermore, there was much less of a culture of challenging decisions. I\u0026rsquo;m quite happy to have my ideas challenged, as long as the approach is logical, and in return I\u0026rsquo;m quite happy with raising my objections to an idea if I think it is logically flawed. However, in the team I was placed in Singapore, this just was not happening. I\u0026rsquo;m yet to fully rationalise why that is.\nThe other side to the work was working on-call. This has it\u0026rsquo;s ups and downs, but in general was just a bit of a drain on energy.\nOverall, I liked the general vibes of working out in Singapore, but if I come again I would try and work for a company who:\nIs focused on engineering/development in Singapore Is either headquartered in Singapore, or has strong leadership presence. The food and activities # My first F1 experience was unforgettable! This point is almost too obvious to mention, but I LOVED the variety and quality of food, and the general atmosphere.\nI was staying by the Marina Bay, and a common \u0026ldquo;first day\u0026rdquo; activity when someone would visit was:\nTake the MRT to Gardens by the Bay Go to the Cloud Forest Watch the \u0026ldquo;super tree\u0026rdquo; light show Walk through the Marina Bay Sands hotel and shopping centre Watch the Marina Bay light and fountain show Either go left, and check out whatever festival is being ran in the car park Or go right, and watch some free outdoor concert Walk around the F1 track Either go past the Fullerton, towards Lau Pa Sat. Or past Raffles, towards any one of the other hawker markets for some dinner. The light show runs 3 times a night I did this so many times, and never tired of it!\nI won\u0026rsquo;t go into too much detail, but if you\u0026rsquo;re even remotely interested in architecture, museums, hikes, or eating and drinking, I\u0026rsquo;d highly recommend:\nSingapore City Gallery Obviously, I already mentioned this earlier. Cloud Forest / Flower Dome Worlds tallest indoor waterfall. This was my very first stop, and I ended up going back here 3 more times just for the sheer beauty of it. Lau Pa Sat I must have visited almost every stall here during my stay. I\u0026rsquo;m also a big fan of the big fans. Garden Rhapsody A free light show, every day! Such a nice atmosphere, you lay on the warm ground and look up at the lights. The Jewel Changi The waterfall is the big attraction, but just look at all those Orchids! The butterfly park and the walking net are the cherry on top. Marina Bay Sands The building synonymous with Singapore goes without saying, but did you know you can also go for morning yoga for only 5 SGD more? Henderson Waves / Cable Car One is a bridge, one is a cable car. Neither are museums, but both are very pretty! The Supreme Court I don\u0026rsquo;t think you can visit - but it looks like a UFO landed on a building\u0026hellip; Atlas Bar BEAutiful art-deco style bar. Just don\u0026rsquo;t try and enter in shorts and Birkenstocks like I did. They don\u0026rsquo;t like it. Raffles Hotel It sits on 1 Beach Road and is absolutely iconic of colonial Singapore. Just remember to go to the writers bar and not the long bar. Chijmes Strange one, it\u0026rsquo;s a food court around an old church. Similar ish to Mercato Mayfair in London. 1-Arden I stayed in this building, and would occasionally go to the top of the 51st floor to admire the field of boats stretching out into the distance, or to just watch the Marina light shows whilst enjoying a drink. The list could go on, but I\u0026rsquo;m getting nostalgic now. In short, I\u0026rsquo;d be happy to go back!\nClarke Quay, and Boat Quay are the night life capitals - expensive drinks and easy acquaintances can be found here! Lau Pa Sat, hands down the best hawker centre in Singapore Singapore has some amazing green skyscraper planning restrictions - leading to skyscrapers that have an entirely foliage facade! Singaporean public housing is indistinguishable from private. Here is their most impressive one, overshadowing some traditional terraced houses More green skyscraper laws produced this - an architectural marvel that triples its original footprint with new green spaces Raffles Hotel. Singaporean sling is overpriced, but the Writers bar is worth visiting Sunset from the terrace at the Fullerton hotel ","date":"7 February 2024","permalink":"https://jamesjarvis.io/posts/2024/02/reflections-on-singapore/","section":"","summary":"What I learned from my time working and living in the city-state of Singapore","title":"🤔 Reflecting on 3 months living and working in Singapore"},{"content":" TL;DR\nYou can copy the following spreadsheet and play around with the data yourself: PUBLIC: Inflation adjusted personal finance\nIf you, like me, enjoy watching number go up graphs, then you\u0026rsquo;ve probably also got some method of tracking basic financial metrics in a spreadsheet, or via some other sort of means.\nWell, we are but simple creatures, and we do like to see number go up.\nThe thing is, the last few years have been a bit more, shall we say, tricky than normal years. The swinging 20\u0026rsquo;s have been at it again, with the following bargain bucket of little bombs being dropped on the economy in the last 4 years:\nA Global Pandemic Climate Emergency Russo-Ukraine War China-Taiwan escalation Various shipping route disruptions AI hysteria (this one has barely begun) Overall, this spells for an atypical combination of over-demand and supply-restriction, that has lead to fairly shocking inflation figures in much of the world.\nUK Inflation Data for the last 30 years. Source: ons.gov.uk Whilst this is not entirely random on the scale of human history, this is certainly my first experience of meaningful inflation, and it coincides just nicely with the beginning of my professional career, so I\u0026rsquo;m left feeling a bit like Harold here.\nMy thoughts exactly. Credit to Liz Farmer Since I\u0026rsquo;m so unused to this, I thought I would humble myself and rebase my personal finance tracking, by inflation-adjusting all net-worth and salary data. The results were very insightful and only a little bit disheartening.\nNow you can too!\nThe spreadsheet below allows you to calculate your own inflation adjusted data, however it is very UK focused, and I\u0026rsquo;m not entirely convinced my maths is correct, but it should be good-enough to grok whether you are on the right track or not.\nGoogle Sheets PUBLIC: Inflation adjusted personal finance\nAll you need to do is copy the sheet to your own drive, and modify data under \u0026ldquo;Net Worth\u0026rdquo;. It will calculate your real-term (inflation adjusted) YoY (Year over Year) percentage growth. If you wish, you can even repurpose the data by replacing it with your salary!\nThis is probably slightly more depressing, as salary is sadly not cumulative.\nAnd before you ask, no, these figures do not reflect my personal finances. I wish life were that simple.\nSources:\nOffice for National Statistics UK ","date":"20 January 2024","permalink":"https://jamesjarvis.io/posts/2024/01/inflation-adjusted-spreadsheet/","section":"","summary":"Money ain\u0026rsquo;t what it used to be","title":"📉 Inflation adjusted net worth/salary spreadsheet"},{"content":"","date":null,"permalink":"https://jamesjarvis.io/tags/data/","section":"","summary":"","title":"Data"},{"content":"This is part of the mini-sabbatical series. Read more here.\nWhy? #Why bother?\nMeeting the girlfriend\u0026rsquo;s family #By September 2023 it would have been ~2 years since I started dating my girlfriend, so I thought it was about time I said hi to her parents! To complicate matters, her family were still in Beijing, China.\nI still wanted to meet them of course, and wanted to make this a priority for 2023 (along with learning a toddler\u0026rsquo;s level of Mandarin, which I unfortunately failed). So became the goal of \u0026ldquo;meet the family\u0026rdquo;!\nRebound from grief #In December 2022, I was quite heavily affected by the passing of my Grandmother, after her long and exhausting battle with Bone Cancer. Those who knew us knew how close we were, and her passing seriously rocked my emotional foundations, in addition to that of my family.\nI try to make sure I take away at least one maxim from each fundamental moment or figure in my life. From my Nan, these were innumerable, but to pick a few:\nIf you think something is wrong, check it now This goes without saying, if you suspect you have a health condition, act on it immediately. It may never just \u0026ldquo;go away\u0026rdquo;. Do what you have to do, then do what you want to do. Something that was barked a lot at me as a kid, primarily about homework. I feel it has it\u0026rsquo;s own renewed value in an age of such easy distractions. \u0026ldquo;At least I had a go\u0026rdquo; I\u0026rsquo;ll never forget this quote, it\u0026rsquo;s the kind of thing I wish we could all say when we look back on our lives. Stay independant. My Nan\u0026rsquo;s husband passed away 30 years before she did, but she never let this slow her down and she continued travelling, making memories and friends well into her eighties. Be friendly, and keep your friends close. I have never seen a funeral so full of friends, sharing such amazing memories. My Nan had this innate ability to form a bond with anyone, no matter how brief the first contact. Every Christmas her house would be decorated with a hundred cards, from friends all over the world. Almost every day up until she passed, she would be on the phone or having tea with another. I even remember being shocked at how she could stay in contact with a couple she had met whilst on a cruise, 20 years prior! After her passing, I did feel a bit empty. The impact on me was nothing compared to my parents, and I\u0026rsquo;m aware my actions have been extremely selfish in contract, just another character flaw I\u0026rsquo;m working on.\nGiven this, I needed some time to reflect, and to make some more memories and friends of my own. So with me, I packed a diary, and I designated 2023 as a year of \u0026ldquo;learning\u0026rdquo;.\nDepressurising from work #From August 2022 to June 2023, work became insanely busy, with a sequence of \u0026ldquo;death march\u0026rdquo; mismanaged development cycles that sucked a lot of the spare energy out of me, as I tech-lead two large streams of work. We seemed to have this concept of the \u0026ldquo;hero developer\u0026rdquo; at the company I worked, who could/would work tirelessly to deliver an almost impossible feat of code-smashing. Each time we burn out a \u0026ldquo;hero\u0026rdquo; we say to ourselves woah that was crazy, we can't do that again!, but somehow we always repeat the same mistake.\nI\u0026rsquo;m sure many other companies suffer the same delusions.\nThis isn\u0026rsquo;t necessarily an entirely bad thing, during these crunch time periods the rate of learning is dramatically increased (partially due to the rate of mistakes also increasing), and you have the ability to grow much stronger professionally, having survived these challenges.\nThe problems can come when you fail to sufficiently separate work and life, leading to work encroaching on the precious sanctuary of your personal life. I unfortunately saw this happening to me, so I put my foot down and started planning for a period of time where I deliberately remove myself from this style of work for a bit.\nHaving now come back from this trip, several people at my work have come up to me expressing how much they want to do the same - some have even put plans in motion to do so! So I feel this emotion is much more common than I had first thought, and we could all do with some extended time off from work every now and then.\nAdditionally, I had felt that I was starting to stagnate as an Engineer, and I wanted a new medium to challenge myself with. Thankfully my manager was very receptive to this, and whilst he took a 3 week break of his own, he allowed me to get a slight flavour of management in his place (see: Trialling out management).\nHow? #In late 2022 / early 2023 (I can\u0026rsquo;t remember) I approached my manager requesting a 3 month sabbatical. Turns out this wasn\u0026rsquo;t quite as easy as I had hoped, and came with a fairly significant opportunity cost, so we \u0026ldquo;pivoted\u0026rdquo;. There was an opportunity within the company to take part in a secondment to Singapore to assist with the production support team, handling live client incidents within the APAC region.\nThis sounded somewhat daunting, but combined with a revised 6 week sabbatical (of which only 3 were unpaid), it came with a few key advantages over the original plan:\nMuch lower opportunity cost (3 weeks unpaid vs 3 months) The company paid for the big flight tickets to/from Singapore (thanks!) Put up in a nice hotel for 3 months, get to hang out with some really cool people from Singapore and take part in all the \u0026ldquo;crazy Singapore office\u0026rdquo; stories I had heard so much about. My GF could only take 3 weeks holiday from work anyway, so this reduced the time I was travelling along So, we agreed on the duration, and queued up my secondment, so the dates were set! 31st July -\u0026gt; 27th November.\nPre-departure #Preparing for a sabbatical is half the battle. If you aren\u0026rsquo;t clear on what you want to do, and you haven\u0026rsquo;t prepared for it, you may end up just twiddling your thumbs for 3 months!\nFor my particular case, I had to get a few travel things organised before setting off, as I already had a fairly good idea of what I wanted to do, and how to do it (I just wanted to travel, experience new cultures, meet the girlfriend\u0026rsquo;s family, and journal). If you are planning your own sabbatical, I\u0026rsquo;d encourage you to think about what you want to focus on during this valuable time!\nVisas and Vaccinations #For a long time, I didn\u0026rsquo;t really know where I would end up going, so with the knowledge of \u0026ldquo;China at some point\u0026rdquo; I made a \u0026ldquo;Grand Asian Itinerary\u0026rdquo; and started listing places I wanted to visit. Once the dates were settled, I split this into 3 weeks of China, and 3 weeks of everywhere else, with the intention that China would be the first 3 weeks due to other scheduling constraints. For China we knew we wanted to spend around a week in Beijing, and travel to some other key places (Great Wall, Terracotta Army, Shanghai, Sichuan province for the food), so for the most part we just placed these on the map and connected the dots with what we could reasonably travel to by train.\nFor the remaining 3 weeks, I wanted to try to mimic Race Across the World as much as possible, so despite it being shockingly cheap, I tried to avoid planes as much as possible whilst around South East Asia. Once we had decided on Hong Kong being the last destination from the China portion, and knowing I had a return flight from Singapore to catch, it once again became a connect-the-dots exercise.\nChinese Visa #Thanks to the UK passport, I only needed a tourist visa from China. Unfortunately, the plan was a bit in flux still, and I had some slight challenges since I was applying for the Visa more than 3 months in advance of my visit to China (not strictly allowed according to the rules).\nThe whole Visa process itself was quite daunting, and this was not helped by the fact that their online application system was in a half-half state of readiness. Since covid started, China had stopped issuing tourist visas, and only restarted applications in ~April 2023. I was applying in May/June so they were still ramping up and changing rules as I went through the application, which was fun.\nThe application website had a slightly different set of rules to the Chinese embassy site and I even contacted both the Singaporean embassy and the London embassy to see where would be best to apply from.\nIn the end, as with most bureaucratic issues, once you talk to a reasonable person, the issue becomes a non-issue, and they were mostly ok with me applying a few months in advance. They even granted me a 2 year Visa instead of my requested 3 month one!\nThe only hiccup I had while applying, was that during my visa appointment, sat in front of the application interviewer, they asked to see my flight tickets, which I hadn\u0026rsquo;t booked! The Visa rules had changed in between me booking the appointment, and it actually taking place, so I needed to hurriedly book return flights from London to Beijing (not cheap!) whilst sat in front of the interviewer. Let me just say, that was one of the most stressful and expensive mornings of my life!\nNot least because the first set of tickets I hurriedly bought, were non-refundable, and I had spelt my own name wrong on the tickets! 🤦‍♂️\nVaccinations #For the most part, I just took everything recommended from the Fit for Travel NHS website, under \u0026ldquo;East Asia\u0026rdquo;.\nThis required a few visits to the doctors/pharmacy to consult about vaccinations (ultimately deciding a couple were not worth the cost), and then ultimately have them administered over a few sessions.\nHilariously, the first vaccination session I had 5 vaccinations in one go, and ended up passing out (I\u0026rsquo;m not good with needles!), so that certainly felt like the weirdest ~£300 I ever spent.\nOverall, vaccinations were the easiest part of this to organise.\nWrapping up work #Since I had planned this so far in advance, myself and my manager had months to prepare for this time off from normal work duties. When this process started, I was tech-leading a relatively significant chunk of work for one of the company\u0026rsquo;s (notoriously large) major version releases, so at least half of the 6 months before setting off would be dedicated to completing this stream of work. Afterwards however, I had nothing concretely planned, so let\u0026rsquo;s skip forward to that bit.\nHanding off responsibility #Before you head off for an extended time from work (or quit!), it\u0026rsquo;s common courtesy to give plenty of heads-up to your team to make sure you aren\u0026rsquo;t going to place any undue stress on people.\nFor myself, aside from the above mentioned workstream, I only had a few low-importance things I was sole owner of, so I had kept a fairly good Bus Factor!\nAt the time, I had been running informal knowledge shares and discussion sessions for around 2 years within my team, partly to practise public speaking / whiteboard skills, but also to encourage healthy forms of debate and open conversations around tricky problems and upcoming feature ideas with the wider team. However, after 2 years it had started becoming a bit stale, and I felt it needed a change of leadership to reinvigorate the concept.\nI was pleased to see that coming back these sessions were still happening, with a new runner, a little bit differently than I had thought, but that was the goal!\nTrialling out management #A weird section in my recent career, but one I found very insightful.\nMy manager went on a 3 week holiday, and given my apparently alright organisational skills during time as a tech lead, we thought it could be a fun challenge to try and have me fill his shoes for a few weeks.\nObviously, whilst I\u0026rsquo;m fine playing around with my own career, we didn\u0026rsquo;t want this impacting any of my teammates, so there were no significant challenges for myself (no upcoming reviews, no significant ongoing work, no resourcing constraints, no unresolved pay disputes, etc), and we (correctly) anticipated this would be plain sailing.\nI had a few small challenges, around battling a bit for resources with the other managers, and attempting to have serious productive conversations with my peers and friends about their career, but it was fun!\nThree things that really stuck out for me were:\nTransparency is key (even on the seemingly unimportant things). I had some feedback from the director that I hadn\u0026rsquo;t been as transparent as I could have been regarding department level goings-on. His point being that as you learn more about department level changes, it begins to break down that barrier between management/non-management, and can employees engage with the company. Transparency is something I value so it shocked me to realise I was failing myself! From that point I started each standup with a quick recap of the managers meetings, obviously avoiding mentioning things that introduce too much uncertainty. 1:1\u0026rsquo;s are the best. You have individual challenges with each person having their own motivations and personality types, but just having time to sit down and work out how each person can best work towards their own goals (or find them!) is both a fun challenge, and extremely rewarding in the long run (if it works!). I am currently terrible at politics. I\u0026rsquo;m starting to believe that being an effective manager is 80% down to your skills in politics. Unfortunately I have much to learn here. I\u0026rsquo;m extremely grateful for the opportunity, but I think I can currently deliver the most value as an Individual Contributor.\nOn-call lead #For 3 months I acted as lead of a core on-call rota.\nA quick win was in optimising the rotation schedule:\nFor every week period, for the next 6 months we need 2 engineers available for on-call. We also need to know who else may be able to act as a replacement, in case of illness. We also need to space out shifts, to avoid burning out an engineer, but keep them frequent enough to grow skills. We have ~20 engineers in this rota\u0026hellip; This was previously a nightmare, but I introduced a google sheet with some fancy scheduling formulas, then gave everyone access at once to allocate their own desired/if-i-have-to/cannot-do periods. After a few days we had a rock solid rota for 6 months, with backups for each week, all requiring much less effort on the rota lead\u0026rsquo;s part than previous methods. Win-win!\nWe also had a sudden influx of new people who wanted to join the rota (we had a lot of engineers who joined, and were now becoming tenured enough to warrant addition to the rota), this was a good thing as we had slowly been losing people from the rota over the last year, and our production-running experience bus factor was dangerously low. My opinion was that the most effective way to upskill a team quickly, is to follow a see one, do one, teach one approach. So I accepted almost everybody who applied into the rota, with the provision that they should self-arrange a shadow on-call session with an experienced member in the months before their first week of oncall.\nI also encouraged more senior members of the rota to slowly remove themselves, to make way for new talent, and to free up their own time for more valuable pursuits in technical design.\nThe issue was, that the new applicants had somewhat underestimated the challenges of on-call. Whilst our clients were not impacted, the first month of this new round of oncallers did feel quite chaotic at times, as people rapidly ramped up their understanding of and skills working with older versions of our product, in hostile situations.\nComing back to the situation now, 7 months later, turns out I was right. All of these new oncallers are performing well, and are now much better at handling support requests than when they started.\nAgain, I\u0026rsquo;m very grateful for the opportunity, and would like to try it again in the future. However at the current company it is an unfortunately thankless role, so there is little incentive to take part.\nWorking abroad #A bit of fun, I decided to organise a 3 day remote-work holiday with some co-workers in Nice, France.\nTo make sure this wouldn\u0026rsquo;t be seen as a complete jolly by the rest of the company, we designated these days as \u0026ldquo;reset days\u0026rdquo; where we could finally work on some designs for long outstanding tech-debt / product improvement ideas that were not officially in the roadmap.\nAs a bit of a cathartic release, and a lot of fun with some good friends, it was a success!\nThis is something I want to do much more of, but the political capital I spent trying to get this approved was probably not worth it.\nPreparing for the rest of the year #Then, the rest of the year!\nI spent a good deal of time planning for what kind of impact I wanted to have on my Singapore rotation, as well as discussing my career goals with my manager to make sure my upcoming work would allow me to progress on this front.\nUnfortunately, the rotation to Singapore to assist with production support is not viewed as a valuable activity for an engineer in my company (despite the high price tag associated), so this 3 month block was assumed to delay my promotion goals.\nAdditionally, I would be missing out on a \u0026ldquo;design\u0026rdquo; phase in the company, where many of the \u0026ldquo;cool\u0026rdquo; upcoming projects are divided amongst hopeful tech-leads, like a sounder of pigs at a trough.\nLosing this was a bit of a blow to me professionally, but if you are planning on going for a sabbatical, you will face similar challenges.\nI knew personally that this 4 months chunk out of everyday work, achieving some of my own life goals was going to be far more valuable than the opportunity cost of a bit more time in employment.\nYour mileage may vary, but I strongly encourage anyone to at least consider a sabbatical at some point in their career - ideally multiple!\n","date":"17 January 2024","permalink":"https://jamesjarvis.io/posts/2024/01/mini-sabbatical-setup/","section":"","summary":"Preparing for 117 days living, working and travelling in South East Asia","title":"🤔 Setting up for a Mini Sabbatical"},{"content":" \u0026lsquo;Classic’ – a book which people praise and don’t read\nI personally think there is significant value in taking time to reflect upon your actions, and setting some intentions going forward.\nFor reflection, I have been recording a second of my entire adult life as a form of yearly reflection from June-June, and now have this blog to express my intents on a more frequent basis.\nHowever, I also like to set my own New Years Resolutions, as a significant Temporal Milestone I can guide myself against for the year ahead. I still struggle with writing effective goals, but I typically manage to tick at least half of them off.\nOne of the goals I set myself for 2023 was to read 10 books. I used to love reading as a kid, and have fond memories of ignoring the calls to go to sleep from my parents when I was 8, churning through the Harry Potter and Alex Rider series. Since I left school, for some reason I had dropped out of the habit of reading, and I quite missed it. So, I set up a Goodreads account, signed up to Audible and tried to track my progress in some shoddily written reviews.\nThe following has been extracted from a short script I co-authored with the help of ChatGPT, to export all of my reviews made in 2023.\nTL;DR? #Clearly I have some progress to make on my own writing\u0026hellip;\nThese reviews are pretty slopping and fairly valueless, and even while writing them I found I hadn\u0026rsquo;t always absorbed the content of the book as well as I would like.\nThat being said, it is an amazing start! I am very proud of myself for making this much progress, and have become very fond of my kindle/audible unwind time, and may have even learned something along the way!\nI\u0026rsquo;ve learned that reading lists, much like TODO lists have this funny habit of forever getting longer, the closer you get to the end, and that I am a bit of sucker for a certain style of front cover.\nFor 2024, one of my primary goals is to write more, and to write more publicly (fail fast, thanks Levels).\nThis is the start of my efforts to contribute to this goal, hello!\nFour Thousand Weeks: Time Management for Mortals #4/5 ⭐ find online\n(not provided)\nStaff Engineer: Leadership Beyond the Management Track #5/5 ⭐ find online\nVery interesting read, and a sure addition to my bookshelf I’ll be referring to for years to come! Very well laid out references too\n1984 #5/5 ⭐ find online\n(not provided)\n21 Lessons for the 21st Century #4/5 ⭐ find online\nNot quite as interesting as the more historical/informational Sapiens and Homo Deus, but still good to read. Contains more opinions than I’d probably say necessary but still insightful!\nAtomic Habits: An Easy \u0026amp; Proven Way to Build Good Habits \u0026amp; Break Bad Ones #5/5 ⭐ find online\nWhilst itself not containing anything groundbreaking, I would recommend reading this at least once (ideally repeat reading it every few years) to remind you to focus on your priorities and motivate you to not become a “fair weather person”.\nValue(s): Building a Better World for All #4/5 ⭐ find online\nI appreciate the reflective focus of this book. I recall lots of focus on the impacts of the global pandemic and the global financial crisis (of which his section on the unravelling of the crisis from his perspective as a trader was my favourite). However I am left with a feeling that perhaps I haven’t learnt much, if anything what I have come away with is a renewed appreciation of planning for adverse scenarios and aligning incentive structures/markets for a shared purpose. Perhaps this is one of those books that aim only to ignite questions.\nWhat If? 2: Additional Serious Scientific Answers to Absurd Hypothetical Questions (What If?, #2) #4/5 ⭐ find online\n(not provided)\nSandworm: A New Era of Cyberwar and the Hunt for the Kremlin\u0026rsquo;s Most Dangerous Hackers #5/5 ⭐ find online\nHaving read this recently after finishing the similar but less focused “This is how they tell me the world ends”, I’m left ironically with a greater sense of dread from this book. “Sandworm” does more to focus directly on the Russian links to various high profile hacks in the 2010’s, and notes the direct and indirect links these have had with the Russian/Ukraine conflicts of the 2010’s and 2020’s. For me, much of the contents of the book detailing NotPetya and WannaCry have been published elsewhere, but I find more curiosity in the US defence exercises conducted on the electricity grid. Highly recommended read, along with “this is how they tell me the world ends”, but beware that this book will play on (perhaps very accurate) fears of the Russian state, at every opportunity.\nAmp It Up: Leading for Hypergrowth by Raising Expectations, Increasing Urgency, and Elevating Intensity #4/5 ⭐ find online\nInteresting read. As with any leadership book it is generally an ego massage for the writer, however this one does bear some important messages. He describes the importance of having a product mindset for yourself (delivering value, building diverse but relevant experience), and of the difference between “drivers” and “passengers”.\nI’m not sure what the key takeaway would be that I’ll implement in my own life, but it’s a good thing to read occasionally to remind yourself to stay on the track creating the most value\nThe Happiest Man on Earth #5/5 ⭐ find online\nI’m not sure it’s possible to give this book a bad review. Eddie is clearly a very inspiring spirit, having lived through the hardest of times and still left with a kindness in his heart. Reading this you are jerked into reflection on your own position in life. The audible narration is also fantastic, and a great match with what you would imagine the author sounds like.\nBecoming #5/5 ⭐ find online\nAn inspiring book from the coolest First Family of modern times. It is reassuringly honest from a political perspective, and is a recommended read for any young person scared of their own social mobility\nThat Will Never Work: The Birth of Netflix and the Amazing Life of an Idea #5/5 ⭐ find online\nOne of a limited set of exciting and insightful biographies of influential entrepreneurs. The story of Netflix is different from what I first imagined, but my main takeaway would have to be Randolph’s Rules!\nHow Not To Be a Boy #5/5 ⭐ find online\nI’ll be honest, I’ve never actually watched any of Webb’s work. However I can’t recommend this book enough. His message is rarely told from such a first hand perspective, and it’s one that I feel will become more mainstream in the years to come. Personally I still don’t quite understand football, either.\nBad Blood: Secrets and Lies in a Silicon Valley Startup #5/5 ⭐ find online\nBelievable if only in its disheartening representation of Silicon Valley. If you are just looking for a summary of the wrongdoings of Elizabeth Holmes, then this might be a bit overkill and a documentary will suffice. However the events portrayed in this book are an insightful mix of Lying, Cheating, and Sociopathic tendencies.\nThe Light We Carry: Overcoming in Uncertain Times #3/5 ⭐ find online\nHaving read Becoming quite recently (and being very pleased with it!), I’m not sure this book offers much more value or new insights. My main takeaway from this book would have to be Grandma Robinson’s tips on teaching independence.\nWild: From Lost to Found on the Pacific Crest Trail #4/5 ⭐ find online\nI’m ashamed to admit I started reading this book with an expectation of what I would get out of it. Much like the outcome of Sheryl’s journey, the whole purpose of reading this is about the journey of the unknown. Some parts I felt myself prematurely repelled against (cheating, lying, emotional manipulation, inability to face consequences, sexual promiscuity, assumptions for help, naivety, heroin addiction, swallowing her mother’s ashes). However, what did I expect? I had an assumption this would be another privileged person travelling for the fun of it. Rather, this was a genuinely troubled person attempting to reset by taking on the biggest challenge they could imagine, alone. Some parts did not resonate with me and that’s ok, the experience is nonetheless valid.\nThe Culture Map: Breaking Through the Invisible Boundaries of Global Business #4/5 ⭐ find online\nErin delivers a clear, concise set of personal anecdotes and a framework for rationalising the effects of culture on communication. The book is very focused on the context of business, but the lessons learnt can be applied to any cross cultural communication. I’d recommend this for anyone engaging in long term cooperation (business or otherwise) with people from multiple diverse countries.\nChavs: The Demonization of the Working Class #3/5 ⭐ find online\nThis book is perhaps a bit too long, and bounces around the topics of class warfare, race and immigration, with little structure. I admire it for sharing extremely relevant stories from Britain’s political past, but I’m not left with the impression that this book has been impartial in its investigation.\nBuild: An Unorthodox Guide to Making Things Worth Making #4/5 ⭐ find online\nTo begin, I see other reviewers comment on Tony’s personal failures and unhealthy leadership styles. I can’t comment on this context as the sum total of what I know about this man comes from this book, so I shall only refer to the book review.\nBuild is a well structured, if a little petty, guide to a product focused mindset. A lot of the concepts around finding product market fit, storytelling, focusing on press release first, structuring an organisation to ensure stakeholders have to agree (i.e making support sign off on new sales) feels like well founded advice and common sense. Some parts felt needlessly petty (a constant revert back to why google is awful), and some parts just felt like reflections on luck (right place right time hiring for Apple).\nIn general, I found the book very enjoyable to read, however I would be concerned with repeating all but the product focused points. I fear most organisations would not tolerate such abrasiveness.\nRich Dad, Poor Dad #5/5 ⭐ find online\nTo be honest, I don’t know what to do with this information. But this is a good framework for analysing your current position (cashflow and balance sheet) and making steps to prioritise asset building. In the UK it’s a little less impactful to “pay yourself first”, and many recurrent tax efficient investment schemes are not available. However this book is probably one of the most impactful triggers for learning more on the subject!\n12 Rules for Life: An Antidote to Chaos #3/5 ⭐ find online\nThe book is far too long, contains numerous logical errors or contradictions, is both harsh and heartfelt and I fail to see what I actually learnt from this book. That being said, I don’t think it is completely without value, and to the right audience it clearly resonates. I just think it should be called “12 vague themes for struggling young men” instead.\nOutliers: The Story of Success #5/5 ⭐ find online\nOutliers is one popular science book that is well worth reading. He proposes the concept that “genius” is a combination of:\nA sufficiently high IQ (though beyond 120 has negligible effects) Proper upbringing (concerted cultivation, as he notes in a few case studies) Practical intelligence (derived from the latter upbringing) Situational luck (noting similarities of prominent figures and their economic situations during formative years). Anyone who falls trap to society’s worshipping of the “lone genius” should read this book to zoom out a little. A related book for the latter chapters around the power distance law and cultural effects on education and work, I would recommend “The Culture Map”.\nPermanent Record #5/5 ⭐ find online\nSomething I didn’t expect to take away from this book would be an understand of how manipulatively flawed it’s intelligence organisations are structured. The fact that security clearance is not necessarily related to public/private roles seems strange.\nThe book provides an insightful (yet slightly dull) overview of his time contracting and training through the intelligence community, until ultimately suffering from a burst of epileptic illness, and after spending considerable time indoors, monitoring the traumatic events occurring throughout the Arab Spring, he forms a clearer view of where his own government is failing their people.\nMy review of Edward’s character is overwhelmingly positive. From his description of events, given his oath to the American people, he did the right thing by disclosing wrongdoings of the 5 eyes governments.\n\u0026ldquo;Surely You\u0026rsquo;re Joking, Mr. Feynman!\u0026rdquo;: Adventures of a Curious Character #5/5 ⭐ find online\nThe tales do occasionally come off as a bit show-offish, and he is clearly a bit arrogant of his own abilities. However it’s possible that this was entirely reasonable!\nI’m not sure what I expected when going into this book, but it is very much focused on how the man operated, and not on his achievements. So without undertaking external research of Feynman, you are still left with only hints of what his main achievements were about.\nHis mind was certainly a curious one, and it is extremely refreshing to hear someone detail the ins and outs of his lifelong(!) passion, enthusiasm and energy for all things science. Additionally, after around 1945 the extracurricular focus of his life gets progressively saucier, having switched subjects, cracked safes, learnt languages, moved countries, played in a “band”, frequented bars, drew models professionally, and repeatedly mentioned his adoration of women! Although his “womanising” manner may appear a bit out of fashion nowadays.\nWhilst I wouldn’t consider him a direct role model, his curiosity is infectious, and I wish all readers absorb at least some of his passion!\nLess Is More: How Degrowth Will Save the World #5/5 ⭐ find online\nI thoroughly agree, with about 50% of the solutions in this book, and the remainder I feel are too optimistic and not realistic.\nDegrowth is a damaging name, for a movement that sounds like it makes sense for humanity: factor in the costs of all externalities (especially negative) when pricing a good or service, and provide a metric of economic progress that is more human-values driven (quality of life, sustainability etc) than merely monetary-value.\nThe book is well written, and the audiobook is similarly well narrated, however this type of book is more valuable in print format, where you can refer back to sections of interest later.\nSomething I don’t agree with, or at least haven’t formed a good enough of an opinion around yet, is that this book strangely reiterates the claim that distributing wealth equally would result in an instant improvement in quality of life for all. As far as I am aware, economies currently rely on inequality to price goods competitively, however more reading on my part is required.\nRegulation and individual behavioural changes alone are a tough thing to rely on, which this book unfortunately primarily suggests. I however primarily like the concepts of:\nMandatory N year guarantees on new products Community share-stations for seldom used goods Limitations on lowest-highest compensation ratios Direct democracy for long term societal strategies Externality Tax on goods and services, based on their negative externalities on society/environment. Positive externality becomes a grant. Overall, I think this is a good book for the future generation to read, but I don’t expect much action to come along with it, until the public is genuinely aware of the societal problems we will face if we continue to exceed our planetary quotas.\nThe Power of Habit: Why We Do What We Do in Life and Business #4/5 ⭐ find online\nA good book, but not one I would recommend as a “must read”. The author presents many insightful case studies, although some of which are slightly dubious, and I would have preferred a less opinionated form of writing, presenting the facts first.\nThe key takeaway for me, is identification of the cue, routine and reward habit loop; keystone habits; and that a habit exists primarily within the basal ganglia, and away from conscious thought.\nLife Time #4/5 ⭐ find online\nAn interesting book, although I’ll admit that a combination of my reading times, and the bombardment of unfamiliar medical terms/acronyms meant the book had an ironically sleep inducing quality!\nMy main takeaway would be that “sleep is important”, with a side order of “when you take medication or eat food in relation to sleep is important”.\nI’ll admit that I’m not the perfect target audience, as I don’t feel reading this book has given me the filtered information I need to actively improve my own health, although I have absorbed the gist of it.\nThe Everything Store: Jeff Bezos and the Age of Amazon #4/5 ⭐ find online\nA great autobiography of Amazon and its infamous founder. However it is starting to show its age a bit. Quite poetic considering the opening chapter describes a conversation with Bezos, who questions whether the book is being written too soon.\nI didn’t realise quite how… ruthless Amazon is/was. It is quite happy to engage in savage business tactics, and suck the humanity out of any worker, all in pursuit of the hallowed customer experience.\nI quite liked the final comparisons between Steve Jobs (who valued profit extraction from addicted customers) and his own biological father (who ran the same small niche shop for decades).\nWell worth a read, but be cautious of the survivorship bias of tech CEOs from this era.\nAppendix #Code for parsing Goodreads data export # Affiliate Links # [!note] This blog post contains affiliate links, which may earn me a small commission if used. You are more than welcome to not use these, but doing so helps support this blog.\n","date":"2 January 2024","permalink":"https://jamesjarvis.io/posts/2024/01/year-of-books/","section":"","summary":"2023 was a year of reading","title":"📚 Year of books"},{"content":"I am growing up [citation needed].\nWith this, comes a lot of realisations about what I value from the internet, and in particular about the things I build.\nThe rewrite #My first iteration of this personal website was written in GatsbyJS, primarily as a means to show off the previous things I have built more info in this previous article.\nHowever, I rarely wrote to this website, and I never really promoted it on other platforms for the purpose of getting views.\nI also wanted to write about things that didn\u0026rsquo;t necessarily fall under the rather specific category of \u0026ldquo;project\u0026rdquo;.\nAs such, my website was starting to develop an identity crisis and the weakest part of the website was, frustratingly, my own writing.\nI was originally hoping that this website would offer me a creative outlet where I could practise and improve my own writing style, with the auxillary goal of basically being a verbose CV to show to prospective employers or my peers.\nBut, GatsbyJS was simply too flexible for this purpose and in turn became a burden, drawing away my own attention from writing and providing content for this site.\nThis rewrite, is deliberately hands-off.\nI wanted to keep the same design language, but with a further emphasis on writing, both project-style where I want to write a summary, but also to create the space for more long-form content in the future. Eventually, I would like to expand this approach to also create the space for engagement with readers in the future (once I get readers!), however this will not be a priority yet until I am confident in the content.\nFor now, the rewrite has resulted in removing a few thousands lines of JavaScript, leaving the entire website as just a collection of markdown files and image assets. Much nicer.\nWhy not [medium, dev.to, x.com, etc]? #I want full control over my presence on the internet.\nI want to be able to decide entirely by myself whether I am public, private, free for all to read, or behind a paywall.\nI want to have at least a false sense of security that my writing will not be too easy to crawl for LLM\u0026rsquo;s to reproduce.\nBut most of all, I want to be able to go back to the old micro-web of days gone past, where each person has their own bubble on the internet. I think it\u0026rsquo;s quite a charming approach, and I hope you do too.\nI will possibly start to link to my website from other platforms when I post a new article, but I want the location to stay here, on this domain.\nLearning to write #I am going to take a mini-sabbatical from work later this year, spending 4.5 months out of the U.K., working and travelling around South East Asia.\nI will be leaving my personal laptop here, only taking my phone, camera and a notebook. I\u0026rsquo;m hoping to teach myself how to enjoy the creative process. If that works, You\u0026rsquo;ll be hearing more from me soon!\n","date":"10 July 2023","permalink":"https://jamesjarvis.io/posts/2023/07/blogging-site/","section":"","summary":"Owning my place on the internet, like the good old days","title":"📖 Blogging Site"},{"content":"From 23rd June 2022 to 23rd June 2023.\nThis year has been an unfortunate reset.\nComing back from “the Italian trip”, I am forced to scrap my beloved but troublesome Z4. However I continue to enjoy a wonderful summer, I take Feiyang camping, we try surfing, I go to Wimbledon, Northern Ireland, several weddings, long walks and a bit of kayaking.\nNovember was the hardest month to date. I’m crashed into on the way to a holiday with Feiyang, totalling my car. I lose my best friend, Nan. Things are put back into perspective. We have a quieter Christmas.\nI set goals for 2023, to learn, and to travel. I make an attempt to pick up Mandarin, I set a new personal reading record, and put into motion plans to spend some time out of work. I move out of my flat and wish Konrad all the best at Google. My cousin and her wife got married in Scotland!\nAround this point, my Grandad’s Dementia has worsened to the point where we move him into a care home and my parents tackle selling both his and my Nans houses. Our adoring but ailing dog, Dusta, has to be put down.\nHowever, the year ends on a high with summer back in full swing! Dad retires just in time for us to spend mine and my sister’s birthday on a boat in the Norfolk Broads!\nMy Mum has been our rock. Feiyang has been there for everything. I wish my parents the best start to their happy retirement. Stay tuned!\n","date":"23 June 2023","permalink":"https://jamesjarvis.io/posts/2023/06/24-years-old/","section":"","summary":"\u003cp\u003eFrom 23rd June 2022 to 23rd June 2023.\u003c/p\u003e\n\u003cp\u003eThis year has been an unfortunate reset.\u003c/p\u003e","title":"24 Years Old"},{"content":"From 23rd June 2021 to 23rd June 2022.\nAs the world slowly started to shake off the pandemic I decided to move to London with Konrad. Then I immediately got COVID facepalm.\nLiving in my favourite city in the world for a whole year has been a lot of fun (and v expensive), making some new friends and getting used to a bit more of a settled down lifestyle, although it is a bit scary!\nI\u0026rsquo;ve continued with my hobby of making and breaking lots of software, sailed on the Thames, hiked Snowdonia, and met Feiyang!\nMy love-hate relationship with the BMW has continued, from having to almost scrap it in November to driving it 3000 miles around Europe in June; I finally drove to the Italian lakes!\n","date":"23 June 2022","permalink":"https://jamesjarvis.io/posts/2022/06/23-years-old/","section":"","summary":"\u003cp\u003eFrom 23rd June 2021 to 23rd June 2022.\u003c/p\u003e\n\u003cp\u003eAs the world slowly started to shake off the pandemic I decided to move to London with Konrad. Then I immediately got COVID \u003cem\u003efacepalm\u003c/em\u003e.\u003c/p\u003e","title":"23 Years Old"},{"content":"From 23rd June 2020 to 23rd June 2021.\nFirst year in full time work (at a smol company called ThoughtMachine) and first year I missed a few days filming!\nWith most of my life + lifestyle banned under pandemic restrictions it’s been a bit quieter than I would have liked, and there’s been some tough times, but things will change!\nKicked off this year climbing a mountain, exploring Cornwall, spending a lot of time sat behind a computer, had a wonderful Christmas with the family, walked dozens of kilometres hanging out with my dad, and then walked 42k in one day with Sam!\nI built a dashboard, link scraper and a few other things, shaved my head, impulse bought an old bmw as a semi fixer-upper, travelled to Scotland the day after lockdowns started to lift and ended the year starting to see people again!\n","date":"23 June 2021","permalink":"https://jamesjarvis.io/posts/2021/06/22-years-old/","section":"","summary":"\u003cp\u003eFrom 23rd June 2020 to 23rd June 2021.\u003c/p\u003e\n\u003cp\u003eFirst year in full time work (at a smol company called ThoughtMachine) and first year I missed a few days filming!\u003c/p\u003e","title":"22 Years Old"},{"content":"Did reading the previous instalment of \u0026ldquo;mapping the internet\u0026rdquo; read here leave you a bit\u0026hellip; underwhelmed?\nSame here. I mean, sure I had built a little program that could follow and store links on the internet, but it couldn\u0026rsquo;t be ran continuously (could not store the crawling state between runs), and there was just no easy way to traverse or visualise the graph yawn.\nSo, in this chapter I am going to go through how we have improved this service to become the beautifully graphical service that is:\njamesjarvis.github.io/web-graph\nNOTE: By default, the graph starts from jamesjarvis.io, but if you want to change it to start from a page of your choosing (provided it has managed to scrape that part of the web already), you can give it a shot by changing the url query parameter such as: /?url=https://en.wikipedia.org/wiki/London\nPart 1: Maintaining state #So I wanted to eventually run this service on a raspberry pi 4 I currently have just sitting in my attic doing occasional speedtests.\nI\u0026rsquo;ve also decided that I want to be able to stop and start the crawls (say, when performing an upgrade), without losing any data between runs.\nIn order to facilitate this, I need to have a list of URL\u0026rsquo;s that have been \u0026ldquo;seen\u0026rdquo; but not \u0026ldquo;crawled\u0026rdquo; yet.\nI had 3 ways I could think of doing this:\nSpin up a message queue system, like kafka or rabbitMQ to store unprocessed URLs and yeet them out to processors for the actual crawling. Add another table in the database, with the pending URLs. Store this information in a simple queue file (read from the top, append to the bottom). I tried all 3:\nRabbitMQ #First, I tried RabbitMQ, and got it working after a few hours of mucking about with it.\nHowever, it ate my poor raspberry pi\u0026rsquo;s RAM as soon as the queue was over a few thousand URLs, and I couldn\u0026rsquo;t work out how to persist messages properly.\nI also didn\u0026rsquo;t really need the complexity, as I didn\u0026rsquo;t want my ISP to boot me off the network for making a continuous 100 requests/s, so I wouldn\u0026rsquo;t have bothered with more than one consumer anyway.\nIf I was building this to be an actual, scaleable service, then I\u0026rsquo;d have swallowed the extra AWS bill and continued, but this ain\u0026rsquo;t it chief.\nWhack it in a DB table #Another embarrassing thing about the infra for this project is that I\u0026rsquo;m running the raspberry pi with an 8 year old 1TB external hard drive I had lying around.\nIt\u0026rsquo;s not the fastest and is in fact the biggest performance bottleneck (if I could be bothered, I would have bought an SSD but this isn\u0026rsquo;t worth £80 + dealing with this limitation is interesting enough).\nAs a result of my cheapskate-ness, this is also out of the question, I needed something more lightweight.\nSimple file based queue system #This was the way, effectively traverse the web in a breadth-first fashion by appending any found URLs to the end of a list, and crawl any URLs by taking from the top.\nNice and easy.\nPart 2: Making the data easy to query # Screenshot of the API splashscreen Eventually, I wanted to expose this information, but in an easily cacheable and web friendly way.\nEnter: an API service.\nYou can actually check it out if you want at api.jamesjarvis.io.\nIt\u0026rsquo;s been set up to be as easily cache-able (thanks to cloudflare) as possible, and it\u0026rsquo;s open for anyone to use, provided you\u0026rsquo;re aware it\u0026rsquo;s hitting the shitbox in my attic and I don\u0026rsquo;t want my ISP to throw me off their network.\nAlso, I used different queries than the first iteration of this project, in order to speed it up. Indexes help a lot as well! Once the DB grew to \u0026gt;100k items queries used to take minutes, and now after some enthusiastic indexing can take \u0026lt;1s.\nSome fun things you can do with it:\nFind all pages at a particular host (limited to 100): /pages/en.wikipedia.org Get an overview of a particular page (just URL, host and links from, limited to 100): /page/HASH Find all links from a particular page (limited to 100): /linksFrom/HASH Find all links to a particular page (limited to 100): /linksTo/HASH The last one is currently not being used by myself, though I may make an inverse graph traversal, whereby you can discover all the pages that link to a page\u0026hellip;\nI\u0026rsquo;ve also set up my e-ink display to monitor the number of URL\u0026rsquo;s crawled and links found for my own amusement as well.\nSelf hosted?? #Yup, it\u0026rsquo;s slow as shit and is as reliable as my ISP (who apparently work on a best effort case), but thanks to some aggressive cloudflare caching, the most common endpoints should be relatively quick.\nPart 3: Graphical representation # \u0026ldquo;What would a visual representation of browsing the internet look like?\u0026rdquo;\nCheck it out at jamesjarvis.github.io/web-graph , and if you want to start from a website of your choosing, you can modify the url query param like: https://jamesjarvis.github.io/web-graph/?url={your_page_here}.\nBecause I couldn\u0026rsquo;t be bothered to set up a proper react application + build process for this project, the whole thing is in one html file, and actually transpiles the required javascript from reactJS source on load time - maybe not the fastest but hey this isn\u0026rsquo;t exactly a performance project + it\u0026rsquo;s so easy to deploy.\nYou can check out the whole front-end source here, ~200 lines is all you need for this beauty.\nI ended up using a react wrapper around D3.js for the actual graphing, and it made me remember just how much I love and hate javascript. It\u0026rsquo;s a rocky relationship.\nYou\u0026rsquo;ll also notice that running this site is very cpu intensive, and yes it is, nothing more to add really. My personal record was 1874 nodes and 3556 links expanded before my browser crashed, your mileage may vary.\nPart 4: What have I learnt from this? # Hardware can be a real bottleneck, next time use an SSD for IO intensive operations. Building services to be resilient to failure is extremely liberating. JavaScript still sucks to use, package management is still hell and documentation is generally just a bit weak, considering you get zero type information from the language itself. Proper database indexes are the difference between good and shit. Caching is still amazing. Some of my favourite snippets of code:\nChannel based interface for reading off of a queue #Look how neat this is, as waiting to read from the queue channel / sending to the processing channel are both blocking operations, this works as fast as these two components. We are also able to pre-fetch a number of items from the queue\u0026rsquo;s file if we wanted to improve performance a bit.\nThis also enables an easy method of gracefully shutting down the program.\nlinkProcessor, err := linkprocessor.NewLinkProcessor( linkStorage, 500, queue, 1, ) failOnError(err, \u0026#34;Could not initialise link processor\u0026#34;) log.Println(\u0026#34;Begin processing...\u0026#34;) urlProcessingChan := linkProcessor.SpawnWorkers(2) sigs := make(chan os.Signal, 4) signal.Notify(sigs, syscall.SIGTERM, syscall.SIGINT, syscall.SIGHUP, syscall.SIGKILL) ticker := time.NewTicker(10 * time.Minute) defer ticker.Stop() processing := true for processing { select { case s := \u0026lt;-sigs: processing = false log.Printf(\u0026#34;Received signal %s, shutting down gracefully...\\n\u0026#34;, s) case url := \u0026lt;-queue.DeQueue(): urlProcessingChan \u0026lt;- url case \u0026lt;-ticker.C: log.Printf(\u0026#34;%d urls in the queue\u0026#34;, queue.Length()) } } \u0026lt;-linkProcessor.GracefulShutdown() log.Println(\u0026#34;===== Shut down link processor =====\u0026#34;) Periodic batcher from a buffered channel #This is a slightly improved version from the original post.\nThis turns out to be a great way to convert a message by message insert operation into a batchable operation. It also works as a great way to rate limit database operations, as you can still fill up the channel up to the buffer size, and slowly drain it at whatever rate you choose.\nfunc (pb *PageBatcher) Worker(endSignal \u0026lt;-chan bool, doneChan chan\u0026lt;- bool) { // We want it to die on the endSignal, but otherwise keep looping for { select { case \u0026lt;-endSignal: doneChan \u0026lt;- true return case \u0026lt;-time.After(100 * time.Millisecond): var pages []*Page Remaining: for i := 0; i \u0026lt; pb.maxBatch; i++ { select { case page := \u0026lt;-pb.bufChan: pages = append(pages, page) default: break Remaining } } if len(pages) == 0 { break } // The batch processing err := pb.s.BatchAddPages(pages) if err != nil { log.Printf(\u0026#34;Batch adding pages failed!: %e\u0026#34;, err) } } } } ","date":"5 February 2021","permalink":"https://jamesjarvis.io/posts/2021/02/mapping-the-internet-part-two/","section":"","summary":"Links on links on links with a UI, man","title":"⠪ Mapping the Internet, part deux"},{"content":"Check it out on GitHub!\nSo this one is more of a revisit than a totally unique project, but this all came about thanks to a little sprinkling of dependency hell.\nThe goal of this little project was to be able to visualise my google location history (and other source of location info such as strava activities or workouts from my apple watch) on a strava style heatmap like this one.\nMy first foray into this was little more than a fork of luka1199/geo-heatmap link as I\u0026rsquo;m a sucker for believing that a lot of GitHub stars means a project is well maintained (silly me).\nA previous fork I made tried to incorporate Poetry link for more deterministic python dependency management and execution. Sounds good right?\nPython dependency hell #However, when trying to run this script after upgrading to macOS 11, I was getting some issues while trying to download NumPy (see more here).\nI know this may seem like a little issue, but the goal for this project was to simply rerun this script every year or so, minimal effort so I can just update a file with my latest location history.\nNumPy doesn\u0026rsquo;t work? Why the fuck not? Why do I care? What does NumPy have to do with creating a .html file?\nSince this is ultimately a fairly simple project I decided to just spend a couple hours and rewrite in one of the most backwards compatible languages I know of: Golang.\nI also wanted to reduce the dependency on random remote scripts in the resultant .html file as well, so I could open this file with no internet connectivity, in 50 years if I wanted to.\nYou cannot escape dependencies #Ok so this section is a little bit of a lie, given enough effort I\u0026rsquo;m sure you can.\nMy goal of just having a simple program I can run once every year with zero code touching is kinda sorta there (I haven\u0026rsquo;t given it enough time to check). I\u0026rsquo;m hoping that Go\u0026rsquo;s promise of constant backwards compatibility should help this out, and the removal of reliance on remote scripts means that as long as the one dependency I use in go doesn\u0026rsquo;t go offline, then we should be chill.\nWhy do you even have dependencies?\nI\u0026rsquo;m lazy, ok?\nOnly downside going ahead is that I am completely reliant upon the following packages (and github itself) remaining publicly accessible.\ngithub.com/tkrajina/gpxgo v1.0.1 github.com/urfave/cli/v2 v2.3.0 Whilst this little pain in the ass has taught me to be a little bit hesitant to blindly import random dependencies, tbh I\u0026rsquo;ll probs carry on doing so, because dependencies are hell but I love getting code for free.\n","date":"1 December 2020","permalink":"https://jamesjarvis.io/posts/2020/12/mappyboi/","section":"","summary":"Where did he come from, where did he go?","title":"🗺 Visualising location history"},{"content":"Once upon a time I was looking at my website, and I realised that I tend to link to a lot of random sites within each post I write.\nI thought it would be interesting to find out all of the sites that I link to, and see if I could categorise them.\nUnfortunately, I never really got around to figuring out the whole categorisation thing (like what do you even do? Manually classify them? Do some kind of NLP on the page title? These guys have attempted it previously but even that dataset only contains ~27k URL\u0026rsquo;s and seems fairly limited to UK sites).\nThis then got me thinking about what kind of sites link to me. This would be a backlink checker, that for some reason I had never heard of or thought about before.\nI knew that Google, the NSA and many others regularly crawl the internet in order to improve their search products - cloudflare explains it well - and I roughly knew that the more linked to your site was, the more popular it would be in search rankings.\nHowever I didn\u0026rsquo;t know how to find your individual backlinks - I just assumed it was some secretly guarded knowledge due to the sheer amount of effort required to find these backlinks.\nOf course, me being me I didn\u0026rsquo;t bother googling \u0026ldquo;uh how do i found out who links to my site on the interwebs pls\u0026rdquo;, I just thought it would be easier to build a crawler myself 🤦‍♂️.\nIf you want to find out your own backlinks from an actual SEO service, skip to Part 2\nPart 1: Building a link spider #I attempted and revisited this several times (to improve performance, mainly), but it basically started because I was heading to the middle of nowhere for a family holiday and I wanted to leave my laptop back at home doing some crawling while I couldn\u0026rsquo;t hear the fans.\nOriginally, I thought I would just write the crawler from scratch (it\u0026rsquo;s not hard to do tbf), but then I stumbled across Colly that looked like it could speed up development for me.\nMy original version just used a basic colly set up, with a simple postgresql db set up to record pages visited, and links from page to page. Simple enough, and took an hour or so to code, so I left it running the evening before we left to see how far it could go.\nWell, when I came back 4 days later I found that the fans had stopped, and discovered that the process had killed itself after scraping only 1.5 million links over 36 hours (averaging only ~12 links per second).\nI couldn\u0026rsquo;t see an obvious reason why it would have crapped itself, so I had a deeper look using go\u0026rsquo;s fantastic inbuilt pprof tool for delving into the internal stats of a running go app.\nWhat I had found out was that the crawler had likely ran out of memory, but most surprising to me was that colly\u0026rsquo;s crawlers seemed to just spawn another process for each a[href] element found, causing them to spawn hundreds of goroutines every second.\nThis is a bit daft, so the first improvement I made was to switch to colly\u0026rsquo;s queue mode, as that seemed to handle colly\u0026rsquo;s goroutine obsession, and allowed me to sacrifice scraping certainty (since any links found beyond the queue limit are just discarded) for runtime certainty.\nSecondly, let\u0026rsquo;s focus on that paltry 12 links/second. The first improvement I could think of was just spawning more processes, but the new bottleneck became the way that I was pushing data to postgresql.\nPreviously, I was just creating a new insert transaction every time a new link was found, that was hammering my db with well over 2000 transactions per second and likely being the reason why all of these goroutines were hanging around for so long.\nSo, I moved to batching, by creating n database workers, I could happily push as much data into them through some go channels, and then I could consume up to x links at a time from these channels, and whack those in the database in one go.\n// Worker is the worker process for the link batcher // This is straight up nicked from https://blog.drkaka.com/batch-get-from-golangs-buffered-channel-9638573f0c6e func (lb *LinkBatcher) Worker(endSignal chan bool) { // We want it to die on the endSignal, but otherwise keep looping for { select { case \u0026lt;-endSignal: // Die on endSignal received return default: var links []*Link // Now I\u0026#39;m typing this blog, I realise there is a potential deadlock here, // whereby the endSignal may not be received while we wait for the next link // oh well, turns out we never use an endSignal in an infinite scrape anyway ¯\\_(ツ)_/¯ links = append(links, \u0026lt;-lb.bufChan) remains := lb.maxBatch // Here we use a go label to break out of the repetition loop if there are no more links // in the channel, otherwise it will naturally break once the max batch size is reached. Remaining: for i := 0; i \u0026lt; remains; i++ { select { case link := \u0026lt;-lb.bufChan: links = append(links, link) default: break Remaining } } // Then we just whack those links into a database batch insert function. err = lb.s.BatchAddLinks(links) if err != nil { log.Printf(\u0026#34;Batch adding links failed!: %e\u0026#34;, err) } } } } Obviously, this introduces a whole bunch of fun async issues, such as potential duplicates and foreign key constraints (this can be solved by reorganising the db structure), and to that I say fuck it; ON CONFLICT DO NOTHING, turning a blind eye to those issues I should probably engineer out of this.\nThe only thing I did kinda care about was removing duplicates from being added to the channel, since if I was going to add 5000 links, with 4000 of those potential duplicates, it would seriously slow down any transaction.\nFor this, I just used a simple LRU Cache called golang-lru to filter out some of the most common URLs.\nIn the current iteration (that I\u0026rsquo;m not going to bother improving for the foreseeable future and you can critique here), I managed to collect ~ 50 million links between ~ 9 million pages in ~ 3 days.\nThat\u0026rsquo;s a happy 16x improvement upon my initial attempt, but I am unfortunately starting to hit the limits of my 7 year old laptop (running the COUNT(*) query just to get those numbers took several minutes with nothing else running\u0026hellip;)\nIf I can be fully bothered, I may write another post exploring the data, or leave it running a couple weeks and upload a csv file of the links found, but for now I\u0026rsquo;ll leave you with a couple interesting things I found:\nWikipedia is a crawler\u0026rsquo;s best friend, with the #1 number of pages found. Top 5 for reference:\nhost num_pages \u0026ldquo;en.wikipedia.org\u0026rdquo; 2375201 \u0026ldquo;twitter.com\u0026rdquo; 533493 \u0026ldquo;web.archive.org\u0026rdquo; 464023 \u0026ldquo;artuk.org\u0026rdquo; 394299 \u0026ldquo;t.co\u0026rdquo; 258350 I only managed to find a total of 5 external backlinks to \u0026lt;jamesjarvis.io\u0026gt; pages through this crawler, all of which I also link to within my own website, so I guess I would have had to run the crawler a LOT longer in order to organically find any proper backlinks.\nRegrettably, I am unable to draw any further conclusions, since my old ass laptop ran out of storage before completing this simple query for finding the top 5 backlinked sites:\nSELECT url, COUNT(from_page_id) AS num_backlinks FROM links_visited INNER JOIN pages_visited ON links_visited.to_page_id = pages_visited.page_id GROUP BY url ORDER BY num_backlinks DESC LIMIT 5 (No, really, apparently running this query took up 10GB+ of temporary storage on the database and since my laptop is filled with 200GB of \u0026ldquo;other\u0026rdquo;, it just died.)\n#GetJamesADecentDevMachine2021\nIn the future, I would like to continue with the original \u0026ldquo;mapping the internet\u0026rdquo; goal, and see if it would be possible to generate an image of the internet link graph? Although certainly not with this laptop\u0026hellip;\nPart 2: Actual SEO services for finding your own backlinks #Ok, that handcrafted web crawler might have been cool and all, but the max I could get before crashing my PC was only a few million links, at a pathetic 100 links/second.\nThis pales to the big leagues, who according to ahrefs have approximately a fuck ton more resources than I do for this kind of stuff. Some things you just have to leave to the professionals\u0026hellip;\nSo heres the list of all the free* backlink checkers if you are ever curious about your own SEO performance:\nAhrefs - seems to have the largest trough of data at their disposal. NeilPatel - I\u0026rsquo;ve started using this tool now and it seems pretty cool. Might be a good game to increase your backlinks overtime. SmallSEOTools - This one got some slightly weird results for me, so idk how good it is. SEOReviewTools - This one was kinda interesting, as it showed uses of static assets from my site. So if you want to see why one of your images is getting 1000+ views and your posts aren\u0026rsquo;t, this could help. TheHoth - Wants an email, not a fan of that. SiteChecker - Limits results so whilst you can see a count of backlinks, you can\u0026rsquo;t see more than 20 of the actual referring urls. ","date":"4 October 2020","permalink":"https://jamesjarvis.io/posts/2020/10/backlink-crawler/","section":"","summary":"Links on links on links, man","title":"⠪ Mapping the Internet (?)"},{"content":"So yeah, that text message above is the only celebration of completing university that I have\u0026hellip;\nMy sister graduated a year before me, and photos of her throwing her cap in the air are scattered around my family\u0026rsquo;s mantlepieces. Yet, all I have is a text?\nNow, I\u0026rsquo;m being a little unfair - obviously this is not just a problem for me, millions of students around the world are having to deal with a slightly dampened celebration to end their very expensive education. Furthermore, the university has said that they will try and hold a ceremony in November at the Cathedral (however, November is also a likely bet for a winter wave of coronavirus).\nBut, here I am.\nGrades #This is a simple one. The United Kingdom follows a three tier classification system, and you can read more about it if you really want to compare UK vs {insert country here} grades.\nFor me, I now have a First Class Honours Bachelors of Science degree in Computer Science (Artificial Intelligence) with a year in industry.\nAs is typical with most things I do, I logged these grades (including per module and per assignment, but that\u0026rsquo;s too boring to share) into a spreadsheet.\nI made the spreadsheet back in year 1, when I realised the path of least resistance of uni was to just work harder in the early years, to give yourself some headroom later on to get worse grades (or to just take a holiday and not work as hard as you should - like I tended to do). This turned out to be a good idea, as even though I ended up with 80.3% overall, you can see the trendline moving downwards!\nUltimately, do grades matter?\nWell, any additional effort I put in to get above 70% was kinda pointless, and probably time better spent kayaking or other socialising but 🤷‍♂️.\nI actually started looking for my next job before I graduated, and to be honest most of the recruiters didn\u0026rsquo;t ask my grade, not even my predicted.\nWhat they cared about most was my personal projects, previous work experience at Cisco, and Musish.\nBut at what cost? #Ok, I\u0026rsquo;m more than just a little bit salty at how much University costs.\nI\u0026rsquo;m not a fan of how all my peers blindly told me (and everyone of my age) to go to university ignore the fine print costs, and have a good time, go drinking, get good grades, get a job.\nIn my second year I realised how expensive it was to have fun at university, not to mention the 5.4% interest on all student loans!!\nSo, all my money saved from working in my third and fourth years I used to pay for my tuition, and I stopped going out as much to save some money. I\u0026rsquo;m just annoyed it took me almost 2 years to realise, and nobody even mentioned the real world impacts of this when I started.\nIf I had the option, I would have probably skipped the first year and jumped straight into the second year. Sure, there would be a little less time to party but I wasn\u0026rsquo;t exactly a sesh gremlin in my first year either.\nI\u0026rsquo;d much rather work hard and play hard.\nWhat I really learnt from university #Ultimately, I agree with a lot of the things said by Elon Musk, and others, that university is more for the social aspect than anything else.\nThat\u0026rsquo;s not necessarily a bad thing.\nI have never jumped out my comfort zone, tried more things, met more people, changed my opinions as much as I did at university.\nYou can see from my One Second Everyday videos just how amazing the experience was.\nWhat I loved was the sheer concentration of people all similar age, all trying to learn about something they are interested in.\nI used to tag along to lectures from different courses, and made WhatsUpKent, a little web app to make it easy for others to do the same. There\u0026rsquo;s nothing like walking out of a databases lecture and into a lecture on quantum mechanics, and then into a lecture on postmodern cartoons.\nThis curiosity and the knowledge that \u0026ldquo;yeah, I can actually do that if I want\u0026rdquo; is something that I treasure from my time at Kent, and I have to shout out the Travel Society, Sailing Club and Kayaking Club and all my housemates for being absolute legends 🙌.\nWhat next? #Well, I had hoped to take a few months off and travel a heck of a lot in 2020. But, coronavirus put an end to that.\nAs for the recession, well, I decided to get a job in a startup. ThoughtMachine to be precise, and whilst I\u0026rsquo;ve only been there for a couple weeks as of writing this I\u0026rsquo;ve been really enjoying the learning curve.\nYes, I know it\u0026rsquo;s not the smartest idea to work in a risky startup during a recession but hey, if I can\u0026rsquo;t go trekking across Australia I need to fulfil my risk appetite somehow 😉.\nI had hoped to move to London with a few friends but London\u0026rsquo;s rent is a little too high considering how much you are able to do there during a recession, so I have decided to stay with the fam for a bit.\n","date":"1 August 2020","permalink":"https://jamesjarvis.io/posts/2020/08/uni-memoirs/","section":"","summary":"Well, that was underwhelming\u0026hellip;","title":"👨‍🎓 Graduating in a Pandemic/Recession"},{"content":"From 23rd June 2019 to 23rd June 2020.\nWaved goodbye to Cali, met the fam in Florida. Quick catch ups with the friends and family I haven’t seen for a year then straight into the final part of my degree. Joined Kayaking this time, got to know some lovely people and even travel to Wales with them! Kept working part time with my Cisco team throughout uni, and tinkering in my free time. Took mum to Morocco, met some friends in Barcelona, and had a weekend in Amsterdam with Maj and Sam just a few days before the Coronavirus lockdown!\nLockdown meant I had to slow down a bit, enjoy time with the family and celebrate mine and my sister\u0026rsquo;s birthday at home for the first time in 4 years.\n","date":"23 June 2020","permalink":"https://jamesjarvis.io/posts/2020/06/21-years-old/","section":"","summary":"\u003cp\u003eFrom 23rd June 2019 to 23rd June 2020.\u003c/p\u003e\n\u003cp\u003eWaved goodbye to Cali, met the fam in Florida. Quick catch ups with the friends and family I haven’t seen for a year then straight into the final part of my degree.\nJoined Kayaking this time, got to know some lovely people and even travel to Wales with them! Kept working part time with my Cisco team throughout uni, and tinkering in my free time. Took mum to Morocco, met some friends in Barcelona, and had a weekend in Amsterdam with Maj and Sam just a few days before the Coronavirus lockdown!\u003c/p\u003e","title":"21 Years Old"},{"content":"Another one of my lockdown projects\u0026hellip;\nI\u0026rsquo;ve always like the idea of making an always-on display. Something like the Magic Mirror project here, or a productivity dashboard using an LCD display here, but I also wanted something that is a bit more visible in bright light and uses a little bit less electricity.\nHence, I settled on the idea of making a giant e-ink display that I could use to show whatever I wanted. Until I saw how expensive the panels are, and I settled on a much smaller 7.5\u0026quot; e-ink 2 colour display.\nWhat does it do? #Well, there\u0026rsquo;s a few modes (in case I ever get bored).\nNormally, I keep it in weather mode, whereby every 10 minutes it will update and show the following:\nThe red splotches are rain Temperature Current weather conditions Rain chart for the next few hours Air quality Sunrise and Sunset times The next time the ISS will pass overhead Weather radar of the UK (just because it looks cool) I won\u0026rsquo;t lie, the 3 hour rainwall forecast is nowhere near as accurate as DarkSky was, and the display panel I was sent didn\u0026rsquo;t display red\u0026rsquo;s anywhere near as vibrantly as other panels I have seen (I think it was just a faulty panel but I couldn\u0026rsquo;t be bothered to pay for shipping to China and wait another month), but overall it\u0026rsquo;s worked exactly as I have envisioned!\nThere\u0026rsquo;s also the cowsay mode, whose sole purpose is to present a random dad joke every hour, in the popular linux cli tool format.\ncowsay moo How to build it? #It\u0026rsquo;s relatively simple, really\u0026hellip;\nI like raw materials just as much as I like an easy assembly You only need a few components: A Raspberry Pi Zero W, an e-ink display (I chose this 7.5\u0026quot; 2 colour display from Waveshare), and something to mount it all one.\nThe instructions for putting it together are fairly self explanatory, so I\u0026rsquo;m not going to bore you. Setting up a headless Raspberry Pi (so you can just access it over SSH is explained beautifully simply over at the Raspberry Pi site) Aside from that it\u0026rsquo;s just plug and play.\nThe software is a little bit more of a pain in the ass, Waveshare have a GitHub repo with drivers for each of their displays, but no perfect method of building a UI for these displays, so the best way to push something to the display is in the form of a bitmap (essentially png) image. The refresh rate of the display is a pathetic ~1 minute so don\u0026rsquo;t worry too much about how long it takes to build that image.\nI have a repository with all the code for this project on my GitHub here, that you just need to clone into the RPI\u0026rsquo;s home directory, and then write your own settings.py file from the example file provided.\nIt makes extensive use of various API\u0026rsquo;s, including Climacell for the weather data, ISS Open Notify for the ISS times, ICanHazDadJoke for the dad joke service, and This online cowsay generator because I couldn\u0026rsquo;t be bothered to generate it myself, although looking back it would probably have been easier to do it manually.\nFor the map images, I used the OpenStreetMap Toner style tiles for the map and the MetOffice rain radar tiles for the rain overlays. I originally used OpenWeatherMap, but whilst it was good at global coverage of rainfall, it had very low resolution.\nTo run the scripts all you need to do is create a cron job for it to update every x minutes. You can enter the cron editor with crontab -e and just input */10 * * * * python3 /home/pi/mappyboi.py for a 10 minute update schedule.\nNext steps #I practically never do hardware projects and this has been super fun!\nI\u0026rsquo;m still thinking of ideas to use it for (if you have any ideas of a cool use for this format of display, contact me!)\nIdeas I\u0026rsquo;ve currently considered:\nCoronavirus cases tracker Public transit departure times Health dashboard Word clock ","date":"20 June 2020","permalink":"https://jamesjarvis.io/posts/2020/06/eink-dashboard/","section":"","summary":"Fun little rarely updating dashboard.","title":"☂️ E-Ink Weather Dashboard"},{"content":" Who knew plants could move so fast? Another lockdown project!\nFor some reason I\u0026rsquo;ve been getting into gardening over the lockdown, from building an automatic irrigation system for our newly built vegetable patch to taking part (and winning) a sunflower growing competition, it\u0026rsquo;s about the most interesting thing I could think of doing whilst being stuck in my house during a great spell of weather.\nThis year, for my birthday I received an indoor vegetable garden, and thought it would be fun to set up a timelapse camera to monitor the plants growing!\nSince I\u0026rsquo;m currently also slightly addicted to Raspberry Pi\u0026rsquo;s (now up to 4 in my collection!), I thought this would be a good use for one of them.\nSo, I bought the Raspberry Pi Zero W camera combo, strapped it to the side of the garden and adjusted the focus of the camera with a pair of pliers to improve the focus a little bit.\nThe end result is this cute little video:\nThis little video was the result of 2 months of growing and almost 200GB of images! I set up the camera to take a photo every 30 seconds (which in hindsight was a little bit too often, and the final video only took a frame each 16 minutes)\nScripts #I thought I would share the little script I used to pull images from the camera, sort them into good (clear, well exposed) and bad (too dark, fuzzy, etc), and then render them into a timelapse\u0026hellip;\nFirstly, on the camera all you need is a little script that helps with actually taking the photos:\n#!/bin/bash take () { DATE=$(date +\u0026#34;%Y-%m-%d_%H_%M_%S\u0026#34;) raspistill -t 100 -q 20 -o /home/pi/timelapse-images/$DATE.jpg } take sleep 29 take Just chmod +x it and add it to the cron jobs with crontab -e and if you want it to run every minute, then append this to the crontab:\n* * * * * bash /home/pi/camera.sh Now, on another computer (preferably faster and on the same network as your RPI), you can set up a little script like:\n#!/bin/bash echo \u0026#34;!!! Requires EXTERNAL-SSD to be plugged in at all times !!!\u0026#34; echo \u0026#34;Retrieving latest images\u0026#34; rsync -a -v --ignore-existing --remove-source-files pi@pi-cam.local:/home/pi/timelapse-images/ /Volumes/EXTERNAL-SSD/timelapse-images echo \u0026#34;Filtering and linking based on shutter speed to get rid of flickers - VERY SLOW STEP\u0026#34; echo \u0026#34;Checking and skipping a few thousand photos...\u0026#34; for f in /Volumes/EXTERNAL-SSD/timelapse-images/*.jpg do fname=$(basename $f) # If not bad and not good (ie: not sorted yet), process and filter if [[ ! -f /Volumes/EXTERNAL-SSD/filtered-timelapse-images/$fname \u0026amp;\u0026amp; ! -f /Volumes/EXTERNAL-SSD/bad-timelapse-images/$fname ]]; then ss=$(exiftool -exif:shutterspeedvalue -s -s -s $f | cut -c 3-) sss=${ss/.*} # If the correct shutter speed, then place in the filtered folder, else cache in the bad folder if [ \u0026#34;$sss\u0026#34; -gt 30 ]; then echo Linking $fname ln -s $f /Volumes/EXTERNAL-SSD/filtered-timelapse-images/$fname else echo Caching bad photo $fname ln -s $f /Volumes/EXTERNAL-SSD/bad-timelapse-images/$fname fi #else #echo Skipping $fname fi done echo \u0026#34;Generating timelapse\u0026#34; ffmpeg -r 1920 -pattern_type glob -i \u0026#39;/Volumes/EXTERNAL-SSD/filtered-timelapse-images/*.jpg\u0026#39; -vf \u0026#34;transpose=1\u0026#34; -vcodec libx265 -r 60 /Volumes/EXTERNAL-SSD/filtered-timelapse.mp4 -y echo \u0026#34;Done!\u0026#34; open /Volumes/EXTERNAL-SSD/ This script obviously requires an external ssd, and will require some modifications for you to use. It also requires ffmpeg to be installed locally, so make sure that\u0026rsquo;s all set up before any annoying errors hit you in the face.\nBasically all this script does is download the latest images from the RPI, delete them from the RPI once done, then filter them into symlinked directories of \u0026ldquo;good\u0026rdquo; and \u0026ldquo;bad\u0026rdquo; photos - essentially caching them.\nThen it triggers a rendering job that takes absolutely FOREVER to create a h.265 encoded timelapse of it all. (Originally I used h.264 but h.265 took up honestly 1/8th of the space without losing much quality which is fantastic!)\nP.S. The gif at the start of the page is generated with a one liner:\nffmpeg -ss 3 -t 20 -i /Volumes/JARVIS-SSD/filtered-timelapse.mp4 -filter_complex \u0026#34;[0:v] fps=10,scale=480:-1,split [a][b];[a] palettegen [p];[b][p] paletteuse\u0026#34; /Volumes/JARVIS-SSD/timelapse.gif However, gifs are rather inefficient, the better option would be an animated webp image, which is unfortunately not supported by GatsbyJS, nor some old browsers, but it would be 10% the size of the gif version (and better quality!) - to generate it I used the following command:\nffmpeg -ss 3 -t 20 -i /Volumes/JARVIS-SSD/filtered-timelapse.mp4 -filter_complex \u0026#34;[0:v] fps=10,scale=640:-1\u0026#34; -vcodec libwebp -lossless 1 -q 30 -preset default -loop 0 -an -vsync 0 /Volumes/JARVIS-SSD/timelapse.webp -y Hope you\u0026rsquo;ve enjoyed!\nBefore:\nAfter:\n","date":"2 June 2020","permalink":"https://jamesjarvis.io/posts/2020/06/indoor-garden-timelapse/","section":"","summary":"Watching plants grow","title":"📸 Indoor Garden Timelapse"},{"content":"2020 has been defined by The Lockdown (yay?). From March to July (and perhaps again, if the (potential) second wave is to come), basically everything shut down and we were all forced to spend time with family, and do nothing.\nWell, around this time I was thinking \u0026ldquo;what are the problems humanity will face in the next 100 years?\u0026rdquo;, and at some point I will write a little post outlining my daft ideas.\nBut during this, I came across the IPFS project, and I\u0026rsquo;m astonished at the idea of solving a problem that does not yet exist.\nWhat is IPFS #Their goal is to create a distributed web protocol that can help distribute content to where it is most requested. Ideally, this aims to prevent issues of enormous latencies that may arise from traditional centralised services, if humanity becomes interplanetary.\nAn example being, if you are living on mars, and the twitter servers are still hosted on earth, who would want to browse twitter if it took 13 minutes between opening twitter and each tweet starting to load?\nExactly, ain\u0026rsquo;t nobody got time for that. IPFS is basically a mix between a conventional file system, and torrents. The basic idea is that if an IPFS node requests a file (using a content-addressable hash), then that node automatically starts serving that file to other nodes requesting it. The benefit could be that if for example a video were to go viral, rather than the central server being absolutely hammered with requests, each person would essentially be downloading it off their neighbour, greatly reducing network congestion.\nNow, I am certainly not the first to do this, and a great write up can be found here.\nLong story short, I set up a little Go-IPFS node on my Raspberry Pi, and uploaded a copy of my site to this probably out of date mirror.\nNow, more detail:\nGatsbyJS sucks with IPFS #This website is (currently) built with GatsbyJS, as outlined here.\nOnly thing is, GatsbyJS does not support relative links by default. Sure, you can enable gatsby-plugin-ipfs to try and fix the relative urls problem, but it is not compatible with most other plugins.\nAs a result, Gatsby on IPFS does not work with manifests, sitemaps, or the most important gatsby-image integration.\nSo sure, if you browse the mirror on a normal browser, then it will work fine, since IPFS content is being forwarded through the cloudflare gateway the url is being formatted with the normal domain, and all the links work fine.\nHowever, if you browse the mirror on a browser with integrated IPFS (as it should do), then stuff like images and some other content will not load correctly.\nThe future #I spent a few hours on this problem, and honestly I just gave up.\nPerhaps in the future Gatsby will update to include relative URLs by default, but if you are absolutely desparate to host your content through IPFS, then I would recommend a different static site generator, such as Hugo.\nIf you are looking at a potentially commercially viable implementation of IPFS, I would recommend you check out Filecoin.\nI know, I know \u0026ldquo;not another cryptocurrency\u0026rdquo;, but this one is designed to pay people to host their content on IPFS, and in the future could potentially take on the big cloud providers?\n","date":"2 May 2020","permalink":"https://jamesjarvis.io/posts/2020/05/ipfs-web-hosting/","section":"","summary":"I thought IPFS was supposed to be permament\u0026hellip;","title":"📦 IPFS Web Hosting"},{"content":"Try it out here!\nSometime back in 2018, a friend of mine started building his own programming language, \u0026ldquo;Risotto\u0026rdquo; (GitHub link) (although I wanted the name to be \u0026ldquo;Ravioli\u0026rdquo; so the syntax could be \u0026ldquo;Ravioli Ravioli, give me the formuoli\u0026rdquo; (I know, I\u0026rsquo;m immature)).\nAnywho, I\u0026rsquo;ve enjoyed using services such as The Go Play Space and Repl in the past, and wanted to replicate this kind of environment (whilst paying 0 for hosting) for Risotto.\nThe API #Code\nThis runs on Kubesail for easy K8s deployment (and the free tier), with the API written in Go, and spawning a process running the code passed to it.\nIn order to keep the API service performant, there\u0026rsquo;s a little bit of IP addressed rate limiting, and runtime constraints, but overall the traffic is low enough that this hasn\u0026rsquo;t come close to being an issue yet.\nThe API is designed so that if anyone wants, they can use it for their own purposes, which is highly encouraged (get Risotto out there!)\nIt is also covered with Unit Tests, and automatic CI/CD.\nThe UI #play.risotto.dev\nCode\nThis is hosted with GitHub pages for easy CI/CD and just fantastic performance.\nWritten in React (TypeScript flavour), it\u0026rsquo;s fairly simple but is optimised for responsive design and even has a cute little \u0026ldquo;Share\u0026rdquo; feature, so you can share your creations with others.\n","date":"20 April 2020","permalink":"https://jamesjarvis.io/posts/2020/04/risotto-play/","section":"","summary":"Online playground for a useless programming language","title":"🍲 Risotto Play"},{"content":" This project was a slightly morbid experiment with data plotting and predictions.\nThe idea was to have a set of graphs that can automatically update as new data is published, since the coronavirus pandemic is such a rapidly changing event. A Python script was written to collect the latest data from John Hopkins University\u0026rsquo;s repo, and generate graphs (both exponential and logistical curve predictions) based on this data.\nThen, using the wonderful GitHub Actions, this script was rerun every hour, and if the graphs generated were different to previously, it would automatically commit and push these changes to the repo.\nI am not en expert, I\u0026rsquo;m just curious with how well the data can predict the future.\nAnother morbid graph (if you want to check out the previous predictions, you are welcome to go through the repo\u0026rsquo;s history to see how well it predicted as time progressed):\n","date":"19 March 2020","permalink":"https://jamesjarvis.io/posts/2020/03/predictions/","section":"","summary":"Learning about pandas","title":"🦠 COVID-19 (Coronavirus) automatic predictions"},{"content":"Monzo (here) is a digital \u0026ldquo;challenger\u0026rdquo; bank from the UK.\nI thought it would be interesting to use GitHub to automatically update and store data regarding the growth of Monzo\u0026rsquo;s current account user numbers. You can visit the page here.\nSince their website includes an auto updating tally of users, I just found the api and the python scripts utilise this.\nSimilar to the COVID-19 infection predictions, this uses GitHub actions to automatically update and store data regarding the growth of Monzo\u0026rsquo;s current account user numbers. It also builds a simple react webpage to display the data in a graph. Or, if you prefer you can download the data for yourself.\nFeel free to make a PR if you have some data that can fill in the gaps.\nSome (better) visualisations can be found here:\nGrafana current account growth Another, grafana approach ","date":"1 March 2020","permalink":"https://jamesjarvis.io/posts/2020/03/graphing-monzo-growth/","section":"","summary":"Finally, a bank people don\u0026rsquo;t hate","title":"📈 Graphing Monzo Growth"},{"content":"A quick monitoring project.\nAs anyone from the UK will know, our internet speeds aren\u0026rsquo;t quite up to par with the rest of the developed world (Don\u0026rsquo;t believe me? Check it out). From personal experience, I very rarely achieve the advertised internet speeds, even when directly connected to the router. Similarly, some ISP\u0026rsquo;s I have used seem to have loads of dropouts, and fairly poor response to criticisms of speed. So, I though I would try to monitor the internet a bit closer, I had a spare RPI hanging around not really doing much besides a minecraft server, and thought it would be an interesting experiment.\nSo, I set up an IFTTT webhook, and a cronjob on the RPI to automatically update a Google Sheets document with the latest speedtest results.\nInspiration thanks to this project, and I\u0026rsquo;ve had a lot of fun experimenting with the data retrieved.\nPart 1: University # Whilst at university, my internet was being provided by BT, and the fastest we could supposedly get was 35mb download speeds. However, we were having constant dropouts and nothing was being done about it.\nAs it turns out, we have NEVER achieved our advertised internet speed, and dropped out a number of times in the few months I have run this (although as it only runs every half hour, I\u0026rsquo;m pretty sure we have dropped out more frequently than this).\nOther interesting insights from this data include seeing how the Coronavirus internet surge did in fact slow down our internet as everyone moved to remote work.\nPart 2: Back Home # As mentioned previously, thanks to Coronavirus, the university campus (and all associated societies, events, basically anything fun) just abruptly stopped. So, I moved back in with the \u0026lsquo;rents.\nOur internet here is provided by Virgin Media, on a 350mb/s(!!) plan. Now unfortunately thanks to the Raspberry Pi I am using, the Ethernet port only supports 100 Base. As a result, none of the speedtests will actually reach 350mb/s (but if it drops below that, then we should see a difference).\n(Update - June 2020), upgraded to a newer Raspberry Pi, so should be able to show faster speeds.\nHowever, this connection actually has far more significant variance, with the most noticeable pattern contained within the upload speedtest (presumably virgin media throttles this channel to support more downloads at peak times). Something also to note is that this environment has ~ 5x more devices on the network, which could be a bit of an issue as well.\n","date":"10 January 2020","permalink":"https://jamesjarvis.io/posts/2020/01/speedtest/","section":"","summary":"How to check if your broadband provider is lying to you","title":"🌩️ Automated speedtest internet monitoring"},{"content":"In October 2019, I was looking for a challenge.\nUniversity (look mum, I\u0026rsquo;m on the front page!) was going ok, but I didn\u0026rsquo;t feel stimulated enough, and wanted to see what else there was on offer. Turns out paying £9k per year to learn from 20 year old textbooks isn\u0026rsquo;t exactly riveting, so I was looking to see what other interesting lectures I could discover on campus. Also, my friends and I liked to use disused seminar rooms to work in since the library was often overcrowded and I wanted an easy way to discover which seminar rooms were not being used.\nI also wanted to stretch my legs and learn a bit of Golang, Kubernetes, Typescript and Graph databases.\nSo, I decided to create a service that would gather all student\u0026rsquo;s timetables and present the information in an easy to use dashboard, to offer students the opportunity to explore other courses in their spare time.\nThanks to the university (accidentally?) publishing student timetables as publicly accessible ical links, it proves fairly simple to just brute force and scrape all ical timetables from their website. Of course, having to iterate through 50,000 timetables can be quite time consuming, so I chose Golang to write the server, thanks to it\u0026rsquo;s remarkably easy multithreading syntax.\nSince the data being retrieved was fundamentally relational, I chose to store it in a graph database called DGraph. This allowed me to achieve not only some quick queries on the data, I was also able to just easily expose a read only graphql endpoint directly to the database. Simple! :)\nAt this point, we are now looking at a few different services for the api: the scraper, a caching service (just to speed up repetetive large queries), and the dgraph database instance (which itself requires 2 pods). So, for deployment I chose to look towards Kubernetes. I bought the cheapests little VPS I could, and whacked on a k3s lightweight kubernetes instance and set that up in the CI/CD (ran with GitHub actions). As always, the frontend was hosted with GitHub pages.\nOverall, the project was a success. It managed to scrape (and continuously check for updates and re-scrape) thousands of lectures and seminars on campus, from all students, and all courses. It was hosted at whatsupkent.com, with the backend code hosted in GitHub. Unfortunately, I decided to close down the service before the uni got mad at me (also, I couldn\u0026rsquo;t be bothered to pay the £5 a month hosting fees), but relaunching it would be as easy as pie if demand ever increases for a service like this.\nA few screenshots #The API: Event info: Room finder: Agenda view: Filtered week: ","date":"4 November 2019","permalink":"https://jamesjarvis.io/posts/2019/11/whatsupkent-everything-happening-at-the-university-of-kent/","section":"","summary":"Finding out better lectures than the ones I was paying for","title":"📆 WhatsUpKent: Everything happening at the University of Kent"},{"content":"From 23rd June 2018 to 23rd June 2019.\nI moved to California for a year to pursue my dreams of Silicon Valley. Travelled by car more than I have ever before, became a much better developer, became somewhat American and much more independant.\nMade some incredible memories and international friends this year, but the pace isn\u0026rsquo;t slowing down any time soon!\n","date":"23 June 2019","permalink":"https://jamesjarvis.io/posts/2019/06/20-years-old/","section":"","summary":"\u003cp\u003eFrom 23rd June 2018 to 23rd June 2019.\u003c/p\u003e\n\u003cp\u003eI moved to California for a year to pursue my dreams of Silicon Valley. Travelled by car more than I have ever before, became a much better developer, became somewhat American and much more independant.\u003c/p\u003e","title":"20 Years Old"},{"content":"My roommate Tim (his LinkedIn) and I decided to start challenging ourselves with little applications we could develop.\nThe first thing we thought of was a way to decorate your GitHub activity board, example below:\nThe idea being that you could just draw or type (or both) anything that you wanted to on a canvas that represented your github activity board, and with one simple script you could create the required commits and upload that new repo to your GitHub.\nThis is thanks to a feature/flaw in git that allows you to create commits (even empty commits) with any date attached. Therefore, all we need to do to generate a cute little activity graph is to simply work out the date ranges required, how many commits to make each day, and to generate a script that allows the user to do this.\nWe used React for the front end, and wrote simple JavaScript functions to generate the bash script which is available for you to download and run.\nCheck out the website, or if you\u0026rsquo;d prefer, jump straight to the code\nMade open source under the WTFPL licence.\n","date":"5 February 2019","permalink":"https://jamesjarvis.io/posts/2019/02/git-art/","section":"","summary":"Commit stuff, with \u003cem\u003estyle\u003c/em\u003e","title":"🖊 Git Art"},{"content":"This very site you are reading, is open source, under the A-GPL licence with all the source code hosted on GitHub (fork off). You may fork it and fill in your own data if you wish, which is surprisingly easy to do, all thanks to GatsbyJS (link)!\nI created this with GatsbyJS as I wanted to have my own personal portfolio site which simply consumes data stored externally (though within the same repo), rather than hard coding everything, which I felt was the issue with many other portfolio sites.\nNow, I wanted to have a personal site so I could have a place to publicise the work I have done in the past, what I am planning in the future, and my thoughts and ramblings (As well as just to have a place for my \u0026lsquo;digital identity\u0026rsquo; where I can link together all of my online personas into a single place).\nI am a little bit cheap however, so after spending $30 on domain fees I didn\u0026rsquo;t want to spend any more money on actually hosting it. Which brings me to some of my favourite pieces of tech: the free kind.\nHow to host for no cost whatsoever #Since we are already using GitHub as a way to host our source code (for free!), we might as well use the latest and greatest GitHub Pages to host the page source files for free as well! (I know right!??).\nSince we are making a JAMStack site, all we have is front-end stuff which we just need to plonk in any old static web hosting provider. Other great examples are Netlify, and even on Zeit.\nTo build your site, I would recommend setting up a CI/CD integration using GitHub actions, and pointing this to deploy to whatever hosting service you use (GitHub pages is the easiest I feel as you only need to push changes to another branch/folder within your repo).\nThat is basically all you need to do.\nI would recommend also putting your site behind Cloudflare, as this can speed up access to your site due to the way they cache it on any of their CDN nodes - again, all for free!\nIf you get to the point where you would like a \u0026rsquo;lil bit of backend with your site, say for sending contact information or retrieving particular information which is too client-side heavy, then go Serverless!\nServerless lambda hosting is extremely quick to set up, maintain, and cheap! Not to mention the fact that you can choose between Amazon, Azure or Google to host your functions, the whole world of data hungry tech corporations are just begging to let you run code with them. Again, for FREE*(or super cheap).\nIf you are going to go down this whole rabbit hole, I\u0026rsquo;d recommend having a little read first.\nHave fun #Check out the code on GitHub https://github.com/jamesjarvis/jamesjarvis.io.\nAs mentioned before, feel free to fork it and change the content yourself.\nThe content is hosted in assets/ and src/pages/projects/.\nIf you have any more questions, reach out to me!\n","date":"2 February 2019","permalink":"https://jamesjarvis.io/posts/2019/02/portfolio-site/","section":"","summary":"I wanted a personal website, I made a personal website.","title":"🖥 Open Source Portfolio Website"},{"content":" On December 1st 2018, a group of friends and I attended the MLH Local Hack Day in San Francisco.\nMade by myself (me), Brychan (link), Raphael (link), and Filip (link).\nThis particular hackathon was sponsored by GitHub and Microsoft, and had a theme of creating the best open source project for the community. We came first in San Francisco for our project.\nWe decided to make an Apple Music web player, since pretty much every single other music streaming platform already had one. Some people aren\u0026rsquo;t sure why Apple Music would need a web player, since surely you could just use iTunes for that?\nWell, as was hilariously summarised in a comment on Macrumors, iTunes isn\u0026rsquo;t exactly lightweight.\nMusi.sh (Musish) is an open source project now, using the A-GPL license, and as of February 2019, has over 1400 stars, and 9 contributors.\nWe released it (sent out a few emails) while walking around Central Park, NY on the 18th January 2019. We weren\u0026rsquo;t really prepared with what was to come, and have since had quite a few articles written about it.\nAnalytics and Feedback #According to Google Analytics, we have had over 50,000 unique users on Musi.sh from over 110 different countries, and we have found some very positive articles written about it at least 13 different languages found so far.\nSome notable mentions:\nBusiness Insider Tech 100 2019 #97 University of Kent homepage University of Kent profile 9to5Mac 9to5Mac again Gizmodo Macrumors Cult of Mac The Next Web 01Net (France) My Apple (Poland) Twitter Also, we made it to #1 and #2 on GitHub trending for all JavaScript projects and all languages respectively on the 19th January 2019, which was our favourite achievement of all!\nNumber 1 on JavaScript trending Number 2 on GitHub trending ","date":"12 December 2018","permalink":"https://jamesjarvis.io/posts/2018/12/musish/","section":"","summary":"How I was kinda developer-famous for 5 minutes","title":"🎵 Musish: The Unofficial, Open Source Apple Music Web Player"},{"content":"From 23rd June 2017 to 23rd June 2018.\nMy second year of university, I was on the committee of both sailing and travel societies, I got some exciting job offers, ended a relationship and I said some sad goodbyes before my year in California!\nHad an amazing year, and I’ve loved documenting it like this. I can’t wait to find out what the next year (and this 3rd decade of life) has for me!\n","date":"23 June 2018","permalink":"https://jamesjarvis.io/posts/2018/06/19-years-old/","section":"","summary":"\u003cp\u003eFrom 23rd June 2017 to 23rd June 2018.\u003c/p\u003e\n\u003cp\u003eMy second year of university, I was on the committee of both sailing and travel societies, I got some exciting job offers, ended a relationship and I said some sad goodbyes before my year in California!\u003c/p\u003e","title":"19 Years Old"},{"content":"From 23rd June 2016 to 23rd June 2017.\nI didn\u0026rsquo;t manage to film every day, but I\u0026rsquo;m so glad I started this, and I don\u0026rsquo;t plan on stopping any time soon.\n","date":"23 June 2017","permalink":"https://jamesjarvis.io/posts/2017/06/18-years-old/","section":"","summary":"\u003cp\u003eFrom 23rd June 2016 to 23rd June 2017.\u003c/p\u003e\n\u003cp\u003eI didn\u0026rsquo;t manage to film every day, but I\u0026rsquo;m so glad I started this, and I don\u0026rsquo;t plan on stopping any time soon.\u003c/p\u003e","title":"18 Years Old"},{"content":"","date":null,"permalink":"https://jamesjarvis.io/categories/","section":"Categories","summary":"","title":"Categories"},{"content":"Longer-form writing about investing: what I hold, why I hold it, and what I get wrong.\nI\u0026rsquo;m not a financial adviser and none of this is advice. It\u0026rsquo;s a record of my own decisions and reasoning, published mostly so future me can see how badly present me judged things.\nIf this is the only topic you want from me, subscribe to this page\u0026rsquo;s feed rather than the site-wide one.\n","date":null,"permalink":"https://jamesjarvis.io/tags/investments/","section":"","summary":"\u003cp\u003eLonger-form writing about investing: what I hold, why I hold it, and what I get wrong.\u003c/p\u003e","title":"Investments"}]