<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>GitHub Actions on miti99</title><link>https://miti99.com/tags/github-actions/</link><description>Recent content in GitHub Actions on miti99</description><generator>Hugo -- gohugo.io</generator><language>vi</language><lastBuildDate>Tue, 05 May 2026 22:54:37 +0700</lastBuildDate><atom:link href="https://miti99.com/tags/github-actions/index.xml" rel="self" type="application/rss+xml"/><item><title>Newsletter #102</title><link>https://miti99.com/post/2026/05/05/</link><pubDate>Tue, 05 May 2026 00:00:00 +0700</pubDate><guid>https://miti99.com/post/2026/05/05/</guid><description>&lt;p&gt;&lt;em&gt;Mời bạn thưởng thức Newsletter #102.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="a-github-agentic-workflow"&gt;&lt;a class="link" href="https://blog.frankel.ch/agentic-github-workflows/" target="_blank" rel="noopener"
&gt;A GitHub agentic workflow&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Bài viết của Nicolas Fränkel giới thiệu về GitHub agentic workflow, một tính năng tương đối mới cho phép tự động hóa các tác vụ phức tạp, bán cấu trúc thông qua AI agent thay vì các workflow xác định truyền thống. Đây là giải pháp lý tưởng cho việc xử lý dữ liệu phi cấu trúc hoặc bán cấu trúc, vốn khó xử lý bằng các phương pháp tự động hóa thông thường.&lt;/p&gt;
&lt;p&gt;Tác giả chia sẻ trường hợp thực tế khi nhóm của ông duy trì một sản phẩm dài hạn với nhiều phiên bản, và phải tổng hợp thủ công thông tin về các tính năng bị deprecate qua các bản phát hành. Quá trình này tốn nhiều công sức và dễ phát sinh lỗi vì phải xem xét cẩn thận release notes, code annotation và tài liệu plugin. Agentic workflow giúp giải quyết bài toán này một cách hiệu quả nhờ khả năng phân tích nội dung do con người viết.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Điểm chính:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Triển khai gồm ba giai đoạn: khởi tạo bằng &lt;code&gt;gh aw init&lt;/code&gt;, phát triển workflow dưới dạng Markdown, và biên dịch sang YAML bằng &lt;code&gt;gh aw compile&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Cần &lt;code&gt;GITHUB_COPILOT_TOKEN&lt;/code&gt; với quyền fine-grained, cụ thể là quyền truy cập &amp;ldquo;Copilot requests&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Một số trở ngại thường gặp: quên biên dịch Markdown sang YAML trước khi push, xung đột quyền khi tự động hóa quá trình biên dịch, khác biệt nền tảng (Windows vs Ubuntu)&lt;/li&gt;
&lt;li&gt;Hạn chế: không thể sử dụng các action từ GitHub Marketplace bên trong agentic workflow&lt;/li&gt;
&lt;li&gt;Agentic workflow không thay thế tự động hóa xác định hiện có, mà mở ra khả năng mới cho việc xử lý nội dung mơ hồ do con người tạo ra&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-20-software-engineering-laws"&gt;&lt;a class="link" href="https://newsletter.techworld-with-milan.com/p/the-20-software-engineering-laws" target="_blank" rel="noopener"
&gt;The 20 Software Engineering Laws&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Bài viết của Dr Milan Milanović trình bày 20 nguyên lý nền tảng giúp giải thích vì sao các dự án phần mềm thất bại, vì sao đội ngũ mất đà và hệ thống xuống cấp theo thời gian. Tác giả nhấn mạnh rằng các định luật này, nhiều cái đã có từ hàng chục năm trước, mô tả các mô hình về cách con người cộng tác trong các ràng buộc, chứ không phải là những quy tắc bắt buộc.&lt;/p&gt;
&lt;p&gt;Các định luật được nhóm theo nhiều khía cạnh: thiết kế hệ thống (Gall&amp;rsquo;s Law, KISS, Conway&amp;rsquo;s Law, Hyrum&amp;rsquo;s Law, CAP Theorem), động lực đội ngũ (Brooks&amp;rsquo;s Law, Ringelmann Effect, Price&amp;rsquo;s Law), lập kế hoạch và ước lượng (Hofstadter&amp;rsquo;s Law, Dunning-Kruger, Parkinson&amp;rsquo;s Law), đo lường (Goodhart&amp;rsquo;s Law, Gilb&amp;rsquo;s Law), hiệu năng và độ tin cậy (Knuth&amp;rsquo;s Optimization Principle, Amdahl&amp;rsquo;s Law, Murphy&amp;rsquo;s Law), và triết lý thiết kế (Postel&amp;rsquo;s Law, Sturgeon&amp;rsquo;s Law, Cunningham&amp;rsquo;s Law). Tác giả minh họa bằng các tình huống thực tế như Instagram thành công nhờ tinh giản từ Burbn (Gall&amp;rsquo;s Law), Google Wave thất bại do làm quá nhiều thứ cùng lúc, sân bay Berlin Brandenburg ước lượng 18 tháng nhưng kéo dài 7 năm và tiêu tốn 7 tỷ euro (Hofstadter&amp;rsquo;s Law), hay sự cố CrowdStrike năm 2024 khiến 8.5 triệu máy Windows bị crash (Murphy&amp;rsquo;s Law).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Điểm chính:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Các định luật này tồn tại lâu dài vì chúng liên quan đến bản chất con người, không phải công nghệ cụ thể&lt;/li&gt;
&lt;li&gt;Đôi khi các định luật mâu thuẫn nhau, cần phán đoán để biết áp dụng cái nào trong từng tình huống&lt;/li&gt;
&lt;li&gt;Hiểu các định luật trước khi vấn đề xảy ra giúp tiết kiệm tài nguyên và tránh lặp lại sai lầm&lt;/li&gt;
&lt;li&gt;Thành công đòi hỏi nhận biết khi nào mỗi định luật được áp dụng và đưa ra quyết định có chủ đích&lt;/li&gt;
&lt;li&gt;Khuyến khích phát triển danh sách cá nhân các mô hình đã quan sát được thay vì chỉ dựa vào nguyên lý có sẵn&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="databases-were-not-designed-for-this"&gt;&lt;a class="link" href="https://arpitbhayani.me/blogs/defensive-databases/" target="_blank" rel="noopener"
&gt;Databases Were Not Designed For This&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Arpit Bhayani lập luận rằng kiến trúc database truyền thống dựa trên những giả định ngầm bị các hệ thống AI agent vi phạm hoàn toàn. Hợp đồng truyền thống giả định &amp;ldquo;bên gọi là một ứng dụng do con người viết, chạy mã xác định&amp;rdquo; với các thao tác ghi có chủ đích và kết nối ngắn. AI agent phá vỡ mô hình này ở mọi tầng.&lt;/p&gt;
&lt;p&gt;Bài viết chỉ ra năm giả định bị phá vỡ: bên gọi xác định (agent tạo truy vấn không thể đoán trước dựa trên suy luận), ghi có chủ đích (agent ghi tự động không qua review), kết nối ngắn (tác vụ suy luận nhiều bước giữ kết nối mở qua các lần LLM tạm dừng), thất bại rõ ràng (agent có thể âm thầm tiếp tục với dữ liệu không đầy đủ), và schema như hợp đồng (schema database trở thành hợp đồng với LLM). Để giải quyết, tác giả đề xuất các kỹ thuật phòng vệ: statement timeout cấp role (5 giây), connection pool riêng cho agent, PgBouncer transaction pooling, soft delete với &lt;code&gt;deleted_by&lt;/code&gt; truy vết danh tính agent, bảng event log append-only, idempotency key bắt buộc, query comment nhúng ID agent và task, view giám sát hiệu năng theo agent, kiến trúc role-per-agent-type với quyền tối thiểu cần thiết.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Điểm chính:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Database truyền thống không được thiết kế cho bên gọi không xác định và tự động như AI agent&lt;/li&gt;
&lt;li&gt;Sử dụng connection pool tách biệt cho agent với fast-fail timeout để khuyến khích backoff&lt;/li&gt;
&lt;li&gt;Soft delete và append-only log giúp khôi phục khi agent suy luận sai và ghi nhầm&lt;/li&gt;
&lt;li&gt;Idempotency key là bắt buộc để tránh ghi trùng khi agent retry&lt;/li&gt;
&lt;li&gt;Query comment chứa thông tin agent giúp truy vết và giám sát các thao tác&lt;/li&gt;
&lt;li&gt;Áp dụng nguyên tắc least-privilege ở cấp database thay vì dựa vào suy luận của tầng ứng dụng&lt;/li&gt;
&lt;li&gt;Các pattern này không phải công cụ mới, mà là chuyển từ &amp;ldquo;best practice&amp;rdquo; sang &amp;ldquo;hạ tầng tải trọng&amp;rdquo; khi làm việc với agent&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="finishing-things"&gt;&lt;a class="link" href="https://ratfactor.com/finishing-things" target="_blank" rel="noopener"
&gt;Finishing Things&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Bài viết là một bài luận cá nhân sâu sắc về hành trình của tác giả trong việc hoàn thành các dự án cá nhân và duy trì thói quen làm việc hiệu quả bất chấp những bất ổn của cuộc sống. Đây không phải là một hướng dẫn theo công thức, mà là sự xem xét trung thực về những gì hiệu quả và không hiệu quả khi muốn hoàn thành công việc.&lt;/p&gt;
&lt;p&gt;Tác giả từ bỏ các tuyên bố theo năm như &amp;ldquo;Năm của Microcontroller&amp;rdquo; hay &amp;ldquo;Năm của Thử Cái Mới&amp;rdquo; sau khi nhận ra rằng các thử thách lớn trong cuộc sống và những gián đoạn từ bên ngoài khiến việc lập kế hoạch cứng nhắc trở nên vô ích. Thay vào đó, tác giả dùng một &amp;ldquo;project stack&amp;rdquo; bằng giấy Post-It trong khung trưng bày nhỏ, dự án mới đặt lên đầu stack và chỉ làm việc trên dự án trên cùng. Hệ thống LIFO này giúp tránh tê liệt vì quá nhiều lựa chọn và tự nhiên cho phép các &amp;ldquo;side quest&amp;rdquo; phát sinh. Tác giả cũng đề cập đến cảm giác hư vô khi chứng kiến các hệ thống AI được đào tạo dựa trên sáng tạo của con người, và cách phản ứng của ông là cố tình bỏ qua mối đe dọa này và tiếp tục sáng tạo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Điểm chính:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hoàn thành công việc đòi hỏi chấp nhận rằng kế hoạch hoàn hảo là bất khả thi&lt;/li&gt;
&lt;li&gt;Làm việc tăng dần (incremental) hiệu quả hơn là chờ cảm hứng bùng nổ&lt;/li&gt;
&lt;li&gt;Duy trì kết nối tâm lý với dự án trong giai đoạn khô hạn bằng cách tương tác nhỏ như đọc file dự án, chỉnh sửa tài liệu&lt;/li&gt;
&lt;li&gt;Khái niệm &amp;ldquo;sphere of control&amp;rdquo; - phạm vi kiểm soát mở rộng và co lại theo hoàn cảnh sống hiện tại&lt;/li&gt;
&lt;li&gt;Một số trở ngại không phải là khó khăn mà là sự khó chịu (sợ gọi điện thoại, không chắc về kết quả)&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Năm của Tiến Bộ Chậm và Liên Tục&amp;rdquo; thay vì mục tiêu thành tựu cụ thể&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="bonus"&gt;Bonus
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Images:&lt;/strong&gt;
&lt;img src="https://substackcdn.com/image/fetch/$s_!9kS2!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71595c9b-f94f-4ae8-851e-ea4f07342c29_2484x3002.png"
loading="lazy"
alt="Data Warehouse vs Data Lake vs Data Mesh"
&gt;
&lt;img src="https://substackcdn.com/image/fetch/$s_!U4gw!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e8297aa-f856-4b2b-af5d-986023db89e7_2508x3000.png"
loading="lazy"
alt="API Concepts Every Software Engineer Should Know"
&gt;
&lt;img src="https://substackcdn.com/image/fetch/$s_!SAsk!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7616a6b1-8eb6-4dc3-9456-b0e57bc9b0ee_2484x3002.png"
loading="lazy"
alt="Polling vs Long Polling vs Webhooks vs SSE"
&gt;
&lt;img src="https://substackcdn.com/image/fetch/$s_!SJN6!,w_1100,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47ce48f1-06e7-4663-b822-96cc7d1307d0_2484x3002.png"
loading="lazy"
alt="SLA vs SLO vs SLI"
&gt;&lt;/p&gt;</description></item></channel></rss>