s. So I Write / shelper

The archive

28 ENTRIES

2026

The Representation Layer Physical AI Needs

Part 2 of AI Beyond the Model. Start with Part 1. In the first article, I argued that a vision system should maintain a persistent belief about the world rather than answer every question independently from the latest frame. That leaves a harder engineering question: what information should this system expose, and how should other models, applications, and agents use it? An image is rich but expensive to reinterpret. A single classification is cheap but often discards the context needed for a different task.

physical aicomputer vision9 min read

From Next-Token Prediction to Persistent World Models: Notes on the Future of AI

Part 1 of AI Beyond the Model. On September 2 and 3, I had a conversation that began with a practical question: if so many language models seem to share the same architecture, why can one inference engine run so many of them? It ended somewhere less practical and more interesting: perhaps the next step in AI is not one model that directly answers every question about its input, but a system that builds and maintains a model of the world, then lets other components reason over it.

artificial intelligencedeep learning14 min read

Can AI Learn How to Search?

Part 5 of AI Beyond the Model. Part 4 introduces the specialist-building system. In the previous article, I imagined a general model that discovers repetitive tasks, creates specialized components, and coordinates them. That still leaves one of the deepest questions from my August discussion unanswered: who designed the space in which the system searches for solutions? Choosing among existing models is one kind of intelligence. Training a new model for a specified task is another.

artificial intelligencemeta-learning9 min read

An AI That Learns to Build Its Own Specialists

Part 4 of AI Beyond the Model. I have been thinking about a different way to organize AI. Instead of asking one ever-larger model to perform every task directly, what if the large model learned to create, teach, select, and coordinate specialists? This idea emerged in several conversations. In July 2025, I considered a practical feedback loop in which a cloud model teaches a smaller model running on a device. In August 2026, I broadened that into heterogeneous AI infrastructure: large models working with detectors, trackers, 3D algorithms, and other specialized components.

artificial intelligencesmall models14 min read

A Graph as a Model Harness: Let Context Correct Vision

Part 3 of AI Beyond the Model. Part 2 explains the representation layer. Most discussion of scene graphs asks how to turn visual detections into structured state. I am interested in the reverse direction too: can the structure help correct the detections and associations that produced it? This was the focus of a discussion about retail shelf images. The initial models might detect products and price labels, produce top-k product candidates, and propose which label belongs to which product.

computer visionscene graphs9 min read

The Universe as an Evolving Pattern: Buddhism, Quantum Randomness, and Consciousness

This post summarizes a thought experiment I developed through a conversation about Buddhism, consciousness, quantum mechanics, and the structure of the universe. It is not intended as a claim that Buddhism is physics, nor as an established scientific theory. Rather, it asks whether several ideas can be understood through a common conceptual model. 1. Could the universe be like Conway’s Game of Life? Conway’s Game of Life begins with remarkably simple local rules.

buddhismconsciousness11 min read

2022

Setup Modern Python development

First, you need to install pyenv so you can have multiple version of python in your system. then for projects that does not need packaging, you can use pyenv-virtualenv to setup requirements.txt for project based venv. Second, you need to install pipx, so it installs some shared tools for the whole system. After setting up pipx (using certain version of python specified by pyenv), pipx reuses the python interpreter on which pipx was installed, so if you upgrade python and got the previous one removed, pipx will fail.

python1 min read

Migrating to new python version with lots of dependencies

so i am using poetry to manage my venv for a project that relies on dozens of PYPI packages. i first thought it would be relatively easy to migrate python3.7 to the latest 3.10. but i was wrong, and i spent hours to fix it. Here is what i’ve learned. first of all, you need to install pyenv for multiple version management, a caveat here is that if you use the suggested method to setup (through curl https://pyenv.

python2 min read

Emacs in WSL2

Using Emacs on windows is always an imperfect experience, luckly windows10 comes with WSL2 now, which lets you install Emacs in WSL2 and use it on windows now. I did some hacking to make the experience little bit better, which includes: open any file on windows in emacs@wsl2 setup org-capture on chrome on windows and capture notes using emacs@wsl2 open links in org-mode in emacs@wsl2 using windows default apps. e.g., open https links using chrome on windows, open document links in MS-office on windows, etc.

emacs6 min read

setup hugo with github pages on github

I followed this site for setting up hugo blogging on https://github.com/ using github.io, the instruction is little bit confusion, so just to clarify a little bit here. the instructions there uses gh-pages branch to publish your site, this is done by the action peaceiris/actions-gh-pages@v3. however, for user/organization.github.io pages, the default branch for publishing is main. so if you use this action, you need to change your page branch to gh-pages and set the directory to /root.

areablog1 min read

2019

setup emacs foc C++ with ccls and lsp

So ccls is a lsp wrapper for clang it works as a backend that indexes source code and gives emacs index information for better navigation and refactoring of c++ I have had a few issues with the tool’s setup in emacs enviroment. and found the following things that may need extra attention .ccls file, this file basically does two things tell ccls how to index the file using clang before index the file tell clang how to compile and interpret the code as there is a mixture of options for ccls and arguments for clang, need to pay extra attention usually lines in .

cppemacs2 min read

2018

Orgmode for nikola post

first need to setup the orgmode plugin for nikola refer to here, then put this into init.el ;;; set up new nikola new post directly in emacs ;; does not work on windows (defun publish-blog-post () "nikola github-deploy" (interactive) (save-buffer) (let ((my-blog-repo "path to your blog repo"))) ;; (let (my-blog-repo)) ;; (setq my-blog-repo "~/shelper.github.io") (cd my-blog-repo) (shell-command "nikola github_deploy")) (defun new-blog-post (title) "new blog post to shelper.github.io" (interactive "sEnter post title: ") (let ((my-blog-repo "path to your blog repo"))) (cd my-blog-repo) (setq new-post-cmd (concat "nikola new_post -f orgmode -t " "\"" title "\"")) (shell-command new-post-cmd) (setq new-post-file (concat my-blog-repo "/posts/" (replace-regexp-in-string " " "-" title) ".

nikolaorgmode1 min read

Jupyter skills and tricks

use jupyterlab use interact for interactive widget use qgrid for better dataframe display within ipython notebook, follow instructions here %load_ext sql for sql query within the notebook, refer to here

jupyter1 min read

best practice for jupyter and ipython

A few things to setup the IPython and Jupyter for a best practise. IPython configuration Change ~/.ipython/profile_default/startup/init.ipy for their usage respectively To enable versioning of the python/jupyter environment, you need to pip install version_information and then add below, afterward for each IPython notebook file I put %version_information numpy, scipy, matplotlib, pandas to display my python environment version information %load_ext version_information To enable autoloading of modified modules in IPython, add below %load_ext version_information %load_ext autoreload %autoreload 2 I also added the lines below just because I use them everytime I open IPython import numpy as np import matplotlib.

pythonjupyter2 min read

switch recent two buffer alternatively

so there is a post described using key chord for fast buffer switching between most recent two buffers. it works for most cases, but if you are using org babel mode and editing source code in the *org src .* buffer, then this *org src .* buffer cannot be accessed by the method described here. so I made another function to solve this issue, and here it is: (defun get-next-buffer () (interactive) (if (string= (car (helm-buffer-list)) " *Minibuf-1*") (switch-to-buffer (car (cdr (helm-buffer-list)))) (switch-to-buffer (car (helm-buffer-list))))) (key-chord-define-global "jk" 'get-next-buffer) strangely when switching buffer using `helm-buffer-lists`, and if you exit without selecting any buffer, you gets `*Minibuf-1*` into the buffer list and will switch to minibuffer.

2 min read

2017

using travis CI for github repo

using Nikola with Travis CI on github.io pages major reference here it is noticeable that instead of running travis login travis enable travis encrypt-file id_rsa --add we should run travis login travis encrypt-file id_rsa --add travis enable

nikola1 min read

set up nikola for markdown

to use nikola you need to install it with some other packages as well pip instal nikola markdown ws4py watchdog then to enable markdown, you need to change the conf.py variable POSTS and PAGES POSTS = ( ("posts/*.md", "posts", "post.tmpl"), ("posts/*.rst", "posts", "post.tmpl"), ("posts/*.txt", "posts", "post.tmpl"), ("posts/*.html", "posts", "post.tmpl"), ) PAGES = ( ("pages/*.md", "pages", "story.tmpl"), ("pages/*.rst", "pages", "story.tmpl"), ("pages/*.txt", "pages", "story.tmpl"), ("pages/*.html", "pages", "story.tmpl"), ) you may also need to change the github settings for easy github deploy

nikola1 min read

2016

how to start python project on github

steps are: install cookiecutter: python -m pip install cookiecutter run cookiecutter to initiate a project: cookiecutter('https://github.com/audreyr/cookiecutter-pypackage.git') under the project folder on github, start a new repo python_prj run git init in the local project folder and commit run git remote add origin git@github.com:username/projectname.git using git@git requires to setup the ssh key pair, this can be found by easily google it or under FAQ of github run git push -u origin master

pythongithub1 min read

python module and packaging

several things: when using setuptools.find_packages, only packages with __init__.py in its folder will be found only modules imported in the __init__.py will be indexed, means the modules will be added into the dir(module) and accessable by .module_name for python 3, if one modules(py file) in the same folder of another module and relies on that module, you need to put from . import module at the top package name is specified in the setup.

python1 min read

matplotlib backend issue

using different backends for matplotlib might cause some unexpected issues: today, i am trying to run a program that uses the following function: plt.figure() figManager = plt.get_current_fig_manager() figManager.window.showMaximized() however, i found when using the backend of Tk, it gives error, saying get_current_fig_manager is not available, so when i switch to qt4egg, everything works well. how to switch the backend for matplotlib? first find the configure directory for matplotlib on your computer

pythonmatplotlib2 min read

install pyqt on mac for matplotlib

so i was trying to use matplotlib for fast image ploting and updating, and I found a post here. the matplotlib uses different backend to render the images, and due to the differences between different backend, some functions are only available for specific backend, for instance, the fig.canvas.update() is a fast way to render new images to the axes, but is only availabe to PyQt4. so i was trying to install pyqt4 using homebrew, it failed by saying the osx version is pre-released version and is not supported, and arises 2 errors during make process.

pythonmatplotlib2 min read

elisp notes

quote for symbols: (setq symbol) ;; is equivelent to (set 'symbol) the quote means; keep as it is, dont try to evaluate, so if no quote, the lisp processor will try to evaluate it, means the symbol (or the first element of the list) has to be evaluatable as either a function, or a defined variable let vs. let*: (setq y 2) (let ((y 1) (z y)) (list y z)) ⇒ (1 2) (setq y 2) (let* ((y 1) (z y)) (list y z)) ⇒ (1 1) let* binds 1 to y immediately, while let evaluate old y as 2, then list binds 1 to the new y and pring it out

emacselisp1 min read

setup babun on windows for git and ssh

remove %HOME% (you can put it back later) download and install babun setup ssh, if you already have ssh keys in the ~/.ssh, copy to the ~ of babun shell and do eval `ssh-agent -s` ssh-add if not, copy the ssh pub and private keys to ~/.ssh or use ssh-add path/to/keys if you are using proxy behind firewall you need: add proxy for babun and change the user -agent (dont know why, but works) export http_proxy=http://gateway.

emacswindows1 min read

ipython and pip issues

so I am trying to use ipython as my python shell under emacs, since i started using python in emacs, i always encounter different issues, again and again, so i will use this post as a collection of issues and solutions. issue1: ipython shell imports quite some packages/modules/functions and as you may know, import searches current folder as well as the subfolders of the registered module, if there are file with the same name under the current folder, it overrides the file in the registered module, apparently, this causes problems of “import error, could not find …”

ipythonpython2 min read

design of a framework for scientific data processing

I have beening thinking of building such a framework for a while, I started a little project called pypeline. The code on github is not up-to-date. And I have some new thoughts on the framework design. So this article serves as a design documents and welcomes any comments or suggestions. Based on my own experience, I often want to process some data or image at multiple stage. Often, I want to change some parameters of certian algorithm to see how the outcomes are changed.

pythonjavascript3 min read

the sword of wisdom

It is quite often that sometimes you just could not stop yourself doing something. for instance, I often sit in chair and do not want to go the bathroom until i could not hold it any more… that happens especially when i try to solve a problem, resolving a program bug… so, how can we change this? use the sword of wisdom! the sword of wisdom, is a keen and sharp mind state that can penetrate in to your mind stream.

practice2 min read

using emacs for blog post using nikola and github pages

so it is a long story, to make it short, here is how it works step by step: install nikola using pip install nikola markdown webassets init nikola site by nikola init --quiet folder_name change the configurations of the default to your configurations just like below diff file shows: --- default conf.py +++ customized conf.py @@ -17,16 +17,16 @@ import time # Data about this site -BLOG_AUTHOR = "Your Name" # (translatable) -BLOG_TITLE = "Demo Site" # (translatable) +BLOG_AUTHOR = "Shelper" # (translatable) +BLOG_TITLE = "The Way As It Is" # (translatable) # This is the main URL for your site.

emacs3 min read

How to truly relax yourself

Relax, means putting down, pushing away, forgetting things. Relax, is not about picking up something called “relaxation” Relax is simply let it go, if you can, you should also let it go the thought of “let it go” if you cannot do that, then reciting “let it go” helps you to push away other wondering thoughts, especially those thoughts bothering you, and make yourself agitated. so relax, is very simple that really don’t need you to do anything, yet very difficult, if you try to grab something.

practice1 min read