The archive
28 ENTRIES2026
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 .
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) ".
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
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.
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.
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
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
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
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.
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
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.
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
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.
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 …”
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.
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.
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.
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.