<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Posts on Daydream in Boston</title>
    <link>https://blog.achiwa.co.uk/posts/</link>
    <description>Recent content in Posts on Daydream in Boston</description>
    <generator>Hugo -- 0.152.1</generator>
    <language>ja-jp</language>
    <lastBuildDate>Mon, 20 Jul 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.achiwa.co.uk/posts/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>vocaBull 2 - a remake of a flashcard web app</title>
      <link>https://blog.achiwa.co.uk/posts/vb2/</link>
      <pubDate>Mon, 20 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/vb2/</guid>
      <description>&lt;p&gt;I developed vocaBull which is a flashcard web app a few years ago, and I use it almost every weekday.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://achiwa912.github.io/vbs_eng.html&#34;&gt;Introducing vocaBull&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/achiwa912/vbs&#34;&gt;github repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;vocaBull (vb, for short) is deployed on &lt;a href=&#34;https://achiwa912.pythonanywhere.com/&#34;&gt;Pythonanywhere.com&lt;/a&gt;, but the free plan for pythonanywhere gets slow frequently, forcing me to wait for a few seconds before I see a new flashcard.&lt;/p&gt;
&lt;p&gt;As vb is Flask and Jinja2-based, it needs to render an HTML page for every flashcard at the server.  This has made it frustrating to use vb from Pythonanywhere.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Is it OK to say that I hate something?</title>
      <link>https://blog.achiwa.co.uk/posts/hatesomething/</link>
      <pubDate>Sun, 19 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/hatesomething/</guid>
      <description>&lt;p&gt;Probably not.&lt;/p&gt;
&lt;p&gt;But I have to say that I hate subscriptions because they are monthly cost that are not predictable.  We start subscribing services because we think they are priced reasonably.  But, subscription fees are completely up to them.  They can change fees anytime they want.  It&amp;rsquo;s pretty common that some services are first cheap and later change pricing.  Look at Spotify and Netflix.  Look at Apple.  Look at Google.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Going full-stack</title>
      <link>https://blog.achiwa.co.uk/posts/fullstack/</link>
      <pubDate>Fri, 10 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/fullstack/</guid>
      <description>&lt;p&gt;(I&amp;rsquo;ve forgotten to publish this&amp;hellip;7/19/2026)&lt;/p&gt;
&lt;p&gt;Currently, I&amp;rsquo;m working on the 3rd full-stack project that involves Python+SQLAlchemy+Pydantic+FastAPI backend and JavaScript+Vue+Pinia+TailwindCSS+DaisyUI frontend.  Before these projects, I knew Python+SQLAlchemy+Flask+Jinja2+BootStrap, ie, server-side only.&lt;/p&gt;
&lt;p&gt;I didn&amp;rsquo;t know that context switching is the hard part for full-stack.  If I notice while working on a Vue file that I need to add a column to a database table, I need to change database ORM → Pydantic class → FastAPI → Pinia → Vue.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to force DeepSeek to use English only</title>
      <link>https://blog.achiwa.co.uk/posts/dsenglish/</link>
      <pubDate>Fri, 26 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/dsenglish/</guid>
      <description>&lt;p&gt;I like to talk with AIs and find anomalies in their answers.  I think I have a basic understanding of how LLMs work, and so I want to know how those anomalies map to LLM architecture.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.achiwa.co.uk/posts/howllm/&#34;&gt;How GenAI works - Transformer internals&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Recently, DeepSeek tends to answer in Chinese more often than before.  More than half of the time, it even thinks in Chinese (we can observe its thinking/reasoning).  As DeepSeek is developed and trained mostly in Chinese, I think this is understandable.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Don&#39;t ask AI about its new feature</title>
      <link>https://blog.achiwa.co.uk/posts/aifeature/</link>
      <pubDate>Tue, 23 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/aifeature/</guid>
      <description>&lt;p&gt;I know that AI doesn&amp;rsquo;t know much about itself, but I can&amp;rsquo;t help asking an AI about its new feature.  Today, I asked DeepSeek if it has a new memory feature, and it confidently hallucinated that it has a new DeepSeek++ Chrome plugin.&lt;/p&gt;
&lt;p&gt;As it turned out, &lt;a href=&#34;https://github.com/zhu1090093659/deepseek-pp&#34;&gt;DeepSeek++&lt;/a&gt; is actually a popular third party project.  What&amp;rsquo;s hilarious is that humans never mix up a 3rd party feature as their own 1st party one.&lt;/p&gt;</description>
    </item>
    <item>
      <title>I think AI should remember me</title>
      <link>https://blog.achiwa.co.uk/posts/aimemory/</link>
      <pubDate>Sun, 21 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/aimemory/</guid>
      <description>&lt;p&gt;Some AIs have memory.  I&amp;rsquo;m sometimes surprised how much ChatGPT remembers about me.  But, the AI memory is a trick.  It&amp;rsquo;s just a context injection at the start of a new chat session.  The real memory for AI (transformer) should be ingrained to matrices W1 and W2 in the MLP layer.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.achiwa.co.uk/posts/howllm/&#34;&gt;How GenAI works - Transformer internals&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s fascinating about the transformer mechanism to me is that the vast amount of world knowledge is kept in the W1 and W2 matrices.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What is AI, really?</title>
      <link>https://blog.achiwa.co.uk/posts/whatisai/</link>
      <pubDate>Wed, 17 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/whatisai/</guid>
      <description>&lt;p&gt;When you talk with AI (transformer) such as ChatGPT or Gemini, they are pretty much like a human.  They are supportive and they answer all your questions.  Sometimes I feel as if I&amp;rsquo;m having a real conversation with a real person.&lt;/p&gt;
&lt;p&gt;But at the same time, I know that what I&amp;rsquo;m feeling is an illusion.  What AI is actually doing is generating most likely tokens based on the chat session and what they learned during training.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A few thoughts on AI</title>
      <link>https://blog.achiwa.co.uk/posts/findingai/</link>
      <pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/findingai/</guid>
      <description>&lt;h2 id=&#34;your-cognitive-load-is-the-bottleneck&#34;&gt;Your cognitive load is the bottleneck&lt;/h2&gt;
&lt;p&gt;This past couple of months, I&amp;rsquo;ve been working on projects.  AI has drastically accelerated my learning and development.  Questions to AI can start shallow (eg, &amp;ldquo;what is X?&amp;rdquo;) and go as deep as I want.&lt;/p&gt;
&lt;p&gt;AI more or less understands what I want to make, and urges me to write code step-by-step.  I instruct AI not to give code and to let me write code myself first.  And more often than not, the code I&amp;rsquo;m expected to write includes new items for me.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Haiku by AI</title>
      <link>https://blog.achiwa.co.uk/posts/haikuai/</link>
      <pubDate>Mon, 08 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/haikuai/</guid>
      <description>&lt;p&gt;Today, I was discussing with DeepSeek why AI is not a super wise brain even though it has vast amount of knowledge available on the entire Internet.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s answer mostly made sense; that it&amp;rsquo;s just a probability prediction machine and it doesn&amp;rsquo;t learn from experience.  Looking at the attention mechanism which is the core of DeepSeek, ChatGPT, Gemini, etc., I understand what it means.  It only cares about context/patterns.  It forgets everything in a new chat without &amp;ldquo;memory&amp;rdquo; feature.  It even forgets its training data unless repeatedly appeared, though I am often marveled at how AI can retrieve niche info from its knowledge.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learn to code by AI-assisted development</title>
      <link>https://blog.achiwa.co.uk/posts/learncodeai/</link>
      <pubDate>Fri, 05 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/learncodeai/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been learning JavaScript and Vue (and re-learning Python) with Claude as my coding partner.  I will share some findings and tricks when learning from AIs.
Note: I&amp;rsquo;m (sort of) intermediate for Python and a novice for JS/Vue.&lt;/p&gt;
&lt;h2 id=&#34;ais-are-trained-to-help-not-to-teach&#34;&gt;AIs are trained to help, not to teach&lt;/h2&gt;
&lt;p&gt;If you use general chat AIs such as ChatGPT, Gemini, Claude or Grok, they tend to give your full working source files from the beginning.  This is not good for your learning.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using various AIs</title>
      <link>https://blog.achiwa.co.uk/posts/varais/</link>
      <pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/varais/</guid>
      <description>&lt;p&gt;I started using AIs heavily 2-3 months ago.  For the record, I&amp;rsquo;m writing down my current AI usages.&lt;/p&gt;
&lt;h2 id=&#34;my-current-ai-workflow&#34;&gt;My current AI workflow&lt;/h2&gt;
&lt;p&gt;Here is my AI workflow.  I mostly use free-tiers.  I feel $20 a month for an AI service is a bit too high although I know that they barely earn profits with the pricing.  The only exception is Gemini API because I needed to top up $10 just to start using it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My recent AI projects</title>
      <link>https://blog.achiwa.co.uk/posts/aiproj/</link>
      <pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/aiproj/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been 2 months since last post but this blog is not dead (yet).
I&amp;rsquo;ve been busy working on two AI-related projects.  Let me briefly introduce them.&lt;/p&gt;
&lt;h2 id=&#34;ragev&#34;&gt;ragev&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/achiwa912/ragev&#34;&gt;https://github.com/achiwa912/ragev&lt;/a&gt;&lt;/p&gt;
&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;https://blog.achiwa.co.uk/ox-hugo/results.jpg&#34;/&gt; 
&lt;/figure&gt;

&lt;p&gt;&lt;code&gt;ragev&lt;/code&gt; is a RAG evaluation harness where you can change parameters such as top-k and evaluate performance.  The README.org includes complete evaluation report.&lt;/p&gt;
&lt;p&gt;I added frontend UI to ragev because I wanted to use JavaScript + Vue that I had been trying to learn for a few years without success.  Once again, I&amp;rsquo;m convinced that after reading an introductory book or two, I need to work on projects to be able to use a programming language.  AIs are a great help at this learning phase as it catches all beginner mistakes I make and explain diligently to me without pointing out how novice I am.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pitfalls for learning from AI</title>
      <link>https://blog.achiwa.co.uk/posts/pitfalls_ai/</link>
      <pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/pitfalls_ai/</guid>
      <description>&lt;p&gt;This is a draft speech script for a Toastmasters club.&lt;/p&gt;
&lt;h2 id=&#34;opening&#34;&gt;Opening&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Do you use AIs?  How do you like them?&lt;/li&gt;
&lt;li&gt;I used to dislike AIs.  They are not good for the environment, they hallucinate and all that.&lt;/li&gt;
&lt;li&gt;But a few months ago, I was told at work that we all need to learn and use AIs to be more competitive and grow.&lt;/li&gt;
&lt;li&gt;So, I started learning AIs, of course, from AIs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;what-i-did-followed&#34;&gt;What I did - followed&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I first learned how AI works, then advanced techniques to talk to AI, and I also did a PoC (Proof of Concept) AI project&lt;/li&gt;
&lt;li&gt;I asked AI if it can generate learning courses.  The course schedules it produced were pretty impressive.  So, I started them.&lt;/li&gt;
&lt;li&gt;The courses went smoothly, maybe a little too smoothly&lt;/li&gt;
&lt;li&gt;For example, in the PoC project, AI gave me everything; from steps to setup the environment, and to test scripts.  I didn&amp;rsquo;t write a single line of code.  And, they just worked!&lt;/li&gt;
&lt;li&gt;My expectations ballooned.  I thought, &amp;ldquo;How far can I go with AI assisting me like this!?&amp;rdquo;&lt;/li&gt;
&lt;li&gt;But, I didn&amp;rsquo;t go very far.  Because there were some issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;what-went-wrong-wasn-t-learning&#34;&gt;What went wrong - wasn&amp;rsquo;t learning&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;1st issue: AI gave me only shallow explanations.  I needed to ask a lot of questions so that to fully understand and internalize the knowledge.&lt;/li&gt;
&lt;li&gt;2nd issue: AI did literally everything - I was just its &amp;ldquo;hands&amp;rdquo;
&lt;ul&gt;
&lt;li&gt;Steps to setup the test environment&lt;/li&gt;
&lt;li&gt;Working Python scripts&lt;/li&gt;
&lt;li&gt;AI even analyzed the test results&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;I fell into the same trap as so-called &amp;ldquo;tutorial hell&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Tutorials are for complete beginners.  Anyone can follow the steps and reach the goal.  Tutorials give us basic understanding and a mild sense of achievement.  But you never go deep with tutorials.  After a few tutorials, you are still a beginner.  After several weeks of training courses, I was still a beginner.&lt;/li&gt;
&lt;li&gt;“It felt like I was learning—but I wasn’t.”&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;why-this-happens-ai-behavior&#34;&gt;Why this happens - AI &amp;ldquo;behavior&amp;rdquo;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;My misunderstanding, or the &amp;ldquo;gap&amp;rdquo; came from AI behavior.&lt;/li&gt;
&lt;li&gt;AI just tries to help you in the chat session.  It doesn’t push you to think&lt;/li&gt;
&lt;li&gt;AI doesn&amp;rsquo;t care about your wanting to learn and internalize something.&lt;/li&gt;
&lt;li&gt;It explains everything before you even ask.&lt;/li&gt;
&lt;li&gt;It gives you everything that you should do yourself.&lt;/li&gt;
&lt;li&gt;AI tries to make learning as smooth as possible, depriving you of opportunities to learn&lt;/li&gt;
&lt;li&gt;“AI isn’t optimized for your learning. It&amp;rsquo;s optimized for giving you a quick answer.”&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;what-i-changed-take-control-initiative&#34;&gt;What I changed - Take control &amp;ldquo;initiative&amp;rdquo;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;So I changed one thing: I took control.&lt;/li&gt;
&lt;li&gt;First, I do the work myself. I just don&amp;rsquo;t accept answers.&lt;/li&gt;
&lt;li&gt;Second, I question AI, or more like interrogate AI. I ask more details. I ask for sources.&lt;/li&gt;
&lt;li&gt;And third, I verify, because AI can hallucinate.&lt;/li&gt;
&lt;li&gt;If you don&amp;rsquo;t take control, AI will just do all the heavy lifting for you.  And you&amp;rsquo;re not learning.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;conclusion-reframe-ai-tool&#34;&gt;Conclusion - Reframe AI &amp;ldquo;tool&amp;rdquo;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I&amp;rsquo;ve learned these the hard way, from failures.&lt;/li&gt;
&lt;li&gt;If you are an AI beginner, I hope you can avoid similar mistakes.&lt;/li&gt;
&lt;li&gt;Let&amp;rsquo;s enjoy learning new AI technologies.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;after-thoughts&#34;&gt;After thoughts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yesterday, I told ChatGPT that I need to deliver this speech today, and asked some advice.  It told me that my script was too dense for a speech and thus I needed to re-write, which I stupidly did but I shouldn&amp;rsquo;t have.&lt;/li&gt;
&lt;li&gt;Today, I&amp;rsquo;m most unprepared.  Thank you, ChatGPT.  This speech was all about not to rely on AI, but I am doing the opposite.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Advanced Prompting guide</title>
      <link>https://blog.achiwa.co.uk/posts/advprompt/</link>
      <pubDate>Sun, 22 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/advprompt/</guid>
      <description>&lt;p&gt;To be honest, the word &amp;ldquo;Prompt Engineering&amp;rdquo; sounded like a bit black magic or even alchemy to me; It&amp;rsquo;s more of an art than a science.&lt;/p&gt;
&lt;p&gt;But as all IT engineers are required to improve our productivity using AIs, I decided to learn it and go a little deeper on the subject.&lt;/p&gt;
&lt;p&gt;This article is my learning notes as well as a practical guide for advanced prompting.  In later sections, I have added insights that I gained through my prompt usage and Q&amp;amp;As with (or &amp;ldquo;interrogating&amp;rdquo;) AIs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RAG workflow PoC - Python, ChromaDB, Ollama</title>
      <link>https://blog.achiwa.co.uk/posts/ragpoc/</link>
      <pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/ragpoc/</guid>
      <description>&lt;p&gt;In the previous post, I learned how LLM works from LLM itself (Copilot, to be more specific).  In this post, I will learn about RAG, of course, from Copilot.&lt;/p&gt;
&lt;p&gt;Methodology:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ask questions starting from &amp;ldquo;What is RAG?&amp;rdquo; to Copilot, and read answers&lt;/li&gt;
&lt;li&gt;Write down my understanding, asking Copilot if I&amp;rsquo;m correct&lt;/li&gt;
&lt;li&gt;Revise my writing until my understanding is solid&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Let&amp;rsquo;s start today&amp;rsquo;s learning.&lt;/p&gt;
&lt;h2 id=&#34;what-is-rag&#34;&gt;What is RAG?&lt;/h2&gt;
&lt;p&gt;RAG (Retrieval-Augmented Generation) is a workflow for retrieving relevant external information and injecting it into user questions for LLM to consume.  RAG supplements these LLM&amp;rsquo;s weak points:&lt;/p&gt;</description>
    </item>
    <item>
      <title>How GenAI works - Transformer internals</title>
      <link>https://blog.achiwa.co.uk/posts/howllm/</link>
      <pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/howllm/</guid>
      <description>&lt;p&gt;I didn&amp;rsquo;t really like GenAI because it hallucinates, consumes lots of energy, has raised memory and SSD prices, etc.  But as an IT engineer, I can&amp;rsquo;t ignore it.  In this post, I&amp;rsquo;ll try to learn how GenAI (LLM) works by asking a lot of questions to AI.&lt;/p&gt;
&lt;p&gt;I mainly use Copilot because it is most lenient with hourly/daily usage limit.  Below are mainly outputs from Copilot (but I modified/summarized them).  Sorry if I didn&amp;rsquo;t remove all hallucinations.  As it turned out, LLM as a technology is pretty interesting.  Let&amp;rsquo;s see if I can learn something complex as LLM from AI.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setup remote dev environment for Vue</title>
      <link>https://blog.achiwa.co.uk/posts/devvue/</link>
      <pubDate>Sat, 21 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/devvue/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been learning JavaScript (beginner level), and just started learning &lt;a href=&#34;https://vuejs.org/&#34;&gt;Vue&lt;/a&gt; framework.  I read &lt;a href=&#34;https://vuejs.org/guide/essentials/application.html&#34;&gt;Essential&lt;/a&gt; section of the official Vue doc, and now I&amp;rsquo;d like to do some hands-on with &lt;a href=&#34;https://vuejs.org/examples/#hello-world&#34;&gt;Examples&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In this post, I setup a dev environment for Vue in my homelab Ubuntu server.  I remotely access source files and the dev server via Emacs over Tramp and a browser over ssh tunneling respectively from a laptops (chromebook).&lt;/p&gt;
&lt;p&gt;Prerequisites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Headless server running Ubuntu (or other distribution)&lt;/li&gt;
&lt;li&gt;Can ssh to the server with ssh-key&lt;/li&gt;
&lt;li&gt;Emacs can edit files in the server via Tramp&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;First, (take a snapshot of the Ubuntu VM and) update Ubuntu of the homelab server.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exposing ssh to the Internet</title>
      <link>https://blog.achiwa.co.uk/posts/exposessh/</link>
      <pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/exposessh/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve decided to expose ssh to the homelab server to the Internet.  I had been afraid of doing so for months, but it&amp;rsquo;s about time and I think I&amp;rsquo;m ready.&lt;/p&gt;
&lt;p&gt;As a background, my homelab server already exposes web services such as blog and Immich via Caddy.  Caddy and Immich are running in docker containers on Ubuntu on Proxmox.&lt;/p&gt;
&lt;p&gt;Before exposing ssh, I needed to fortify the server to protect it from bot and other malicious attacks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How about a Chromebook?</title>
      <link>https://blog.achiwa.co.uk/posts/pixelbookgo/</link>
      <pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/pixelbookgo/</guid>
      <description>&lt;p&gt;Recently, I bought an old Chromebook from my daughter.  She has a new M4 MacBook, and the old note PC had been left untouched for a year or two.  It has a broken camera, and so she asked me only 25 dollars.  Nice.  I wanted to try the Linux(beta) feature.&lt;/p&gt;
&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;https://blog.achiwa.co.uk/ox-hugo/pixelbook_photopea.jpg&#34;/&gt; 
&lt;/figure&gt;

&lt;p&gt;It is a Pixelbook Go &amp;ldquo;Not Pink&amp;rdquo; with Intel 8th gen Core i5 CPU, 8GB memory and 128GB SSD.  Back then, I thought the $845 price tag was a little too high for a chromebook, and for her first PC.  But she wanted the cute pink note PC from Google.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Duck &amp; leek soba noodles for new year&#39;s eve</title>
      <link>https://blog.achiwa.co.uk/posts/kamo_nanban/</link>
      <pubDate>Fri, 02 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/kamo_nanban/</guid>
      <description>&lt;p&gt;Happy new year!&lt;/p&gt;
&lt;p&gt;Many Japanese families have soba noodles on new year&amp;rsquo;s eve.  We believe having soba on new year&amp;rsquo;s eve will bring us good luck.  You know, soba is long &amp;gt; longevity kind of thing.  We tried duck and leek (kamo-nanban) soba this holiday.&lt;/p&gt;
&lt;p&gt;On December 31st, I bought duck breast at a grocery store.  It was $21@0.88lb (400g).
&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.achiwa.co.uk/ox-hugo/duck_front.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;First, I set &lt;a href=&#34;https://anovaculinary.com/products/anova-precision-cooker-nano-3&#34;&gt;Anova precision cooker&lt;/a&gt; at 58C (136F) degrees and leave the duck at the temperature for 3 hours.  Duck should be put in a ziploc bag.
&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.achiwa.co.uk/ox-hugo/duck_anova.jpg&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Roast chicken for Christmas</title>
      <link>https://blog.achiwa.co.uk/posts/grilled_whole_chicken/</link>
      <pubDate>Thu, 25 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/grilled_whole_chicken/</guid>
      <description>&lt;p&gt;Happy Holidays!&lt;/p&gt;
&lt;p&gt;Every year on Christmas eve, I roast a whole chicken.  Though an uncooked whole chicken alone is more expensive than a fully cooked whole rotisserie chicken sold at a grocery store, cost isn&amp;rsquo;t important on Christmas.  Besides, it (usually) tastes much better if you roast one yourself.&lt;/p&gt;
&lt;p&gt;This year, I bought an organic whole chicken (4.2 lbs) at a nearby Whole Foods market at $19.&lt;/p&gt;
&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;https://blog.achiwa.co.uk/ox-hugo/whole_packaged.jpg&#34;/&gt; 
&lt;/figure&gt;

&lt;p&gt;Other ingredients:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3 carrots, 3 celery stalks and a medium-sized onion&lt;/li&gt;
&lt;li&gt;fresh herbs - thyme, rosemary (and sage this year)&lt;/li&gt;
&lt;li&gt;butter (25g)&lt;/li&gt;
&lt;li&gt;garlic 3-4 pieces&lt;/li&gt;
&lt;li&gt;olive oil (25g), salt and pepper&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;https://blog.achiwa.co.uk/ox-hugo/herb_poultryblend.jpg&#34;/&gt; 
&lt;/figure&gt;

&lt;p&gt;On December 23rd or 24th, thyme and rosemary are in demand and tend to disappear from grocery stores.  Last year, I looked for 3-4 grocers before I found rosemary.  This year, I wasn&amp;rsquo;t able to find thyme, so I gave it a shot with this herb blend.  The blend has mainly thyme, and a twig of rosemary and sage each.  How convenient!  I might want more rosemary, though.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to address Emacs&#39;s slow startup time</title>
      <link>https://blog.achiwa.co.uk/posts/emacs-startuptime/</link>
      <pubDate>Fri, 05 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/emacs-startuptime/</guid>
      <description>&lt;p&gt;Emacs has many great packages.  If you add tens or hundreds of them to your init.el, you might find the startup gets really slow.  If that&amp;rsquo;s happened, you would want to know what are the culprits of the slowness, and hopefully to address them.&lt;/p&gt;
&lt;h2 id=&#34;find-out-slow-packages&#34;&gt;Find out slow packages&lt;/h2&gt;
&lt;p&gt;To know which packages are slow if you use use-package, you can set in your init.el just after enabling use-package:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-elisp&#34; data-lang=&#34;elisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq use-package-compute-statistics &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After restarting Emacs, you can run &lt;code&gt;M-x use-package-report&lt;/code&gt;.  It shows something like this:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Accessing files in homelab server</title>
      <link>https://blog.achiwa.co.uk/posts/access_files_homelab/</link>
      <pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/access_files_homelab/</guid>
      <description>&lt;p&gt;I have consolidated documents and other files in the homelab server such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Memos and personal wiki pages (.org)&lt;/li&gt;
&lt;li&gt;Tax documents (.org, .pdf)&lt;/li&gt;
&lt;li&gt;Apartment leases (.org, .pdf)&lt;/li&gt;
&lt;li&gt;Holiday card-related info (.csv, .pdf)&lt;/li&gt;
&lt;li&gt;Calendar (.pdf, .py)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Many files can be accessed from Emacs via tramp.  But in some cases, I need local copies which either Emacs can&amp;rsquo;t handle well, need to access with local apps or need to access offline.&lt;/p&gt;
&lt;p&gt;An alternative and probably easier way is to make those files available by exporting a directory (ie, file server).  But as files are in many directories and I don&amp;rsquo;t want to export everything, I haven&amp;rsquo;t set that up yet.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Emacs config (init.el)</title>
      <link>https://blog.achiwa.co.uk/posts/emacs-conf/</link>
      <pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/emacs-conf/</guid>
      <description>&lt;p&gt;Here are my current Emacs settings from &lt;code&gt;~/.emacs.d/init.el&lt;/code&gt;.  (updated as of 7/19/2026)&lt;/p&gt;
&lt;p&gt;First, I declare package repositories.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-emacs-lisp&#34; data-lang=&#34;emacs-lisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(require &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;package&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq package-archives
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#39;&lt;/span&gt;((&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gnu&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://elpa.gnu.org/packages/&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;melpa&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://melpa.org/packages/&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nongnu&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://elpa.nongnu.org/nongnu/&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;org&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://orgmode.org/elpa/&amp;#34;&lt;/span&gt;)))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(package-initialize)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(when (not package-archive-contents)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (package-refresh-contents))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Next is for &lt;code&gt;use-package&lt;/code&gt;.  It has been default since Emacs 29.  I wonder if I still need this&amp;hellip;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-elisp&#34; data-lang=&#34;elisp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;;; for use-package&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(unless (package-installed-p &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;use-package&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  (package-install &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;use-package&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(require &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;use-package&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq use-package-always-ensure &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;(setq use-package-compute-statistics &lt;span style=&#34;color:#66d9ef&#34;&gt;t&lt;/span&gt;)  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; to see packges that took long
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;appearance&#34;&gt;Appearance&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;material-theme&lt;/code&gt; has been my favorite theme for some time now.  It&amp;rsquo;s dark but warm, and easy on the eyes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Import Google Photos data to Immich</title>
      <link>https://blog.achiwa.co.uk/posts/import_gphotos/</link>
      <pubDate>Mon, 17 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/import_gphotos/</guid>
      <description>&lt;p&gt;A few months after I started using &lt;a href=&#34;https://immich.app/&#34;&gt;Immich&lt;/a&gt;, I decided to migrate all my google photos data to Immich.  Immich is a self-hosted, Google Photos alternative.&lt;/p&gt;
&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;https://blog.achiwa.co.uk/ox-hugo/immich.jpg&#34;/&gt; 
&lt;/figure&gt;

&lt;h2 id=&#34;google-takeout&#34;&gt;Google Takeout&lt;/h2&gt;
&lt;p&gt;You need to download all Google Photos data with &lt;a href=&#34;https://takeout.google.com/settings/takeout/custom/photos&#34;&gt;Google Takeout&lt;/a&gt;.  Google Photos is already chosen on the linked page.  Click Next &amp;gt; File type: .zip, File size: change to maximum 50GB &amp;gt; Create export.&lt;/p&gt;
&lt;p&gt;After a while, in my case a few hours, Google sent to me an email with a link.  Clicked it, and downloaded all .zip files.  My photos and videos were totaled just below 150GB.  I didn&amp;rsquo;t know that I had this much.  As my internet plan is slow at 100Mbps max, it took 3 hours or so to download the 3 big files.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Backup homelab server</title>
      <link>https://blog.achiwa.co.uk/posts/homelab_backup/</link>
      <pubDate>Sun, 16 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/homelab_backup/</guid>
      <description>&lt;p&gt;In my &lt;a href=&#34;https://blog.achiwa.co.uk/posts/homelab_minipc/&#34;&gt;previous post&lt;/a&gt;, I introduced my homelab mini PC and how I set it up.  In this post, I&amp;rsquo;d like to show how I backup the homelab PC.&lt;/p&gt;
&lt;h2 id=&#34;3-2-1-rule&#34;&gt;3-2-1 rule&lt;/h2&gt;
&lt;p&gt;Have you heard of &lt;a href=&#34;https://www.seagate.com/blog/what-is-a-3-2-1-backup-strategy/&#34;&gt;3-2-1 backup rule&lt;/a&gt;/best practice?  It&amp;rsquo;s:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3 copies, original + 2 backup copies&lt;/li&gt;
&lt;li&gt;2 different media&lt;/li&gt;
&lt;li&gt;1 offsite copy&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some people say #2 is irelevent anymore.  I&amp;rsquo;m not sure if having copies both in SSD and HDD matters, either.  Anyway, I will make sure one backup copy in an external USB drive and another in cloud to achieve both #3 and #1.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Homelab with mini PC</title>
      <link>https://blog.achiwa.co.uk/posts/homelab_minipc/</link>
      <pubDate>Fri, 14 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/homelab_minipc/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The company I work for has changed its device usage policy, and now it doesn&amp;rsquo;t allow company devices for personal use.  So, I decided to buy a mini PC to setup a small homelab server, and migrate my personal data to it.  Also, I wanted to start de-googling by having all my and family photos to it.  This was my summer project this year.&lt;/p&gt;
&lt;h2 id=&#34;mini-pc-for-homelab-server&#34;&gt;Mini PC for homelab server&lt;/h2&gt;
&lt;p&gt;I bought AceMagic&amp;rsquo;s &lt;a href=&#34;https://www.amazon.com/ACEMAGIC-V1-Computers-Computer-Ethernet/dp/B0DYYMQFM9&#34;&gt;this mini PC&lt;/a&gt; for less than $200.  I was pleasantly surprised at how small it is.  It has Intel N150 processor, 16GB DDR4 RAM and 1TB S-ATA SSD.  It&amp;rsquo;s not powerufl, but the beauty of N150 is its low power consumption, thus low electricity cost and also it&amp;rsquo;s relatively silent.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Emacs workflows</title>
      <link>https://blog.achiwa.co.uk/posts/emacs-workflows/</link>
      <pubDate>Fri, 07 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/emacs-workflows/</guid>
      <description>&lt;p&gt;I love Emacs.  Emacs is a great text editor, plus much more than that.  You might say that anythig text-based can be handled nicely in Emacs.&lt;/p&gt;
&lt;p&gt;I first chose Emacs at work as it looked more sophisticated than vi.  Decades later, I still use Emacs as I&amp;rsquo;ve been convinced that it&amp;rsquo;s one of the best tools and worth the time and effort to keep learning.&lt;/p&gt;
&lt;p&gt;Following are my current worklows using Emacs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Moved to a new apartment</title>
      <link>https://blog.achiwa.co.uk/posts/new_apartment/</link>
      <pubDate>Tue, 28 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/new_apartment/</guid>
      <description>&lt;p&gt;This is a draft speech script for a Toastmasters club.&lt;/p&gt;
&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Do you like &lt;strong&gt;moving&lt;/strong&gt; to a new apartment or a house?  I hate it.  Although I didn&amp;rsquo;t like my previous apartment much, I didn&amp;rsquo;t have a plan to move to a different apartment either.&lt;/p&gt;
&lt;p&gt;But almost at the &lt;strong&gt;end of June&lt;/strong&gt;, I suddenly got an email from my landlord that he &lt;strong&gt;wouldn&amp;rsquo;t renew&lt;/strong&gt; our lease this year.  This was a &lt;strong&gt;surprise&lt;/strong&gt; to me.  He said that the apartment would be in a big &lt;strong&gt;maintenance cycle&lt;/strong&gt;, once in 20 years.  It sounded like I had no choice, but why hadn&amp;rsquo;t he notified me of this much earlier!?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Started de-googling</title>
      <link>https://blog.achiwa.co.uk/posts/degoogle/</link>
      <pubDate>Mon, 27 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/degoogle/</guid>
      <description>&lt;p&gt;This is an incomplete draft speech script for a Toastmasters club I belong to.  I decided not to use it as it has gone too technical for non-IT audiences.&lt;/p&gt;
&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Have you heard of the word &amp;ldquo;de-google?&amp;rdquo;  It means to stop using Google web services such as Google photos, Google maps or Gmail.  As a Pixel mobile phone user, I heavily depend on Google services.&lt;/p&gt;
&lt;p&gt;There are many reasons to de-google.  Some people believe Google has become evil.  But to me, it is mostly a fear that they might raise price drastically or worse, stop services that I&amp;rsquo;m using.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Installing hugo and ox-hugo</title>
      <link>https://blog.achiwa.co.uk/posts/ox-hugo/</link>
      <pubDate>Sat, 25 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://blog.achiwa.co.uk/posts/ox-hugo/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;This past summer, I bought a $200- mini PC and made it my homelab.  I installed proxmox + ubuntu + docker, and deployed several services on it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pi-hole - network-wide DNS with ad-blocker&lt;/li&gt;
&lt;li&gt;Immich - Google Photos alternative&lt;/li&gt;
&lt;li&gt;RomM - retro-game library&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The other day, I obtained a domain name from &lt;a href=&#34;https://porkbun.com/&#34;&gt;https://porkbun.com/&lt;/a&gt; and exposed the mini PC to the Internet so that I can see my photos from remote.  I deployed:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
