<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://gosha.net/feed.xml" rel="self" type="application/atom+xml" /><link href="https://gosha.net/" rel="alternate" type="text/html" /><updated>2026-09-15T00:12:57+01:00</updated><id>https://gosha.net/feed.xml</id><title type="html">Gosha Tcherednitchenko</title><subtitle>Photography, design, writing, and software projects by Gosha Tcherednitchenko</subtitle><author><name>Gosha Tcherednitchenko</name></author><entry><title type="html">British</title><link href="https://gosha.net/2026/british/" rel="alternate" type="text/html" title="British" /><published>2026-09-13T10:05:00+01:00</published><updated>2026-09-13T10:05:00+01:00</updated><id>https://gosha.net/2026/british</id><content type="html" xml:base="https://gosha.net/2026/british/"><![CDATA[<p>T. and I had our citizenship ceremony this week, which marked the last step in the process of becoming naturalised British citizens.<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup></p>

<figure>
<img src="/assets/images/posts/2026/british/signing.jpg" alt="The author sitting at a desk covered with a British flag, holding a quill and apparently signing something" />
<figcaption>Signing something, in style</figcaption>
</figure>

<p>Overall, this was a pretty straightforward and streamlined process. The EU Settlement Scheme had just become available when we got married, and we pretty much rode that train to citizenship: we waited for settled status, then another year, then applied, and six months later we received the email notifying us of the favourable outcome.</p>

<p>I think the National Insurance Number system and the digital records tied to it played a major part in making this straightforward: we didn’t need to supply proof of employment, proof of tax payment, etc., as this was all already in the system. As a result, the application process was not complex, and only presented a couple of annoyances:</p>

<ul>
  <li>We needed to submit scans of every page of our passports (even the empty ones). This took a while to put together.</li>
  <li>We needed to provide the dates of every trip we took in the last five years. It’s not like we travel much, but this was still a pain. Photo timestamps helped a lot here.</li>
  <li>And of course, the eye-watering cost of the application: £1700 per person!</li>
</ul>

<p>Because we acquired our settled status through the EU Settlement Scheme, we also needed to pass the Life in the UK test before applying for citizenship.<sup id="fnref:2"><a href="#fn:2" class="footnote" rel="footnote" role="doc-noteref">2</a></sup> The test left a strange taste in my mouth: I found that thanks to growing up and going to school in France, I knew or could fairly reliably guess the answers to most questions. T., having grown up in Taiwan, did not have all this context, and getting a pass ended up being much harder for her. This hardly feels very fair, especially because the questions that were the most guessable for me were of the, shall we say, less-useful-to-know type, and it’s a bitter feeling to fail the test on a technicality. Overall, I understand why this test exists, but the format reminds me of the algorithm puzzle technical interviews some tech companies force on candidates: a fundamentally flawed way to measure something important.</p>

<p>The ceremony itself, at our borough’s Register Office, was quite formal, but also felt like a happy occasion, with the officials making jokes and otherwise keeping things fun. We, as a group, recited the affirmations of allegiance in front of a portrait of the King, and, awkwardly<sup id="fnref:3"><a href="#fn:3" class="footnote" rel="footnote" role="doc-noteref">3</a></sup>, sang <em>God Save the King</em>, then got selfies with the borough Mayor in her traditional civic regalia, and were on our way.</p>

<hr />

<p>So now we’re British! The whole family: the two of us and the kids have, at last, a shared citizenship between all of us,<sup id="fnref:4"><a href="#fn:4" class="footnote" rel="footnote" role="doc-noteref">4</a></sup> so <del>when</del>if shit goes down, we can all stick together; and as a nice bonus we get to vote and nudge the country in the direction our values point us.</p>

<p>As a third culture kid, there’s always been a tenuous connection between citizenship and belonging. Do I really belong in Britain? Does my family? As far as London is concerned, at least, I think the answer is yes, but I believe this was already the case before I became a citizen.</p>

<p>There are different approaches and attitudes towards naturalisation,<sup id="fnref:5"><a href="#fn:5" class="footnote" rel="footnote" role="doc-noteref">5</a></sup> but I think for us, what it comes down to is an additional layer of perceived safety for our family against potential future unhingedness of global politics. Which is not a bad thing to have at all!</p>

<figure>
<img src="/assets/images/posts/2026/british/guest.jpg" alt="A baby with a sticker saying 'citizenship ceremony guest' on the back of his jacket" />
<figcaption>The smallest citizenship ceremony guest</figcaption>
</figure>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>Not <em>quite</em> the last step, actually: we still need to apply for British passports, at a cost of over £100/person. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2">
      <p>People who go the normal route need to pass this test before applying for Indefinite Leave to Remain. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3">
      <p>“Awkwardly” because it looked as though no-one knew the words. We certainly did not: the official ceremony guidance didn’t mention this part, so we did not prepare. <a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:4">
      <p>The kids, having been born in the UK, are already citizens. <a href="#fnref:4" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:5">
      <p>For a great example, see <a href="https://www.derekwessman.com/blog-1/natural">Derek’s excellent post</a> on becoming a citizen of Japan. <a href="#fnref:5" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Gosha Tcherednitchenko</name></author><category term="personal" /><category term="family" /><category term="citizenship" /><category term="united kingdom" /><summary type="html"><![CDATA[T. and I had our citizenship ceremony this week, which marked the last step in the process of becoming naturalised British citizens.1 Not quite the last step, actually: we still need to apply for British passports, at a cost of over £100/person. &#8617;]]></summary></entry><entry><title type="html">Project added: Ramallah Moments</title><link href="https://gosha.net/2026/ramallah-moments/" rel="alternate" type="text/html" title="Project added: Ramallah Moments" /><published>2026-09-04T23:51:00+01:00</published><updated>2026-09-04T23:51:00+01:00</updated><id>https://gosha.net/2026/ramallah-moments</id><content type="html" xml:base="https://gosha.net/2026/ramallah-moments/"><![CDATA[<figure>
  <a href="/projects/ramallah-moments">
  <img src="/assets/images/projects/ramallah-moments/index_header.jpg" alt="A watchtower at the Kalandia checkpoint between Israel and the West Bank" />
  </a>
  <figcaption>
    A watchtower at the Kalandia checkpoint between Israel and the West Bank
  </figcaption>
</figure>

<p>I’ve added an old project to the Projects section: <a href="/projects/ramallah-moments">Ramallah Moments</a>.</p>

<p>This is an account of a two-day trip I took in 2008 to Ramallah, a city in the West Bank, and the neighbouring refugee camp of Ammari.</p>

<p>I was 25 then, trying to break into photojournalism, and when the opportunity for this trip came along, I took it without hesitation. I was accompanying an American journalist, and I spent my time in Ramallah and Ammari observing, listening, and photographing.</p>

<p>The trip made such an impression on me that, when I returned home, I wrote this account, which was probably my first ever piece of self-initiated serious writing. I tried to pitch it to various publications at the time, without success.</p>

<p>I came across this text and these photos when cleaning an old hard drive a while ago, and I was unsure whether I should publish this project here.</p>

<p>I decided to put it up. There are parts of this text that I would write differently today, but I think, overall, that it’s an interesting account of five moments in a specific place at a specific time, as experienced by the person who I was, eighteen years ago.</p>]]></content><author><name>Gosha Tcherednitchenko</name></author><category term="projects" /><category term="writing" /><category term="photography" /><category term="ramallah" /><category term="west-bank" /><category term="palestine" /><summary type="html"><![CDATA[A watchtower at the Kalandia checkpoint between Israel and the West Bank]]></summary></entry><entry><title type="html">I loved the MoMA</title><link href="https://gosha.net/2026/moma/" rel="alternate" type="text/html" title="I loved the MoMA" /><published>2026-08-26T23:01:52+01:00</published><updated>2026-08-26T23:01:52+01:00</updated><id>https://gosha.net/2026/moma</id><content type="html" xml:base="https://gosha.net/2026/moma/"><![CDATA[<figure>
<img src="/assets/images/posts/2026/moma/starry-night.jpg" alt="A photograph of a crowd of people in front of Van Gogh's 'Starry Night' at the Museum of Modern Art in New York City " />
<figcaption>VVG’s “Starry Night” IRL</figcaption>
</figure>

<p>I recently had the opportunity to visit the <a href="https://moma.org">Museum of Modern Art</a> in New York City.</p>

<p>As a long-time photographer (and a one-time photography student), the MoMA’s Photography department, once led by <a href="https://en.wikipedia.org/wiki/John_Szarkowski">John Szarkowski</a>, has been legendary: it’s thanks to this curator and this museum that we are now familiar with the greats of New York photography: <a href="https://www.moma.org/artists/2002-lee-friedlander">Lee Friedlander</a>, <a href="https://www.moma.org/artists/208-diane-arbus">Diane Arbus</a>, <a href="https://www.moma.org/artists/6399-garry-winogrand">Garry Winogrand</a>, all came to prominence thanks to “<a href="https://www.moma.org/calendar/exhibitions/3487">New Documents</a>”, an exhibition Szarkowski curated at the MoMA in 1967; <a href="https://www.moma.org/artists/1690-william-eggleston">William Eggleston</a> cemented colour photography as a legitimate art form with another Szarkowski-curated show in 1976.</p>

<p>Beyond these exhibitions (and those of the Szarkowski’s predecessor, <a href="https://en.wikipedia.org/wiki/Edward_Steichen">Edward Steichen</a>) and the associated writing, I was not familiar with this museum, until we had a chance to visit it on a trip to NYC this summer. We took a couple of hours, two small kids in tow, to do a brisk walk-through of the 5th floor, home to the museum’s permanent collection, and visited the cafeteria and the museum shop in the basement.</p>

<p>The space itself is impressive: nested in the heart of Manhattan’s hectic Midtown, a block off 5th Avenue, but huge and airy, with wide open spaces and a garden… stepping into the museum from West 53rd Street feels like entering a different world.</p>

<figure>
<img src="/assets/images/posts/2026/moma/courtyard.jpg" alt="A photograph of an open space inside the MoMA, with people lounging on round seats. A tall, wide window separates the space from a courtyard, which includes more seating and some trees" />
<figcaption>Open space on the first floor</figcaption>
</figure>

<p>The art is, of course, incredible too. The centrepiece of the museum is Van Gogh’s “Starry Night”, which is so popular it’s impossible to get close to, but there are many, many other works that are no less breathtaking: works by Monet, Malevich, Matisse fill up my phone’s camera roll<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup>.</p>

<p>Having been a parent for over four years now, the times where my partner and I could do something truly for ourselves are few and far in between, and walking through these spaces, looking at the works (trying to <em>be</em> with them, to the extent possible) reminded me that I also have parts of me that are really into this kind of thing, who thrive on taking the time and trying to really look.</p>

<p>It was an exhilarating feeling! Part way through our visit, I turned to my partner and told her that when the kids are a bit bigger, I’d love to come back, just the two of us, and spend the whole day wandering the museum. And so it shall be.</p>

<hr />

<figure>
<img src="/assets/images/posts/2026/moma/kaesebier.jpg" alt="A photograph of a framed, dark-toned early 20th century photographic print showing a family: a man in a dark suit seated in the centre, a woman standing behind him by a window, and two children in straw hats in the foreground" />
<figcaption>Gertrude Käsebier’s portrait of photographer Clarence H. White and his family (1908)</figcaption>
</figure>

<figure>
<img src="/assets/images/posts/2026/moma/coburn.jpg" alt="A photograph of a framed black and white photograph taken from high above a snow-covered park, showing dark, curving paths and bare trees radiating out from a central circle, with the long shadow of a tall building falling across the snow" />
<figcaption>Alvin Langdon Coburn’s “The Octopus” (1912), Madison Square Park seen from above</figcaption>
</figure>

<figure>
<img src="/assets/images/posts/2026/moma/agapanthus.jpg" alt="A photograph of a large square painting by Monet of agapanthus flowers: clusters of pale purple blooms on tall stems over a swirling mass of green and blue brushstrokes" />
<figcaption>Monet’s “Agapanthus” (1914–26)</figcaption>
</figure>

<figure>
<img src="/assets/images/posts/2026/moma/white-on-white.jpg" alt="A photograph of a square painting on a beige wall: a tilted off-white square on a slightly warmer white background, with visible brushstrokes and cracking in the paint" />
<figcaption>Malevich’s “Suprematist Composition: White on White” (1918)</figcaption>
</figure>

<figure>
<img src="/assets/images/posts/2026/moma/samovar.jpg" alt="A photograph of a cubist painting in a dark wooden frame: fragmented grey, blue, ochre and white planes, with the rounded shape of a samovar and its spout discernible in the centre" />
<figcaption>Malevich’s “Samovar” (1913)</figcaption>
</figure>

<figure>
<img src="/assets/images/posts/2026/moma/bal-tabarin.jpg" alt="A photograph of a large, colourful futurist painting of dancers in a Paris cabaret: fragmented swirling figures in purple, red and blue dresses, with the words ‘POLKA’ and ‘VALSE’ painted in among the shapes" />
<figcaption>Gino Severini’s “Dynamic Hieroglyphic of the Bal Tabarin” (1912)</figcaption>
</figure>

<figure>
<img src="/assets/images/posts/2026/moma/trip-to-the-moon.jpg" alt="A photograph of a framed ink drawing of the moon with a grimacing human face and a rocket lodged in its eye, surrounded by dark clouds and stars, captioned ‘Trip to the Moon’ and ‘Le Voyage dans la Lune’ and signed G. Méliès 1902" />
<figcaption>Georges Méliès’ drawing for “A Trip to the Moon” (1902)</figcaption>
</figure>

<figure>
<img src="/assets/images/posts/2026/moma/matisse.jpg" alt="A photograph of a small child with a ponytail, in a white t-shirt and pink shorts, standing with a hand raised to her face in front of Matisse's huge painting 'Dance (I)', showing five pink figures dancing in a circle on a green hill against a blue sky" />
<figcaption>Our eldest taking in Matisse’s “Dance (I)” (1909)</figcaption>
</figure>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>Wait a sec… Did I inadvertently spend most of my time in the “M” section? <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Gosha Tcherednitchenko</name></author><category term="nyc" /><category term="museum" /><category term="art" /><category term="modern art" /><category term="moma" /><category term="travel" /><category term="kids" /><summary type="html"><![CDATA[VVG’s “Starry Night” IRL]]></summary></entry><entry><title type="html">Launching Parts</title><link href="https://gosha.net/2026/parts/" rel="alternate" type="text/html" title="Launching Parts" /><published>2026-07-29T09:48:53+01:00</published><updated>2026-07-29T09:48:53+01:00</updated><id>https://gosha.net/2026/parts</id><content type="html" xml:base="https://gosha.net/2026/parts/"><![CDATA[<div class="full-width-photos">
  <div class="photo">
    <a href="https://parts.ifs.tools?utm_source=gosha-blog" target="_blank">
      <img src="/assets/images/posts/2026/parts/parts-screenshot.png" alt="A screenshot of a browser window showing the homepage of Parts, the IFS parts mapping tool" />
    </a>
  </div>
</div>

<p>For the last two years, T. and I have been building <a href="https://parts.ifs.tools?utm_source=gosha-blog">Parts</a>, a mapping tool for practitioners of a therapeutic modality called <a href="https://en.wikipedia.org/wiki/Internal_Family_Systems_Model">Internal Family Systems</a><sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup>. In this modality, a therapist works with a person’s “parts”, and a common practice for therapists, as part of their note-keeping, is to put together a map of these parts, and how they relate to each other.</p>

<p>This is commonly done on paper, and, as new parts and new relationships are discovered in following sessions, the maps need to be updated, and changes need to be tracked. We thought it could be useful to have a digital version of this, which is exactly what Parts is trying to be.</p>

<p>As it is today, the software allows therapists to create multiple maps, map parts and relationships, track relationships’ intensity and parts’ locations in the body, and observe a map’s evolution across multiple sessions.</p>

<p>It seems like there’s some demand for this kind of tool, as we’ve had about a hundred people on the waiting list, with virtually no advertising (I did make <a href="https://www.reddit.com/r/InternalFamilySystems/comments/1g72sry/looking_for_your_input_building_tools_for_ifs/">a single post in the IFS subreddit</a> two years ago while doing market research). <a href="/2025/son">Our son, E</a>, was born in the meantime, so it took us a while to get Parts to a place where it can be safely used for real work, but a couple of weeks ago, we finally started to slowly give access to the people who had signed up<sup id="fnref:2"><a href="#fn:2" class="footnote" rel="footnote" role="doc-noteref">2</a></sup>.</p>

<p>Here’s a (hopefully endearingly) awkward walkthrough I’ve recorded at that time, to help our users get a grasp of what they could do with Parts:</p>

<div class="video-container">
  <iframe src="https://www.youtube.com/embed/72YCRfGvcjU" title="Using Parts" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</div>

<p>It’s scary to finally let real people use the tool we built, but it’s also super exciting to see what they will do with it, and to learn from them!</p>

<blockquote>
  <p>Parts is free to use during the public beta. <a href="https://parts.ifs.tools?utm_source=gosha-blog">Sign up here</a>!</p>
</blockquote>

<h2 id="security-and-data-safety">Security and data safety</h2>

<p>Since Parts is dealing with sensitive mental health information, we’ve taken a lot of care in ensuring this information is kept safe. Data is encrypted at rest, and encrypted backups are performed daily. Both the server on which Parts runs and the encrypted backup storage are physically located in the European Union.</p>

<p>We also take data ownership seriously: a therapist can at any point choose to export all of their data, and deletion requests are honoured within 30 days, after which all data (including historical data) is gone from both the servers and the backups. You can read more about our policies in our <a href="https://parts.ifs.tools?utm_source=gosha-blog/terms">Terms of Service</a>, <a href="https://parts.ifs.tools?utm_source=gosha-blog/privacy">Privacy policy</a>, and <a href="https://parts.ifs.tools?utm_source=gosha-blog/dpa">Data Processing Agreement</a>.</p>

<h2 id="future-plans-collaboration">Future plans: collaboration</h2>

<p>For now, Parts is deliberately simple: we wanted to have the minimal set of functionality that would be useful for working IFS practitioners, but we have exciting ideas for the roadmap.</p>

<p>Currently, a therapist does the mapping work, and can export the map as a PDF file, which they can email to the client, as support for homework for example. We’ve had good feedback about this feature, but we want to take it further.</p>

<p>In the future, a therapist would be able to invite their client to collaborate on the map, enabling the client to access the therapist’s notes in their richness (with, of course, controls on what is shared). A client would be able to review the therapist’s notes, adding their own input, and making sure the next session starts from a much more thorough shared understanding.</p>

<h2 id="cool-technical-stuff">Cool technical stuff</h2>

<p>As the engineer on the project, I’ve treated Parts as a kind of experiment in building serious software<sup id="fnref:3"><a href="#fn:3" class="footnote" rel="footnote" role="doc-noteref">3</a></sup> that I’d enjoy working on.</p>

<p>Parts is a Clojure application, actually my first serious attempt at one. Working on it has forced me to learn a massive amount, and I’m more than grateful to folks like <a href="https://github.com/ovistoica">Ovi Stoica</a>, <a href="https://tonsky.me">Nikita Prokopov</a>, <a href="https://corfield.org/">Sean Corfield</a>, <a href="https://arnebrasseur.net/">Arne Brasseur</a>, <a href="https://practical.li">John Stevenson</a>, <a href="https://github.com/roman01la">Roman Liutikov</a>, and many others, who have helped me get a sense of how to build a real Clojure app. The Clojure community is truly amazing!</p>

<p>Speaking of data, one aspect of the Parts architecture that I’m excited about is its bi-temporal database, which is a way to keep track of the changes an entity undergoes over time. Let’s say a Part has been created as an “Unknown” type, then later was updated to be an “Exile”, and later had some notes added to it. In a regular relational database, this would be the same row in a <code class="language-plaintext highlighter-rouge">parts</code> table, destructively updated over time; in a bi-temporal setup, each of these changes creates a new row, with each row having a validity period and a transaction time, which allows the application to determine which row is valid at which point in time, as well as to make corrections to past facts while still keeping an audit trail.</p>

<p>Parts uses a variant of the <a href="https://learn.microsoft.com/en-us/shows/cituscon-an-event-for-postgres-2023/implementing-temporal-features-in-postgresql-sql-standard-and-beyond-citus-con-2023">Dombrovskaya implementation</a> on top of PostgreSQL 16, and this setup is what powers our time travel feature that allows therapists to see the state of the map for previous sessions<sup id="fnref:4"><a href="#fn:4" class="footnote" rel="footnote" role="doc-noteref">4</a></sup>.</p>

<mastodon-post>
  <blockquote lang="en" cite="https://merveilles.town/@gosha/116563835529777358" data-source="fediverse">
    <img class="avatar" src="/assets/images/icons/mastodon-avatar.png" alt="" />
    
    
    <header>
      <a class="author-name" href="https://merveilles.town/@gosha">gosha</a>
      <a class="author-handle" href="https://merveilles.town/@gosha">@gosha@merveilles.town</a>
    </header>
    I gotta say I feel pretty smug to be able to reference “the Dombrovskaya implementation” in casual banter
    <footer>
      <a href="https://merveilles.town/@gosha/116563835529777358"><time datetime="2026-05-12T23:56:15.044Z">12/05/2026, 23:56</time></a>
    </footer>
  </blockquote>
</mastodon-post>

<p>Parts runs on an Ubuntu VPS at Hetzner that I manage myself. My intention was to understand as much of our infrastructure as possible: this is important to me because I want to have a clear understanding of how and where our customers’ data flows. I tried to keep things simple: the uberjar<sup id="fnref:5"><a href="#fn:5" class="footnote" rel="footnote" role="doc-noteref">5</a></sup> is launched as a <code class="language-plaintext highlighter-rouge">systemd</code> service, the database is old boring reliable Postgres 16, deployment happens manually over rsync, and so on.</p>

<p>Finally, Parts is open-sourced on GitHub at <a href="https://github.com/apossiblespace/parts">apossiblespace/parts</a>, under the terms of the GPLv3 license<sup id="fnref:6"><a href="#fn:6" class="footnote" rel="footnote" role="doc-noteref">6</a></sup>. The intention has always been for people and organisations to be able to host their own instances of Parts (for example, for a group practice), and, while the documentation is not quite ready yet, in practice there’s nothing stopping someone from running their own instance right now.</p>

<h2 id="this-is-fun">This is fun!</h2>

<p>I’m honestly excited to work on Parts, and to see it put out in the world. For as long as I remember working in software, I always wanted to build tools that would help people doing meaningful work. Making Parts feels like a huge step towards making that dream a reality! There’s no way to tell yet if the product will be successful enough to sustain my family, but this feels like the right direction to be heading in.</p>

<blockquote>
  <p>If you are an IFS practitioner, and want to try Parts (it’s free to use while in beta), please leave your email address on <a href="https://parts.ifs.tools?utm_source=gosha-blog">the website</a>, and you will receive an invite to create an account shortly after.</p>
</blockquote>

<p>Let’s go!</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>The idea for Parts came to us while T. was doing her IFS level 1 training in Bristol. By hanging out on the fringe of the training, I was very impressed by the modality itself, and by the people working in it, and I was eager to find a way to contribute, in my own way. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2">
      <p>We consider Parts to be in a public beta phase at the moment, and it is free to use while this phase lasts. Eventually, however, we will be charging a subscription fee. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3">
      <p>For many years, I was frustrated with what I saw as a derivative aspect of a lot of my work: I’d follow documentation and apply existing patterns to slightly different problems. It didn’t feel unserious, exactly, but the stakes were never very high, and the work didn’t ask me to step very far out of my comfort zone. Parts, being an application supporting important mental health work, feels like a different level of responsibility altogether. <a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:4">
      <p>This is shown at around <a href="https://youtu.be/72YCRfGvcjU?t=351">the 5:51 mark</a> of the walkthrough video. <a href="#fnref:4" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:5">
      <p>Clojure runs on the JVM (Java Virtual Machine), and an uberjar is JVM lingo for the single archive produced by compiling the application and all its dependencies. The JVM and the app’s uberjar are all that’s needed to run an application anywhere. <a href="#fnref:5" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:6">
      <p>I chose GPLv3 over, say, the MIT license because I want any forks made of Parts to remain open source. <a href="#fnref:6" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Gosha Tcherednitchenko</name></author><category term="parts" /><category term="clojure" /><category term="IFS" /><category term="internal family systems" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">A taste of BTS</title><link href="https://gosha.net/2026/bts/" rel="alternate" type="text/html" title="A taste of BTS" /><published>2026-06-30T22:24:02+01:00</published><updated>2026-06-30T22:24:02+01:00</updated><id>https://gosha.net/2026/bts</id><content type="html" xml:base="https://gosha.net/2026/bts/"><![CDATA[<p><a href="https://en.wikipedia.org/wiki/BTS">BTS</a> is currently the biggest musical group in the world. Although I was aware of them for a few years, I only recently took a deep dive into their history and their discography. Below, I want to share a few of their tracks that I came to love, as a fan of hip-hop who slowly but surely turned into a fan of BTS.</p>

<p>And below <em>that</em>, if you are so inclined, you can read some more of my thoughts on this very unusual group.</p>

<hr />

<div class="video-container text-width">
  <iframe src="https://www.youtube.com/embed/M9Uy0opVF3s" title="Intro: Persona" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</div>

<p><strong>Intro: Persona</strong> is a RM<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup> solo track, with incredible flow and pace in my opinion. The lyrics are about trying to figure out who you are, among your multiple personas. I prefer the official MV over the various live versions, just because the visuals are so fun.</p>

<div class="video-container text-width">
  <iframe src="https://www.youtube.com/embed/wGI0ScNzt0U" title="Intro: Never Mind" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</div>

<p><strong>Intro: Never Mind</strong>: another intro, a Suga solo this time, short but hard-hitting. This live version is my favourite, it gives me shivers each time, especially when the other members join him on stage</p>

<div class="video-container text-width">
  <iframe src="https://www.youtube.com/embed/LQqzm2wCB7A" title="Ddaeng" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</div>

<p><strong>Ddaeng</strong>: this is a fun song that features all three rappers. It also has extensive, masterful wordplay (<a href="https://www.youtube.com/watch?v=fdJl1SL03Ac">here’s a good video explainer</a>). Each member of the rap line has his own verse; RM’s part at the end, with the stutter, is incredibly fun.</p>

<div class="video-container text-width">
  <iframe src="https://www.youtube.com/embed/UDuaJGYe8EQ" title="Outro: Tear" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</div>

<p><strong>Outro: Tear</strong> is another one with the three rap line members. This is a darker song, written when the group was on the verge of splitting up. This live performance is incredibly intense, with j-hope’s delivery of the finale being my favourite part.</p>

<div class="video-container text-width">
  <iframe src="https://www.youtube.com/embed/nZyFo_xrsyk" title="2! 3!" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</div>

<p><strong>2! 3!</strong> is more of a vocal-led track, with some rap parts. This is a song the group wrote for their fans (known as ARMY), hoping for more good days together ahead. I like this live version, where the audience sings the hopeful message back to the group at the end, which I find very touching.</p>

<div class="video-container text-width">
  <iframe src="https://www.youtube.com/embed/nt4f4pPCEFs" title="Inner Child" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</div>

<p><strong>Inner Child</strong> is a V solo song, which he wrote to his past self. No rapping at all here, but beautiful vocals; this song somehow touches me deeply in ways that few songs do.</p>

<div class="video-container text-width">
  <iframe src="https://www.youtube.com/embed/Iq6RdCTLBd8" title="Mikrokosmos" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</div>

<p><strong>Mikrokosmos</strong> is a fan favourite and for good reason. A beautiful song, with some quality rapping in the middle.</p>

<div class="video-container text-width">
  <iframe src="https://www.youtube.com/embed/sN0I3L1GaTE" title="Into The Sun" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</div>

<p><strong>Into The Sun</strong> is the last song off the newest album, <em>Arirang</em>, and my favourite on that album. I included it here to give a taste of what the new era of BTS is like! During the current Arirang tour, they close each concert with this song, in a calm, relaxing atmosphere. Since the audio in this video is not the best, you can listen to the studio recording of this song <a href="https://youtu.be/N_Id6KNQtLw">here</a>.</p>

<hr />

<p>Besides songs released as BTS, members have released solo work and collaborated with other artists. Here’s a sampler.</p>

<div class="video-container text-width">
  <iframe src="https://www.youtube.com/embed/8dJyRm2jJ-U" title="That That" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</div>

<p><strong>That That (PSY prod. &amp; feat. Suga)</strong> has a funny history of how PSY (of <em>Gangnam Style</em> fame) first asked Suga to help him produce the song, and then little by little dragged him into featuring on it and in the music video. Really fun song, Suga’s rap is a highlight!</p>

<div class="video-container text-width">
  <iframe src="https://www.youtube.com/embed/TvVtYaqCni8" title="Spaghetti" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</div>

<p><strong>Spaghetti (LE SSERAFIM feat. j-hope)</strong> has an incredibly unhinged MV, which put LE SSERAFIM on the map for me, but also got me to pay closer attention to BTS members, as j-hope’s rap part in this song was very much my thing.</p>

<div class="video-container text-width">
  <iframe src="https://www.youtube.com/embed/i23NEQEFpgQ" title="Chicken Noodle Soup" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</div>

<p><strong>Chicken Noodle Soup (j-hope feat. Becky G)</strong> is another really fun track, with a great MV. The highlight for me here is j-hope’s incredible dancing skills, even more than the music itself. The man can move!</p>

<hr />

<p>It’s hard to say what exactly got me so into BTS now, after being vaguely aware of their existence and success for a long while. Certainly, discovering the more hard-hitting, rap-heavy tracks got my attention, but this does not feel sufficient.</p>

<p>Most likely, it was the right time for me to be receptive to their message.</p>

<mastodon-post>
  <blockquote lang="en" cite="https://merveilles.town/@gosha/116836020390707881" data-source="fediverse">
    <img class="avatar" src="/assets/images/icons/mastodon-avatar.png" alt="" />
    
    
    <header>
      <a class="author-name" href="https://merveilles.town/@gosha">gosha</a>
      <a class="author-handle" href="https://merveilles.town/@gosha">@gosha@merveilles.town</a>
    </header>
    There's a saying in the fandom that BTS find you when you need it most and I guess I've been going through some stuff because oh boy did they find me
    <footer>
      <a href="https://merveilles.town/@gosha/116836020390707881"><time datetime="2026-06-29T23:36:30.044Z">29/06/2026, 23:36</time></a>
    </footer>
  </blockquote>
</mastodon-post>

<p>One thing that nudged me forward was a friend mentioning the <a href="https://youtu.be/HYhyDjGhJEY?si=nCFZdQm5dxpHLD0L">Hot Ones interview</a>. After I watched it, I became kind of fascinated with the dynamic between the members – the way some of them visibly lit up when another got asked an actually interesting, well-researched question. That pulled me in, so I watched the <a href="https://www.netflix.com/title/82158609">recently released documentary on Netflix</a>, and fell further down the rabbit hole.</p>

<p>What I found was, far from the stereotypes of manufactured pop for teenagers, a group that consistently spreads a message of self-acceptance, of the importance of mental health, of love, respect, and support, towards their fans and between the members themselves. This message permeates the music the group puts out: two major eras<sup id="fnref:2"><a href="#fn:2" class="footnote" rel="footnote" role="doc-noteref">2</a></sup> of BTS are “Love Yourself” (which includes three albums) and “Map of the Soul” (two albums). The former explores the idea of how true love is only possible if one is able to love themselves first, and the latter is based on the book <a href="https://www.goodreads.com/book/show/233234.Jung_s_Map_of_the_Soul">Jung’s Map of the Soul</a><sup id="fnref:3"><a href="#fn:3" class="footnote" rel="footnote" role="doc-noteref">3</a></sup> by Murray Stein, dealing with questions of finding one’s identity, deriving self-worth from within, longing for authenticity (the BBC had <a href="https://www.bbc.co.uk/news/entertainment-arts-47965524">a great article on this</a>). How I wish that when I was a young person myself, I had been exposed to this sort of ideas and message!</p>

<p>In 2018, at just 24 years old, RM reinforced the message in a speech at the United Nations:</p>

<div class="video-container text-width">
  <iframe src="https://www.youtube.com/embed/ZhJ-LAQ6e_Y" title="BTS’ Speech at the United Nations" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</div>

<p>I’m 44 this year, with a family of my own, with two kids who are going to grow up in a world full of uncertainty. I often feel powerless to prepare them for the life that awaits them, but I know that teaching them to love themselves is one of the best possible things I can do for them.</p>

<p>And for that, I need to learn how to do it myself, faults, fears, and all. BTS’s music helps me with exactly that.</p>

<p>💜</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>RM, aka Kim Nam-joon, is a rapper and the leader of BTS. The group was originally built around him. You can learn more about him and the other members either from the <a href="https://en.wikipedia.org/wiki/BTS">Wikipedia page</a> or from <a href="https://www.youtube.com/watch?v=o8aQTeuGjqI">this video</a>. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2">
      <p>An era in k-pop is a time period in which the group focuses on a specific topic. It can contain one or more albums, have its own visual style, etc. <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3">
      <p>The power of the BTS fandom is such that, when it was revealed that the Map of the Soul era was influenced by this book, it became an instant bestseller in Korea, with sales jumping four-fold. <a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Gosha Tcherednitchenko</name></author><category term="art" /><category term="media" /><category term="kpop" /><category term="music" /><category term="personal" /><category term="stuff I like" /><category term="bts" /><category term="ARMY" /><category term="hiphop" /><category term="rap" /><summary type="html"><![CDATA[BTS is currently the biggest musical group in the world. Although I was aware of them for a few years, I only recently took a deep dive into their history and their discography. Below, I want to share a few of their tracks that I came to love, as a fan of hip-hop who slowly but surely turned into a fan of BTS.]]></summary></entry><entry><title type="html">How I learn Clojure</title><link href="https://gosha.net/2026/learning-clojure/" rel="alternate" type="text/html" title="How I learn Clojure" /><published>2026-05-31T09:48:53+01:00</published><updated>2026-05-31T09:48:53+01:00</updated><id>https://gosha.net/2026/learning-clojure</id><content type="html" xml:base="https://gosha.net/2026/learning-clojure/"><![CDATA[<p>I’ve been working with <a href="https://clojure.org">Clojure</a> for a couple of years already. I’ve done Clojure work as a contractor, and <a href="https://parts.ifs.tools">Parts</a>, the project I spend most of my free time on, is written in it.</p>

<p>I learned Clojure the same way I learned most other programming-related things: by looking at examples and hacking stuff together, slowly building understanding along the way. However, last year, when I was trying to get my first Clojure job, I had a disastrous coding interview with <a href="https://beegee.xyz">BG</a> (a kind of a legendary figure in the Clojure world), which made me realise that I didn’t actually <em>really</em> know the language: without access to examples, I was useless.</p>

<p>In the debrief, BG shared some advice for actually getting good at Clojure: work through the problems on <a href="https://4clojure.oxal.org/">4clojure</a> using only the <a href="https://clojure.github.io/clojure/clojure.core-api.html">official documentation</a> (not <a href="https://clojuredocs.org/clojure.core">ClojureDocs</a>, which include examples!) and the Clojure <a href="https://github.com/clojure/clojure">source code</a>.</p>

<p>4Clojure is a collection of programming problems that teach you the standard library, each problem building on the one before it, kind of in the spirit of <a href="https://vpb.smallyu.net/%5BType%5D%20books/The%20Little%20Schemer.pdf">The Little Schemer</a>. The reason to go through it looking at source code rather than examples is to force you to reason from first principles (the implementation) rather than from someone’s ideas of how code is written.</p>

<p>So I’ve been working my way through 4clojure, until I came to Problem 53, “<a href="https://4clojure.oxal.org/#/problem/53">Longest Increasing Subseq</a>”, which is the first “hard” problem I’ve encountered. I got stuck for a long while, but eventually managed to work my way through. Below, I’m documenting my thinking.</p>

<hr />

<p>The problem:</p>

<blockquote>
  <p>Given a vector of integers, find the longest consecutive sub-sequence of increasing numbers. If two sub-sequences have the same length, use the one that occurs first. An increasing sub-sequence must have a length of 2 or greater to qualify.</p>
</blockquote>

<p>So, for an input of <code class="language-plaintext highlighter-rouge">[1 0 1 2 3 0 4 5]</code>, we should return <code class="language-plaintext highlighter-rouge">[0 1 2 3]</code>, which is the longest increasing sequence contained in the input sequence.</p>

<p>Ok, so thinking it through, to solve this we need three things:</p>

<ol>
  <li>A way to go through each sub-sequence in the input,</li>
  <li>A way to check if a given sequence is an increasing sequence, and</li>
  <li>A way to keep track of the longest such sub-sequence we’ve found so far.</li>
</ol>

<h3 id="going-through-each-sub-sequence-of-the-input">Going through each sub-sequence of the input</h3>

<p>By the time I got back to this problem, I kind of forgot what the previous problems on 4clojure were about. I should have checked, because problems tend to build on knowledge learned in the previous ones, and thus I could have found a hint there.</p>

<p>Instead of checking, I got flashbacks of my misadventures trying to interview at big tech, and thought I remembered that the <a href="https://www.reddit.com/r/leetcode/comments/18g9383/twopointer_technique_an_indepth_guide_concepts/">two pointers approach</a> could be useful here.</p>

<p>It went something like this:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>p1 = 0
p2 = 0
increment p2 and check p1..p2 until p2 reaches the end of the input
then increment p1, p2 = p1 + 1, and repeat
</code></pre></div></div>

<p>Because I’m terrible at algorithms, what I ended up writing is not exactly the two-pointers approach, which is O(n), but rather an exhaustive O(n²) enumeration.</p>

<p>This function increments <code class="language-plaintext highlighter-rouge">p1</code> by using <code class="language-plaintext highlighter-rouge">rest</code>:</p>

<div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">(</span><span class="k">defn</span><span class="w"> </span><span class="n">tail-subseqs</span><span class="w"> </span><span class="p">[</span><span class="n">s</span><span class="p">]</span><span class="w">
  </span><span class="p">(</span><span class="nb">take-while</span><span class="w"> </span><span class="o">#</span><span class="p">(</span><span class="nb">&gt;</span><span class="w"> </span><span class="p">(</span><span class="nb">count</span><span class="w"> </span><span class="n">%</span><span class="p">)</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">iterate</span><span class="w"> </span><span class="nb">rest</span><span class="w"> </span><span class="n">s</span><span class="p">)))</span><span class="w">
</span></code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>user&gt; (tail-subseqs [1 0 1 2 3 0 4 5])
;; =&gt; ([1 0 1 2 3 0 4 5]
 (0 1 2 3 0 4 5)
 (1 2 3 0 4 5)
 (2 3 0 4 5)
 (3 0 4 5)
 (0 4 5)
;; =&gt;  (4 5))
</code></pre></div></div>

<p>The <code class="language-plaintext highlighter-rouge">iterate</code> call returns an infinite sequence of <code class="language-plaintext highlighter-rouge">s</code>, <code class="language-plaintext highlighter-rouge">(rest s)</code>, <code class="language-plaintext highlighter-rouge">(rest (rest s))</code>, etc. Since we are only interested in sequences longer than 1, we <code class="language-plaintext highlighter-rouge">take</code> from it while the values <code class="language-plaintext highlighter-rouge">iterate</code> gives us are at least 2-long.</p>

<p>This function increments <code class="language-plaintext highlighter-rouge">p2</code> by using <code class="language-plaintext highlighter-rouge">take</code>:</p>

<div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">(</span><span class="k">defn</span><span class="w"> </span><span class="n">head-subseqs</span><span class="w"> </span><span class="p">[</span><span class="n">s</span><span class="p">]</span><span class="w">
  </span><span class="p">(</span><span class="nb">map</span><span class="w"> </span><span class="o">#</span><span class="p">(</span><span class="nb">take</span><span class="w"> </span><span class="n">%</span><span class="w"> </span><span class="n">s</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">range</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="p">(</span><span class="nb">inc</span><span class="w"> </span><span class="p">(</span><span class="nb">count</span><span class="w"> </span><span class="n">s</span><span class="p">)))))</span><span class="w">
</span></code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>user&gt; (head-subseqs [1 0 1 2 3 0 4 5])
;; =&gt; ((1 0)
 (1 0 1)
 (1 0 1 2)
 (1 0 1 2 3)
 (1 0 1 2 3 0)
 (1 0 1 2 3 0 4)
;; =&gt;  (1 0 1 2 3 0 4 5))
</code></pre></div></div>

<p>So now we have a way to move our two pointers.</p>

<h3 id="check-if-a-sequence-is-a-sequence-of-increasing-numbers">Check if a sequence is a sequence of increasing numbers</h3>

<p>Naive approach: check if a sequence is the same as this sequence sorted.</p>

<div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">(</span><span class="k">defn</span><span class="w"> </span><span class="n">inc-seq?</span><span class="w"> </span><span class="p">[</span><span class="n">s</span><span class="p">]</span><span class="w"> </span><span class="p">(</span><span class="nb">=</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="p">(</span><span class="nb">sort</span><span class="w"> </span><span class="n">s</span><span class="p">)))</span><span class="w">
</span></code></pre></div></div>

<p>However, this actually only checked that the sequence is non-decreasing, not strictly increasing:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>user&gt; (inc-seq? [0 1 2 3 4])
;; =&gt; true
user&gt; (inc-seq? [2 3 3 4 5]) ;; This seq is not strictly increasing
;; =&gt; true
</code></pre></div></div>

<p>So I thought I’d be clever and use a set:</p>

<div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">(</span><span class="k">defn</span><span class="w"> </span><span class="n">inc-seq?</span><span class="w"> </span><span class="p">[</span><span class="n">s</span><span class="p">]</span><span class="w"> </span><span class="p">(</span><span class="nb">=</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="p">(</span><span class="nb">sort</span><span class="w"> </span><span class="p">(</span><span class="nb">set</span><span class="w"> </span><span class="n">s</span><span class="p">))))</span><span class="w">
</span></code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>user&gt; (inc-seq? [0 1 2 3 4])
;; =&gt; true
user&gt; (inc-seq? [2 3 3 4 5])
;; =&gt; false ;; Nice!
</code></pre></div></div>

<p>This turned out to be problematic in its own way, as we will see later.</p>

<h3 id="a-way-to-keep-track-of-the-longest-increasing-sequence-weve-found-so-far">A way to keep track of the longest increasing sequence we’ve found so far</h3>

<p>I had a hunch that we could use <code class="language-plaintext highlighter-rouge">reduce</code> here, since we were basically trying to reduce a collection of subsequences into one subsequence (the longest incrementing one).</p>

<p>The reducing function passed to <code class="language-plaintext highlighter-rouge">reduce</code> takes two arguments: an accumulator, and an item from the collection we’re reducing.</p>

<ul>
  <li>If the item is not an incrementing sequence, return the accumulator</li>
  <li>If the accumulator contains a longer (or equally long) incrementing sequence than the item we’re considering, return the accumulator. Otherwise, return the item.</li>
</ul>

<p>The problem then becomes: how do we iterate through the sequences from <code class="language-plaintext highlighter-rouge">tail-subseqs</code> and <code class="language-plaintext highlighter-rouge">head-subseqs</code>?</p>

<p>We need to run <code class="language-plaintext highlighter-rouge">tail-subseqs</code> on each item returned from <code class="language-plaintext highlighter-rouge">rest-subseqs</code>, combine the output into a single sequence (we can use <code class="language-plaintext highlighter-rouge">mapcat</code>), and pass that to <code class="language-plaintext highlighter-rouge">reduce</code>:</p>

<div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">(</span><span class="k">defn</span><span class="w"> </span><span class="n">longest-inc-subseq</span><span class="w"> </span><span class="p">[</span><span class="n">s</span><span class="p">]</span><span class="w">
  </span><span class="p">(</span><span class="nb">reduce</span><span class="w">
   </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="p">[</span><span class="n">acc</span><span class="w"> </span><span class="n">item</span><span class="p">]</span><span class="w">
     </span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nf">inc-seq?</span><span class="w"> </span><span class="n">item</span><span class="p">)</span><span class="w">
       </span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nb">&gt;</span><span class="w"> </span><span class="p">(</span><span class="nb">count</span><span class="w"> </span><span class="n">item</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">count</span><span class="w"> </span><span class="n">acc</span><span class="p">))</span><span class="w">
         </span><span class="n">item</span><span class="w">
         </span><span class="n">acc</span><span class="p">)</span><span class="w">
       </span><span class="n">acc</span><span class="p">))</span><span class="w">
   </span><span class="p">[]</span><span class="w">
   </span><span class="p">(</span><span class="nb">mapcat</span><span class="w"> </span><span class="n">head-subseqs</span><span class="w"> </span><span class="p">(</span><span class="nf">tail-subseqs</span><span class="w"> </span><span class="n">s</span><span class="p">))))</span><span class="w">
</span></code></pre></div></div>

<h3 id="putting-it-all-together">Putting it all together</h3>

<p>Now we can combine these pieces for a naive and rather verbose solution:</p>

<div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">(</span><span class="k">defn</span><span class="w"> </span><span class="n">longest-inc-subseq</span><span class="w"> </span><span class="p">[</span><span class="n">coll</span><span class="p">]</span><span class="w">
  </span><span class="p">(</span><span class="k">let</span><span class="w"> </span><span class="p">[</span><span class="n">inc-seq?</span><span class="w">     </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="p">[</span><span class="n">s</span><span class="p">]</span><span class="w"> </span><span class="p">(</span><span class="nb">=</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="p">(</span><span class="nb">sort</span><span class="w"> </span><span class="p">(</span><span class="nb">set</span><span class="w"> </span><span class="n">s</span><span class="p">))))</span><span class="w">
        </span><span class="n">tail-subseqs</span><span class="w"> </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="p">[</span><span class="n">s</span><span class="p">]</span><span class="w"> </span><span class="p">(</span><span class="nb">take-while</span><span class="w"> </span><span class="o">#</span><span class="p">(</span><span class="nb">&gt;</span><span class="w"> </span><span class="p">(</span><span class="nb">count</span><span class="w"> </span><span class="n">%</span><span class="p">)</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">iterate</span><span class="w"> </span><span class="nb">rest</span><span class="w"> </span><span class="n">s</span><span class="p">)))</span><span class="w">
        </span><span class="n">head-subseqs</span><span class="w"> </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="p">[</span><span class="n">s</span><span class="p">]</span><span class="w"> </span><span class="p">(</span><span class="nb">map</span><span class="w"> </span><span class="o">#</span><span class="p">(</span><span class="nb">take</span><span class="w"> </span><span class="n">%</span><span class="w"> </span><span class="n">s</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">range</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="p">(</span><span class="nb">inc</span><span class="w"> </span><span class="p">(</span><span class="nb">count</span><span class="w"> </span><span class="n">s</span><span class="p">)))))</span><span class="w">
        </span><span class="n">subseqs</span><span class="w">      </span><span class="p">(</span><span class="nf">-&gt;&gt;</span><span class="w"> </span><span class="n">coll</span><span class="w">
                          </span><span class="n">tail-subseqs</span><span class="w">
                          </span><span class="p">(</span><span class="nb">mapcat</span><span class="w"> </span><span class="n">head-subseqs</span><span class="p">))</span><span class="w">
        </span><span class="n">reducer</span><span class="w">      </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="p">[</span><span class="n">acc</span><span class="w"> </span><span class="n">item</span><span class="p">]</span><span class="w">
                       </span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nf">inc-seq?</span><span class="w"> </span><span class="n">item</span><span class="p">)</span><span class="w">
                         </span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nb">&gt;</span><span class="w"> </span><span class="p">(</span><span class="nb">count</span><span class="w"> </span><span class="n">item</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">count</span><span class="w"> </span><span class="n">acc</span><span class="p">))</span><span class="w">
                           </span><span class="n">item</span><span class="w">
                           </span><span class="n">acc</span><span class="p">)</span><span class="w">
                         </span><span class="n">acc</span><span class="p">))]</span><span class="w">
    </span><span class="p">(</span><span class="nb">reduce</span><span class="w"> </span><span class="n">reducer</span><span class="w"> </span><span class="p">[]</span><span class="w"> </span><span class="n">subseqs</span><span class="p">)))</span><span class="w">
</span></code></pre></div></div>

<p>This passes the automated tests on 4clojure, and we can celebrate a little bit!</p>

<hr />

<p>At this point, I will then look at the <a href="https://4clojure.oxal.org/#/problem/53/solutions">community solutions</a> to see what others have come up with. This is usually where a lot of learning happens, because you can see how idiomatic Clojure is written, and how it’s often much more concise and elegant than whatever I’ve come up with.</p>

<p>Three things jumped at me immediately:</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">inc-seq?</code> can actually be rewritten as <code class="language-plaintext highlighter-rouge">(apply &lt; s)</code>, which is much more elegant! <code class="language-plaintext highlighter-rouge">apply</code> takes two arguments: a function (in our case: <code class="language-plaintext highlighter-rouge">&lt;</code>), and a sequence which will become the arguments vector in the function call. So if <code class="language-plaintext highlighter-rouge">s</code> is bound to <code class="language-plaintext highlighter-rouge">[1 2 3]</code>, <code class="language-plaintext highlighter-rouge">(apply &lt; s)</code> is equivalent to <code class="language-plaintext highlighter-rouge">(&lt; 1 2 3)</code>, which will return <code class="language-plaintext highlighter-rouge">true</code>.</li>
  <li>We can also use <code class="language-plaintext highlighter-rouge">partition</code>, which should’ve been obvious, because the previous few problems were focused on this particular function. As I mentioned above, I’ve missed this because I had been away from 4clojure for while.</li>
  <li>We can also turn this into a multi-step data processing pipeline thanks to threading.</li>
</ul>

<p>So the final version of the function looks like this:</p>

<div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="p">[</span><span class="n">xs</span><span class="p">]</span><span class="w">
  </span><span class="p">(</span><span class="nf">-&gt;&gt;</span><span class="w"> </span><span class="p">(</span><span class="nf">partition</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="n">xs</span><span class="p">)</span><span class="w">
       </span><span class="p">(</span><span class="nf">partition-by</span><span class="w"> </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="p">[[</span><span class="n">a</span><span class="w"> </span><span class="n">b</span><span class="p">]]</span><span class="w"> </span><span class="p">(</span><span class="nb">&lt;</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">b</span><span class="p">)))</span><span class="w">
       </span><span class="p">(</span><span class="nb">filter</span><span class="w"> </span><span class="o">#</span><span class="p">(</span><span class="nb">apply</span><span class="w"> </span><span class="nb">&lt;</span><span class="w"> </span><span class="p">(</span><span class="nb">first</span><span class="w"> </span><span class="n">%</span><span class="p">)))</span><span class="w">
       </span><span class="p">(</span><span class="nb">map</span><span class="w"> </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="p">[</span><span class="n">g</span><span class="p">]</span><span class="w"> </span><span class="p">(</span><span class="nb">cons</span><span class="w"> </span><span class="p">(</span><span class="nb">ffirst</span><span class="w"> </span><span class="n">g</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">map</span><span class="w"> </span><span class="nb">second</span><span class="w"> </span><span class="n">g</span><span class="p">))))</span><span class="w">
       </span><span class="p">(</span><span class="nb">reduce</span><span class="w"> </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="p">[</span><span class="n">best</span><span class="w"> </span><span class="n">run</span><span class="p">]</span><span class="w">
                 </span><span class="p">(</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nb">&gt;</span><span class="w"> </span><span class="p">(</span><span class="nb">count</span><span class="w"> </span><span class="n">run</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">count</span><span class="w"> </span><span class="n">best</span><span class="p">))</span><span class="w"> </span><span class="n">run</span><span class="w"> </span><span class="n">best</span><span class="p">))</span><span class="w">
               </span><span class="p">[])))</span><span class="w">
</span></code></pre></div></div>

<p>Once I got here, I went through the solution expression by expression to make sure that I understand <em>why</em> exactly it’s working. I’d look up each function I’m not completely familiar with, reading the source of each, in addition to the docs.</p>

<p>In this particular case, it was interesting to compare the source for <code class="language-plaintext highlighter-rouge">partition</code> (<a href="https://github.com/clojure/clojure/blob/8ae9e4f95e2fbbd4ee4ee3c627088c45ab44fa68/src/clj/clojure/core.clj#L3202">GitHub</a>) and <code class="language-plaintext highlighter-rouge">partition-by</code> (<a href="https://github.com/clojure/clojure/blob/8ae9e4f95e2fbbd4ee4ee3c627088c45ab44fa68/src/clj/clojure/core.clj#L7308">GitHub</a>).</p>

<p>And that’s how we learn!</p>

<hr />

<p>Update: <a href="https://tonsky.me">Niki Tonsky</a>, in <a href="https://mastodon.online/@nikitonsky/116703676644785204">a Mastodon reply</a>, pointed out that the last <code class="language-plaintext highlighter-rouge">reduce</code> could be replaced with an application of <code class="language-plaintext highlighter-rouge">max-key</code>:</p>

<div class="language-clojure highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="p">[</span><span class="n">xs</span><span class="p">]</span><span class="w">
  </span><span class="p">(</span><span class="nf">-&gt;&gt;</span><span class="w"> </span><span class="p">(</span><span class="nf">partition</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="n">xs</span><span class="p">)</span><span class="w">
    </span><span class="p">(</span><span class="nf">partition-by</span><span class="w"> </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="p">[[</span><span class="n">a</span><span class="w"> </span><span class="n">b</span><span class="p">]]</span><span class="w"> </span><span class="p">(</span><span class="nb">&lt;</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">b</span><span class="p">)))</span><span class="w">
    </span><span class="p">(</span><span class="nb">filter</span><span class="w"> </span><span class="o">#</span><span class="p">(</span><span class="nb">apply</span><span class="w"> </span><span class="nb">&lt;</span><span class="w"> </span><span class="p">(</span><span class="nb">first</span><span class="w"> </span><span class="n">%</span><span class="p">)))</span><span class="w">
    </span><span class="p">(</span><span class="nb">map</span><span class="w"> </span><span class="p">(</span><span class="k">fn</span><span class="w"> </span><span class="p">[</span><span class="n">g</span><span class="p">]</span><span class="w"> </span><span class="p">(</span><span class="nb">cons</span><span class="w"> </span><span class="p">(</span><span class="nb">ffirst</span><span class="w"> </span><span class="n">g</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="nb">map</span><span class="w"> </span><span class="nb">second</span><span class="w"> </span><span class="n">g</span><span class="p">))))</span><span class="w">
    </span><span class="nb">reverse</span><span class="w">
    </span><span class="p">(</span><span class="nb">apply</span><span class="w"> </span><span class="nb">max-key</span><span class="w"> </span><span class="nb">count</span><span class="w"> </span><span class="p">[])))</span><span class="w">
</span></code></pre></div></div>

<p>The <code class="language-plaintext highlighter-rouge">reverse</code> is necessary because the problem statement says that if we have more than one subsequences that are the longest, the first one should be returned; <code class="language-plaintext highlighter-rouge">max-key</code>, however, will return the last.</p>

<p>Also take a look at Niki’s <a href="https://mastodon.online/@nikitonsky/116703643563572387">beautiful sliding window implementation</a>!</p>]]></content><author><name>Gosha Tcherednitchenko</name></author><category term="clojure" /><category term="programming" /><category term="process" /><category term="learning" /><summary type="html"><![CDATA[I’ve been working with Clojure for a couple of years already. I’ve done Clojure work as a contractor, and Parts, the project I spend most of my free time on, is written in it.]]></summary></entry><entry><title type="html">A trip to Tainan, Chiayi, and Taichung</title><link href="https://gosha.net/2026/tainan-chiayi-taichung/" rel="alternate" type="text/html" title="A trip to Tainan, Chiayi, and Taichung" /><published>2026-04-30T10:24:02+01:00</published><updated>2026-04-30T10:24:02+01:00</updated><id>https://gosha.net/2026/tainan-chiayi-taichung</id><content type="html" xml:base="https://gosha.net/2026/tainan-chiayi-taichung/"><![CDATA[<p>When we were in Taiwan this winter, T. organised a trip for us, and over a few days we visited Tainan, Chiayi, and Taichung. It was our second visit to Tainan, but the other two towns were new to us, as was travelling with two kids!</p>

<p>That last part was not always easy, as we had to do our best to work around E.’s nap schedule, as well as finding things that would keep N. engaged and entertained enough. Although the logistics of inter-city travel with two small kids are always a challenge, the main obstacle we encountered was the often-lacking pedestrian infrastructure, which resulted in us pushing a pram (or walking with E. in a carrier) on the side of roads with intense scooter traffic. It baffled me that there was, often, seemingly no thought given to the mobility of parents using prams, or people relying on wheelchairs to get around.</p>

<p>That being said, overall, I would say that it was a fun trip and a welcome break from our Taipei routine. Tainan, with its charming side-streets, delicious food, rich temples, and friendly atmosphere remains a big favourite of mine among Taiwanese cities, and I would love to return there for a longer stay.</p>

<p>In the meantime, enjoy some photos!</p>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/tainan-01.jpg" alt="HSR tickets from Banqiao to Tainan" />
  </div>
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/tainan-02.jpg" alt="A food stall at YongLe Market" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/tainan-03.jpg" alt="Street scenes at YongLe Market" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/tainan-05.jpg" alt="The exterior of a soba restaurant" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/tainan-06.jpg" alt="Some red bicycles and scooters next to the ruins of a building" />
  </div>
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/tainan-07.jpg" alt="Watermelon slices in a fridge" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/tainan-08.jpg" alt="A young woman and her daughter crossing a street in Tainan" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/tainan-09.jpg" alt="An empty breakfast restaurant basked in golden light" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/tainan-11.jpg" alt="Tiantan Tiangong temple" />
  </div>
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/tainan-12.jpg" alt="Family prayer at Tiantan Tiangong temple" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/tainan-10.jpg" alt="A Tainan side street" />
  </div>
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/tainan-13.jpg" alt="A Tainan sign at the Tainan train station" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/chiayi-01.jpg" alt="A badly weathered Chiayi sign at the Chiayi train station" />
  </div>
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/chiayi-09.jpg" alt="A young girl taking a look at an approaching train at the Chiayi train station" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/chiayi-02.jpg" alt="A young woman pushing a pram through a park in Chiayi" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/chiayi-03.jpg" alt="Two people riding a scooter past a parked Delica van" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/chiayi-04.jpg" alt="A young woman and her daughter at a restaurant table" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/chiayi-06.jpg" alt="A person preparing almond tea" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/chiayi-05.jpg" alt="Almond tea and fried dough sticks" />
  </div>
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/chiayi-07.jpg" alt="A shop selling drinking water refills" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/chiayi-08.jpg" alt="Interior of a restaurant" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/taichung-01.jpg" alt="A night-time view of a modern district of Taichung from a high floor" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/taichung-03.jpg" alt="A cozy children's bookshop interior" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/taichung-02.jpg" alt="A mother and her baby wrapped under her shirt, his forehead and the hint of an eye poking out" />
  </div>
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/taichung-04.jpg" alt="A baby's feet poking out from under his mother's overshirt" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/taichung-05.jpg" alt="Fun things being bought at a toy shop" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/tainan-chiayi-taichung/taichung-06.jpg" alt="Cyclists in a Taichung street" />
  </div>
</div>]]></content><author><name>Gosha Tcherednitchenko</name></author><category term="travel" /><category term="taiwan" /><category term="tainan" /><category term="chiayi" /><category term="taichung" /><category term="family" /><category term="kids" /><category term="personal" /><summary type="html"><![CDATA[When we were in Taiwan this winter, T. organised a trip for us, and over a few days we visited Tainan, Chiayi, and Taichung. It was our second visit to Tainan, but the other two towns were new to us, as was travelling with two kids!]]></summary></entry><entry><title type="html">Friars, tigers, artichokes</title><link href="https://gosha.net/2026/lullabies/" rel="alternate" type="text/html" title="Friars, tigers, artichokes" /><published>2026-03-29T22:24:02+01:00</published><updated>2026-03-29T22:24:02+01:00</updated><id>https://gosha.net/2026/lullabies</id><content type="html" xml:base="https://gosha.net/2026/lullabies/"><![CDATA[<p>In our family, we have four languages between us: English, Mandarin Chinese, French, and Russian. When N. was born, I wanted to sing lullabies to her in all four.</p>

<p><em>Brother John</em>, a classic of the genre, has served us well.</p>

<p>The English version is well known:</p>

<div class="columns table">
  <div class="col">
    <header>EN</header>
    <div class="col-body">
      Are you sleeping,<br />
      Are you sleeping,<br />
      Brother John?<br />
      Brother John?<br />
      Morning bells are ringing,<br />
      Morning bells are ringing.<br />
      Ding ding dong,<br />
      Ding ding dong
    </div>
  </div>
</div>

<p>It’s basically an almost word-for-word adaptation of the French version, which is the original:</p>

<div class="columns table double">
  <div class="col">
    <header>FR</header>
    <div class="col-body">
      Frère Jacques,<br />
      Frère Jacques<br />
      Dormez-vous?<br />
      Dormez-vous?<br />
      Sonnez les matines,<br />
      Sonnez les matines!<br />
      Ding ding dong,<br />
      Ding ding dong
    </div>
  </div>
  <div class="col">
    <header>EN</header>
    <div class="col-body">
      Brother Jack,<br />
      Brother Jack,<br />
      Are you sleeping?<br />
      Are you sleeping?<br />
      Ring the matins bells,<br />
      Ring the matins bells!<br />
      Ding ding dong,<br />
      Ding ding dong
    </div>
  </div>
</div>

<p>The Russian version I use, suggested by my dad, is not the canonical translation (one does exist), but rather a cheeky reworking by Soviet music students, which cracks me up each time I really think about it:</p>

<div class="columns table double">
  <div class="col">
    <header>RU</header>
    <div class="col-body">
      Артишоки,<br />
      Артишоки,<br />
      И миндаль!<br />
      И миндаль!<br />
      Не растут на попе,<br />
      Не растут на попе.<br />
      Очень жаль.<br />
      Очень жаль.
    </div>
  </div>
  <div class="col">
    <header>EN</header>
    <div class="col-body">
      Artichokes,<br />
      Artichokes,<br />
      And almonds!<br />
      And almonds!<br />
      Don't grow on one's butt,<br />
      Don't grow on one's butt.<br />
      A great pity.<br />
      A great pity.
    </div>
  </div>
</div>

<p>And the Chinese version is really fun too – an adaptation of the melody with a completely different story, well known to kids growing up in Taiwan in the 90s:</p>

<div class="columns table triple">
  <div class="col">
    <header>ZH</header>
    <div class="col-body">
      兩隻老虎，<br />
      兩隻老虎，<br />
      跑得快，<br />
      跑得快！<br />
      一隻沒有眼睛！<br />
      一隻沒有尾巴！<br />
      真奇怪！<br />
      真奇怪！
    </div>
  </div>
  <div class="col">
    <header>Pinyin</header>
    <div class="col-body">
      Liǎng zhī lǎo hǔ,<br />
      Liǎng zhī lǎo hǔ,<br />
      Pǎo dé kuài,<br />
      Pǎo dé kuài!<br />
      Yī zhī méi yǒu yǎn jīng!<br />
      Yī zhī méi yǒu wěi bā!<br />
      Zhēn qí guài!<br />
      Zhēn qí guài!
    </div>
  </div>
  <div class="col">
    <header>EN</header>
    <div class="col-body">
      Two tigers,<br />
      Two tigers,<br />
      Running fast,<br />
      Running fast!<br />
      One doesn't have eyes!<br />
      One doesn't have a tail!<br />
      How strange!<br />
      How strange!
    </div>
  </div>
</div>

<p>N. loved the Chinese version especially when she was smaller, and now E. is enjoying the songs as well.</p>]]></content><author><name>Gosha Tcherednitchenko</name></author><category term="family" /><category term="kids" /><category term="personal" /><category term="parenting" /><category term="music" /><summary type="html"><![CDATA[In our family, we have four languages between us: English, Mandarin Chinese, French, and Russian. When N. was born, I wanted to sing lullabies to her in all four.]]></summary></entry><entry><title type="html">My Delica obsession</title><link href="https://gosha.net/2026/delica/" rel="alternate" type="text/html" title="My Delica obsession" /><published>2026-02-21T01:24:02+00:00</published><updated>2026-02-21T01:24:02+00:00</updated><id>https://gosha.net/2026/delica</id><content type="html" xml:base="https://gosha.net/2026/delica/"><![CDATA[<p>The Mitsubishi Delica is one of the most popular (if not <em>the</em> most popular) light trucks in Taiwan. The iconic L300 variant (aka the <a href="https://en.wikipedia.org/wiki/Mitsubishi_Delica#Third_generation_(1986)">Third Generation</a>)<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup> has been manufactured here by China Motor Corporation (CMC), Mitsubishi’s local manufacturing partner, and is ubiquitous on the island. Even though the L300 has been discontinued in Japan in 1998, CMC has continued producing and modernising versions of the same design in Taiwan, and it is still possible to <a href="https://www.mitsubishi-motors.com.tw/delicapu">purchase it new</a><sup id="fnref:2"><a href="#fn:2" class="footnote" rel="footnote" role="doc-noteref">2</a></sup>.</p>

<p>I’ve started noticing the Delicas on our last trip, but this time around, hunting for them has become a bit of an obsession: I’ve been collecting different variants and liveries (my favourite is the very colourful school bus version!), which I’m sharing below.</p>

<p>This might yet turn into a proper project with time, but for now, enjoy the photos!</p>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/delica/delica_09.jpg" alt="A white Delica truck with a green tarp on a parking lot in Tainan" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/delica/delica_19.jpg" alt="Driver side front view of a classic blue Delica truck" />
  </div>
  <div class="photo">
    <img src="/assets/images/posts/2026/delica/delica_21.jpg" alt="Detail of the cab of a clasic blue Delica truck loaded with cardboard" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/delica/delica_17.jpg" alt="A 2022 Delica van used as a kindergarten school bus in Taichun" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/delica/delica_03.jpg" alt="A white pick up truck Delica variant participating in some road works in New Taipei City" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/delica/delica_07.jpg" alt="A modern dark blue pick up truck variant parked in a building in Tainan" />
  </div>
  <div class="photo">
    <img src="/assets/images/posts/2026/delica/delica_02.jpg" alt="A vintage van variant in silver, with a busted passenger side turn signal parked in New Taipei City" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/delica/delica_14.jpg" alt="A white and orange van version in Jiayi" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/delica/delica_10.jpg" alt="A modern van version with a roof rack in Tainan" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/delica/delica_15.jpg" alt="An older white refrigerated cab version on the streets of Jiayi" />
  </div>
</div>

<div class="full-width-photos">
  <div class="photo">
    <img src="/assets/images/posts/2026/delica/delica_16.jpg" alt="A van serving as a kindergarten school bus in central Taichung" />
  </div>
</div>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>The L300 also has a 4WD campervan version, the <a href="https://sabukaru.online/articles/a-versatile-beast-the-mitsubishi-delica-star-wagon-l300">StarWagon</a>, which is very popular in the west with a certain outdoorsy crowd, but this is not what we’re going to be talking about here. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2">
      <p>Although Mitsubishi and <a href="https://www.cmc-motor.com/layout3.php?name=D260">CMC</a> both sell the car under their respective brands, both are manufactured by CMC! <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Gosha Tcherednitchenko</name></author><category term="taiwan" /><category term="photography" /><category term="delica" /><category term="motoring" /><category term="infrastructure" /><category term="ethnography" /><category term="stuff I like" /><summary type="html"><![CDATA[The Mitsubishi Delica is one of the most popular (if not the most popular) light trucks in Taiwan. The iconic L300 variant (aka the Third Generation)1 has been manufactured here by China Motor Corporation (CMC), Mitsubishi’s local manufacturing partner, and is ubiquitous on the island. Even though the L300 has been discontinued in Japan in 1998, CMC has continued producing and modernising versions of the same design in Taiwan, and it is still possible to purchase it new2. The L300 also has a 4WD campervan version, the StarWagon, which is very popular in the west with a certain outdoorsy crowd, but this is not what we’re going to be talking about here. &#8617; Although Mitsubishi and CMC both sell the car under their respective brands, both are manufactured by CMC! &#8617;]]></summary></entry><entry><title type="html">K-Pop Demon Hunters is super cool</title><link href="https://gosha.net/2026/kpdh/" rel="alternate" type="text/html" title="K-Pop Demon Hunters is super cool" /><published>2026-01-31T01:24:02+00:00</published><updated>2026-01-31T01:24:02+00:00</updated><id>https://gosha.net/2026/kpdh</id><content type="html" xml:base="https://gosha.net/2026/kpdh/"><![CDATA[<figure>
  <img src="/assets/images/posts/2026/kpdh/kpdh.jpg" alt="Mira, Rumi, and Zoey in the epilogue" />
  <figcaption>Mira, Rumi, and Zoey, the protagonists, in the epilogue (Image &copy; Netflix)</figcaption>
</figure>

<p><a href="https://en.wikipedia.org/wiki/KPop_Demon_Hunters"><em>K-Pop Demon Hunters</em></a> (aka KPDH) sneaked up on me via my daughter: she’s heard the songs at her nursery, and started requesting them in the car. The songs were catchy; I ended up watching the film a few weeks later.</p>

<p>And wow, the film was really great! I became a fan.<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup></p>

<p>I love a good found family narrative, and KPDH is a great example of one. Rumi, Mira, and Zoey come together for a shared purpose (being pop stars! hunting demons!), and find community and acceptance with each other, despite each bearing the burden of trauma. Is it the nerdy immigrant kid in me that loves this kind of narrative? Probably. It feels super warm, and comforting.</p>

<p>Trauma comes hands in hand with shame, which is another central topic of the film, and it’s beautifully handled. The best analysis I’ve seen is this video from <a href="https://www.youtube.com/@CinemaTherapyShow">Cinema Therapy</a>, which I wholeheartedly recommend you watch:</p>

<div class="video-container">
  <iframe src="https://www.youtube.com/embed/-Moo6eTKkZM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
</div>

<p>(The channel also has <a href="https://www.youtube.com/watch?v=zzJ1Httk78c">another video</a>, focused on the HUNTR/X girls specifically, which is also really great)</p>

<p>It’s also clear that the film is made by people who care very much about their work.</p>

<p>The visuals are top notch: some of the <a href="https://www.instagram.com/mingjuechen/">artists</a> have <a href="https://www.instagram.com/p/DNold3dSahu/">posted</a> <a href="https://www.celine-kim.com/455831477825">their</a> <a href="https://www.scottwatanabeart.com/kpop-demon-hunters">production</a> <a href="https://www.instagram.com/p/DLIIeyGxVkk/">work</a>, and there’s <a href="https://theartofkpopdemonhunters.com/">a whole artbook online!</a>. Exploring all that actually led to me rekindling a very old interest in drawing and painting, and I’ve since started sketching with ink and colour pencils, which feels really great after many years.</p>

<p>The music plays a very important role in the film, and is exceptionally made, too. The songs have been stuck at the top of the global charts for months, and it’s no wonder: the soundtrack had some of k-pop’s biggest names working on it, just one example being Teddy Park of Black Label. This led me into an <a href="https://merveilles.town/tags/GoshaDoesKpop">ongoing deep dive into k-pop</a>, which has been fun and rewarding<sup id="fnref:2"><a href="#fn:2" class="footnote" rel="footnote" role="doc-noteref">2</a></sup>.</p>

<p>I’ve also been reading tons of KPDH fanfiction, via randomly discovering <a href="https://en.wikipedia.org/wiki/Archive_of_Our_Own">the incredible project</a> that is <a href="https://archiveofourown.org/">An Archive Of Our Own</a> (aka AO3) in a random Fedi post. I haven’t read fanfic since my teenage years, and while the overall quality can vary, some works are very well written, and worth exploring. A favourite example is <a href="https://archiveofourown.org/works/68306256/chapters/176747176">the first chapter of Hindsight</a>, by <a href="https://archiveofourown.org/users/BigFigNewton/pseuds/BigFigNewton">BigFigNewton</a>, which is a really fun take on an important scene of the film.</p>

<p>I’m grateful KPDH found me when it did, and I’m grateful for the expanded worldview it brought me. The sequel has already <a href="https://variety.com/2025/film/news/kpop-demon-hunters-2-2029-release-1236570536/">been announced for 2029</a>, and I’m sure there will be other stories told in the same universe by the same crew in the meantime (after all, KPDH has won two Academy Awards!). I’m looking forward to that!</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>When I was a teenager, it wasn’t unusual for me to be a real, die-hard fan of stuff. I was a fan of Star Wars and the Lord of the Rings, I knew all the lore there was to know about both franchises. Later, I was a fan of Neon Genesis Evangelion, and Cowboy Bebop. But it’s been many years since it’s hit me this hard! <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2">
      <p>For those in the know, I’m more BLINK than ARMY (<strong>Update 2026/7/11:</strong> I am now <a href="/2026/bts">WAY more ARMY</a> than BLINK), though I’ve also enjoyed Le Sserafim, Aespa, EXID, and of course PSY! <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Gosha Tcherednitchenko</name></author><category term="kpop demon hunters" /><category term="art" /><category term="drawing" /><category term="animation" /><category term="media" /><category term="kpop" /><category term="music" /><category term="personal" /><category term="stuff I like" /><summary type="html"><![CDATA[Mira, Rumi, and Zoey, the protagonists, in the epilogue (Image &copy; Netflix)]]></summary></entry></feed>