Latest Posts

How to install a LSP server that supports Django

How to install a LSP server that supports Django

Before, when developing Django-based projects, I often use VS Code. Because VS Code is heavier and heavier (the installation is 1 GiB now), I need to move away from it. But the first thing is to find an independent LSP server that work well enough with Django. VS Code comes with Pylance, its LSP server for Python. But Pylance is proprietary, so for other code editor, I need a different solution. When we do programming, LSP servers are great softwares. They help improve productivity by enabling accurate autocomplete in code editor, allowing us to code faster and make less mistakes. They works best with languages having strong type system (Rust and functional programming languages, like Gleam), because the type system let us know at a point, this variable is of which type and has which members. For dynamical type languages, LSP servers often base on a static type checkers (because both need to draw type information from the source code). For Python, the situation is a bit hard, because Python is so dynamic and flexible that, its type annotations cannot cover all the case to help type checkers and LSP servers infer the type of variables. It is especially true for Django. At the time of writing, Mypy is the type checker that supports Django the best. It means that, for LSP server side, we need someone that can take advantage of Mypy. Currently, there are many type checkers + LSP servers for Python, most of them are not written in Python: Pyright: Written in TypeScript. …

How to Instruct an AI Agent for People Who'd Rather Not Type

How to Instruct an AI Agent for People Who'd Rather Not Type

I'm a slow typist, so when programming I really need the autocomplete feature, to avoid typing a lot and making typos. When applying AI to my work, a major limitation is that the prompt input box of agent software lacks an autocomplete feature. That means when I want the assistant to fix this function or that function, I have to type out the full function or variable names, or copy them from elsewhere, instead of just typing the first 2-3 characters and pressing Tab as I do when working purely in a code editor. That's why I've always looked for a way to bring the code editor into my AI agent workflow, leveraging the editor's advantages, and I've found a workable approach. Before discussing this method, I should reveal that the autocomplete need has already been partially solved by some command-line agents. For example, in Crush, Crush lets you call an external text editor to enter the prompt (with the shortcut Ctrl + o): Then I just need to configure the code editor as Helix to leverage its autocomplete of previously typed words, saving typing effort. In this case, Helix is detached from the project's source code context, so it can only suggest previously typed words, not functions or variables in the source code. …

Cách chỉ dẫn trợ lý AI dành cho người ngại đánh chữ

Cách chỉ dẫn trợ lý AI dành cho người ngại đánh chữ

Mình là người gõ chữ chậm nên khi lập trình, mình rất cần tính năng autocomplete, để khỏi phải gõ nhiều và gõ nhầm. Khi áp dụng AI vào công việc, có một hạn chế lớn là khung nhập prompt của các phần mềm agent không có tính năng autocomplete. Nghĩa là khi mình muốn trợ lý sửa hàm này hàm kia, mình phải gõ đầy đủ tên hàm tên biến, hoặc copy chúng từ bên ngoài vào, thay vì chỉ cần gõ 2-3 chữ đầu rồi bấm Tab như cách làm việc thuần tuý trên code editor. Vì vậy mình vẫn luôn tìm cách để có thể lôi được code editor vào quy trình làm việc với agent AI, tận dụng lợi thế của code editor và đã tìm được phương án tạm ổn. Trước khi bàn đến phương pháp này thì cũng xin hé lộ là nhu cầu autocomplete cũng đã được giải quyết phần nào với một số agent ở chế độ dòng lệnh. Ví dụ trên Crush, Crush cho phép gọi text editor bên ngoài để nhập prompt (với phím tắt Ctrl + o): Khi đó mình chỉ cần cấu hình chọn code editor là Helix để tận dụng tính năng autocomplete một từ đã nhập trước đó để đỡ công gõ. Trong trường hợp này thì Helix bị tách ra khỏi ngữ cảnh source code của dự án nên nó chỉ gợi ý được từ đã nhập chứ không gợi ý được hàm biến trong source code. …

Chạy một MCP localhost dùng chung cho mọi agent AI

Chạy một MCP localhost dùng chung cho mọi agent AI

Mình thích Nushell nên cũng mong muốn trợ lý AI viết script shell bằng Nu, và gắn Nushell vào agent Crush dưới dạng MCP server để "nhắc khéo". Trong một lần cập nhật Crush gần đây thì tự dưng nó không khởi chạy Nushell MCP lên được nữa, nhưng chỉ bị trục trặc với phương vận stdio, do bất đồng giữa Crush và Nushell khi bắt tay, còn http thì vẫn bình thường. Thế là mình chuyển sang dùng Nushell MCP ở giao thức http và khám phá ra nó tối ưu hơn ở một chuyện: Có thể cài đặt để chỉ cần chạy một tiến trình Nushell MCP server và cho tất cả agent kết nối vào MCP chung này, thay vì mỗi agent khởi chạy một process MCP server như khi dùng stdio. Khi dùng MCP ở phương vận http, agent sẽ không tự khởi chạy MCP server như đối với stdio, nên người ta ngại dùng. Nhưng đây là lúc Linux toả sáng vì trên Linux ta dễ dàng biến MCP service thành dịch vụ tự khởi động, ta không cần bận tay bận chân tắt mở MCP server mỗi khi cần dùng đến. Ý tưởng là dùng systemd để tự động bật server MCP lên. Phần sau đây sẽ hướng dẫn cách cài đặt MCP server Lightpanda thay vì Nushell vì ngay hôm mình viết bài này thì Nushell lại có một cập nhật khiến MCP http không bắt tay được với Crush nhưng stdio thì được. Lightpanda là một trình duyệt dành cho agent AI, nhẹ và chạy nhanh, dùng cho hoàn cảnh không cần render đồ hoạ. Lightpanda được viết mới từ đầu, không phải fork từ Chromium hay Firefox. …

Khi laptop thiếu nút bật tắt touchpad

Khi laptop thiếu nút bật tắt touchpad

Laptop có một cái bất tiện là khi đang gõ phím, thỉnh thoảng vô tình lòng bàn tay quệt vào touchpad và di con chuột đi khiến chữ nhảy lung tung. Thế nhưng laptop của mình lại không có nút để bật tắt touchpad. Vậy phải làm sao? May cái là Linux rất uyển chuyển, cho phép mình dùng lệnh / viết script để bật tắt, rồi gán chúng cho phím tắt nào đó. Repo dưới đây cung cấp hai script để bật tắt touchpad trong hai môi trường, GNOME và Niri. GNOME thì mình dùng chiêu này nhiều năm nay, bây giờ thì hỗ trợ thêm cho Niri. ...

Cấu hình Crush để lấy key API từ keychain của hệ điều hành

Cấu hình Crush để lấy key API từ keychain của hệ điều hành

Crush là phần mềm agent AI ưa thích của mình, nhưng trước giờ mình vẫn có một băn khoăn về việc phải lưu key API của các nhà cung cấp mô hình LLM trong file cấu hình trần trụi. Từ phiên bản 0.85, Crush thay đổi cách lưu và đọc cấu hình, và mình đã thấy cơ hội để lưu key API một cách an toàn hơn. Trước đây mình có một bài viết "Sử dụng model AI LLM host trong nước" và bạn có thể thấy Crush lưu cấu hình trong một file JSON và ta phải để key API ở dạng nguyên văn trong đó, ví dụ: { "providers": { ...