“Our new AI assistant can answer any finance question—except when our own API names get in its way.” That was the hard‑earned lesson I learned while developing an LLM‑powered chatbot in our platform. AI Agent as a New Interface Layer AI agent powered by large language models (LLMs) is becoming an increasingly important component in modern tech stacks. Think of AI agents as a new kind of middle layer. Instead of a human manually clicking through a UI, calling an API, or writing SQL, ...| Tech Notes from Steven
When designing software architecture, what principles should guide your approach? Textbook answers often highlight attributes such as: modularity, scalability, resilience, maintainability, extensibility, and testability. These technical measures are undoubtedly important. However, in practice, many architectures become overly complex because designers often struggle to recognize when enough is enough. From my observation, the root cause isn’t a lack of understanding of these quality attribu...| Tech Notes from Steven
Updates on 2024-05-18: Adds the English translation Our universe is an extremely advanced game world. The map of this world is infinitely large because it can dynamically expand according to the player’s field of vision. This world is also constantly being improved, so glitches and anomalies often occur. Such a game world is actually created by us, or more precisely, by another form of our existence. We transform into “humans” to enter this game world. Once we enter, we are bound by bas...| Tech Notes from Steven
Parsing a request message from a client is the very beginning step of a web server. A typical GET request in text, for example, may look something like this: GET /steventen HTTP/1.1\r\n Host: github.com Accept-Language: en-us Accept: text/json User-Agent: curl/7.16.3 Cookie: a=123; b=456;\r\n\r\n This syntax and content follow RFC 7230 and RFC 7231. When a web server receives the above message (or chunk of it), it needs to parse or decode the information (path, headers, …) from it and then ...| Tech Notes from Steven
For my small personal projects, I usually use Slack as a central notification and logging system to help me keep track of the state of my applications. Below is a simple bash function that I use a lot in many of my bash scripts in order to send a notification to a Slack channel: ####### Send notification messages to a Slack channel by using Slack webhook# # input parameters:# $1 - message level: 'INFO' | 'WARN' | 'ERROR'# $2 - pretext# $3 - main text######SLACK_WEBHOOK_URL=xxx SLACK_CHANNEL=x...| Tech Notes from Steven
Our API backend service relies heavily on ActiveModel::Serializer for building response objects. We are using version 0.8 which hasn’t been updated for many years. As part of the effort of upgrading our service to Rails 5 (and eventually Rails 6), we start to seek ways to upgrade active_model_serializers. ActiveModel::Serializers From 0.8 to 0.10 The first candidate is the latest 0.10 of active_model_serializers. On one hand, our benchmark shows some really good performance improvement. In ...| Tech Notes from Steven
In the last post, I talked about command line tools that I use very often for search files. In this post, I will talk about command line tools for manipulating files or text content. Don’t forget to use man command to find detailed usage of a command. The following are commands that I use often to manipulate the content of a file or text input: echodisplay a line of text catconcatenate files and print on the standard output sedstream editor for filtering and transforming text sortsort lines...| Tech Notes from Steven
The command line utilities that I use most for searching/finding files in Linux operating systems are: findsearch for files in a directory grepprint lines matching a pattern locatefind files by name find The basic format of a find command is: find [location] [criteria] [actions] Some common examples are listed below: Find files by some name pattern: find /etc -name"*.conf" Find files by size find /var/log -size +1M There are other really useful filter options like: -empty, -newer, -perm, -typ...| Tech Notes from Steven
I always believe requirement analysis and implementation design are two important steps that should not be ignored. No matter how small the team is, no matter how short your release period is, and no matter how much cost you can only afford.| Tech Notes from Steven
Steven Yue’s thoughts on computer programming and software development| Tech Notes from Steven
This post explores and compares the performance and usability of popular Python task queue libraries, including Python-RQ, ARQ, Celery, Huey, and Dramatiq, through a load test benchmark.| Tech Notes from Steven