Blog

  • Tâm lý học của việc phát triển các phần mềm quy mô siêu lớn như Phần mềm kế toán BKIT.VN

    Để phát triển các phần mềm hyper-scale cỡ Phần mềm lõi kế toán BKIT.VN yêu cầu một sự bền bỉ cao.

    Nhìn lại hình ảnh của thành La Mã (Rome city)

    Hình ảnh: https://blog.johncabot.edu/study-abroad/rome-called-eternal-city .

    • Việc phát triển Lõi phần mềm kế toán không phải công việc của 1 ngày, 1 tháng, 1 năm, hay 9 năm. Đó là công việc của khoảng hơn 2 thập kỷ liên tục và các chế độ kế toán liên tục thay đổi. Nguyên lý kế toán có thay đổi một chút ít.
    • Bảo thủ. Kiên định
    • Nhích từng tí một. Để sửa 1 cụm nút bấm trên lưới dữ liệu: Dành ra 2 ngày. Nghe rất buồn cười. Nhưng cụm nút bấm này phục vụ 2 triệu doanh nghiệp và 6 triệu kế toán viên. Với một phần mềm kế toán, việc sửa cụm nút bấm sẽ yêu cầu tính đồng nhất, sửa ở 256 màn hình khác nhau ( https://ketoan.bkit.vn/2026/06/26/danh-sach-tinh-nang/ ). Sửa 1 cụm nút bấm trong Phần mềm kế toán BKIT.VN cực khó và tốn thời gian luôn – Ông Đỗ Như Vý, người có hơn 11 năm là kỹ sư phát triển phần mềm chuyên nghiệp nói như vậy.
    • Phần lớn mọi người thích làm 10 việc nhỏ. Việc làm 1 việc lớn có quy mô gấp 10 lần việc nhỏ, yêu cầu nỗ lực gấp 100 lần việc làm 10 việc nhỏ.

    Một câu truy vấn trả về 2,5 triệu bản ghi

    https://masothue.bkit.vn (Đó là chuyện bình thường, rõ ràng có không ít hơn 2,5 triệu bản ghi ở đây).

    Một câu truy vấn trả về 2,5 triệu bản ghi khác với việc thực hiện 2500 câu truy vấn, mỗi truy vấn trả về 1000 bản ghi.

    Nếu đưa 2,5 triệu bản ghi vào SQL table, cũng được, nhưng lưu trữ nó vào NoSQL thì hay hơn nhiều, còn lưu vào in-memory database để sinh ra các lát cắt theo thời gian thực như màn hình Báo cáo tài chính BKIT thì là tinh hoa.

    Còn việc đưa dữ liệu vào tensor để Tính chi tiết các đầu tài khoản: Ngoài sức tưởng tượng.

    Rào cản gia nhập khủng khiếp (market barrier)

    Bất cứ ai nghĩ đến Phần mềm kế toán BKIT sẽ ngán luôn và không muốn cạnh tranh nữa. Vì nó không phải là một quyết định bốc đồng, các công ty có đủ khả năng để đốt tiền làm phần mềm kế toán trong 20 năm liên tục không? Làm xong có đủ khả năng để thích ứng với các chế độ kế toán mới không? Thông tư 133 đã tồn tại hơn 1 thập kỷ, và cũng đến lúc phải bổ sung các Tài khoản Tài sản sinh học chứ. Ai sẽ sửa phần mềm để hoạt động cho đúng với nghiệp vụ.

    Ai vận hành hệ thống thông tin tài chính kế toán?

    Tất cả các kỹ sư SRE đều phải làm việc với áp lực cao hơn lái xe, sẵn sàng túc trực cho các sự cố hạ tầng, bảo mật và tính sẵn sàng của Trung tâm dữ liệu. Lúc nào cũng phải có sẵn nước tăng lực bò húc để xử lý sự cố đột xuất.

    AI cũng bó tay vì dự án quá to, mà context windows của AI thì chỉ khoảng 1 triệu token thôi, làm hỏng mã nguồn

    Cho AI làm dự án lớn, quy mô mã nguồn lớn gấp 20 lần độ rộng cửa sổ ngữ cảnh (AI context windows), AI bó tay và làm hỏng hết mã nguồn.

    Tiền?

    Làm dự án lớn phải có tiền chứ. Làm sao để sống sót trong 2 thập kỷ làm phần mềm kế toán?

    “Thế gian chỉ thấy người nay cười, chứ đâu thấy người xưa khóc”. – Mọi người chỉ nhìn thấy thành công, làm sao thấy được thất bại.

  • Dell PowerEdge R730xd

    Đây là cấu hình Dell PowerEdge R730xd:

    Hạng mụcCấu hình
    ModelDell PowerEdge R730xd
    Khay ổ12 × 3.5″ LFF + 2 × 2.5″
    CPU2 × Intel Xeon E5-2640 v3
    Tổng CPU16 nhân / 32 luồng
    RAIDPERC H330 Mini
    Mạng2 × SFP+ 10 GbE + 2 × RJ45 1 GbE
    PSU2 × 750 W hoặc DC 2 × 1100 W
    Giá5.000.000 đồng/máy
    RAMKhông thấy người bán ghi
    HDD/SSDKhông thấy ghi kèm
    Caddy ổ cứngChưa rõ có đủ 12+2 caddy hay không

    Điểm đáng chú ý là 5 triệu cho barebone R730xd 12LFF + 2 CPU nghe khá hấp dẫn nếu máy đúng là hàng nguyên bản và main/RAID/backplane/PSU/iDRAC hoạt động tốt. Tuy nhiên, với server cũ, RAM, caddy, ổ đĩa và tình trạng backplane có thể làm tổng chi phí tăng rất nhanh.

    Xa hơn: có thể phân tích máy này có đáng mua ở giá 5 triệu không, đồng thời so sánh với R730, R740, R440 và server mới theo điện năng + hiệu năng.

    R730xd = Dell PowerEdge thế hệ 13G, khoảng 2014; Xeon E5-2640 v3 = Haswell-EP, 2014 — như vậy nhìn vào là biết ngay nền tảng đã khoảng 12 năm tuổi.

  • Bảo vệ: SAP Sales quote

    Nội dung này được bảo vệ bằng mật khẩu. Để xem, vui lòng nhập mật khẩu bên dưới.

  • Cơ chế hoạt động của mực in mã vạch BKIT

    Mực in mã vạch thường không phải “mực lỏng” như máy in phun. Trong máy in tem mã vạch phổ biến, nó thường là ribbon mực dạng cuộn, hoạt động theo cơ chế truyền nhiệt.

    Có hai công nghệ chính:

    Công nghệCó dùng ribbon mực?Cơ chế
    Direct Thermal – in nhiệt trực tiếpKhôngĐầu in làm nóng giấy cảm nhiệt, giấy tự chuyển màu
    Thermal Transfer – truyền nhiệt gián tiếpĐầu in nung ribbon, lớp mực trên ribbon chảy và bám lên tem

    Cơ chế của ribbon mực mã vạch

    Ribbon thường có cấu tạo gần như:

    Đầu in nhiệt → lớp film PET → lớp mực → tem nhãn

    Khi in, đầu in gồm rất nhiều điểm gia nhiệt cực nhỏ. Ví dụ máy 203 dpi có khoảng 203 điểm trên mỗi inch.

    Khi cần tạo một điểm đen:

    1. Máy tính gửi hình ảnh mã vạch cho máy in.
    2. Máy in xác định những điểm nào phải in.
    3. Các điện trở siêu nhỏ trên đầu in tại vị trí đó được cấp điện.
    4. Nhiệt truyền qua lớp film của ribbon.
    5. Lớp mực tại đúng vị trí đó nóng lên.
    6. Mực tách khỏi ribbon và dính lên bề mặt tem.
    7. Ribbon đã sử dụng tiếp tục được cuốn sang cuộn thu hồi.

    Ví dụ muốn in mã:

    |||| || | |||||

    thì đầu in chỉ làm nóng những vị trí tương ứng với các vạch đen, còn khoảng trắng không được nung.

    Bản thân “mực” gồm những gì?

    Thông thường có ba loại chính:

    Loại ribbonThành phần chủ yếuĐặc điểmDùng cho
    WaxSápRẻ, dễ nóng chảyTem giấy
    Wax/ResinSáp + nhựa resinBền hơn, chống xước tốtTem giấy cao cấp, decal
    ResinNhựa resinRất bền, cần nhiệt caoPET, PVC, tem tài sản, tem ngoài trời

    Có thể hình dung:

    Wax
    → nóng lên rất dễ
    → mực chảy sang giấy.

    Resin
    → cần nhiệt độ cao hơn
    → nhưng sau khi bám vào nhãn sẽ tạo lớp rất chắc, khó cào hoặc lau mất.

    Một điểm khá thú vị

    Máy in mã vạch không phun mực ra.

    Thay vào đó, đầu in gần như thực hiện thao tác:

    nung từng pixel → bóc mực khỏi ribbon → ép mực lên tem.

    Vì vậy tốc độ có thể rất cao và các cạnh của mã vạch rất sắc nét, điều này cực kỳ quan trọng để máy quét barcode phân biệt chính xác độ rộng của từng vạch.

    Nếu bạn muốn, tôi có thể vẽ cho bạn sơ đồ cắt ngang đầu in – ribbon – tem và mô phỏng từng bước mực được truyền sang tem, nhìn sẽ rất dễ hiểu.

  • Tự học Pytorch 2.13.0 + CUDA 13.2

    Cài đặt như thế này? (không, có cách tốt hơn)

    pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu132

    Cài đặt như thế này.

    Bật Docker for Windows 4.85.0 lên. Tạo thư mục C:\vytorch . Sau đó chạy lệnh

    docker run --gpus all -it --rm --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 --net=host -v C:\vytorch:/workspace/vytorch nvcr.io/nvidia/pytorch:26.07-py3

    Chờ 10 phút, với đường truyền 45 MB/giây.

    Dưới đây là biểu diễn công thức toán học tương ứng cho các hàm và ma trận Jacobian trong đoạn mã PyTorch.


    1. Hàm exp_reducer

    Hàm nhận đầu vào là ma trận $X \in \mathbb{R}^{2 \times 2}$ và tính tổng số mũ theo từng hàng:

    $$\mathbf{y} = f(X) = \begin{bmatrix} y_1 \\ y_2 \end{bmatrix} = \begin{bmatrix} e^{x_{11}} + e^{x_{12}} \\ e^{x_{21}} + e^{x_{22}} \end{bmatrix}$$

    Ma trận Jacobian có kích thước $(2, 2, 2)$, biểu diễn đạo hàm từng phần $\frac{\partial y_i}{\partial x_{jk}}$:

    $$J_1 = \frac{\partial y_1}{\partial X} = \begin{bmatrix} e^{x_{11}} & e^{x_{12}} \\ 0 & 0 \end{bmatrix}, \quad J_2 = \frac{\partial y_2}{\partial X} = \begin{bmatrix} 0 & 0 \\ e^{x_{21}} & e^{x_{22}} \end{bmatrix}$$

    Tổng quát:

    $$\frac{\partial y_i}{\partial x_{jk}} = \begin{cases} e^{x_{ik}} & \text{nếu } i = j \\ 0 & \text{nếu } i \neq j \end{cases}$$


    2. Hàm exp_adder

    Hàm nhận hai đầu vào $\mathbf{x}, \mathbf{y} \in \mathbb{R}^2$:

    $$\mathbf{z} = f(\mathbf{x}, \mathbf{y}) = 2 e^{\mathbf{x}} + 3\mathbf{y} = \begin{bmatrix} 2e^{x_1} + 3y_1 \\ 2e^{x_2} + 3y_2 \end{bmatrix}$$

    Đạo hàm Jacobian trả về cặp ma trận $(J_{\mathbf{x}}, J_{\mathbf{y}})$:

    $$J_{\mathbf{x}} = \frac{\partial \mathbf{z}}{\partial \mathbf{x}} = \begin{bmatrix} 2e^{x_1} & 0 \\ 0 & 2e^{x_2} \end{bmatrix}, \quad J_{\mathbf{y}} = \frac{\partial \mathbf{z}}{\partial \mathbf{y}} = \begin{bmatrix} 3 & 0 \\ 0 & 3 \end{bmatrix}$$


    3. Hàm linear_model

    Mô hình tuyến tính $Y = f(X) = X W^T + \mathbf{1}_4 b^T$ với $X \in \mathbb{R}^{4 \times 2}$, trọng số $W \in \mathbb{R}^{2 \times 2}$, và bias $b \in \mathbb{R}^2$:

    $$W = \begin{bmatrix} 2.0 & -1.0 \\ 0.0 & 1.0 \end{bmatrix}, \quad b = \begin{bmatrix} 1.0 \\ 0.5 \end{bmatrix}$$

    Biểu thức chi tiết từng phần tử $Y_{ij}$:

    $$Y_{ij} = \sum_{l=1}^{2} X_{il} W_{jl} + b_j$$

    Đạo hàm Jacobian có kích thước $(4, 2, 4, 2)$:

    $$\frac{\partial Y_{ij}}{\partial X_{kl}} = \delta_{ik} W_{jl}$$

    (Trong đó $\delta_{ik} = 1$ nếu $i = k$, ngược lại $\delta_{ik} = 0$)

    Chạy Jupyterlab

    python -m jupyterlab --ip=0.0.0.0 --port=8888 --allow-root --no-browser

    Hệ thống sẽ báo lỗi, do thiếu port mapping. Tắt container, chạy lại

    docker run --gpus all -it --rm --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 -p 8888:8888 -v C:\vytorch:/workspace/vytorch nvcr.io/nvidia/pytorch:26.07-py3

    chạy lại jupyter

    python -m jupyterlab --ip=0.0.0.0 --port=8888 --allow-root --no-browser

    Mã nguồn https://gist.github.com/donhuvy/52bdcfdae148fe20fc5e255d4f0510e2

    at 17:00 Saturday

    270 Mbps = 270,000,000 bit per second = (270,000,000 / 8) byte per second = 33750000 byte per second = 33,75 MB per second.

    MB != MiB (1000x , and, 1024x).

  • thông tư 99/2025/TT-BTC?

    Thông tư 99/2025/TT-BTC là văn bản mới nhất của Bộ Tài chính ban hành ngày 27/10/2025, hướng dẫn Chế độ kế toán doanh nghiệp. Văn bản này sẽ chính thức thay thế Thông tư 200/2014/TT-BTC và có hiệu lực từ ngày 01/01/2026, áp dụng cho năm tài chính bắt đầu từ hoặc sau ngày này .

    Đây được xem là một sự thay đổi mang tính bước ngoặt, với nhiều quy định mới đáng chú ý, hướng đến sự linh hoạt và hội nhập hơn cho doanh nghiệp.

    📌 Những điểm mới cốt lõi

    Thông tư 99/2025/TT-BTC mang đến nhiều thay đổi quan trọng so với chế độ kế toán cũ:

    1. Mở rộng đối tượng áp dụng và trao quyền tự chủ hơn

    • Đối tượng áp dụng mới: Thông tư lần đầu tiên bổ sung các tổ chức tín dụng, chi nhánh ngân hàng nước ngoài vào đối tượng áp dụng (đối với các nghiệp vụ không đặc thù) .
    • Tự chủ cho doanh nghiệp: Doanh nghiệp được quyền tự thiết kế hệ thống chứng từ, sổ kế toán và ban hành quy chế quản trị nội bộ riêng, miễn là đảm bảo các nguyên tắc cơ bản của Luật Kế toán .

    2. Quy định mới và linh hoạt về đơn vị tiền tệ

    • Cho phép sử dụng ngoại tệ: Nếu doanh nghiệp có hoạt động thu, chi chủ yếu bằng ngoại tệ và đáp ứng các điều kiện về doanh thu, chi phí, nguồn vốn, doanh nghiệp được phép lựa chọn một loại ngoại tệ (ví dụ: USD) làm đơn vị tiền tệ để ghi sổ kế toán .
    • Báo cáo tài chính bằng VND: Dù ghi sổ bằng ngoại tệ, báo cáo tài chính cuối cùng vẫn phải được lập và trình bày bằng Đồng Việt Nam (VND) .

    3. Điều chỉnh và bổ sung hệ thống tài khoản kế toán

    • Hệ thống tài khoản mới: Hệ thống tài khoản kế toán được thiết kế lại, bao gồm 71 tài khoản cấp 1, 101 tài khoản cấp 2 và các tài khoản cấp 3, cấp 4 .
    • Các tài khoản mới: Một số tài khoản mới được bổ sung để phù hợp với thực tiễn và thông lệ quốc tế hơn, ví dụ:
      • TK 215 – Tài sản sinh học: Đáp ứng nhu cầu của các doanh nghiệp trong lĩnh vực nông nghiệp, chăn nuôi .
      • TK 821 – Chi phí thuế TNDN: Bổ sung tiểu khoản 8212 cho Chi phí thuế TNDN bổ sung (thuế tối thiểu toàn cầu – GloBE) .
      • TK 419 – Cổ phiếu mua lại: Thay thế cho thuật ngữ “Cổ phiếu quỹ” theo Thông tư 200 .

    4. Tăng cường yêu cầu về quản trị và kiểm soát nội bộ

    • Quy định mới: Thông tư yêu cầu doanh nghiệp phải tự xây dựng và tổ chức kiểm soát nội bộ, phân định rõ quyền, nghĩa vụ và trách nhiệm của các bộ phận trong việc tạo lập và quản lý các giao dịch kinh tế. Đây là một yêu cầu hoàn toàn mới so với Thông tư 200 .

    💡 Lưu ý khi áp dụng

    • Thời điểm áp dụng: Thông tư có hiệu lực từ 01/01/2026 và áp dụng cho năm tài chính bắt đầu từ hoặc sau ngày này .
    • Chuẩn bị: Các doanh nghiệp cần nghiên cứu kỹ các quy định mới, đặc biệt là hệ thống tài khoản kế toán và các yêu cầu về quản trị nội bộ, để có sự chuẩn bị cho việc chuyển đổi kịp thời. Việc nâng cấp hệ thống phần mềm kế toán cũng là một yêu cầu cần thiết .

    Hy vọng những thông tin tổng quan này sẽ giúp bạn nắm bắt được những nội dung chính của Thông tư 99/2025/TT-BTC. Nếu bạn cần tìm hiểu về một khía cạnh cụ thể như chi tiết tài khoản hay chứng từ, hãy cho tôi biết nhé.

  • chatgpt nhanh làm hỏng ổ cứng do context caching hard disk đúng không?

    Không đúng. Dùng ChatGPT trên trình duyệt hoặc ứng dụng thông thường không làm ổ cứng nhanh hỏng vì “context caching”.

    Context caching nằm ở đâu?

    “Prompt/context caching” là cơ chế phía máy chủ OpenAI, dùng lại kết quả tính toán của phần đầu prompt để giảm thời gian phản hồi và chi phí xử lý. Nó không phải là việc liên tục ghi toàn bộ context xuống SSD của máy bạn. (OpenAI)

    Máy của bạn chỉ có thể phát sinh một lượng ghi nhỏ từ:

    • cache thông thường của Chrome hoặc ứng dụng ChatGPT;
    • lịch sử, cookie, ảnh và tài nguyên giao diện;
    • file bạn tải lên hoặc tải xuống;
    • bộ nhớ ảo của Windows nếu máy thiếu RAM;
    • dữ liệu tạm thời, chẳng hạn âm thanh khi dùng giọng nói trên Android. (OpenAI Help Center)

    Các lượng ghi này thường tương tự việc dùng các website hoặc ứng dụng khác, không đủ để khiến SSD hỏng nhanh.

    Trường hợp có thể ghi ổ cứng nhiều

    Cách sử dụngKhả năng ghi ổ cứng
    ChatGPT trên webRất thấp
    ChatGPT desktop để trò chuyệnThấp
    Upload/download file lớn thường xuyênPhụ thuộc dung lượng file
    Codex/agent liên tục build dự án, cài packageCó thể cao
    Chạy LLM cục bộ bằng Ollama/LM StudioCó thể cao do tải model, swap, cache
    Máy thiếu RAM và Windows dùng pagefile liên tụcCó thể ghi nhiều

    Nếu ổ đĩa hoạt động 100% khi dùng AI, thủ phạm thường là pagefile do thiếu RAM, antivirus quét file, Docker, npm build, IDE lập chỉ mục hoặc mô hình AI chạy cục bộ, chứ không phải context cache của ChatGPT.

    Bạn có thể mở Task Manager → Performance → Disk, sau đó mở Resource Monitor → Disk và sắp xếp theo Total (B/sec) để biết chính xác tiến trình nào đang ghi ổ cứng.

  • Bảo vệ: Tìm hiểu về J

    Nội dung này được bảo vệ bằng mật khẩu. Để xem, vui lòng nhập mật khẩu bên dưới.

  • NVDTPC là gì?

    Trong bối cảnh của cơ quan Thuế, NVDTPC là tên viết tắt của:

    Nghiệp vụ – Dự toán – Pháp chế

    Đây là một phòng chuyên môn của Thuế tỉnh (trước đây là Cục Thuế tỉnh), có chức năng tham mưu và thực hiện các nhiệm vụ như:

    • Hướng dẫn, triển khai chính sách thuế.
    • Thực hiện công tác nghiệp vụ quản lý thuế.
    • Công tác dự toán thu ngân sách.
    • Công tác pháp chế, tuyên truyền và hỗ trợ người nộp thuế.

    Việc nhiều văn bản hiện nay có ký hiệu như:

    • QNG-NVDTPC (Thuế tỉnh Quảng Ngãi),
    • CMA-NVDTPC (Thuế tỉnh Cà Mau),
    • DTH-NVDTPC (Thuế tỉnh Đồng Tháp),
    • TQU-NVDTPC (Thuế tỉnh Tuyên Quang),

    cho thấy NVDTPC là mã của Phòng Nghiệp vụ – Dự toán – Pháp chế trong cơ cấu tổ chức của cơ quan Thuế.