<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Mr Lark</title>
		<link>https://mrlark.com/en/</link>
		<description>Mr Lark is a bilingual personal blog about technology, product work, writing, and everyday observations.</description>
		<language>en-US</language>
		<lastBuildDate>Tue, 28 Jul 2026 00:00:00 GMT</lastBuildDate>
		<item>
			<title>Making Peace With My Body</title>
			<link>https://mrlark.com/en/blog/making-peace-with-the-body</link>
			<guid isPermaLink="true">https://mrlark.com/en/blog/making-peace-with-the-body</guid>
			<pubDate>Tue, 28 Jul 2026 00:00:00 GMT</pubDate>
			<description>Some things cannot be changed, and they do not deserve a lifetime in court. Acceptance is not loving everything. It is ending the trial.</description>
			<category>Essay</category>
			<category>Life</category>
			<content:encoded><![CDATA[<p>Hi, I am Mr Lark. In Chinese, I go by 拉克先生.</p>
<p>Let me start with a few facts about myself. I am hairy, dark-skinned, 167 centimeters tall, and losing my hair. I chose none of these. They arrived without asking my opinion, moved in, and showed no intention of leaving. Probability explains this well enough: I was born in Southwest China to short parents, and among a crowd of short relatives I came out on the shorter side. Genetics is real, and it is not polite about it.</p>
<p>When I wear shorts in summer, my legs look like a forest pending inspection. When I stand against a white wall in a photo, I always come out darker than I imagined, as if the camera holds a private opinion about me. As for my hair: hair on someone else's head is called a hairstyle. Hair in my sink is called data. I say this not entirely out of self-mockery; there is some statistical literacy in it too.</p>
<p>All of these things once made me feel inferior, and I tried to fix every one of them. The process went roughly like this: search for solutions, order the tools, and finally discover that the problem was never under my jurisdiction. This is how people with an engineering background handle things. I admit it is not elegant, but I cannot think of a more elegant way.</p>
<h2 id="people-want-to-edit-their-factory-settings">People want to edit their factory settings</h2>
<p>When I was young, I believed that with enough effort, a person could modify himself into a more acceptable version. Looking back, this belief was a bit like thinking that if you write enough code, the hardware will improve on its own.</p>
<p>So I researched hair removal, skin whitening, height growth, and hair loss treatment. My attitude toward my body resembled my attitude toward a malfunctioning computer: wherever something looked wrong, I wanted to open it up. Unfortunately, a body is not a computer. It cannot be reinstalled, and it cannot be restored to factory settings. Worse still, after careful analysis, the so-called factory settings turn out to be exactly where the problem is.</p>
<p>I did write some shabby code in my youth. As far as I know, when software breaks you can debug it; when hardware breaks you can only accept your fate. Height, skin color, and hair follicles all belong to hardware, the kind that does not accept returns.</p>
<p>None of these traits arrived democratically. There was no vote, no hearing; they simply took office. For a long time I refused to accept this: why can't a person choose his own appearance? Later I figured it out. I cannot even decide what time I wake up in the morning. Wanting to negotiate with follicles and bones on top of that is clearly overestimating myself.</p>
<h2 id="insecurity-is-a-long-interrogation">Insecurity is a long interrogation</h2>
<p>The frightening thing about insecurity is not that it makes you feel inadequate. It is that it keeps you ready to confess, at any moment, exactly why you are inadequate.</p>
<p>Other people are not looking at you, but you have already looked on their behalf. Other people are not laughing, but you have already laughed on their behalf. The elevator mirror lights up, and the interrogation begins: are the leg hairs too conspicuous, is the face too dark, am I a head shorter than the crowd, has the hairline retreated again. Anyone subjected to daily hearings like this would crack, let alone an ordinary, unusually hairy man.</p>
<p>The meanest part of this interrogation is that it never reaches a final verdict. I later realized that body anxiety is a petty creditor: the moment you pay off one debt, it issues a new invoice under a different name. Today it dislikes your skin; tomorrow your height. Today you have too much hair; tomorrow too little. It has no interest in solving any problem. It only needs you to stay in debt.</p>
<p>A person who constantly feels he owes the world a better body cannot get on with his life properly. I have known many such people, including my former self.</p>
<h2 id="trying-to-change-taught-me-the-boundary">Trying to change taught me the boundary</h2>
<p>Let me state clearly: I am not against change. What can be changed may of course be changed. A cleaner haircut, some exercise, sunscreen, scientific methods against hair loss—there is nothing wrong with any of these. A large part of civilization exists precisely so that people do not have to leave everything to fate.</p>
<p>The problem is that some changes solve problems, while others are taxes paid to shame. The two look alike but differ entirely in nature, and you can only tell them apart by trying.</p>
<p>I tried them all. In the end I had to admit: some things can be optimized a little, but the underlying logic cannot be rewritten. My height will not become 180 cm no matter how sincerely I search. My skin will not exchange itself for a new shade because I resent it. My hair will not report back for duty in formation because I reason with it earnestly in the shower. I reached this conclusion by induction. The sample size is sufficient; the conclusion is reliable.</p>
<p>Accepting this fact brought me no joy at all. Real acceptance is never graceful. It does not arrive with a sunset and a soundtrack. It is more like a man who has exhausted himself, sits down on the ground, and says: fine, this will do for now.</p>
<h2 id="acceptance-does-not-mean-liking-everything">Acceptance does not mean liking everything</h2>
<p>For a while, I misunderstood what it meant to make peace with myself. I thought it meant loving every hair, every inch of skin, every centimeter of height. Later I found this demand too high, and too false. There is no need to package every flaw as a gift. A gift at least comes with a ribbon. Hair loss does not.</p>
<p>Russell said that diversity is essential to happiness. I believe this. But believing it is one thing; having it apply to yourself is another. Knowing that diversity is good, and cheerfully accepting that you happen to sit on the "diverse" end of it, are separated by quite a few years.</p>
<p>Acceptance is not suddenly deciding that you are perfect. It is admitting that you are not, while refusing to spend the main energy of your life prosecuting that fact. I may dislike my body hair without hating summer. I may dislike my skin without avoiding cameras. I may admit that 167 is not tall without shrinking automatically next to taller people. I may take my hair loss seriously without entering every fallen strand into my personal history of fate.</p>
<p>This is not a victory. It is a ceasefire. A ceasefire is already good enough. A person has too much to do in one lifetime to fight a daily civil war against his own skin, bones, and follicles.</p>
<h2 id="a-person-is-not-a-medical-form">A person is not a medical form</h2>
<p>The body matters, of course. No one can pretend not to have one, because hunger growls, fatigue hurts, and the hair that falls in the shower reminds you of reality in very concrete terms.</p>
<p>But a person cannot be just a medical form either.</p>
<p>If you break me down into indicators—hairy, dark, 167, prone to hair loss—I do look like an unimpressive product specification. But that is not how a person is meant to be used. A person has his own way of speaking, his habits of doing things, the things he loves, the sharp remarks he manages to swallow, and the sincere words he finally says. None of these can be measured with a ruler, so none of them appear on a medical form. What the form leaves out is not necessarily unimportant. As far as I know, the most important things are generally not on it.</p>
<p>These traits of mine once made me feel inferior to others. They are still here, but their jurisdiction has shrunk. They can still affect my photos, my clothes, my hairstyle, and my mood, but they no longer decide whether I deserve to live well.</p>
<p>The peace I can manage is roughly this: I do not sanctify what I cannot change, and I no longer humiliate it either. I am still hairy, still dark, still 167, still worried about my hair. But I no longer intend to put myself in the defendant's chair.</p>
<p>It is hard enough for a person to arrive in this world at all. If he must first pass an appearance review of his own making before being permitted to live at ease, that would be unreasonable. I did not figure this out early. Fortunately, I did not figure it out too late either.</p>
]]></content:encoded>
		</item>
		<item>
			<title>Being Busy Can Be an Advantage for Creators</title>
			<link>https://mrlark.com/en/blog/busy-creator-time-constraint</link>
			<guid isPermaLink="true">https://mrlark.com/en/blog/busy-creator-time-constraint</guid>
			<pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate>
			<description>Limited time can help. It filters out vague topics and leaves you with real problems, tested fixes, and reusable notes.</description>
			<category>Writing</category>
			<category>Methods</category>
			<content:encoded><![CDATA[<p>Hi, I am Mr Lark. In Chinese, I go by 拉克先生.</p>
<p>When work gets busy, I often write better. The best example was a small bug in an article summary: the mobile card left a blank line, and I found the root cause in the length check. The fix was tiny, but it gave me a real post.</p>
<h2 id="busy-work-filters-topics">Busy work filters topics</h2>
<p>The most common excuse for not creating content is not having enough time. I have used it myself.</p>
<p>But limited time is not always a disadvantage. It pushes away broad topics that sound useful but stay vague.</p>
<p>You stop writing "how to improve productivity." You start writing "how I reduced one recurring task from 30 minutes to 5 minutes this week."</p>
<p>The first one sounds like an opinion. The second one is experience.</p>
<p>Creators do not always need more time. They need more specific problems.</p>
<h2 id="urgent-problems-are-real-material">Urgent problems are real material</h2>
<p>If you are busy, you are probably dealing with real tasks every day.</p>
<p>Those tasks create concrete friction:</p>
<ul>
<li>Which workflow wastes the most time</li>
<li>Which tool feels awkward</li>
<li>Which sentence needs to be explained three times</li>
<li>Which decision keeps circling back</li>
<li>Which mistake you just made and others may repeat</li>
</ul>
<p>That friction is content material.</p>
<p>People with plenty of empty time often start from "what do I want to say?" Busy people start from "what did I just solve?"</p>
<p>The second starting point is better.</p>
<h2 id="short-time-forces-practical-writing">Short time forces practical writing</h2>
<p>If you only have 30 minutes to write, you have little room for filler.</p>
<p>You only need to answer three questions:</p>
<ul>
<li>What problem did I face?</li>
<li>How did I solve it?</li>
<li>Why is this useful to someone else?</li>
</ul>
<p>That is enough.</p>
<p>An article does not need every background detail or the full theory. If it explains one concrete problem and leaves behind one reusable method, it already has value.</p>
<h2 id="do-not-chase-completeness">Do not chase completeness</h2>
<p>Many people fail to publish not because they lack time, but because they want every piece to feel complete.</p>
<p>When you are busy, completeness is the first thing to drop.</p>
<p>You can write one observation, one workflow, one judgment, or one failure case. A short piece is fine if the information density is high.</p>
<p>For example:</p>
<ul>
<li>Why a tool does not fit your workflow</li>
<li>Why a prompt failed</li>
<li>Why a project was delayed</li>
<li>Why a decision turned out wrong</li>
<li>Why a small change saved a lot of time</li>
</ul>
<p>Each one can become a standalone post.</p>
<h2 id="turn-work-into-notes">Turn work into notes</h2>
<p>The best material is not in a topic list. It is inside your work.</p>
<p>Track three types of notes:</p>
<ul>
<li>Problems you just solved</li>
<li>Mistakes you just made</li>
<li>Methods you just changed</li>
</ul>
<p>Do not wait until the weekend. Details fade quickly.</p>
<p>The note does not need to be complete. One sentence is enough: what happened, why it got stuck, and how you handled it.</p>
<p>When you write, expand that sentence.</p>
<h2 id="busy-people-need-a-fixed-structure">Busy people need a fixed structure</h2>
<p>When you are busy, do not design a new structure for every post.</p>
<p>Use a simple fixed format:</p>
<ol>
<li>State the problem</li>
<li>Name the old misconception</li>
<li>Explain the new approach</li>
<li>Define where it applies</li>
</ol>
<p>A fixed format reduces startup cost. You do not need to figure out the article first. You only need to put real experience into a stable container.</p>
<p>Writing does not have to start from zero every time.</p>
<h2 id="being-busy-is-not-the-blocker">Being busy is not the blocker</h2>
<p>Being busy reduces writing time, but it can improve topic quality.</p>
<p>You are not writing imagined problems. You are writing problems that just happened. You are not giving polished advice. You are sharing methods that were just tested.</p>
<p>If you always feel too busy to create content, change the goal.</p>
<p>Do not start by chasing output volume. Start by turning real friction into useful notes.</p>
<p>Limited time forces specificity.<br>
Specificity is what most content lacks.</p>
]]></content:encoded>
		</item>
		<item>
			<title>Build Your Own Evaluation Set</title>
			<link>https://mrlark.com/en/blog/build-your-own-eval-set</link>
			<guid isPermaLink="true">https://mrlark.com/en/blog/build-your-own-eval-set</guid>
			<pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate>
			<description>Leaderboards are only a first filter. A better test is whether a model can reliably solve your own real tasks.</description>
			<category>AI</category>
			<category>Methods</category>
			<content:encoded><![CDATA[<p>Hi, I am Mr Lark. In Chinese, I go by 拉克先生.</p>
<p>When I choose a model now, I first ask whether it can handle my real tasks. Leaderboards come second.</p>
<h2 id="leaderboards-are-not-enough">Leaderboards are not enough</h2>
<p>Model leaderboards change every day.</p>
<p>One model reaches the top today. Another claims to beat it tomorrow. A score tells me how a model performs on public tasks, but not whether it can match my tone, fix my code, or understand my context.</p>
<p>I have seen many strong models fail in daily use. They miss constraints in writing, hallucinate in research, and change the wrong boundary in coding. A model can be good at benchmarks and still fail on a vague two-sentence request.</p>
<p>Public leaderboards rank average ability. Your own eval ranks which model can do your work.</p>
<h2 id="your-eval-is-also-few-shot-material">Your eval is also few-shot material</h2>
<p>Building an eval set can feel heavy.</p>
<p>You need to collect cases, write expected outputs, and define rubrics. That can sound like unnecessary process.</p>
<p>But those 20 cases have a second use: they become your few-shot library.</p>
<p>Each case contains an input, an expected output, and a scoring standard. You are recording how you want AI to handle this type of task.</p>
<p>The next time you face a similar task, you can paste 2-3 cases into the prompt. Even a weaker model can do better when it sees your pattern.</p>
<h2 id="start-with-20-real-failures">Start with 20 real failures</h2>
<p>The first version should not chase scale.</p>
<p>Start with 20 high-quality cases. Once you can see clear differences between models, expand the set to 100+.</p>
<p>The best cases come from your AI usage over the past 1-2 months:</p>
<ul>
<li>Failed conversations</li>
<li>Tasks with the wrong tone</li>
<li>Summaries that missed key details</li>
<li>Code tasks with the wrong change boundary</li>
<li>Research answers with hallucinations</li>
<li>Tasks that only worked after repeated follow-up</li>
</ul>
<p>Real failures are more valuable than invented questions.</p>
<p>You are not testing whether a model can answer a polished prompt. You are testing whether it fails in the situations you actually face.</p>
<h2 id="each-case-needs-three-parts">Each case needs three parts</h2>
<p>Each case needs three parts:</p>
<p><strong>Input</strong>: the original prompt. Keep it messy if that is how the real request looked.</p>
<p><strong>Expected Output</strong>: the answer you wanted. Write it yourself or edit a model draft.</p>
<p><strong>Rubric</strong>: the scoring standard. Avoid vague comments like "pretty good." Split the judgment into concrete checks:</p>
<table>
<thead>
<tr>
<th>Dimension</th>
<th>Weight</th>
</tr>
</thead>
<tbody>
<tr>
<td>Correctness</td>
<td>40%</td>
</tr>
<tr>
<td>Completeness</td>
<td>20%</td>
</tr>
<tr>
<td>Tone and style</td>
<td>20%</td>
</tr>
<tr>
<td>No hallucination</td>
<td>20%</td>
</tr>
</tbody>
</table>
<p>JSONL is an easy storage format. Score each answer from 1 to 10, or use Pass/Fail with a concrete reason.</p>
<h2 id="prioritize-edge-cases">Prioritize edge cases</h2>
<p>The set needs diversity, but it should not spread effort evenly.</p>
<p>Include simple, intermediate, and hard tasks. Include writing, coding, summarization, search, rewriting, and analysis.</p>
<p>The cases that separate models are usually edge cases: wrong tone, missed constraints, misunderstood context, invented facts, or answered directly when the model should have asked a follow-up question.</p>
<p>These cases expose model weaknesses quickly.</p>
<h2 id="compare-manually-first">Compare manually first</h2>
<p>The lightest workflow is to feed the same case to several models and compare the answers yourself.</p>
<p>That already solves most model-selection problems.</p>
<p>If you want a more convincing result, turn the workflow into a table:</p>
<ul>
<li>One row per case</li>
<li>One column per model output</li>
<li>One column for the ground truth</li>
<li>One column for score and reason</li>
</ul>
<p>Later, you can use a judge model. Give it the input, expected output, rubric, and candidate answer. Ask it to score the answer and explain why.</p>
<p>Judge models can also be biased, so sample-check part of the scores.</p>
<h2 id="build-your-own-standard">Build your own standard</h2>
<p>Public leaderboards are still useful, but only as a first filter.</p>
<p>What matters in daily work is whether a model understands your tone, codebase, business context, and follow-up habits.</p>
<p>Only your own eval set can answer those questions.</p>
<p>Start with 20 real cases. Expand to 100+ after you see clear differences. Add rubrics and a judge model when you need a stable process.</p>
<p>Those cases can also become few-shot examples.</p>
<p>That is more reliable than chasing the newest leaderboard.</p>
]]></content:encoded>
		</item>
		<item>
			<title>In the AI Era, I Do Not Read Code or Plans First. I Look at Diagrams.</title>
			<link>https://mrlark.com/en/blog/ai-era-i-only-read-diagrams</link>
			<guid isPermaLink="true">https://mrlark.com/en/blog/ai-era-i-only-read-diagrams</guid>
			<pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate>
			<description>AI makes code and plans longer. I now start with diagrams and only read the code after I understand the shape of the change.</description>
			<category>AI</category>
			<category>Tools</category>
			<content:encoded><![CDATA[<p>Hi, I am Mr Lark. In Chinese, I go by 拉克先生.</p>
<p>The faster AI writes code, the less I want to start by reading code.</p>
<h2 id="code-and-plans-both-get-long">Code and plans both get long</h2>
<p>I used to trace the files first: where the entry point is, where the state comes from, how data moves, and where the result is rendered. That worked in small projects.</p>
<p>Now AI may change routes, components, styles, data scripts, and config in one pass. Each file can be readable on its own, but together they become a web. After reading the code, I still may not know where the change boundary is.</p>
<p>Plans are not much better. They list files, steps, edge cases, and verification. For simple tasks, that is useful. For complex tasks, it becomes another long document. Code complexity turns into text complexity.</p>
<p>So I now look at diagrams first.</p>
<h2 id="diagrams-should-answer-one-question">Diagrams should answer one question</h2>
<p>I tried Mermaid, but complex diagrams get messy. More nodes create crossing arrows. More groups make the diagram wider. The diagram may render, but it is still hard to read.</p>
<p>Then I started using PlantUML. It is better when I split diagrams by question:</p>
<ul>
<li>Use a sequence diagram for call order</li>
<li>Use a component diagram for module relationships</li>
<li>Use a state diagram for state changes</li>
</ul>
<h2 id="i-ask-ai-for-diagrams-first">I ask AI for diagrams first</h2>
<p>Now I usually ask AI for this first:</p>
<pre class="code-block language-text"><code class="language-text">First, draw a PlantUML diagram that explains how these files call each other.
If state changes are involved, draw a separate state diagram.
</code></pre>
<p>The diagram helps me see the entry point, data source, business logic, and side effects. After that, I decide whether I need to read the code.</p>
<h2 id="documd-handles-the-rendering">docu.md handles the rendering</h2>
<p>One more tool I recommend is <a href="https://docu.md/">docu.md</a>.</p>
<p>PlantUML is easy to maintain inside Markdown, but normal previews may not render it. The docu.md browser extension can render PlantUML in Markdown. It also supports Mermaid, Graphviz, LaTeX, and code highlighting.</p>
<p>Now I ask AI to generate a <code>doc.md</code> file with the task background, key files, PlantUML diagrams, and a short explanation. I open it in the browser, read the diagrams, scan the headings, and then return to the code.</p>
<p>I no longer start from code details or a long plan.</p>
<p>I look at the diagram first.</p>
]]></content:encoded>
		</item>
		<item>
			<title>How to Name a Personal Media Brand</title>
			<link>https://mrlark.com/en/blog/naming-a-personal-brand</link>
			<guid isPermaLink="true">https://mrlark.com/en/blog/naming-a-personal-brand</guid>
			<pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate>
			<description>A good personal brand name should be easy to say, easy to remember, and tied to a domain you control. For me, that meant checking the domain first.</description>
			<category>Notes</category>
			<category>Personal Media</category>
			<content:encoded><![CDATA[<p>Hi, I am Mr Lark.</p>
<p>Why is there "Mr" in my name? Nothing deep: <code>mrlark.com</code> was the shortest domain I could register, and "Mr" came with it.</p>
<p>If I could register <code>lark.com</code>, I would just be Lark. If I could register <code>musk.com</code>, I would not mind being Musk either. My online name was not invented; it was what remained.</p>
<p>That may sound casual, but I paid tuition twice before I learned it. In the end, a good name is plain: it should be easy to say and easy to remember.</p>
<p>That lesson came from two bad names I used before.</p>
<h2 id="two-bad-names-i-used">Two bad names I used</h2>
<p>My first name was "Xiaolin's Mischief Dragon."</p>
<p>It was a mix of <em>The Dragon Maid of Kobayashi's House</em> and <em>Water Margin</em>: one is an anime, the other is a classic Chinese novel. When I came up with it, I thought I was being clever. It had a little anime energy and a little classical-literature energy.</p>
<p>Later I found three problems:</p>
<ul>
<li>It was too long. Seven Chinese characters are already a lot to remember.</li>
<li>The reference was too obscure. People who had not watched the anime missed one half, and people who had not read <em>Water Margin</em> missed the other.</li>
<li>It was hard to address. In Chinese, people usually use two-character names, so I still did not know whether people should call me "Xiaolin" or "Jianglong."</li>
</ul>
<p>Later I changed it to "Yinke Jun," using "Yinke" as a sound-alike for Ink.</p>
<p>That name was shorter, but it still had two problems:</p>
<ul>
<li>The reference was still too obscure. Most people saw "Yinke" and thought of stamping or carving, not Ink.</li>
<li>It was still awkward to say. "Yinke" and "Yinke Jun" both felt a little stiff.</li>
</ul>
<p>The two names looked different, but the real problem was the same: they were names I liked, not names other people could use.</p>
<h2 id="a-name-should-be-easy-for-readers">A name should be easy for readers</h2>
<p>After those two failures, I understood something simple: the main user of a name is the reader.</p>
<p>Once a name is chosen, I barely use it except when I introduce myself. Readers, on the other hand, see it again and again. They see it when they read my articles, and they see it when they want to contact me.</p>
<p>So the standard should come from the reader. For readers, a name only needs two things: it should be easy to say, and easy to remember.</p>
<p>Easy to say means no hesitation when someone leaves a comment or mentions you in conversation. "Mr Lark, this was a good article" sounds normal. "Xiaolin's Mischief Dragon, this was a good article" does not.</p>
<p>Easy to remember means people can find you again. That is where the domain comes in.</p>
<h2 id="a-name-should-have-a-short-domain">A name should have a short domain</h2>
<p>Why care about a domain? Because platforms are unreliable.</p>
<p>Today a platform may think you are worth recommending. Tomorrow it may decide you no longer fit its direction and stop showing your work.</p>
<p>A domain is the fixed place you control. With <code>mrlark.com</code>, anyone who wants to see what I am doing has somewhere stable to go. A platform can stop recommending me, but on my own site, I am still the main character.</p>
<p>So my rule is to reverse the usual order: check the domain first, then choose from the names that are still available. A name can fit the domain, but the domain cannot fit the name.</p>
<p>That is how I ended up with "Mr Lark": first <code>mrlark.com</code>, then "Mr."</p>
<p>It may not be the most striking name at first glance, but it can be spoken, it can be remembered, and I am willing to keep using it. That is enough.</p>
]]></content:encoded>
		</item>
	</channel>
</rss>
