<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Long Nguyễn Xuân</title>
    <description>The latest articles on DEV Community by Long Nguyễn Xuân (@longtth).</description>
    <link>https://dev.to/longtth</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F603874%2F8d78146e-811e-46a3-94e6-f4a5b6718d6b.jpg</url>
      <title>DEV Community: Long Nguyễn Xuân</title>
      <link>https://dev.to/longtth</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/longtth"/>
    <language>en</language>
    <item>
      <title>Thiết lập hệ thống quản lý task bằng jira</title>
      <dc:creator>Long Nguyễn Xuân</dc:creator>
      <pubDate>Wed, 07 Jan 2026 15:39:14 +0000</pubDate>
      <link>https://dev.to/longtth/thiet-lap-he-thong-quan-ly-task-bang-jira-645</link>
      <guid>https://dev.to/longtth/thiet-lap-he-thong-quan-ly-task-bang-jira-645</guid>
      <description>&lt;h2&gt;
  
  
  vì sao?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;làm dự án phần mềm nhiều người thì không thể tách rời các công cụ quản lý, &lt;/li&gt;
&lt;li&gt;jira là No. 1 về software project management tool trên toàn thế giới &lt;/li&gt;
&lt;li&gt;trong quá trình làm đồ án SEP490, thì áp dụng jira giúp chúng ta làm quen với công cụ quản lý dự án phần mềm #1 này, sau ra đời bớt bỡ ngỡ &lt;/li&gt;
&lt;li&gt;dùng excel cũng tốt, nhưng hội đồng phản biện đánh giá cao jira &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  cách làm ngắn gọn
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;vào &lt;a href="https://www.atlassian.com/software" rel="noopener noreferrer"&gt;https://www.atlassian.com/software&lt;/a&gt; đăng ký 1 tài khoản &lt;/li&gt;
&lt;li&gt;tạo 1 dự án, đặt tên, mời bạn bè&lt;/li&gt;
&lt;li&gt;tạo &lt;code&gt;task&lt;/code&gt; phù hợp với các &lt;strong&gt;việc cần làm&lt;/strong&gt; trong dự án &lt;/li&gt;
&lt;li&gt;update trạng thái task định kỳ &lt;/li&gt;
&lt;li&gt;chụp ảnh đem nộp trong báo cáo &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  tiêu chí chấp nhận
&lt;/h2&gt;

&lt;p&gt;nhìn vào jira thấy được "mỗi người từ ngày 2026-01-07 tới ngày 2026-01-15 làm việc gì, estimate bao nhiêu effort, sum effort ~40h" &lt;/p&gt;

&lt;h2&gt;
  
  
  mapping cấu trúc default của jira với cấu trúc công việc đồ án
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;epic&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; 
  &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ý&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;nghĩa"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;feature,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;hoặc&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;mục&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tiêu&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;lớn&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cần&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;giải&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;quyết"&lt;/span&gt; 
  &lt;span class="na"&gt;user_story&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; 
    &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ý&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;nghĩa"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;==&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;function,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;user_story&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;có&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;nhiều&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;con&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;là&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sub_task"&lt;/span&gt; 
    &lt;span class="na"&gt;sub_tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; 
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;viết&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;spec&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(report&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;3&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;functional&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;detail)"&lt;/span&gt; 
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;viết&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;class&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;diagram&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sequence&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;diagram&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(report&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;4)"&lt;/span&gt; 
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;code&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(BE&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;FE)"&lt;/span&gt; 
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;viết&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;unit&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;test&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;case&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(report&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;5-unit&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;test)&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cái&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;này&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;thường&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;do&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;BE&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Dev&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;làm"&lt;/span&gt; 
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;viết&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;system&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;test&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;case&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(report&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;5_test&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;report)&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;người&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;này&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;khác&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;người&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;code"&lt;/span&gt; 
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;run&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;test&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;chỉ&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;closed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;khi&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tất&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cả&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;bug&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;được&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;fix"&lt;/span&gt;
  &lt;span class="na"&gt;bug&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lỗi&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;bắt&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;được,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;có&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;link&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;với&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;user_story&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;để&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;xác&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;định&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;dính&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;với&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;function&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;nào"&lt;/span&gt; 
  &lt;span class="na"&gt;task&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; 
    &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ý&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;nghĩa"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;&amp;gt;&lt;/span&gt; 
      &lt;span class="s"&gt;"công việc nhỏ lẻ, không trực thuộc user_story, &lt;/span&gt;
      &lt;span class="s"&gt;ví dụ: set up môi trường, deploy, họp hành..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  chi tiết thao tác
&lt;/h2&gt;

&lt;p&gt;vào &lt;a href="https://www.atlassian.com/software" rel="noopener noreferrer"&gt;https://www.atlassian.com/software&lt;/a&gt; và mày mò đi &lt;/p&gt;

&lt;h2&gt;
  
  
  estimate
&lt;/h2&gt;

&lt;p&gt;trả lời cho câu hỏi "task này dự kiến mất bao nhiêu giờ" &lt;/p&gt;

&lt;p&gt;&lt;code&gt;original estimate&lt;/code&gt; và &lt;code&gt;remain estimate&lt;/code&gt; (trong &lt;code&gt;time tracking&lt;/code&gt;) nó không được hiển thị ra ngay từ đầu, &lt;br&gt;
phải chọn 1 issue type, sau đó chọn config, rồi add thêm &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1llmo741g5frkookep65.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1llmo741g5frkookep65.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7t6mmjazfo0zktounmcl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7t6mmjazfo0zktounmcl.png" alt=" " width="800" height="273"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;lúc này cái field &lt;code&gt;original estimate&lt;/code&gt; sẽ hiện ra &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faabsmc192x2r6hgegg88.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faabsmc192x2r6hgegg88.png" alt=" " width="800" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;lúc này ta có thể update field này, để "estimate" cho công việc ta cần làm &lt;/p&gt;

&lt;p&gt;có thể estimate mức user story, hoặc mức sub-task, tùy theo độ "mịn" mà mong muốn quản lý task &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fleio454oreiq3h0imvom.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fleio454oreiq3h0imvom.png" alt=" " width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  calendar
&lt;/h2&gt;

&lt;p&gt;sau estimate là calendar, trả lời cho câu hỏi "task này dự kiến làm từ ngày nào tới ngày nào" &lt;/p&gt;

&lt;p&gt;kéo và thả các task từ bên cột task vào trong cái ngày tháng tương ứng &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk9rukcyf49g5a1ejllyg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk9rukcyf49g5a1ejllyg.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>jira</category>
      <category>sep490</category>
      <category>management</category>
    </item>
    <item>
      <title>Test Environment</title>
      <dc:creator>Long Nguyễn Xuân</dc:creator>
      <pubDate>Mon, 15 Dec 2025 16:29:36 +0000</pubDate>
      <link>https://dev.to/longtth/test-environment-jh3</link>
      <guid>https://dev.to/longtth/test-environment-jh3</guid>
      <description>&lt;p&gt;khi làm đồ án, ở file &lt;code&gt;Report 5_Test Documentation.docx&lt;/code&gt; và sau này đi làm các bạn sẽ tiếp xúc với khái niệm "Test Environment" và sau này là những cái &lt;code&gt;environment&lt;/code&gt; khác như &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Dev Environment&lt;/code&gt;: nơi dev tạo ra tính năng mới và fix bug, thường chung với &lt;code&gt;Unit Test Environment&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Test Environment&lt;/code&gt;: nơi tester kiểm tra chức năng, tùy độ phức tạp dự án mà có thể chia Integration Test Env và System Test Env. &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;UAT Environment&lt;/code&gt;: nơi khách hàng nghiệm thu sản phẩm. &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Staging Environment&lt;/code&gt; (đôi khi bị trộn lẫn với UAT, nhưng bản chất khác): đây là nơi tái hiện môi trường production, giống nhất có thể, thường được dựng lên tạm thời để test load, hoặc thử nghiệm các kịch bản triển khai &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Production Environment&lt;/code&gt;: nơi end user thực sự dùng sản phẩm, &lt;strong&gt;nơi tiền thực sự được sinh ra&lt;/strong&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tối thiểu nhất, ở mức đồ án, các bạn bị yêu cầu viết "Test Environment", thì nó có tối thiểu 2 thứ &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Unit Test Environment &lt;/li&gt;
&lt;li&gt;System Test Environment &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;trong 2 cái này, các bạn liệt kê các thông tin "tool" thực tế là hạ tầng cần thiết để "chạy unit test được" và "chạy system test được" &lt;/p&gt;

&lt;p&gt;ví dụ như hình dưới &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxf1lmaz4zgsiusgyoqgp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxf1lmaz4zgsiusgyoqgp.png" alt=" " width="800" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;cái "environment" này nó là 1 "khái niệm Logic" &lt;br&gt;
đôi khi nhiều env có thể được cài đặt chung trên 1 server, &lt;/p&gt;

&lt;p&gt;lấy ví dụ như 1 cái app React, .NET, MySQL, S3 &lt;br&gt;
thì trên 1 con Ec2 hoặc VPS nào đó, có thể chạy đồng thời cả &lt;code&gt;Dev Env&lt;/code&gt; và &lt;code&gt;Test Env&lt;/code&gt; &lt;br&gt;
chỉ cần config để mỗi cụm FE+BE chạy trên 1 port khác nhau là OK &lt;br&gt;
ngay trên con server này cũng cài luôn cả database server, và tạo 2 cái schema, &lt;br&gt;
ngay trên con server này cài seaweedFS giả lập S3 rồi map 2 bucket vào là OK. &lt;/p&gt;

</description>
      <category>beginners</category>
      <category>devops</category>
      <category>testing</category>
    </item>
    <item>
      <title>Các điểm cần lưu ý về Business Rule</title>
      <dc:creator>Long Nguyễn Xuân</dc:creator>
      <pubDate>Sun, 14 Dec 2025 17:48:51 +0000</pubDate>
      <link>https://dev.to/longtth/cac-diem-can-luu-y-ve-business-rule-4342</link>
      <guid>https://dev.to/longtth/cac-diem-can-luu-y-ve-business-rule-4342</guid>
      <description>&lt;h2&gt;
  
  
  Định nghĩa
&lt;/h2&gt;

&lt;p&gt;Business Rule là "Quy tắc nghiệp vụ" nó là những "quy định, quy tắc, luật" mà cái ứng dụng của chúng ta phải tuân thủ. &lt;/p&gt;

&lt;h2&gt;
  
  
  ví dụ
&lt;/h2&gt;

&lt;p&gt;luật việt nam quy định người "đủ 18 tuổi" thì được mua rượu. (!!)&lt;br&gt;
ở Mỹ, đủ 21 tuổi (!!) mới được mua rượu. &lt;br&gt;
vậy thì cái "18 tuổi" và "21 tuổi" đó là "business rule"&lt;/p&gt;

&lt;p&gt;(!): thực tế ở vn mấy tuổi đi mua rượu không phải nội dung bàn luận của blog này :) &lt;br&gt;
(!!): luật Mỹ nó phức tạp, và cũng không phải trọng tâm của blog này :) &lt;/p&gt;

&lt;p&gt;trọng tâm là, &lt;/p&gt;

&lt;p&gt;nếu bạn làm 1 cái app mua bán hàng, và có bán rượu, thì cái app đó phải có chức năng cho phép người ta khai báo tuổi, và nếu người mua đang &amp;lt;18 (vn) hoặc &amp;lt;21 (us) thì không cho thực hiện hành động mua rượu từ website của bạn, &lt;br&gt;
nếu bạn không có tính năng này, ứng dụng của bạn nó đang vi phạm pháp luật, và có thể bị "gõ" nếu bị cơ quan có thẩm quyền kiểm tra (audit) &lt;/p&gt;

&lt;p&gt;ngoài cái này, có nhiều "business rule" khác, tùy thuộc vào ngữ cảnh của ứng dụng bạn đang làm, nó có thể là quy định công ty, có thể là đặc trưng văn hóa của cộng đồng v.v. &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Business Rule (Quy tắc nghiệp vụ)&lt;/th&gt;
&lt;th&gt;Functional Requirement (Yêu cầu chức năng)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bản chất&lt;/td&gt;
&lt;td&gt;Chính sách của công ty/pháp luật.&lt;/td&gt;
&lt;td&gt;Tính năng của phần mềm.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ví dụ&lt;/td&gt;
&lt;td&gt;"Chỉ người dùng trên 18 tuổi mới được mua rượu."&lt;/td&gt;
&lt;td&gt;"Hệ thống phải hiển thị popup yêu cầu nhập ngày sinh. Nếu nhập &amp;lt; 18 tuổi, nút 'Mua hàng' sẽ bị vô hiệu hóa."&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sự thay đổi&lt;/td&gt;
&lt;td&gt;Thay đổi khi chính sách kinh doanh thay đổi.&lt;/td&gt;
&lt;td&gt;Thay đổi khi Business Rule đổi hoặc khi công nghệ/UI đổi.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phạm vi&lt;/td&gt;
&lt;td&gt;Áp dụng cho toàn doanh nghiệp.&lt;/td&gt;
&lt;td&gt;Áp dụng cho một màn hình hoặc một tính năng cụ thể.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Các ví dụ khác về business rule
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;quy tắc về định nghĩa: 
khách hàng vip là khách hàng có tổng chi tiêu &amp;gt;100M / năm &lt;/li&gt;
&lt;li&gt;quy tắc ràng buộc
ví dụ: mật khẩu phải có độ dài tối thiểu 16 ký tự và bao gồm chữ hoa, chữ thường, số, ký tự đặc biệt, không trùng với 5 mật khẩu gần nhất v.v. &lt;/li&gt;
&lt;li&gt;quy tắc tính toán 
ví dụ: thuế VAT 8% &lt;/li&gt;
&lt;li&gt;ràng buộc sự kiện: 
nếu khách hàng trễ thanh toán 30 ngày thì hệ thống tự động khóa tài khoản. &lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>architecture</category>
      <category>backend</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Trình bày đồ án như thế nào?</title>
      <dc:creator>Long Nguyễn Xuân</dc:creator>
      <pubDate>Mon, 08 Dec 2025 15:15:03 +0000</pubDate>
      <link>https://dev.to/longtth/trinh-bay-do-an-nhu-the-nao-269g</link>
      <guid>https://dev.to/longtth/trinh-bay-do-an-nhu-the-nao-269g</guid>
      <description>&lt;h2&gt;
  
  
  Ngắn gọn
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;trình bày đủ (điểm 7) - chi tiết xem FLM và file rubric&lt;/li&gt;
&lt;li&gt;có điểm nhấn để gây ấn tượng (điểm 8-9-10) &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  chi tiết
&lt;/h2&gt;

&lt;p&gt;trước khi vào "how" ta quay lại một chút về "why"&lt;/p&gt;

&lt;h3&gt;
  
  
  Vì sao phải trình bày đồ án?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;ở mức cơ bản nhất: phát hiện gian lận. nhóm sinh viên có thực sự là người làm ra sản phẩm này không? hay đi cóp ở đâu về, hay tệ hơn, thuê người làm hộ? cái này thì không có gì để bàn. &lt;/li&gt;
&lt;li&gt;đánh giá năng lực diễn đạt: communication
bạn có thể làm rất tốt, nhưng nếu không thể trình bày được sản phẩm của mình, vậy cần luyện trình bày cho đạt chuẩn thì mới có khả năng tham gia vào thị trường lao động,
đừng có lý luận rằng "tôi chỉ biết làm, tôi không cần nói", không ai đòi hỏi bạn vừa phải code như 1 kỹ sư, vừa phải "nói như hát" ở tầm saleman, nhưng "nếu không thể trình bày" vậy thì có nghĩa là năng lực của bạn chưa đạt chuẩn, chưa đạt thì học lại cho đạt. &lt;/li&gt;
&lt;li&gt;đánh giá tư duy: phản biện và bảo vệ quan điểm.
bạn có đủ kiến thức, và tư duy để bảo vệ lập trường của mình không? hay ai nói gì cũng gật?
nếu không đủ kiến thức, không đủ tư duy, vậy ở lại học thêm cho đủ rồi ra đi làm
&lt;/li&gt;
&lt;li&gt;góc nhìn đa chiều:
tất cả developer, hay người làm kỹ thuật nói chung thường mắc phải nhược điểm lớn "sản phẩm của tôi là tuyệt vời", những nhận xét, góp ý của hội đồng phản biện, bao gồm các giảng viên (học thuật) và đại diện doanh nghiệp (thực tế) sẽ giúp các bạn mở rộng tầm suy nghĩ, nhận ra những lỗ hổng mà sinh viên chưa nghĩ tới (khả thi kinh tế, bảo mật, trải nghiệm người dùng v.v.)&lt;/li&gt;
&lt;li&gt;cuối cùng: lễ trưởng thành
trước buổi bảo vệ, bạn là "người học", sau buổi bảo vệ, bạn là đồng nghiệp với các kỹ sư (doanh nghiệp) và thầy cô của mình. &lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Vậy trình bày cái gì và như thế nào?
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Nguyên tắc
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;không cần show hết, chỉ cần show những cái hay nhất &lt;/li&gt;
&lt;li&gt;đồ án đó 5 sinh viên làm trong 3 tháng, nếu không thể trình bày trong 45p, vậy bạn trình bày chưa đạt.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  OK, chốt lại cái dàn bài nó thế này
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Intro (lựa chọn đề tài) : 
có lý do rõ ràng, có số liệu hỗ trợ, trình bày được 5 yếu tố

&lt;ol&gt;
&lt;li&gt;context (fact)&lt;/li&gt;
&lt;li&gt;nỗi đau / cơ hội &lt;/li&gt;
&lt;li&gt;nhu cầu / hệ thống đã có + ưu nhược &lt;/li&gt;
&lt;li&gt;giải pháp&lt;/li&gt;
&lt;li&gt;lợi ích dự kiến &lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;Project management

&lt;ol&gt;
&lt;li&gt;mô hình &amp;amp; cách áp dụng mô hình vào trong dự án &lt;/li&gt;
&lt;li&gt;vai trò trách nhiệm&lt;/li&gt;
&lt;li&gt;cách quản lý code / docs trong dự án&lt;/li&gt;
&lt;li&gt;... other .. &lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;Requirement

&lt;ol&gt;
&lt;li&gt;business workflow&lt;/li&gt;
&lt;li&gt;use case diagram&lt;/li&gt;
&lt;li&gt;ERD (optional)&lt;/li&gt;
&lt;li&gt;Screen flow ( optional )&lt;/li&gt;
&lt;li&gt;non functional requirement (optional)&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;Architect

&lt;ol&gt;
&lt;li&gt;overview technical&lt;/li&gt;
&lt;li&gt;package diagram (MVC / 3 layers / microservices / clean architect / Dependency Injection / Domain Driven Design)&lt;/li&gt;
&lt;li&gt;Database&lt;/li&gt;
&lt;li&gt;deployment architect (optional)&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;Testing 

&lt;ol&gt;
&lt;li&gt;Test plan: 
functional / nonfunctional 
unit + system + ?? 
công cụ / công nghệ test 
đơn giản: chrome + excel 
phức tạp: selenium + jmeter + junit + ... &lt;/li&gt;
&lt;li&gt;quy trình quản lý bug &lt;/li&gt;
&lt;li&gt;Test Result 
số lượng test case, phân bổ NAB
số lượng bug&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;demo (20-25p) &lt;br&gt;
nguyên tắc: bám theo business workflow, kể 1 câu chuyện vv user dùng hệ thống thì đạt được lợi ích gì?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;negative cases không cần làm &lt;/li&gt;
&lt;li&gt;những cái đơn giản quá: đăng ký / forgot password / view own profile : không cần &lt;/li&gt;
&lt;li&gt;chuẩn bị demo data : file word text, folder images, không nhập những thứ vô nghĩa như "asdf" hay "testtest" &lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;conclusion &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;mở bài (intro) hứa làm cái gì, đã làm được chưa? &lt;/li&gt;
&lt;li&gt;tự nhận xét còn thiếu sót gì? kế hoạch tương lai để cải tiến ra sao? &lt;/li&gt;
&lt;li&gt;học được gì qua dự án này &lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;/ol&gt;

</description>
      <category>sep490</category>
    </item>
    <item>
      <title>Vẽ quy trình nghiệp vụ bằng BPMN trong DrawIO</title>
      <dc:creator>Long Nguyễn Xuân</dc:creator>
      <pubDate>Tue, 09 Sep 2025 14:25:54 +0000</pubDate>
      <link>https://dev.to/longtth/ve-quy-trinh-nghiep-vu-bang-bpmn-trong-drawio-3gp3</link>
      <guid>https://dev.to/longtth/ve-quy-trinh-nghiep-vu-bang-bpmn-trong-drawio-3gp3</guid>
      <description>&lt;h1&gt;
  
  
  Vẽ quy trình nghiệp vụ bằng BPMN trong DrawIO
&lt;/h1&gt;

&lt;h2&gt;
  
  
  TLDR
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;ở panel bên trái cửa sổ DrawIO, bấm "More shapes..." &lt;/li&gt;
&lt;li&gt;trong pop up mới hiện ra, ở panel bên trái, kéo xuống phần business, có BPMN 2.0, tick vào ✅ nhấn Apply &lt;/li&gt;
&lt;li&gt;Enjoy &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  hình ảnh
&lt;/h2&gt;

&lt;p&gt;
  xem hình ảnh
  &lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frhjwuz8ttwsd0kgrsptt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frhjwuz8ttwsd0kgrsptt.png" alt="ban đầu"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fexru6jtbf3u90m21kszl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fexru6jtbf3u90m21kszl.png" alt="chọn BPMN"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0fylzznhpdgdw5qor9l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0fylzznhpdgdw5qor9l.png" alt="kết quả"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;/p&gt;

&lt;h2&gt;
  
  
  context
&lt;/h2&gt;

&lt;p&gt;khi làm đồ án SEP490, từ kỳ SP25, có yêu cầu tăng cường phần "business workflow" để trình bày được cái &lt;em&gt;luồng nghiệp vụ tổng quan&lt;/em&gt; của hệ thống, tránh trình bày lan man, &lt;/p&gt;

&lt;p&gt;để vẽ cái business workflow này, có nhiều cách, tự sáng tạo cú pháp cũng OK, nhưng có 1 môn "võ công" chuyên cho việc này, gọi là BPMN - Business Process Model Notation. võ công này thường là "tuyệt kỹ trấn phái" của nghề "BA - Business Analyst" nhưng mà [1] ở level sinh viên [2] thời GenAI lên ngôi, ranh giới các vị trí trong ngày nó sẽ rất mờ nhạt, cho nên học đi, không thiệt đâu. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;làm với thầy Long thì phải dùng BPMN.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  BPMN Hello world
&lt;/h2&gt;

&lt;h3&gt;
  
  
  tình huống thực tế
&lt;/h3&gt;

&lt;p&gt;cân nhắc tình huống *&lt;em&gt;đi mua trà sữa ở quán *hiện đại&lt;/em&gt; ** và vẽ BPMN cho nó &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;start &lt;/li&gt;
&lt;li&gt;khách vào quán&lt;/li&gt;
&lt;li&gt;khách chọn món, yêu cầu tùy chỉnh (nếu có) như thêm kem cheese, thêm trân châu v.v. &lt;/li&gt;
&lt;li&gt;thu ngân lên đơn, bill hiển thị trên màn hình &lt;/li&gt;
&lt;li&gt;user thanh toán. &lt;/li&gt;
&lt;li&gt;user cầm cục tín hiệu ra bàn ngồi chờ &lt;/li&gt;
&lt;li&gt;thu ngân in "phiếu nước" để barista thực hiện pha chế. &lt;/li&gt;
&lt;li&gt;barista nhìn phiếu, pha nước, đặt vào quầy "hoàn thành", nhấn nút hoàn thành trên hệ thống. &lt;/li&gt;
&lt;li&gt;cục tín hiệu rung, &lt;/li&gt;
&lt;li&gt;khách cầm cục tín hiệu tới quầy hoàn thành, trả cục tín hiệu, cầm nước ra bàn. &lt;/li&gt;
&lt;li&gt;end &lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  lý thuyết
&lt;/h3&gt;

&lt;p&gt;các thành phần chính trong BPMN gồm &lt;/p&gt;

&lt;h4&gt;
  
  
  Swimlanes (pool &amp;amp; lane)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pool&lt;/strong&gt;: đại diện cho thực thể lớn như tổ chức, doanh nghiệp, hoặc một nhóm những người cùng tham gia vào 1 hoạt động (quy trình) nào đó. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lane&lt;/strong&gt;: các cá nhân, hệ thống tự động tham gia vào quy trình. &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Flow Elements
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;**Event (sự kiện): **là điểm bắt đầu, kết thúc hoặc các sự kiên trung gian trong quy trình, biểu diễn bằng 1 hình tròn nhỏ &lt;/li&gt;
&lt;li&gt;Activity (hoạt động): là các hành động của người, hoặc hệ thống tự động (ví dụ: bank system) trong quy trình. &lt;/li&gt;
&lt;li&gt;Gateway (Cổng): Dùng để quyết định hoặc điều khiển luồng, biểu diễn bằng hình thoi. Đây là nơi tách hoặc hợp luồng trong quy trình&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Connecting Objects (Kết nối giữa các thành phần):
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Sequence Flow&lt;/strong&gt;: Mũi tên nối các hoạt động theo trình tự thực hiện, được vẽ bằng nét liền.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Message Flow&lt;/strong&gt;: Dùng để thể hiện luồng thông tin hoặc tin nhắn giữa các pool hoặc lane, vẽ bằng nét đứt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Associations&lt;/strong&gt;: Liên kết giữa các đối tượng dữ liệu và hoạt động.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Artifacts (Hiện vật hỗ trợ)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data Objects&lt;/strong&gt;: Thể hiện dữ liệu được sử dụng hoặc tạo ra trong quy trình.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Groups&lt;/strong&gt;: Nhóm các hoạt động liên quan lại với nhau để trực quan hóa.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Annotations&lt;/strong&gt;: Chú thích thêm thông tin cho biểu đồ để người xem dễ hiểu hơn.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  áp dụng lý thuyết ta có sản phẩm như sau
&lt;/h3&gt;

&lt;p&gt;chú ý rằng ta có 2 "lane" không được mô tả trong hệ thống ban đầu, là cái Payment system và coffeshop management system &lt;br&gt;
thì đây là 2 hệ thống mà mình phải "tích hợp" hoặc "xây dựng" &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F36xar0ib98nu6powl1v1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F36xar0ib98nu6powl1v1.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://1drv.ms/u/c/c75562f009b87df4/Ed98YxdDqrFNjyB6zq5yOQsBgFRB1wv_Ig5jRCtTe28U6A?e=8ObqGV" rel="noopener noreferrer"&gt;https://1drv.ms/u/c/c75562f009b87df4/Ed98YxdDqrFNjyB6zq5yOQsBgFRB1wv_Ig5jRCtTe28U6A?e=8ObqGV&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sep490</category>
    </item>
    <item>
      <title>Config git user.name để kiểm soát code</title>
      <dc:creator>Long Nguyễn Xuân</dc:creator>
      <pubDate>Fri, 29 Aug 2025 14:40:54 +0000</pubDate>
      <link>https://dev.to/longtth/config-git-username-useremail-35cj</link>
      <guid>https://dev.to/longtth/config-git-username-useremail-35cj</guid>
      <description>&lt;h2&gt;
  
  
  ngắn gọn
&lt;/h2&gt;

&lt;p&gt;các nhóm sinh viên làm code với thầy Long thì thực hiện thao tác dưới: &lt;/p&gt;

&lt;p&gt;mở &lt;code&gt;Terminal&lt;/code&gt; trong folder code của dự án &lt;br&gt;
gõ lệnh sau &lt;code&gt;git config --global user.name "Ten Day Du Tieng Viet Khong Dau"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;ví dụ: &lt;code&gt;git config --global user.name "Nguyen Xuan Long"&lt;/code&gt; &lt;/p&gt;
&lt;h2&gt;
  
  
  kết quả
&lt;/h2&gt;

&lt;p&gt;trước khi gõ lệnh: 
  nhấn vào xem ảnh
  &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ski64988yvdjcoaxrhp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ski64988yvdjcoaxrhp.png" alt=" "&gt;&lt;/a&gt;



&lt;br&gt;
sau khi gõ lệnh: 
  nhấn vào xem ảnh
  &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0i6v9brz921myqdlmwkr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0i6v9brz921myqdlmwkr.png" alt=" "&gt;&lt;/a&gt;



&lt;/p&gt;

&lt;h2&gt;
  
  
  giải thích chi tiết
&lt;/h2&gt;

&lt;p&gt;Git cho phép ta config lại các biến môi trường theo 3 tầng &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Local&lt;/code&gt;: chứa trong cái local repo, là cái &lt;code&gt;.git&lt;/code&gt; folder code đang làm việc. &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;global&lt;/code&gt;: là các config áp dụng với tất cả repo, chứa trong &lt;code&gt;~/.gitconfig&lt;/code&gt; hoặc &lt;code&gt;C:\Users\&amp;lt;user&amp;gt;\.gitconfig&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;system&lt;/code&gt;: là config áp dụng với tất cả user sử dụng trên con máy,  nằm ở &lt;code&gt;/etc/gitconfig&lt;/code&gt; hoặc &lt;code&gt;C:\ProgramData\Git\config&lt;/code&gt; &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;các biến này chứa một số thứ &lt;code&gt;config&lt;/code&gt; để khi Git chạy thì sử dụng &lt;br&gt;
cái hướng dẫn ở trên của thầy Long là để config lại cái "tên" hiển thị của các bạn trong lịch sử git và nó áp dụng mức &lt;code&gt;global&lt;/code&gt; &lt;br&gt;
tránh tình huống "ủa code này của ai đây" &lt;/p&gt;

&lt;p&gt;
  nhấn vào xem ảnh
  &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x8lridudxkib2wcsv18.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x8lridudxkib2wcsv18.png" alt=" "&gt;&lt;/a&gt;



&lt;/p&gt;

</description>
    </item>
    <item>
      <title>dùng Adjust List Indent để làm cho bullet indent cân đối hơn</title>
      <dc:creator>Long Nguyễn Xuân</dc:creator>
      <pubDate>Tue, 26 Aug 2025 09:11:14 +0000</pubDate>
      <link>https://dev.to/longtth/dung-adjust-list-indent-de-lam-cho-bullet-indent-can-doi-hon-36nm</link>
      <guid>https://dev.to/longtth/dung-adjust-list-indent-de-lam-cho-bullet-indent-can-doi-hon-36nm</guid>
      <description>&lt;p&gt;nhiều nhóm viết tài liệu, rất chủ quan, sử dụng chế độ mặc định của template, nên cái bài viết nhìn nó rất là mất cân đối và xấu như thế này &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feed5rhjh51ul577esa9o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feed5rhjh51ul577esa9o.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;cái này do mỗi cấp, Word default "thụt" vào 0.25 inch &lt;/p&gt;

&lt;p&gt;hãy dùng chức năng Adjust List Indent của Word, chỉnh lại indent vừa phải, ví dụ như mỗi level thì thụt vào (Indentation Left) thêm 0.1 thôi&lt;/p&gt;

&lt;p&gt;ta sẽ được cái tài liệu nhìn cân đối như dưới &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsize6qp57swczha7lgbh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsize6qp57swczha7lgbh.png" alt=" " width="644" height="623"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fepd7o5w6d1bxmjs7mf35.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fepd7o5w6d1bxmjs7mf35.png" alt=" " width="451" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufoe1vkyo9ao1dg5yv0a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufoe1vkyo9ao1dg5yv0a.png" alt=" " width="631" height="805"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Daily report / daily stand up trong đồ án</title>
      <dc:creator>Long Nguyễn Xuân</dc:creator>
      <pubDate>Wed, 08 Jan 2025 10:28:38 +0000</pubDate>
      <link>https://dev.to/longtth/daily-report-trong-do-an-5ig</link>
      <guid>https://dev.to/longtth/daily-report-trong-do-an-5ig</guid>
      <description>&lt;p&gt;Khi đi làm vào tầm những năm 2025 này đa phần các bạn sẽ làm việc với mô hình Agile/Scrum, chi tiết về nó thì nói lúc khác, nhưng trong đấy có 1 thứ rất hay (*) gọi là "daily stand up"&lt;/p&gt;

&lt;p&gt;Vì làm đồ án thì chúng ta chơi hệ &lt;code&gt;remote working&lt;/code&gt;, và cũng hiếm team nào set được daily stand up qua video call, nên thường thì mình sẽ chơi daily stand up qua Discord, &lt;/p&gt;

&lt;p&gt;cách làm như sau: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;tạo 1 discord channel có tên &lt;code&gt;daily-stand-up&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;mỗi ngày, người đầu tiên vào thực hiện daily stand up (hoặc gọi là daily report cũng được) thì tạo 1 thread với title &lt;code&gt;YYYY-MM-DD&lt;/code&gt; và viết nội dung vào &lt;/li&gt;
&lt;li&gt;các bạn còn lại reply theo format dưới &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ví dụ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="err"&gt;##&lt;/span&gt; &lt;span class="n"&gt;DONE&lt;/span&gt;
&lt;span class="c1"&gt;// hôm nay vừa **xong** được việc gì, &lt;/span&gt;
&lt;span class="c1"&gt;// nếu sp đó chưa công bố, hãy kẹp link vào &lt;/span&gt;
&lt;span class="c1"&gt;// nếu không xong được gì thì ghi `N/A` &lt;/span&gt;

&lt;span class="err"&gt;##&lt;/span&gt; &lt;span class="n"&gt;DOING&lt;/span&gt; 
&lt;span class="c1"&gt;// đang làm dang dở việc gì. &lt;/span&gt;
&lt;span class="n"&gt;ch&lt;/span&gt;&lt;span class="err"&gt;ú&lt;/span&gt; &lt;span class="err"&gt;ý&lt;/span&gt; &lt;span class="n"&gt;vi&lt;/span&gt;&lt;span class="err"&gt;ế&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="err"&gt;đú&lt;/span&gt;&lt;span class="n"&gt;ng&lt;/span&gt; &lt;span class="n"&gt;format&lt;/span&gt; 
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ti&lt;/span&gt;&lt;span class="err"&gt;ê&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="err"&gt;đề&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="err"&gt;ô&lt;/span&gt;&lt;span class="n"&gt;ng&lt;/span&gt; &lt;span class="n"&gt;vi&lt;/span&gt;&lt;span class="err"&gt;ệ&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="m"&gt;01&lt;/span&gt; 
  &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;original&lt;/span&gt; &lt;span class="n"&gt;estimate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; 
  &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;remain&lt;/span&gt; &lt;span class="n"&gt;estimate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; 
  &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;plan&lt;/span&gt; &lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;yyyy&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;mm&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dd&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt; 
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ti&lt;/span&gt;&lt;span class="err"&gt;ê&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="err"&gt;đề&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="err"&gt;ô&lt;/span&gt;&lt;span class="n"&gt;ng&lt;/span&gt; &lt;span class="n"&gt;vi&lt;/span&gt;&lt;span class="err"&gt;ệ&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="m"&gt;02&lt;/span&gt;
  &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;original&lt;/span&gt; &lt;span class="n"&gt;estimate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; 
  &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;remain&lt;/span&gt; &lt;span class="n"&gt;estimate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt; 
  &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;plan&lt;/span&gt; &lt;span class="n"&gt;done&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;yyyy&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;mm&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dd&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt; 

&lt;span class="err"&gt;##&lt;/span&gt; &lt;span class="n"&gt;ISSUE&lt;/span&gt; 
&lt;span class="c1"&gt;// có trở ngại gì khiến cho task bị trễ không ? &lt;/span&gt;
&lt;span class="c1"&gt;// tuân thủ format&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ti&lt;/span&gt;&lt;span class="err"&gt;ê&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="err"&gt;đề&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; 
     &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;plan&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;yyyy&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;mm&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dd&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt;##&lt;/span&gt; &lt;span class="n"&gt;NEXT&lt;/span&gt; 
&lt;span class="c1"&gt;// mai dự kiến làm việc gì?&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;vi&lt;/span&gt;&lt;span class="err"&gt;ệ&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; 
  &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;plan&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yyyy&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;MM&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dd&lt;/span&gt; &lt;span class="n"&gt;HH&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;mm&lt;/span&gt; 
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;vi&lt;/span&gt;&lt;span class="err"&gt;ệ&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
  &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;plan&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;yyyy&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;MM&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;dd&lt;/span&gt; &lt;span class="n"&gt;HH&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;mm&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ví dụ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;2025-01-08 

&lt;span class="gu"&gt;## DONE&lt;/span&gt;
&lt;span class="sb"&gt;`N/A`&lt;/span&gt; 

&lt;span class="gu"&gt;## DOING &lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; code module quét QRCode checkin điểm danh #108
&lt;span class="p"&gt;  -&lt;/span&gt; original estimate: 16 h 
&lt;span class="p"&gt;  -&lt;/span&gt; remain estimate:  8 h 
&lt;span class="p"&gt;  -&lt;/span&gt; plan done: 2025-01-09

&lt;span class="gu"&gt;## ISSUE &lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; hôm trước đi bão ăn mừng việt nam vô địch, nên 2am mới về nhà,   
  gọi cho Khắc Hưng với Đức PHúc rồi đi ngủ thôi chứ không code nổi 
&lt;span class="p"&gt;  -&lt;/span&gt; action: chủ nhật này bù tiến độ 

&lt;span class="gu"&gt;## NEXT &lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; hoàn thành module QRCode #108 (&lt;span class="ge"&gt;**&lt;/span&gt;) 
&lt;span class="p"&gt;  +&lt;/span&gt; plan: 2025-01-09 23:00  
&lt;span class="p"&gt;-&lt;/span&gt; nghiên cứu về quẹt thẻ NFC bằng iPhone 
&lt;span class="p"&gt;  +&lt;/span&gt; plan 2025-01-10 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;một nhóm làm tốt &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foygz29kandj2snjk167q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foygz29kandj2snjk167q.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(*) một số bạn sờ rum mát tơ đỉnh cao trí tuệ biến nó thành bullshit là chuyện khác 🐧 &lt;/p&gt;

&lt;p&gt;(**) cái &lt;code&gt;#108&lt;/code&gt; kia nếu như bạn dùng hệ tool quản lý dự án như jira / gitlab / azure board thì nhắn cái id này vào để tiện check &lt;/p&gt;

&lt;p&gt;(***) nếu bạn thực sự giỏi, hãy tạo 1 cái tool / AI agent tự generate cái nội dung báo cáo này từ data jira/clickup/excel v.v. của dự án &lt;/p&gt;

</description>
      <category>sep490</category>
    </item>
    <item>
      <title>gửi meeting request định kỳ</title>
      <dc:creator>Long Nguyễn Xuân</dc:creator>
      <pubDate>Mon, 06 Jan 2025 16:15:58 +0000</pubDate>
      <link>https://dev.to/longtth/gui-meeting-request-dinh-ky-428f</link>
      <guid>https://dev.to/longtth/gui-meeting-request-dinh-ky-428f</guid>
      <description>&lt;p&gt;sau này khi đi làm, bạn có thể gặp những người chuyên nghiệp (hoặc không 🐧) và họ có lịch làm việc rất dày đặc, nên để "họp" được với họ, bạn sẽ cần thứ gọi là "check lịch" và "book meeting request" (tên trong Outlook), hoặc bên vũ trụ Google gọi là "Calendar Event"&lt;/p&gt;

&lt;p&gt;mặc dù trên công ty thì tui dùng Outlook 🪟 nhưng mà ở đây tui hướng dẫn sinh viên tạo Google Calendar Event 🐧&lt;/p&gt;

&lt;h2&gt;
  
  
  brief
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://calendar.google.com" rel="noopener noreferrer"&gt;https://calendar.google.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Create / Event hoặc&lt;/li&gt;
&lt;li&gt;Rê chuột chọn thời gian &lt;/li&gt;
&lt;li&gt;nhập title, chọn hình thức lặp lại &lt;/li&gt;
&lt;li&gt;nhập email người tham gia &lt;/li&gt;
&lt;li&gt;nhập mục tiêu meeting &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  visual
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ld583d4n7ggracb9q6l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ld583d4n7ggracb9q6l.png" alt="gửi meeting request định kỳ " width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sep490</category>
    </item>
    <item>
      <title>update notepad++ portable</title>
      <dc:creator>Long Nguyễn Xuân</dc:creator>
      <pubDate>Tue, 31 Dec 2024 03:53:25 +0000</pubDate>
      <link>https://dev.to/longtth/update-notepad-32nc</link>
      <guid>https://dev.to/longtth/update-notepad-32nc</guid>
      <description>&lt;p&gt;update notepad++ portable thì extract ra 1 folder tạm, xong copy tất cả file vào folder chính, &lt;strong&gt;ngoại trừ&lt;/strong&gt; &lt;code&gt;config.xml&lt;/code&gt; &amp;amp; &lt;code&gt;shortcuts.xml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;nguồn: &lt;a href="https://community.notepad-plus-plus.org/post/40809" rel="noopener noreferrer"&gt;https://community.notepad-plus-plus.org/post/40809&lt;/a&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;if you update your portable version, please do not extract it directly to your portable folder.&lt;br&gt;
extract it to a temporary location instead, e.g. your desktop, and copy everything from there to your portable folder except config.xml and shortcuts.xml&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>todayilearned</category>
    </item>
    <item>
      <title>meeting notes - how</title>
      <dc:creator>Long Nguyễn Xuân</dc:creator>
      <pubDate>Tue, 24 Dec 2024 02:03:13 +0000</pubDate>
      <link>https://dev.to/longtth/meeting-notes-how-4c8o</link>
      <guid>https://dev.to/longtth/meeting-notes-how-4c8o</guid>
      <description>&lt;p&gt;Bài này được viết dành cho các bạn sinh viên làm đồ án phần mềm với thầy Long :D nhưng mà các bạn khác thấy có ích thì welcome nha :D &lt;/p&gt;

&lt;h1&gt;
  
  
  Nguyên tắc
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Sau tất cả các cuộc họp đều phải công bố (gửi mail / post discord) cái meeting notes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;cái meeting notes này nên được gửi trong vòng 1h sau khi họp xong. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;các thành viên khác phải có hành động xác nhận &lt;strong&gt;đã đọc và đồng ý&lt;/strong&gt; với meeting notes, ví dụ như thả like&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;nếu không đồng ý với nội dung meeting notes, thì phải phản biện, còn khi không phản biện, thì phải tuân thủ nội dung đã thống nhất. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Nội dung
&lt;/h1&gt;

&lt;p&gt;Meeting notes cần nêu rõ được 2 thứ &lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;code&gt;KEY NOTES&lt;/code&gt; - Quan điểm đã thống nhất
&lt;/h2&gt;

&lt;p&gt;trong quá trình &lt;strong&gt;cùng nhau&lt;/strong&gt; làm dự án, đôi khác bạn sẽ phát sinh những thứ &lt;code&gt;A đúng, B cũng không sai&lt;/code&gt;, vậy trong dự án này làm theo cách A hay cách B?&lt;/p&gt;

&lt;p&gt;câu trả lời là A hay B cũng được, nhưng phải &lt;strong&gt;thống nhất&lt;/strong&gt;, và những cái &lt;strong&gt;thống nhất&lt;/strong&gt; này phải được ghi thành văn bản, và công bố cho tất cả mọi người. &lt;/p&gt;

&lt;p&gt;ví dụ: &lt;/p&gt;

&lt;p&gt;dự án này tuân thủ quy trình gitflow được định nghĩa ở &lt;code&gt;link&lt;/code&gt; (cái link mô tả riêng của nhóm, không được tự push code vào nhánh &lt;code&gt;test&lt;/code&gt; và nhánh &lt;code&gt;main&lt;/code&gt;, phải tạo meeting request và assign &lt;code&gt;{account}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;những thứ "quy tắc đồng thuận" này phải được thảo luận, thống nhất, ghi thành văn bản, và các cuộc họp thường dùng làm việc đó. &lt;/p&gt;

&lt;h2&gt;
  
  
  2. &lt;code&gt;TODO&lt;/code&gt; - Việc phải làm
&lt;/h2&gt;

&lt;p&gt;trong quá trình &lt;strong&gt;cùng nhau&lt;/strong&gt; làm dự án, chúng ta sẽ có những việc "đột xuất" phát sinh ngoài cái plan ban đầu, lúc này phải có ai đó trong nhóm chịu trách nhiệm xử lý, vì tất cả mọi người đều "có việc" nên những cái "đột xuất" này phải được ghi thành văn bản để theo dõi (tracking / follow up) về sau với những thông tin cụ thể như &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;việc phải làm &lt;/li&gt;
&lt;li&gt;người phụ trách &lt;/li&gt;
&lt;li&gt;cam kết deadline &lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  thư ký
&lt;/h1&gt;

&lt;p&gt;làm ở công ty thì có thư ký, còn làm ở nhóm đồ án thì 5 đứa ngang hàng nên xoay tua mỗi lần meeting 1 đứa viết. &lt;/p&gt;

&lt;h1&gt;
  
  
  Hình thức
&lt;/h1&gt;

&lt;p&gt;nếu đã &lt;a href="https://dev.to/longtth/setup-discord-server-lam-communication-hub-cho-du-an-5ad7"&gt;setup discord server làm Communication Hub cho dự án&lt;br&gt;
&lt;/a&gt; thì tạo 1 channel &lt;code&gt;#meeting&lt;/code&gt; và tạo các thread theo từng ngày và post bài vào đó, convention là &lt;code&gt;YYYY-MM-DD {tên meeting}&lt;/code&gt; hoặc &lt;code&gt;YYYY-MM-DD&lt;/code&gt; cũng được &lt;/p&gt;

&lt;p&gt;ví dụ:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4kuhf14tuz4n067tp9jt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4kuhf14tuz4n067tp9jt.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;còn đây là cái &lt;strong&gt;ví dụ sai&lt;/strong&gt; của cái nội dung ở trên &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn7gzhui7qrddmpykhs4r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn7gzhui7qrddmpykhs4r.png" alt=" " width="800" height="830"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;nếu dùng hình thức khác để giao ví dụ như email, thì gửi lại email là được. &lt;/p&gt;

</description>
      <category>sep490</category>
    </item>
    <item>
      <title>Outlook tìm mail nhận trong khoảng thời gian xác định</title>
      <dc:creator>Long Nguyễn Xuân</dc:creator>
      <pubDate>Tue, 17 Dec 2024 02:16:48 +0000</pubDate>
      <link>https://dev.to/longtth/outlook-tim-mail-nhan-trong-khoang-thoi-gian-xac-dinh-102l</link>
      <guid>https://dev.to/longtth/outlook-tim-mail-nhan-trong-khoang-thoi-gian-xac-dinh-102l</guid>
      <description>&lt;p&gt;nay được copilot dạy cho các tìm mail theo khoảng thời gian xác định &lt;/p&gt;

&lt;p&gt;cú pháp:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;received:&amp;gt;=MM/DD/YYYY AND received:&amp;lt;=MM/DD/YYYY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ví dụ: toàn bộ mail năm 2022 sẽ là &lt;code&gt;received:&amp;gt;=01/01/2022 AND received:&amp;lt;=12/31/2022&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;có lẽ do máy mình đang để Regional Format là "English (United States)" nên nó vậy, &lt;br&gt;
nếu máy đang set UI &amp;amp; Locale JP thì có lẽ cần đổi qua &lt;code&gt;YYYY-MM-DD&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbagpgakdiz7exvi910iy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbagpgakdiz7exvi910iy.png" alt="Image description" width="800" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>outlook</category>
      <category>todayilearned</category>
    </item>
  </channel>
</rss>
