<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[TMI株式会社]]></title><description><![CDATA[Create new value, growth together]]></description><link>https://blog.tmi-soft.com/</link><image><url>https://blog.tmi-soft.com/favicon.png</url><title>TMI株式会社</title><link>https://blog.tmi-soft.com/</link></image><generator>Ghost 4.48</generator><lastBuildDate>Mon, 29 Sep 2025 16:54:07 GMT</lastBuildDate><atom:link href="https://blog.tmi-soft.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[[x-Interview] TOP 3 CÂU HỎI QUAN TRỌNG GIÚP TÌM KIM CƯƠNG CHO ĐỘI CỦA BẠN]]></title><description><![CDATA[<p>&#x2460; &#x201C;H&#xE3;y k&#x1EC3; v&#x1EC1; m&#x1ED9;t th&#x1EDD;i &#x111;i&#x1EC3;m b&#x1EA1;n th&#x1EA5;t b&#x1EA1;i. B&#x1EA1;n &#x111;&#xE3; h&#x1ECD;c &#x111;&#x1B0;&#x1EE3;c g&#xEC; v&#xE0; thay &#x111;&#x1ED5;i nh&#x1B0;</p>]]></description><link>https://blog.tmi-soft.com/top-3-cau-hoi-quan-trong-giup-tim-kim-cuong-cho-doi-cua-ban/</link><guid isPermaLink="false">6822a8f2755feb56e0a0fae7</guid><dc:creator><![CDATA[Heoris Vo]]></dc:creator><pubDate>Tue, 13 May 2025 02:06:37 GMT</pubDate><content:encoded><![CDATA[<p>&#x2460; &#x201C;H&#xE3;y k&#x1EC3; v&#x1EC1; m&#x1ED9;t th&#x1EDD;i &#x111;i&#x1EC3;m b&#x1EA1;n th&#x1EA5;t b&#x1EA1;i. B&#x1EA1;n &#x111;&#xE3; h&#x1ECD;c &#x111;&#x1B0;&#x1EE3;c g&#xEC; v&#xE0; thay &#x111;&#x1ED5;i nh&#x1B0; th&#x1EBF; n&#xE0;o sau &#x111;&#xF3;?&#x201D;</p><p>&#x1F50E; V&#xEC; sao c&#xE2;u n&#xE0;y quan tr&#x1ECD;ng?</p><p>- Kh&#x1EA3; n&#x103;ng h&#x1ECD;c h&#x1ECF;i v&#xE0; t&#x1EF1; soi chi&#x1EBF;u l&#xE0; d&#x1EA5;u hi&#x1EC7;u c&#x1EE7;a ng&#x1B0;&#x1EDD;i c&#xF3; t&#x1B0; duy tr&#x1B0;&#x1EDF;ng th&#xE0;nh.</p><p>- M&#x1ED9;t &#x201C;vi&#xEA;n kim c&#x1B0;&#x1A1;ng&#x201D; kh&#xF4;ng bao gi&#x1EDD; ho&#xE0;n h&#x1EA3;o &#x2013; nh&#x1B0;ng h&#x1ECD; bi&#x1EBF;t m&#xE0;i m&#xEC;nh qua t&#x1EEB;ng va v&#x1EA5;p.</p><p>- C&#xE2;u tr&#x1EA3; l&#x1EDD;i s&#x1EBD; h&#xE9; l&#x1ED9;: t&#xED;nh c&#xE1;ch th&#x1EAD;t, tinh th&#x1EA7;n ch&#x1ECB;u tr&#xE1;ch nhi&#x1EC7;m, v&#xE0; chi&#x1EC1;u s&#xE2;u nh&#xE2;n c&#xE1;ch.</p><p></p><p>&#x2461; &#x201C;N&#x1EBF;u ph&#x1EA3;i ch&#x1ECD;n, b&#x1EA1;n mu&#x1ED1;n l&#xE0;m vi&#x1EC7;c trong m&#x1ED9;t t&#x1EAD;p th&#x1EC3; &#x2018;an to&#xE0;n v&#xE0; y&#xEA;n &#x1ED5;n&#x2019; hay &#x2018;li&#xEA;n t&#x1EE5;c &#x111;&#x1ED5;i m&#x1EDB;i v&#xE0; th&#x1EED; th&#xE1;ch&#x2019;? V&#xEC; sao?&#x201D;</p><p>&#x1F50E; V&#xEC; sao c&#xE2;u n&#xE0;y quan tr&#x1ECD;ng?</p><p>- Kh&#xF4;ng c&#xF3; &#x111;&#xE1;p &#xE1;n &#x111;&#xFA;ng &#x2013; nh&#x1B0;ng c&#xF3; &#x111;&#xE1;p &#xE1;n ph&#xF9; h&#x1EE3;p v&#x1EDB;i v&#x103;n h&#xF3;a c&#xF4;ng ty.</p><p>- Ng&#x1B0;&#x1EDD;i gi&#x1ECF;i ch&#x1B0;a ch&#x1EAF;c s&#x1EBD; &#x1EDF; l&#x1EA1;i l&#xE2;u n&#x1EBF;u h&#x1ECD; kh&#xF4;ng &#x111;&#x1ED3;ng nh&#x1ECB;p v&#x1EDB;i t&#x1ED1;c &#x111;&#x1ED9;, gi&#xE1; tr&#x1ECB; v&#xE0; m&#xF4;i tr&#x1B0;&#x1EDD;ng c&#x1EE7;a b&#x1EA1;n.</p><p>- &#x110;&#xE2;y l&#xE0; b&#xE0;i test nh&#x1EB9; nh&#xE0;ng v&#x1EC1; t&#xED;nh c&#xE1;ch &#x2013; h&#x1EC7; gi&#xE1; tr&#x1ECB; &#x2013; &#x111;&#x1ED9; th&#xED;ch &#x1EE9;ng.</p><p></p><p>&#x2462; &#x201C;N&#x1EBF;u &#x111;&#x1B0;&#x1EE3;c ch&#x1ECD;n, b&#x1EA1;n mu&#x1ED1;n c&#xF4;ng ty n&#xE0;y gi&#xFA;p b&#x1EA1;n &#x111;i&#x1EC1;u g&#xEC; trong 2 n&#x103;m t&#x1EDB;i?&#x201D;</p><p>&#x1F50E; V&#xEC; sao c&#xE2;u n&#xE0;y quan tr&#x1ECD;ng?</p><p>- Ng&#x1B0;&#x1EDD;i th&#x1EF1;c s&#x1EF1; c&#xF3; &#x111;&#x1ECB;nh h&#x1B0;&#x1EDB;ng s&#x1EBD; tr&#x1EA3; l&#x1EDD;i m&#x1ED9;t c&#xE1;ch r&#xF5; r&#xE0;ng, khi&#xEA;m t&#x1ED1;n nh&#x1B0;ng c&#xF3; k&#x1EF3; v&#x1ECD;ng.</p><p>- N&#xF3; gi&#xFA;p b&#x1EA1;n &#x111;&#xE1;nh gi&#xE1; xem: Li&#x1EC7;u m&#xEC;nh c&#xF3; nu&#xF4;i d&#x1B0;&#x1EE1;ng &#x111;&#x1B0;&#x1EE3;c ng&#x1B0;&#x1EDD;i n&#xE0;y l&#xE2;u d&#xE0;i kh&#xF4;ng?</p><p>- V&#xE0; b&#x1EA1;n s&#x1EBD; th&#x1EA5;y ai &#x111;&#x1EBF;n v&#xEC; m&#x1ED9;t ch&#x1EB7;ng &#x111;&#x1B0;&#x1EDD;ng, ai ch&#x1EC9; &#x111;&#x1EBF;n&#x2026; v&#xEC; l&#x1B0;&#x1A1;ng th&#xE1;ng.</p><p></p><p>&#x1F3AF; T&#xF3;m l&#x1EA1;i:</p><p> - Ng&#x1B0;&#x1EDD;i t&#xE0;i kh&#xF4;ng thi&#x1EBF;u.</p><p> - Ng&#x1B0;&#x1EDD;i ph&#xF9; h&#x1EE3;p &#x2013; trung th&#xE0;nh &#x2013; s&#x1EB5;n s&#xE0;ng l&#x1EDB;n c&#xF9;ng m&#xEC;nh m&#x1EDB;i l&#xE0; qu&#xFD; gi&#xE1;.</p><p></p><p>V&#xE0; 3 c&#xE2;u h&#x1ECF;i tr&#xEA;n ch&#xED;nh l&#xE0; c&#xE1;ch &#x111;&#x1EC3; b&#x1EA1;n soi s&#xE1;ng xem:</p><p> &#x1F4CD; H&#x1ECD; c&#xF3; th&#x1EC3; tr&#x1EDF; th&#xE0;nh vi&#xEA;n kim c&#x1B0;&#x1A1;ng&#x2026; hay ch&#x1EC9; l&#xE0; &#xE1;nh l&#x1EA5;p l&#xE1;nh t&#x1EA1;m th&#x1EDD;i?</p><p></p>]]></content:encoded></item><item><title><![CDATA[Connect Cursor to github codespace]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2025/04/image-31-1.png" class="kg-image" alt loading="lazy" width="1280" height="720" srcset="https://blog.tmi-soft.com/content/images/size/w600/2025/04/image-31-1.png 600w, https://blog.tmi-soft.com/content/images/size/w1000/2025/04/image-31-1.png 1000w, https://blog.tmi-soft.com/content/images/2025/04/image-31-1.png 1280w" sizes="(min-width: 720px) 720px"></figure><p>D&#x1EA1;o n&#xE0;y cursor n&#x1ED5;i l&#xEA;n nh&#x1B0; 1 hi&#x1EC7;n t&#x1B0;&#x1EE3;ng AI code editor &#x111;&#x1B0;&#x1EE3;c c&#x1ED9;ng &#x111;&#x1ED3;ng developer v&#xF4; c&#xF9;ng &#x111;&#xF3;n nh&#x1EAD;n v&#x1EDB;</p>]]></description><link>https://blog.tmi-soft.com/connect-cursor-to-github-codespace/</link><guid isPermaLink="false">67888eccdbff0703f8374538</guid><dc:creator><![CDATA[anqua]]></dc:creator><pubDate>Thu, 16 Jan 2025 04:55:28 GMT</pubDate><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2025/04/image-31-1.png" class="kg-image" alt loading="lazy" width="1280" height="720" srcset="https://blog.tmi-soft.com/content/images/size/w600/2025/04/image-31-1.png 600w, https://blog.tmi-soft.com/content/images/size/w1000/2025/04/image-31-1.png 1000w, https://blog.tmi-soft.com/content/images/2025/04/image-31-1.png 1280w" sizes="(min-width: 720px) 720px"></figure><p>D&#x1EA1;o n&#xE0;y cursor n&#x1ED5;i l&#xEA;n nh&#x1B0; 1 hi&#x1EC7;n t&#x1B0;&#x1EE3;ng AI code editor &#x111;&#x1B0;&#x1EE3;c c&#x1ED9;ng &#x111;&#x1ED3;ng developer v&#xF4; c&#xF9;ng &#x111;&#xF3;n nh&#x1EAD;n v&#x1EDB;i kh&#x1EA3; n&#x103;ng code gen b&#xE1; &#x111;&#x1EA1;o v&#xE0; &#x111;&#x1EB7;c bi&#x1EC7;t l&#xE0; hi&#x1EC3;u ti&#x1EBF;ng Vi&#x1EC7;t t&#x1ED1;t h&#x1A1;n so v&#x1EDB;i combo VS Code + Copilot </p><p>Tuy nhi&#xEA;n, em n&#xE0;y c&#xF3; 1 issue l&#xE0; kh&#xF4;ng th&#x1EC3; connect &#x111;&#x1B0;&#x1EE3;c v&#xE0;o github workspace. Issue n&#xE0;y &#x111;&#xE3; c&#xF3; t&#x1EEB; l&#xE2;u, song team ph&#xE1;t tri&#x1EC3;n c&#x1EE7;a cursor v&#x1EAB;n ch&#x1B0;a fix</p><p>&#x110;i&#x1EC1;u n&#xE0;y khi&#x1EBF;n 1 ng&#x1EEB;oi quen v&#x1EDB;i m&#xE1;y m&#xF3;c c&#xF9;i b&#x1EAF;p to&#xE0;n ph&#x1EA3;i code online nh&#x1B0; m&#xEC;nh g&#x1EB7;p kh&#xF3; kh&#x103;n </p><p>Sau 1 h&#x1ED3;i research th&#xEC; solution b&#xEA;n d&#x1B0;&#x1EDB;i: Thay v&#xEC; connect qua Github Codespace, ch&#xFA;ng ta s&#x1EBD; connect qua SSH </p><p>1/ C&#xE0;i github cli </p><pre><code>brew install gh 
gh --version</code></pre><p>2/ Login v&#xE0;o github cli </p><pre><code>gh auth refresh -h github.com -s codespace


! First copy your one-time code: D256-FF7F
Press Enter to open https://github.com/login/device in your browser...</code></pre><p>V&#xE0;o browser &#x111;&#x1EC3; authen </p><p>3/ Check th&#x1EED; xem cli &#x111;&#xE3; c&#xF3; th&#x1EC3; connect t&#x1EDB;i code space ch&#x1B0;a </p><pre><code>gh codespace list</code></pre><p>Hi&#x1EC3;n th&#x1ECB; nh&#x1B0; b&#xEA;n d&#x1EE9;oi l&#xE0; OK </p><pre><code>NAME                             DISPLAY NAME    REPOSITORY                            BRANCH   STATE      CREATED AT      
shiny-carnival-p5xjv94j4pw26759  shiny carnival  quanhavn/pdf-llm  develop  Available  about 6 days ago</code></pre><p>4/ Update ssh config </p><pre><code>gh codespace ssh --config &gt;&gt; ~/.ssh/config </code></pre><p>b&#x1EA3;n ch&#x1EA5;t s&#x1EBD; ghi n&#x1ED9;i dung nh&#x1B0; sau v&#xE0;o file config</p><pre><code>Host cs.shiny-carnival-p5xjv94j4pw26759.develop
	User codespace
	ProxyCommand /usr/local/bin/gh cs ssh -c shiny-carnival-p5xjv94j4pw26759 --stdio -- -i /Users/quanha/.ssh/codespaces.auto
	UserKnownHostsFile=/dev/null
	StrictHostKeyChecking no
	LogLevel quiet
	ControlMaster auto
	IdentityFile /Users/quanha/.ssh/codespaces.auto</code></pre><p>5/ M&#x1EDF; cursor &gt; Connect via SSH &gt; Ch&#x1ECD;n host v&#x1EEB; add config </p><figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2025/01/image.png" class="kg-image" alt loading="lazy" width="691" height="129" srcset="https://blog.tmi-soft.com/content/images/size/w600/2025/01/image.png 600w, https://blog.tmi-soft.com/content/images/2025/01/image.png 691w"></figure><p>6/ M&#x1EB7;c &#x111;&#x1ECB;nh khi access ch&#xFA;ng ta s&#x1EBD; &#x1EDF; folder /home/codespace. C&#x1EA7;n &#x111;&#x1ED5;i l&#x1EA1;i th&#xE0;nh /workspace l&#xE0; OK </p><figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2025/01/image-1.png" class="kg-image" alt loading="lazy" width="819" height="319" srcset="https://blog.tmi-soft.com/content/images/size/w600/2025/01/image-1.png 600w, https://blog.tmi-soft.com/content/images/2025/01/image-1.png 819w" sizes="(min-width: 720px) 720px"></figure><p></p><p>Work like a champ bro </p><figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2025/01/image-2.png" class="kg-image" alt loading="lazy" width="301" height="331"></figure>]]></content:encoded></item><item><title><![CDATA[Google Calendar API]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Google Calendar API l&#xE0; m&#x1ED9;t d&#x1ECB;ch v&#x1EE5; c&#x1EE7;a Google cho ph&#xE9;p t&#x1B0;&#x1A1;ng t&#xE1;c v&#x1EDB;i Google Calendar. API cho ph&#xE9;p l&#x1EA5;y danh s&#xE1;ch s&#x1EF1; ki&#x1EC7;n,</p>]]></description><link>https://blog.tmi-soft.com/google-calendar-api/</link><guid isPermaLink="false">6700a911dbff0703f837448b</guid><dc:creator><![CDATA[hiennd]]></dc:creator><pubDate>Sat, 05 Oct 2024 02:54:36 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Google Calendar API l&#xE0; m&#x1ED9;t d&#x1ECB;ch v&#x1EE5; c&#x1EE7;a Google cho ph&#xE9;p t&#x1B0;&#x1A1;ng t&#xE1;c v&#x1EDB;i Google Calendar. API cho ph&#xE9;p l&#x1EA5;y danh s&#xE1;ch s&#x1EF1; ki&#x1EC7;n, t&#x1EA1;o, c&#x1EAD;p nh&#x1EAD;t, x&#xF3;a s&#x1EF1; ki&#x1EC7;n, v&#xE0; m&#x1EDD;i ng&#x1B0;&#x1EDD;i tham gia. T&#x1EA1;o v&#xE0; qu&#x1EA3;n l&#xFD; nhi&#x1EC1;u l&#x1ECB;ch.</p>
<p><strong>C&#xE1;c t&#xED;nh n&#x103;ng ch&#xED;nh c&#x1EE7;a Gmail Calendar API</strong></p>
<ul>
<li>T&#x1EA1;o v&#xE0; qu&#x1EA3;n l&#xFD; nhi&#x1EC1;u l&#x1ECB;ch</li>
<li>L&#x1EA5;y danh s&#xE1;ch s&#x1EF1; ki&#x1EC7;n, t&#x1EA1;o, &#x111;&#x1ECD;c, c&#x1EAD;p nh&#x1EAD;t v&#xE0; x&#xF3;a s&#x1EF1; ki&#x1EC7;n</li>
<li>Qu&#x1EA3;n l&#xFD; quy&#x1EC1;n chia s&#x1EBB; l&#x1ECB;ch</li>
<li>Truy v&#x1EA5;n s&#x1EF1; ki&#x1EC7;n theo &#x111;i&#x1EC1;u ki&#x1EC7;n</li>
<li>T&#xED;ch h&#x1EE3;p m&#xFA;i gi&#x1EDD;</li>
<li>Qu&#x1EA3;n l&#xFD; s&#x1EF1; ki&#x1EC7;n &#x111;&#x1ECB;nh k&#x1EF3;</li>
<li>Qu&#x1EA3;n l&#xFD; kh&#xE1;ch m&#x1EDD;i v&#xE0; tham gia s&#x1EF1; ki&#x1EC7;n</li>
<li>Nh&#x1EAF;c nh&#x1EDF; s&#x1EF1; ki&#x1EC7;n</li>
<li>&#x110;&#x1ED3;ng b&#x1ED9; h&#xF3;a v&#xE0; th&#xF4;ng b&#xE1;o s&#x1EF1; ki&#x1EC7;n</li>
<li>T&#xED;ch h&#x1EE3;p &#x1EE9;ng d&#x1EE5;ng kh&#xE1;c google nh&#x1B0; Google Meet, Zoom</li>
<li>Quy tr&#xEC;nh x&#xE1;c th&#x1EF1;c</li>
<li>Google Calendar API s&#x1EED; d&#x1EE5;ng OAuth 2.0 l&#xE0; c&#x1A1; ch&#x1EBF; x&#xE1;c th&#x1EF1;c.</li>
</ul>
<p><strong>Quy tr&#xEC;nh x&#xE1;c th&#x1EF1;c</strong></p>
<p>Google Calendar API s&#x1EED; d&#x1EE5;ng OAuth 2.0 l&#xE0; c&#x1A1; ch&#x1EBF; x&#xE1;c th&#x1EF1;c.</p>
<p><img src="https://blog.tmi-soft.com/content/images/2024/10/Capture-2.png" alt="Capture-2" loading="lazy"></p>
<p>B&#x1B0;&#x1EDB;c 1: Y&#xEA;u c&#x1EA7;u &#x1EE7;y quy&#x1EC1;n t&#x1EEB; ng&#x1B0;&#x1EDD;i d&#xF9;ng (Authorization Request)</p>
<p>B&#x1B0;&#x1EDB;c 2: Ng&#x1B0;&#x1EDD;i d&#xF9;ng c&#x1EA5;p quy&#x1EC1;n v&#xE0; nh&#x1EAD;n m&#xE3; &#x1EE7;y quy&#x1EC1;n (Authorization Code)</p>
<p>B&#x1B0;&#x1EDB;c 3: Trao &#x111;&#x1ED5;i Authorization Code l&#x1EA5;y Access Token</p>
<p>B&#x1B0;&#x1EDB;c 4: S&#x1EED; d&#x1EE5;ng Access Token &#x111;&#x1EC3; truy c&#x1EAD;p API</p>
<p>Tham kh&#x1EA3;o file json tr&#x1EA3; v&#x1EC1; khi t&#x1EA1;o service account</p>
<p><img src="https://blog.tmi-soft.com/content/images/2024/10/2-6.PNG" alt="2-6" loading="lazy"></p>
<p>Trong Google Calendar API, c&#xF3; hai lo&#x1EA1;i t&#xE0;i kho&#x1EA3;n &#x111;&#x1B0;&#x1EE3;c s&#x1EED; d&#x1EE5;ng &#x111;&#x1EC3; c&#x1EA5;p quy&#x1EC1;n truy c&#x1EAD;p cho &#x1EE9;ng d&#x1EE5;ng: <strong>Service Account</strong> v&#xE0; <strong>User Account</strong>. C&#x1EA3; hai lo&#x1EA1;i t&#xE0;i kho&#x1EA3;n &#x111;&#x1EC1;u s&#x1EED; d&#x1EE5;ng OAuth 2.0 &#x111;&#x1EC3; x&#xE1;c th&#x1EF1;c v&#xE0; &#x1EE7;y quy&#x1EC1;n, nh&#x1B0;ng ch&#xFA;ng c&#xF3; c&#xE1;c m&#x1EE5;c &#x111;&#xED;ch s&#x1EED; d&#x1EE5;ng v&#xE0; c&#xE1;ch th&#x1EE9;c ho&#x1EA1;t &#x111;&#x1ED9;ng kh&#xE1;c nhau.</p>
<ul>
<li>
<p><strong>User Account</strong> l&#xE0; t&#xE0;i kho&#x1EA3;n c&#x1EE7;a ng&#x1B0;&#x1EDD;i d&#xF9;ng Google c&#xE1; nh&#xE2;n. Khi &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a b&#x1EA1;n mu&#x1ED1;n truy c&#x1EAD;p v&#xE0;o d&#x1EEF; li&#x1EC7;u c&#x1EE7;a ng&#x1B0;&#x1EDD;i d&#xF9;ng, n&#xF3; s&#x1EBD; y&#xEA;u c&#x1EA7;u ng&#x1B0;&#x1EDD;i d&#xF9;ng c&#x1EA5;p quy&#x1EC1;n th&#xF4;ng qua lu&#x1ED3;ng OAuth 2.0 d&#x1EF1;a tr&#xEA;n User Account. S&#x1EED; d&#x1EE5;ng khi b&#x1EA1;n t&#x1EA1;o m&#x1ED9;t &#x1EE9;ng d&#x1EE5;ng qu&#x1EA3;n l&#xFD; l&#x1ECB;ch cho nhi&#x1EC1;u ng&#x1B0;&#x1EDD;i d&#xF9;ng.</p>
</li>
<li>
<p><strong>Service Account</strong> l&#xE0; m&#x1ED9;t lo&#x1EA1;i t&#xE0;i kho&#x1EA3;n &#x111;&#x1EB7;c bi&#x1EC7;t &#x111;&#x1B0;&#x1EE3;c s&#x1EED; d&#x1EE5;ng khi b&#x1EA1;n mu&#x1ED1;n &#x1EE9;ng d&#x1EE5;ng c&#x1EE7;a m&#xEC;nh t&#x1EF1; &#x111;&#x1ED9;ng truy c&#x1EAD;p v&#xE0;o Google Calendar m&#xE0; kh&#xF4;ng c&#x1EA7;n s&#x1EF1; t&#x1B0;&#x1A1;ng t&#xE1;c c&#x1EE7;a ng&#x1B0;&#x1EDD;i d&#xF9;ng cu&#x1ED1;i. S&#x1EED; d&#x1EE5;ng t&#x1EA1;o calendar cho 1 t&#x1ED5; ch&#x1EE9;c.</p>
</li>
</ul>
<p><strong>C&#xE1;c b&#x1B0;&#x1EDB;c t&#x1EA1;o Service Account</strong></p>
<ol>
<li>
<p>T&#x1EA1;o project v&#xE0; k&#xED;ch ho&#x1EA1;t Google Calendar API<br>
T&#x1EA1;o t&#xE0;i kho&#x1EA3;n gmail sau &#x111;&#xF3; truy c&#x1EAD;p <a href="https://console.cloud.google.com/projectcreate?pli=1">https://console.cloud.google.com/projectcreate?pli=1</a><br>
T&#x1EA1;o project =&gt; Click google cloud =&gt; ch&#x1ECD;n project v&#x1EEB;a t&#x1EA1;o =&gt; Click APIs and Services =&gt; click Library =&gt; search google calendar api =&gt; Ch&#x1ECD;n google calendar api =&gt; Enable</p>
</li>
<li>
<p>T&#x1EA1;o Service Account<br>
Click Credentials =&gt; Click +Create credentials =&gt; Ch&#x1ECD;n Service Account =&gt; &#x110;&#x1EB7;t t&#xEA;n &#x1EDF;<br>
input &quot;Service account name&quot; =&gt; Click button Create and Continue =&gt; Click Select a role =&gt; Ch&#x1ECD;n role l&#xE0; Owner =&gt; click button Continue =&gt; click button Done.<br>
&#x1EDE; m&#x1EE5;c Service Accounts =&gt; click icon edit service account =&gt; click tab Keys =&gt; ch&#x1ECD;n select option Add Key =&gt; ch&#x1ECD;n option Create new key =&gt; ch&#x1ECD;n type l&#xE0; Json =&gt; click button CREATE =&gt; 1 json s&#x1EBD; &#x111;&#x1B0;&#x1EE3;c t&#x1EA3;i xu&#x1ED1;ng. Copy file n&#xE0;y &#x111;&#x1B0;a v&#xE0;o source code</p>
</li>
<li>
<p>C&#x1EA5;p quy&#x1EC1;n truy c&#x1EAD;p l&#x1ECB;ch cho Service Account<br>
V&#xE0;o &#x1EE9;ng d&#x1EE5;ng google calendar <a href="https://calendar.google.com/calendar/u/0/r?pli=1">https://calendar.google.com/calendar/u/0/r?pli=1</a><br>
Trong ph&#x1EA7;n My Calendars =&gt; click d&#x1EA5;u ... ch&#x1ECD;n Settings and Sharing<br>
&#x1EDE; m&#x1EE5;c Share with specific people or groups =&gt; click Add People and Groups =&gt; s&#x1EBD; m&#x1EDF; l&#xEA;n 1 modal =&gt; sau &#x111;&#xF3; v&#xE0;o file json &#x111;&#xE3; t&#x1EA3;i v&#x1EC1; l&#x1EA5;y m&#x1EE5;c client_email, &#x111;i&#x1EC1;n v&#xE0;o m&#x1EE5;c email c&#x1EE7;a modal<br>
&#x1EDE; m&#x1EE5;c Permissions =&gt; Ch&#x1ECD;n Make changes and manage sharing =&gt; click button Send.</p>
</li>
</ol>
<p>K&#xE9;o xu&#x1ED1;ng d&#x1B0;&#x1EDB;i m&#x1EE5;c Integrate calendar<br>
l&#x1EA5;y Calendar ID l&#x1B0;u l&#x1EA1;i.</p>
<p><strong>Tham kh&#x1EA3;o</strong></p>
<p><strong>T&#x1EA1;o event</strong></p>
<p><img src="https://blog.tmi-soft.com/content/images/2024/10/3.PNG" alt="3" loading="lazy"></p>
<p>Khi t&#x1EA1;o xong event API s&#x1EBD; tr&#x1EA3; v&#x1EC1; event_id, event_id d&#xF9;ng &#x111;&#x1EC3; c&#x1EAD;p nh&#x1EAD;t v&#xE0; x&#xF3;a event</p>
<p><strong>Update event</strong></p>
<p><img src="https://blog.tmi-soft.com/content/images/2024/10/Capture-3.PNG" alt="Capture-3" loading="lazy"></p>
<p><strong>X&#xF3;a event</strong></p>
<p><img src="https://blog.tmi-soft.com/content/images/2024/10/1.PNG" alt="1" loading="lazy"></p>
<p><strong>L&#x1EA5;y list event</strong></p>
<p><img src="https://blog.tmi-soft.com/content/images/2024/10/4.PNG" alt="4" loading="lazy"></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Các Chuẩn Trong Cơ Sở Dữ Liệu Và Các Bước Chuẩn Hóa]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h2 id="c%C3%A1c-d%E1%BA%A1ng-chu%E1%BA%A9n-h%C3%B3a-ch%C3%ADnh">C&#xE1;c d&#x1EA1;ng chu&#x1EA9;n h&#xF3;a ch&#xED;nh</h2>
<h3 id="c%C3%B3-4-d%E1%BA%A1ng-chu%E1%BA%A9n-h%C3%B3a-ch%C3%ADnh-%C4%91%E1%BB%83-s%E1%BB%AD-l%C3%BD-c%C6%A1-s%E1%BB%9F-d%E1%BB%AF-li%E1%BB%87u">C&#xF3; 4 d&#x1EA1;ng chu&#x1EA9;n h&#xF3;a ch&#xED;nh &#x111;&#x1EC3; s&#x1EED; l&#xFD; c&#x1A1; s&#x1EDF; d&#x1EEF; li&#x1EC7;u:</h3>
<pre><code>1. D&#x1EA1;ng chu&</code></pre>]]></description><link>https://blog.tmi-soft.com/cac-chuan-trong-co-so-du-lieu-va-cac-buoc-chuan-hoa/</link><guid isPermaLink="false">6699c3ed60e96304841c5436</guid><category><![CDATA[Laravel]]></category><category><![CDATA[database]]></category><dc:creator><![CDATA[Nguyễn Anh Quân]]></dc:creator><pubDate>Tue, 23 Jul 2024 14:51:05 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="c%C3%A1c-d%E1%BA%A1ng-chu%E1%BA%A9n-h%C3%B3a-ch%C3%ADnh">C&#xE1;c d&#x1EA1;ng chu&#x1EA9;n h&#xF3;a ch&#xED;nh</h2>
<h3 id="c%C3%B3-4-d%E1%BA%A1ng-chu%E1%BA%A9n-h%C3%B3a-ch%C3%ADnh-%C4%91%E1%BB%83-s%E1%BB%AD-l%C3%BD-c%C6%A1-s%E1%BB%9F-d%E1%BB%AF-li%E1%BB%87u">C&#xF3; 4 d&#x1EA1;ng chu&#x1EA9;n h&#xF3;a ch&#xED;nh &#x111;&#x1EC3; s&#x1EED; l&#xFD; c&#x1A1; s&#x1EDF; d&#x1EEF; li&#x1EC7;u:</h3>
<pre><code>1. D&#x1EA1;ng chu&#x1EA9;n 1(1NF)
2. D&#x1EA1;ng chu&#x1EA9;n 2(2NF)
3. D&#x1EA1;ng chu&#x1EA9;n 3(3NF)
4. D&#x1EA1;ng chu&#x1EA9;n Boyce-Codd(BCNF)
</code></pre>
<h3 id="d%E1%BA%A1ng-chu%E1%BA%A9n-11nf">D&#x1EA1;ng chu&#x1EA9;n 1(1NF)</h3>
<pre><code>M&#x1ED9;t quan h&#x1EC7; g&#x1ECD;i l&#xE0; 1NF n&#x1EBF;u:
  -Mi&#x1EC1;n gi&#xE1; tr&#x1ECB; c&#x1EE7;a m&#x1ED7;i thu&#x1ED9;c t&#xED;nh ch&#x1EC9; ch&#x1EE9;a gi&#xE1; tr&#x1ECB; &#x111;&#x1A1;n nguy&#xEA;n t&#x1EED;, kh&#xF4;ng th&#x1EC3;          ph&#xE2;n t&#xE1;ch ra &#x111;&#x1B0;&#x1EE3;c.
  -Gi&#xE1; tr&#x1ECB; c&#x1EE7;a m&#x1ED7;i thu&#x1ED9;c t&#xED;nh trong m&#x1ED7;i b&#x1ED9; ph&#x1EA3;i l&#xE0; gi&#xE1; tr&#x1ECB; &#x111;&#x1A1;n.
</code></pre>
<h5 id="v%C3%AD-d%E1%BB%A5">V&#xED; d&#x1EE5;:</h5>
<h6 id="b%E1%BA%A3ng-ban-%C4%91%E1%BA%A7u-ch%C6%B0a-chu%E1%BA%A9n-h%C3%B3a">B&#x1EA3;ng ban &#x111;&#x1EA7;u (Ch&#x1B0;a chu&#x1EA9;n h&#xF3;a)</h6>
<table>
<thead>
<tr>
<th>StudentID</th>
<th>StudentName</th>
<th>CourseName</th>
<th>InstructorName</th>
<th>InstructorOffice</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Alice</td>
<td>Math</td>
<td>Dr. Smith</td>
<td>Room 101</td>
</tr>
<tr>
<td>1</td>
<td>Alice</td>
<td>Physics</td>
<td>Dr. Johnson</td>
<td>Room 102</td>
</tr>
<tr>
<td>2</td>
<td>Bob</td>
<td>Math</td>
<td>Dr. Smith</td>
<td>Room 101</td>
</tr>
<tr>
<td>2</td>
<td>Bob</td>
<td>Biology</td>
<td>Dr. Clark</td>
<td>Room 103</td>
</tr>
<tr>
<td>3</td>
<td>Charlie</td>
<td>Physics</td>
<td>Dr. Johnson</td>
<td>Room 102</td>
</tr>
</tbody>
</table>
<h6 id="d%E1%BA%A1ng-chu%E1%BA%A9n-th%E1%BB%A9-nh%E1%BA%A5t-1nf">D&#x1EA1;ng chu&#x1EA9;n th&#x1EE9; nh&#x1EA5;t (1NF)</h6>
<p>&#x110;&#x1EC3; &#x111;&#x1EA1;t 1NF, b&#x1EA3;ng ph&#x1EA3;i kh&#xF4;ng c&#xF3; nh&#xF3;m l&#x1EB7;p v&#xE0; m&#x1ED7;i &#xF4; ch&#x1EC9; ch&#x1EE9;a m&#x1ED9;t gi&#xE1; tr&#x1ECB; &#x111;&#x1A1;n:</p>
<table>
<thead>
<tr>
<th>StudentID</th>
<th>StudentName</th>
<th>CourseName</th>
<th>InstructorName</th>
<th>InstructorOffice</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Alice</td>
<td>Math</td>
<td>Dr. Smith</td>
<td>Room 101</td>
</tr>
<tr>
<td>1</td>
<td>Alice</td>
<td>Physics</td>
<td>Dr. Johnson</td>
<td>Room 102</td>
</tr>
<tr>
<td>2</td>
<td>Bob</td>
<td>Math</td>
<td>Dr. Smith</td>
<td>Room 101</td>
</tr>
<tr>
<td>2</td>
<td>Bob</td>
<td>Biology</td>
<td>Dr. Clark</td>
<td>Room 103</td>
</tr>
<tr>
<td>3</td>
<td>Charlie</td>
<td>Physics</td>
<td>Dr. Johnson</td>
<td>Room 102</td>
</tr>
</tbody>
</table>
<h6 id="d%E1%BA%A1ng-chu%E1%BA%A9n-th%E1%BB%A9-hai-2nf">D&#x1EA1;ng chu&#x1EA9;n th&#x1EE9; hai (2NF)</h6>
<pre><code>&#x110;&#x1EC3; &#x111;&#x1EA1;t 2NF, ch&#xFA;ng ta ph&#x1EA3;i lo&#x1EA1;i b&#x1ECF; c&#xE1;c thu&#x1ED9;c t&#xED;nh kh&#xF4;ng kh&#xF3;a ph&#x1EE5; thu&#x1ED9;c v&#xE0;o m&#x1ED9;tph&#x1EA7;n c&#x1EE7;a kh&#xF3;a ch&#xED;nh. Ch&#xFA;ng ta t&#xE1;ch b&#x1EA3;ng th&#xE0;nh hai b&#x1EA3;ng:
-- B&#x1EA3;ng Sinh vi&#xEA;n - Kh&#xF3;a h&#x1ECD;c (Student-Course)
</code></pre>
<table>
<thead>
<tr>
<th>StudentID</th>
<th>StudentName</th>
<th>CourseName</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Alice</td>
<td>Math</td>
</tr>
<tr>
<td>1</td>
<td>Alice</td>
<td>Physics</td>
</tr>
<tr>
<td>2</td>
<td>Bob</td>
<td>Math</td>
</tr>
<tr>
<td>2</td>
<td>Bob</td>
<td>Biology</td>
</tr>
<tr>
<td>3</td>
<td>Charlie</td>
<td>Physics</td>
</tr>
</tbody>
</table>
<p>-- B&#x1EA3;ng Kh&#xF3;a h&#x1ECD;c - Gi&#x1EA3;ng vi&#xEA;n (Course-Instructor)</p>
<table>
<thead>
<tr>
<th>CourseName</th>
<th>InstructorName</th>
<th>InstructorOffice</th>
</tr>
</thead>
<tbody>
<tr>
<td>Math</td>
<td>Dr. Smith</td>
<td>Room 101</td>
</tr>
<tr>
<td>Physics</td>
<td>Dr. Johnson</td>
<td>Room 102</td>
</tr>
<tr>
<td>Biology</td>
<td>Dr. Clark</td>
<td>Room 103</td>
</tr>
</tbody>
</table>
<h6 id="d%E1%BA%A1ng-chu%E1%BA%A9n-th%E1%BB%A9-ba-3nf">D&#x1EA1;ng chu&#x1EA9;n th&#x1EE9; ba (3NF)</h6>
<pre><code>&#x110;&#x1EC3; &#x111;&#x1EA1;t 3NF, ch&#xFA;ng ta ph&#x1EA3;i lo&#x1EA1;i b&#x1ECF; s&#x1EF1; ph&#x1EE5; thu&#x1ED9;c b&#x1EAF;c c&#x1EA7;u. T&#xE1;ch b&#x1EA3;ng CourseInstructor th&#xE0;nh hai b&#x1EA3;ng ri&#xEA;ng bi&#x1EC7;t:
-- B&#x1EA3;ng Sinh vi&#xEA;n (Student)
</code></pre>
<table>
<thead>
<tr>
<th>StudentID</th>
<th>StudentName</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Alice</td>
</tr>
<tr>
<td>2</td>
<td>Bob</td>
</tr>
<tr>
<td>3</td>
<td>Charlie</td>
</tr>
</tbody>
</table>
<p>-- B&#x1EA3;ng Kh&#xF3;a h&#x1ECD;c (Course)</p>
<table>
<thead>
<tr>
<th>CourseName</th>
<th>InstructorName</th>
</tr>
</thead>
<tbody>
<tr>
<td>Math</td>
<td>Dr. Smith</td>
</tr>
<tr>
<td>Physics</td>
<td>Dr. Johnson</td>
</tr>
<tr>
<td>Biology</td>
<td>Dr. Clark</td>
</tr>
</tbody>
</table>
<p>-- B&#x1EA3;ng Gi&#x1EA3;ng vi&#xEA;n (Instructor)</p>
<table>
<thead>
<tr>
<th>InstructorName</th>
<th>InstructorOffice</th>
</tr>
</thead>
<tbody>
<tr>
<td>Dr. Smith</td>
<td>Room 101</td>
</tr>
<tr>
<td>Dr. Johnson</td>
<td>Room 102</td>
</tr>
<tr>
<td>Dr. Clark</td>
<td>Room 103</td>
</tr>
</tbody>
</table>
<p>-- B&#x1EA3;ng Sinh vi&#xEA;n - Kh&#xF3;a h&#x1ECD;c (Student-Course)</p>
<table>
<thead>
<tr>
<th>StudentID</th>
<th>CourseName</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Math</td>
</tr>
<tr>
<td>1</td>
<td>Physics</td>
</tr>
<tr>
<td>2</td>
<td>Math</td>
</tr>
<tr>
<td>2</td>
<td>Biology</td>
</tr>
<tr>
<td>3</td>
<td>Physics</td>
</tr>
</tbody>
</table>
<h6 id="d%E1%BA%A1ng-chu%E1%BA%A9n-boyce-codd-bcnf">D&#x1EA1;ng chu&#x1EA9;n Boyce-Codd (BCNF)</h6>
<p>C&#xE1;c b&#x1EA3;ng hi&#x1EC7;n t&#x1EA1;i &#x111;&#xE3; &#x111;&#x1EA1;t BCNF v&#xEC; m&#x1ECD;i ph&#x1EE5; thu&#x1ED9;c h&#xE0;m &#x111;&#x1EC1;u d&#x1EF1;a v&#xE0;o si&#xEA;u kh&#xF3;a.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[scp memo]]></title><description><![CDATA[<p>SCP command required the password of the remote system. In case you need to configure scp command in script and run with scheduler, you need to configure <a href="https://tecadmin.net/password-less-ssh-login-setup/">key based ssh login</a>.</p><ul><li>Use the following command to copy the folder from remote to local recursively</li></ul><!--kg-card-begin: markdown--><pre><code>scp -r user@remote.example.net:</code></pre>]]></description><link>https://blog.tmi-soft.com/ssh-memo/</link><guid isPermaLink="false">66518e1b60e96304841c53df</guid><dc:creator><![CDATA[Nguyễn Anh Tuấn]]></dc:creator><pubDate>Sat, 25 May 2024 07:10:07 GMT</pubDate><content:encoded><![CDATA[<p>SCP command required the password of the remote system. In case you need to configure scp command in script and run with scheduler, you need to configure <a href="https://tecadmin.net/password-less-ssh-login-setup/">key based ssh login</a>.</p><ul><li>Use the following command to copy the folder from remote to local recursively</li></ul><!--kg-card-begin: markdown--><pre><code>scp -r user@remote.example.net:/path/to/folder /path/to/local 
</code></pre>
<!--kg-card-end: markdown--><p>In case, SSH is running on a different port, use -P to define port number with the SCP command:		</p><!--kg-card-begin: markdown--><pre><code>scp -P 2222 -r user@remote.example.net:/path/to/folder /path/to/local
</code></pre>
<!--kg-card-end: markdown--><p>If the authentication is configured with a pem file. you can use the pem as below:</p><!--kg-card-begin: markdown--><pre><code>scp -i auth.pem -r user@remote.example.net:/path/to/folder /path/to/local
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Setter, Getter, và Kế Thừa trong Dart]]></title><description><![CDATA[<ol><li>Setter </li></ol><ul><li>l&#xE0; 1 ph&#x1B0;&#x1A1;ng th&#x1EE9;c gi&#xFA;p &#x111;&#x1EB7;t gi&#xE1; tr&#x1ECB; cho 1 thu&#x1ED9;c t&#xED;nh trong &#x111;&#x1ED1;i t&#x1B0;&#x1EE3;ng</li><li>&#x111;&#x1B0;&#x1EE3;c g&#x1ECD;i v&#xE0; s&#x1EED; d&#x1EE5;</li></ul>]]></description><link>https://blog.tmi-soft.com/function/</link><guid isPermaLink="false">65bb167660e96304841c3e4c</guid><dc:creator><![CDATA[Nguyễn Xuân Phúc]]></dc:creator><pubDate>Thu, 01 Feb 2024 10:30:00 GMT</pubDate><content:encoded><![CDATA[<ol><li>Setter </li></ol><ul><li>l&#xE0; 1 ph&#x1B0;&#x1A1;ng th&#x1EE9;c gi&#xFA;p &#x111;&#x1EB7;t gi&#xE1; tr&#x1ECB; cho 1 thu&#x1ED9;c t&#xED;nh trong &#x111;&#x1ED1;i t&#x1B0;&#x1EE3;ng</li><li>&#x111;&#x1B0;&#x1EE3;c g&#x1ECD;i v&#xE0; s&#x1EED; d&#x1EE5;ng v&#x1EDB;i t&#xEA;n l&#xE0; set</li></ul><pre><code class="language-dart">class Rectangle {
  double _width;

  set width(double value) {
    if (value &gt; 0) {
      _width = value;
    } else {
      print(&quot;Width should be greater than 0.&quot;);
    }
  }
}

void main() {
  Rectangle rectangle = Rectangle();
  rectangle.width = 10;  // G&#x1ECD;i setter &#x111;&#x1EC3; &#x111;&#x1EB7;t gi&#xE1; tr&#x1ECB; cho width.
}</code></pre><p>2. Getter</p><ul><li>l&#xE0; 1 ph&#x1B0;&#x1A1;ng th&#x1EE9;c gi&#xFA;p l&#x1EA5;y gi&#xE1; tr&#x1ECB; c&#x1EE7;a 1 thu&#x1ED9;c t&#xED;nh trong &#x111;&#x1ED1;i t&#x1B0;&#x1EE3;ng</li><li>&#x111;&#x1B0;&#x1EE3;c g&#x1ECD;i v&#xE0; s&#x1EED; d&#x1EE5;ng v&#x1EDB;i t&#xEA;n l&#xE0; get</li></ul><pre><code class="language-dart">class Rectangle {
  double _width;

  set width(double value) {
    if (value &gt; 0) {
      _width = value;
    } else {
      print(&quot;Width should be greater than 0.&quot;);
    }
  }

  double get width =&gt; _width;
}

void main() {
  Rectangle rectangle = Rectangle();
  rectangle.width = 10;
  print(rectangle.width);  // G&#x1ECD;i getter &#x111;&#x1EC3; l&#x1EA5;y gi&#xE1; tr&#x1ECB; c&#x1EE7;a width.
}</code></pre><p>3. K&#x1EBF; th&#x1EEB;a (extends)</p><ul><li>cho ph&#xE9;p 1 class con s&#x1EED; d&#x1EE5;ng l&#x1EA1;i c&#xE1;c ph&#x1B0;&#x1A1;ng th&#x1EE9;c v&#xE0; thu&#x1ED9;c t&#xED;nh c&#x1EE7;a class cha</li><li>Ngo&#xE0;i ra khi kh&#x1EDF;i t&#x1EA1;o 1 class con m&#xE0; mu&#x1ED1;n g&#x1ECD;i t&#x1EDB;i constructor c&#x1EE7;a class cha th&#xEC; c&#xF3; th&#x1EC3; s&#x1EED; d&#x1EE5;ng <strong>super</strong></li></ul><figure class="kg-card kg-code-card"><pre><code class="language-node">class Animal {
  String name;

  Animal(this.name);

  void speak() {
    print(&quot;Animal speaks&quot;);
  }
}

class Dog extends Animal {
  Dog(String name) : super(name);

  void bark() {
    print(&quot;Woof! Woof!&quot;);
  }

  // Override ph&#x1B0;&#x1A1;ng th&#x1EE9;c speak t&#x1EEB; l&#x1EDB;p cha.
  @override
  void speak() {
    print(&quot;Dog barks&quot;);
  }
}

void main() {
  Dog myDog = Dog(&quot;Buddy&quot;);
  myDog.bark();
  myDog.speak();  // G&#x1ECD;i ph&#x1B0;&#x1A1;ng th&#x1EE9;c speak c&#x1EE7;a l&#x1EDB;p con.
}</code></pre><figcaption>sample</figcaption></figure>]]></content:encoded></item><item><title><![CDATA[Cách khai báo biến và các kiểu dữ liệu trong ngôn ngữ lập trình Dart/Flutter]]></title><description><![CDATA[<p>I. T&#x1EEB; phi&#xEA;n b&#x1EA3;n dart 2.0, khi khai b&#xE1;o bi&#x1EBF;n c&#x1EA7;n ph&#x1EA3;i g&#xE1;n gi&#xE1; tr&#x1ECB; ngay t&#x1EEB; l&#xFA;c kh&#x1EDF;i t&#x1EA1;o. Nh&#x1B0;ng &#x111;&#x1EC3;</p>]]></description><link>https://blog.tmi-soft.com/datatype-in-dart/</link><guid isPermaLink="false">65bb0c8560e96304841c3e3c</guid><dc:creator><![CDATA[Nguyễn Xuân Phúc]]></dc:creator><pubDate>Thu, 01 Feb 2024 10:30:00 GMT</pubDate><content:encoded><![CDATA[<p>I. T&#x1EEB; phi&#xEA;n b&#x1EA3;n dart 2.0, khi khai b&#xE1;o bi&#x1EBF;n c&#x1EA7;n ph&#x1EA3;i g&#xE1;n gi&#xE1; tr&#x1ECB; ngay t&#x1EEB; l&#xFA;c kh&#x1EDF;i t&#x1EA1;o. Nh&#x1B0;ng &#x111;&#x1EC3; linh ho&#x1EA1;t h&#x1A1;n khi khai b&#xE1;o bi&#x1EBF;n th&#xEC; c&#xF3; th&#x1EC3; s&#x1EED; d&#x1EE5;ng &apos;?&apos; sau ki&#x1EC3;u d&#x1EEF; li&#x1EC7;u c&#x1EE7;a bi&#x1EBF;n &#x111;&#xF3; (v&#xED; d&#x1EE5;: int? a,... l&#xFA;c n&#xE0;y bi&#x1EBF;n a s&#x1EBD; nh&#x1EAD;n tr&#x1ECB; m&#x1EB7;c &#x111;&#x1ECB;nh l&#xE0; null)<br>II. C&#xE1;c ki&#x1EC3;u d&#x1EEF; li&#x1EC7;u</p><ol><li>int, double: int: ki&#x1EC3;u s&#x1ED1; nguy&#xEA;n v&#xE0; double: s&#x1ED1; th&#x1EF1;c (V&#xED; d&#x1EE5;: <code>int age = 25;</code>, <code>double pi = 3.14;</code>)</li></ol><p>2. String: Ki&#x1EC3;u <code>String</code> &#x111;&#x1B0;&#x1EE3;c s&#x1EED; d&#x1EE5;ng &#x111;&#x1EC3; l&#x1B0;u tr&#x1EEF; chu&#x1ED7;i k&#xFD; t&#x1EF1; (V&#xED; d&#x1EE5;: <code>String name = &quot;Dart&quot;;</code>)<br>3. bool: Ki&#x1EC3;u <code>bool</code> ch&#x1EC9; c&#xF3; hai gi&#xE1; tr&#x1ECB;: <code>true</code> ho&#x1EB7;c <code>false</code> (V&#xED; d&#x1EE5;: <code>bool isFlutterAwesome = true;</code>)<br>4. null: ki&#x1EC3;u <code>null</code> l&#xE0; gi&#xE1; tr&#x1ECB; kh&#xF4;ng t&#x1ED3;n t&#x1EA1;i ho&#x1EB7;c kh&#xF4;ng &#x111;&#x1B0;&#x1EE3;c kh&#x1EDF;i t&#x1EA1;o.<br>5. List: Ki&#x1EC3;u <code>List</code> gi&#x1ED1;ng v&#x1EDB;i m&#x1EA3;ng trong c&#xE1;c ng&#xF4;n ng&#x1EEF; kh&#xE1;c, c&#xF3; th&#x1EC3; ch&#x1EE9;a nhi&#x1EC1;u gi&#xE1; tr&#x1ECB; (V&#xED; d&#x1EE5;: <code>List&lt;int&gt; numbers = [1, 2, 3, 4, 5];</code>)<br>6. Set: Ki&#x1EC3;u <code>Set</code> l&#xE0; m&#x1ED9;t t&#x1EAD;p h&#x1EE3;p kh&#xF4;ng c&#xF3; th&#x1EE9; t&#x1EF1; v&#xE0; kh&#xF4;ng ch&#x1EE9;a c&#xE1;c ph&#x1EA7;n t&#x1EED; tr&#xF9;ng l&#x1EB7;p (V&#xED; d&#x1EE5;: <code>Set&lt;int&gt; uniqueNumbers = {1, 2, 3, 4, 5};</code>)<br>7. Map: Ki&#x1EC3;u <code>Map</code> gi&#x1ED1;ng nh&#x1B0; object c&#xF3; key v&#xE0; value (V&#xED; d&#x1EE5;: <code>Map&lt;String, String&gt; capitalCities = {&apos;Vietnam&apos;: &apos;Hanoi&apos;, &apos;USA&apos;: &apos;Washington D.C.&apos;};</code>)<br>8. Datetime: Ki&#x1EC3;u <code>Datetime</code> cho ph&#xE9;p bi&#x1EC3;u di&#x1EC5;n v&#xE0; x&#x1EED; l&#xFD; th&#x1EDD;i gian v&#xE0; ng&#xE0;y th&#xE1;ng (V&#xED; d&#x1EE5;: <code>DateTime now = DateTime.now();</code>)<br>9. dynamic: Ki&#x1EC3;u <code>dynamic</code> cho ph&#xE9;p bi&#x1EBF;n nh&#x1EAD;n b&#x1EA5;t k&#x1EF3; gi&#xE1; tr&#x1ECB; n&#xE0;o, nh&#x1B0;ng m&#xE0; ko n&#xEA;n l&#x1EA1;m d&#x1EE5;ng do l&#xE0; ko r&#xF5; v&#x1EC1; gi&#xE1; tr&#x1ECB; c&#x1EE7;a bi&#x1EBF;n &#x111;&#xF3; n&#xEA;n khi &#x111;&#x1ECD;c code s&#x1EBD; kh&#xF3; hi&#x1EC3;u<br>10. var: Ki&#x1EC3;u <code>var</code> gi&#x1ED1;ng v&#x1EDB;i Ki&#x1EC3;u <code>dynamic</code> khi khai b&#xE1;o m&#xE0; ch&#x1B0;a g&#xE1;n gi&#xE1; tr&#x1ECB;, c&#xF2;n khi &#x111;&#xE3; g&#xE1;n gi&#xE1; tr&#x1ECB; r&#x1ED3;i th&#xEC; bi&#x1EBF;n &#x111;&#xF3; s&#x1EBD; ch&#x1EC9; nh&#x1EAD;n nh&#x1EEF;ng gi&#xE1; tr&#x1ECB; kh&#xE1;c c&#xF9;ng v&#x1EDB;i ki&#x1EC3;u c&#x1EE7;a gi&#xE1; tr&#x1ECB; kh&#x1EDF;i t&#x1EA1;o</p>]]></content:encoded></item><item><title><![CDATA[State, Widget, StateFulWidget, StateLessWidget, Vòng đời của ứng dụng]]></title><description><![CDATA[<ol><li><strong><strong>Widget l&#xE0; g&#xEC; ?</strong></strong></li></ol><ul><li>C&#xE1;c m&#xE0;n h&#xEC;nh trong &#x1EE9;ng d&#x1EE5;ng Flutter &#x111;&#x1B0;&#x1EE3;c t&#x1EA1;o b&#x1EDF;i c&#xE1;c Widget l&#x1EAF;p gh&#xE9;p l&#x1EA1;i v&#x1EDB;i nhau.</li><li>Widget l&</li></ul>]]></description><link>https://blog.tmi-soft.com/state-widget-statefulwidget-statelesswidget-vong-doi-cua-ung-dung/</link><guid isPermaLink="false">65ba167b60e96304841c3dce</guid><dc:creator><![CDATA[Nguyễn Xuân Phúc]]></dc:creator><pubDate>Wed, 31 Jan 2024 09:58:25 GMT</pubDate><content:encoded><![CDATA[<ol><li><strong><strong>Widget l&#xE0; g&#xEC; ?</strong></strong></li></ol><ul><li>C&#xE1;c m&#xE0;n h&#xEC;nh trong &#x1EE9;ng d&#x1EE5;ng Flutter &#x111;&#x1B0;&#x1EE3;c t&#x1EA1;o b&#x1EDF;i c&#xE1;c Widget l&#x1EAF;p gh&#xE9;p l&#x1EA1;i v&#x1EDB;i nhau.</li><li>Widget l&#xE0; c&#xE1;c &#x201C;configuration object&#x201D; d&#xF9;ng &#x111;&#x1EC3; t&#x1EA1;o l&#xEA;n &#x1EE9;ng d&#x1EE5;ng Flutter. Nh&#x1B0; v&#x1EAD;y, T&#x1EA1;o &#x1EE9;ng d&#x1EE5;ng Flutter l&#xE0; t&#x1EA1;o c&#xE1;c Widget v&#xE0; li&#xEA;n k&#x1EBF;t ch&#xFA;ng l&#x1EA1;i v&#x1EDB;i nhau.</li></ul><figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2024/01/image.png" class="kg-image" alt loading="lazy" width="423" height="589"></figure><p><strong>2. <strong>State l&#xE0; g&#xEC;</strong>? </strong></p><ul><li>Trong Flutter, State l&#xE0; th&#xF4;ng tin v&#x1EC1; m&#x1ED9;t th&#x1EE9; g&#xEC; &#x111;&#xF3; &#x111;&#x1B0;&#x1EE3;c l&#x1B0;u trong b&#x1ED9; nh&#x1EDB;.</li><li>State &#x111;&#x1B0;&#x1EE3;c d&#xF9;ng theo 2 c&#xE1;ch &#x111;&#xF3; l&#xE0; StatelessWidget, StatefulWidget.</li></ul><p>	- <strong>StatelessWidget: </strong>l&#xE0; m&#x1ED9;t Widget c&#xF3; s&#x1EB5;n trong Flutter SDK, ch&#x1EC9; nh&#x1EAD;n d&#x1EEF; li&#x1EC7;u v&#xE0; hi&#x1EC3;n th&#x1ECB; d&#x1EEF; li&#x1EC7;u th&#x1EE5; &#x111;&#x1ED9;ng kh&#xF4;ng li&#xEA;n quan &#x111;&#x1EBF;n state.<br>Stateless trong Ti&#x1EBF;ng Anh ngh&#x129;a l&#xE0; : kh&#xF4;ng State hay kh&#xF4;ng tr&#x1EA1;ng th&#xE1;i. V&#x1EAD;y StatelessWidget c&#xF3; ngh&#x129;a l&#xE0; Widget kh&#xF4;ng State hay Widget kh&#xF4;ng tr&#x1EA1;ng th&#xE1;i.</p><p>	- <strong><strong>StatefulWidget</strong>: </strong>Tr&#xE1;i v&#x1EDB;i StatelessWidget th&#xEC; StatefulWidget l&#xE0; Widget c&#xF3; tr&#x1EA1;ng th&#xE1;i, c&#x169;ng l&#xE0; Widget c&#xF3; s&#x1EB5;n trong Flutter SDK.<br>Stateful c&#xF3; ngh&#x129;a l&#xE0; c&#xF3; State hay c&#xF3; tr&#x1EA1;ng th&#xE1;i. V&#x1EAD;y StatefulWidget c&#xF3; ngh&#x129;a l&#xE0; Widget c&#xF3; State hay Widget c&#xF3; tr&#x1EA1;ng th&#xE1;i.</p><p><strong>3. <strong>V&#xF2;ng &#x111;&#x1EDD;i &#x1EE9;ng d&#x1EE5;ng</strong></strong></p><ul><li><strong><strong>V&#xF2;ng &#x111;&#x1EDD;i &#x1EE9;ng d&#x1EE5;ng ch&#x1EC9; d&#xF9;ng StatelessWidget</strong></strong></li></ul><p>	- V&#xEC; ch&#x1EC9; s&#x1EED; d&#x1EE5;ng StatelessWidget, M&#xE0;n h&#xEC;nh &#x1EE9;ng d&#x1EE5;ng ch&#x1EC9; &#x111;&#x1A1;n thu&#x1EA7;n l&#xE0; nh&#x1EAD;n v&#xE0; hi&#x1EC3;n th&#x1ECB; d&#x1EEF; li&#x1EC7;u, kh&#xF4;ng li&#xEA;n quan &#x111;&#x1EBF;n State n&#xEA;n kh&#xF4;ng c&#xF3; v&#xF2;ng &#x111;&#x1EDD;i.</p><p> 	- Vi&#x1EC7;c ghi &#x111;&#xE8; (@ override ) ph&#x1B0;&#x1A1;ng th&#x1EE9;c build l&#xE0; d&#xF9;ng &#x111;&#x1EC3; render Graphic UI( user interface), hi&#x1EC3;n th&#x1ECB; l&#xEA;n m&#xE0;n h&#xEC;nh cho ng&#x1B0;&#x1EDD;i d&#xF9;ng.</p><ul><li><strong><strong>V&#xF2;ng &#x111;&#x1EDD;i s&#x1EED; d&#x1EE5;ng StatefulWidget</strong></strong></li></ul><p>	- X&#xE2;y d&#x1EF1;ng m&#xE0;n h&#xEC;nh &#x1EE9;ng d&#x1EE5;ng d&#xF9;ng StatefulWidget t&#x1EE9;c l&#xE0; li&#xEA;n quan &#x111;&#x1EBF;n vi&#x1EC7;c qu&#x1EA3;n l&#xFD; State. V&#xEC; v&#x1EAD;y n&#xF3; c&#x1EA7;n chu tr&#xEC;nh qu&#x1EA3;n l&#xFD; tr&#x1EA1;ng th&#xE1;i.</p><p>	- Trong m&#x1ED9;t v&#xF2;ng &#x111;&#x1EDD;i c&#xF3; 7 tr&#x1EA1;ng th&#xE1;i &#x111;&#xF3; l&#xE0; : createState, initState, didChangeDependences, build, didUpdateWidget, deactive, dispose.</p><p>	- Chi ti&#x1EBF;t v&#x1EC1; 7 tr&#x1EA1;ng th&#xE1;i: </p><p><strong>		<strong>+ createState</strong>: </strong>Khi t&#x1EA1;o class k&#x1EBF; th&#x1EEB;a &#x111;&#x1EBF;n StatefulWidget, h&#xE0;m kh&#x1EDF;i t&#x1EA1;o s&#x1EBD; &#x111;&#x1B0;&#x1EE3;c y&#xEA;u c&#x1EA7;u g&#x1ECD;i &#x111;&#x1EA7;u ti&#xEA;n, b&#x1EB1;ng c&#xE1;ch ghi &#x111;&#xE8; ph&#x1B0;&#x1A1;ng th&#x1EE9;c createState.</p><p>		<strong><strong>+ initState()</strong>: </strong>H&#xE0;m n&#xE0;y &#x111;&#x1B0;&#x1EE3;c g&#x1ECD;i ngay khi widget &#x111;&#x1B0;&#x1EE3;c t&#x1EA1;o </p><p>		<strong><strong>+ didChangeDependencies()</strong>: </strong>H&#xE0;m &#x111;&#x1B0;&#x1EE3;c g&#x1ECD;i ngay sau h&#xE0;m initState() v&#xE0; &#x111;&#x1B0;&#x1EE3;c g&#x1ECD;i l&#x1EA1;i khi dependency c&#x1EE7;a State thay &#x111;&#x1ED5;i.</p><p>		+ <strong><strong>build()</strong>: </strong>H&#xE0;m n&#xE0;y &#x111;&#x1B0;&#x1EE3;c g&#x1ECD;i sau didChangeDependencies(). T&#x1EA5;t c&#x1EA3; graphic UI (User Interface) s&#x1EBD; &#x111;&#x1B0;&#x1EE3;c render trong h&#xE0;m n&#xE0;y.</p><p>		<strong><strong>+ didUpdateWidget</strong>: </strong>H&#xE0;m n&#xE0;y &#x111;&#x1B0;&#x1EE3;c g&#x1ECD;i khi Widget configuration thay &#x111;&#x1ED5;i. Sau khi h&#xE0;m n&#xE0;y &#x111;&#x1B0;&#x1EE3;c g&#x1ECD;i th&#xEC; h&#xE0;m build s&#x1EBD; &#x111;&#x1B0;&#x1EE3;c g&#x1ECD;i, nh&#x1B0; v&#x1EAD;y h&#xE0;m setState &#x111;&#x1B0;&#x1EE3;c s&#x1EED; d&#x1EE5;ng trong h&#xE0;m didUpdateWidget s&#x1EBD; b&#x1ECB; b&#x1ECF; qua.</p><p>		<strong><strong>+ deactivate()</strong>: </strong>H&#xE0;m n&#xE0;y &#x111;&#x1B0;&#x1EE3;c g&#x1ECD;i khi State b&#x1ECB; g&#x1EE1; kh&#x1ECF;i c&#xE2;y widget nh&#x1B0;ng n&#xF3; c&#xF3; th&#x1EC3; x&#xE1;c nh&#x1EAD;n l&#x1EA1;i tr&#x1B0;&#x1EDB;c khi qu&#xE1; tr&#xEC;nh xo&#xE1; k&#x1EBF;t th&#xFA;c.</p><p>		<strong><strong>+ dispose()</strong>: </strong>H&#xE0;m n&#xE0;y &#x111;&#x1B0;&#x1EE3;c g&#x1ECD;i khi State b&#x1ECB; g&#x1EE1; ngay l&#x1EAD;p t&#x1EE9;c kh&#x1ECF;i c&#xE2;y widget v&#xE0; khi &#x111;&#xF3; State kh&#xF4;ng bao gi&#x1EDD; &#x111;&#x1B0;&#x1EE3;c build tr&#x1EDF; l&#x1EA1;i.</p><p><strong><strong>Nh&#x1EEF;ng k&#x1EBF;t lu&#x1EAD;n quan tr&#x1ECD;ng c&#xE1;c b&#x1EA1;n n&#xEA;n nh&#x1EDB;:</strong></strong><br>+ C&#xE1;c m&#xE0;n h&#xEC;nh &#x1EE9;ng d&#x1EE5;ng Flutter &#x111;&#x1B0;&#x1EE3;c t&#x1EA1;o b&#x1EDF;i c&#xE1;c Widget<br>+ H&#xE0;m setState trong class k&#x1EBF; th&#x1EEB;a StatefulWidget , gi&#xFA;p set l&#x1EA1;i State v&#xE0; build l&#x1EA1;i m&#xE0;n h&#xEC;nh m&#x1ED7;i khi &#x111;&#x1B0;&#x1EE3;c g&#x1ECD;i &#x111;&#x1EBF;n.<br>+ StatelessWidget &#x2013; class k&#x1EBF; th&#x1EEB;a Widget n&#xE0;y, ch&#x1EC9; nh&#x1EAD;n v&#xE0; hi&#x1EC3;n th&#x1ECB; d&#x1EEF; li&#x1EC7;u &#x111;&#x1A1;n thu&#x1EA7;n kh&#xF4;ng li&#xEA;n quan &#x111;&#x1EBF;n state v&#xE0; kh&#xF4;ng c&#xF3; v&#xF2;ng &#x111;&#x1EDD;i.<br>+ StatefulWidget &#x2013; class k&#x1EBF; th&#x1EEB;a Widget n&#xE0;y &#x111;&#x1EC3; t&#x1EA1;o m&#xE0;n h&#xEC;nh &#x1EE9;ng d&#x1EE5;ng c&#xF3; v&#xF2;ng &#x111;&#x1EDD;i g&#x1ED3;m 7 tr&#x1EA1;ng th&#xE1;i l&#xE0; : createState, initState, didChangeDependencies, build, didUpdateWidget, deactivate, dispose.</p>]]></content:encoded></item><item><title><![CDATA[Pipenv Crash Course]]></title><description><![CDATA[<p></p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/6Qmnh5C4Pmo?start=1&amp;feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="Pipenv Crash Course"></iframe></figure><p>Before I used virtualenv to create virtual env. The command set as below:</p><pre><code># install virtualenv
pip install virtualenv

# create new virtual env
virtualenv venv --python=python3.9 

# activate virtual env
source env/bin/activate

# dump current packages to .txt file
pip freeze &gt; requirement.txt

# install packages from .txt file</code></pre>]]></description><link>https://blog.tmi-soft.com/pipenv-crash-course/</link><guid isPermaLink="false">65a040a860e96304841c3d4f</guid><dc:creator><![CDATA[maximus]]></dc:creator><pubDate>Thu, 11 Jan 2024 19:41:57 GMT</pubDate><content:encoded><![CDATA[<p></p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/6Qmnh5C4Pmo?start=1&amp;feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen title="Pipenv Crash Course"></iframe></figure><p>Before I used virtualenv to create virtual env. The command set as below:</p><pre><code># install virtualenv
pip install virtualenv

# create new virtual env
virtualenv venv --python=python3.9 

# activate virtual env
source env/bin/activate

# dump current packages to .txt file
pip freeze &gt; requirement.txt

# install packages from .txt file
pip install -r requirement.txt

# exit virtual env
exit
</code></pre><p></p><p>Another simple way to create python <strong>virtualenv</strong>:</p><pre><code>pip3 install pipenv</code></pre><pre><code>pipenv --python 3.10</code></pre><p>A Pipfile will be created as below:</p><pre><code>[[source]]
url = &quot;https://pypi.org/simple&quot;
verify_ssl = true
name = &quot;pypi&quot;

[packages]

[dev-packages]

[requires]
python_version = &quot;3.10&quot;
python_full_version = &quot;3.10.13&quot;
</code></pre><h2 id="activate">Activate</h2><pre><code>pipenv shell</code></pre><h2 id="install-a-package">Install a package</h2><pre><code>pipenv install camelcase
</code></pre><h2 id="uninstall-a-package">Uninstall a package</h2><pre><code>pipenv uninstall camelcase
pipenv install openai==&apos;0.28.1&apos;</code></pre><h2 id="re-install-all-packages-from-pipfile">Re-install all packages from Pipfile</h2><pre><code>pipenv install</code></pre><h2 id="check-local-packages">Check local packages</h2><pre><code>pipenv lock -r</code></pre><h2 id="set-lock-filebefore-deployment">Set lock file - before deployment</h2><pre><code>pipenv lock
</code></pre><h2 id="exit-virtual-env">Exit virtual env</h2><pre><code>exit
</code></pre><h2 id="remove-the-current-virtual-env">Remove the current virtual env</h2><pre><code>pipenv --rm</code></pre><p><br></p><p><br></p>]]></content:encoded></item><item><title><![CDATA[Login/Register In Laravel (Authentication)]]></title><description><![CDATA[<ol><li><strong>kh&#xE1;i ni&#x1EC7;m c&#x1A1; b&#x1EA3;n</strong></li></ol><!--kg-card-begin: markdown--><ul>
<li>Authentication trong Laravel l&#xE0; qu&#xE1; tr&#xEC;nh x&#xE1;c &#x111;&#x1ECB;nh v&#xE0; x&#xE1;c th&#x1EF1;c danh t&#xED;nh c&#x1EE7;a ng&#x1B0;&#x1EDD;i d&#xF9;ng trong</li></ul>]]></description><link>https://blog.tmi-soft.com/authentication-in-laravel/</link><guid isPermaLink="false">6520700d60e96304841c3c6f</guid><dc:creator><![CDATA[TuanPham]]></dc:creator><pubDate>Sat, 07 Oct 2023 02:20:00 GMT</pubDate><content:encoded><![CDATA[<ol><li><strong>kh&#xE1;i ni&#x1EC7;m c&#x1A1; b&#x1EA3;n</strong></li></ol><!--kg-card-begin: markdown--><ul>
<li>Authentication trong Laravel l&#xE0; qu&#xE1; tr&#xEC;nh x&#xE1;c &#x111;&#x1ECB;nh v&#xE0; x&#xE1;c th&#x1EF1;c danh t&#xED;nh c&#x1EE7;a ng&#x1B0;&#x1EDD;i d&#xF9;ng trong &#x1EE9;ng d&#x1EE5;ng web Laravel. N&#xF3; gi&#xFA;p &#x111;&#x1EA3;m b&#x1EA3;o r&#x1EB1;ng ng&#x1B0;&#x1EDD;i d&#xF9;ng ch&#x1EC9; c&#xF3; quy&#x1EC1;n truy c&#x1EAD;p v&#xE0;o c&#xE1;c ph&#x1EA7;n c&#x1EE7;a &#x1EE9;ng d&#x1EE5;ng m&#xE0; h&#x1ECD; &#x111;&#x1B0;&#x1EE3;c &#x1EE7;y quy&#x1EC1;n v&#xE0; b&#x1EA3;o v&#x1EC7; c&#xE1;c t&#xE0;i kho&#x1EA3;n ng&#x1B0;&#x1EDD;i d&#xF9;ng kh&#x1ECF;i vi&#x1EC7;c truy c&#x1EAD;p tr&#xE1;i ph&#xE9;p.</li>
</ul>
<!--kg-card-end: markdown--><p><strong>2. C&#xE1;c t&#xED;nh n&#x103;ng c&#x1EE7;a Authentication trong laravel</strong></p><!--kg-card-begin: markdown--><blockquote>
<p><strong>X&#xE1;c th&#x1EF1;c</strong>: Laravel cung c&#x1EA5;p c&#xE1;c ph&#x1B0;&#x1A1;ng th&#x1EE9;c &#x111;&#x1A1;n gi&#x1EA3;n &#x111;&#x1EC3; x&#xE1;c th&#x1EF1;c ng&#x1B0;&#x1EDD;i d&#xF9;ng b&#x1EB1;ng c&#xE1;ch s&#x1EED; d&#x1EE5;ng email v&#xE0; m&#x1EAD;t kh&#x1EA9;u ho&#x1EB7;c th&#xF4;ng qua x&#xE1;c th&#x1EF1;c OAuth, Socialite, v&#xE0; nhi&#x1EC1;u d&#x1ECB;ch v&#x1EE5; x&#xE1;c th&#x1EF1;c kh&#xE1;c.</p>
</blockquote>
<blockquote>
<p><strong>Qu&#x1EA3;n l&#xFD; phi&#xEA;n</strong>: Laravel qu&#x1EA3;n l&#xFD; phi&#xEA;n ng&#x1B0;&#x1EDD;i d&#xF9;ng m&#x1ED9;t c&#xE1;ch d&#x1EC5; d&#xE0;ng. B&#x1EA1;n c&#xF3; th&#x1EC3; l&#x1B0;u tr&#x1EEF; th&#xF4;ng tin phi&#xEA;n ng&#x1B0;&#x1EDD;i d&#xF9;ng v&#xE0; ki&#x1EC3;m tra phi&#xEA;n ng&#x1B0;&#x1EDD;i d&#xF9;ng hi&#x1EC7;n t&#x1EA1;i &#x111;&#x1EC3; x&#xE1;c &#x111;&#x1ECB;nh xem h&#x1ECD; &#x111;&#xE3; &#x111;&#x103;ng nh&#x1EAD;p hay ch&#x1B0;a.</p>
</blockquote>
<blockquote>
<p><strong>B&#x1EA3;o v&#x1EC7; Route v&#xE0; Middleware</strong>: B&#x1EA1;n c&#xF3; th&#x1EC3; x&#xE1;c &#x111;&#x1ECB;nh middleware &#x111;&#x1EC3; b&#x1EA3;o v&#x1EC7; c&#xE1;c route v&#xE0; ph&#x1EA7;n c&#x1EE7;a &#x1EE9;ng d&#x1EE5;ng, ch&#x1EC9; cho ph&#xE9;p ng&#x1B0;&#x1EDD;i d&#xF9;ng &#x111;&#xE3; x&#xE1;c th&#x1EF1;c truy c&#x1EAD;p.</p>
</blockquote>
<blockquote>
<p><strong>T&#x1EA1;o v&#xE0; Qu&#x1EA3;n l&#xFD; T&#xE0;i kho&#x1EA3;n Ng&#x1B0;&#x1EDD;i d&#xF9;ng</strong>: Laravel cung c&#x1EA5;p c&#xE1;c c&#xF4;ng c&#x1EE5; m&#x1EA1;nh m&#x1EBD; &#x111;&#x1EC3; qu&#x1EA3;n l&#xFD; t&#xE0;i kho&#x1EA3;n ng&#x1B0;&#x1EDD;i d&#xF9;ng nh&#x1B0; t&#x1EA1;o, c&#x1EAD;p nh&#x1EAD;t, x&#xF3;a t&#xE0;i kho&#x1EA3;n, v&#xE0; qu&#x1EA3;n l&#xFD; vai tr&#xF2; v&#xE0; quy&#x1EC1;n h&#x1EA1;n.</p>
</blockquote>
<blockquote>
<p><strong>G&#x1EED;i Email X&#xE1;c th&#x1EF1;c</strong>: Laravel gi&#xFA;p b&#x1EA1;n g&#x1EED;i email x&#xE1;c th&#x1EF1;c cho ng&#x1B0;&#x1EDD;i d&#xF9;ng sau khi h&#x1ECD; &#x111;&#x103;ng k&#xFD; ho&#x1EB7;c y&#xEA;u c&#x1EA7;u &#x111;&#x1EB7;t l&#x1EA1;i m&#x1EAD;t kh&#x1EA9;u.</p>
</blockquote>
<blockquote>
<p><strong>B&#x1EA3;o v&#x1EC7; m&#x1EAD;t kh&#x1EA9;u</strong>: Laravel t&#x1EF1; &#x111;&#x1ED9;ng m&#xE3; h&#xF3;a m&#x1EAD;t kh&#x1EA9;u ng&#x1B0;&#x1EDD;i d&#xF9;ng v&#xE0; cung c&#x1EA5;p c&#xE1;c c&#x1A1; ch&#x1EBF; b&#x1EA3;o v&#x1EC7; &#x111;&#x1EC3; &#x111;&#x1EA3;m b&#x1EA3;o r&#x1EB1;ng m&#x1EAD;t kh&#x1EA9;u &#x111;&#x1B0;&#x1EE3;c l&#x1B0;u tr&#x1EEF; an to&#xE0;n.</p>
</blockquote>
<blockquote>
<p><strong>Ki&#x1EC3;m tra X&#xE1;c th&#x1EF1;c</strong>: B&#x1EA1;n c&#xF3; th&#x1EC3; ki&#x1EC3;m tra xem ng&#x1B0;&#x1EDD;i d&#xF9;ng &#x111;&#xE3; &#x111;&#x103;ng nh&#x1EAD;p hay ch&#x1B0;a th&#xF4;ng qua c&#xE1;c ph&#x1B0;&#x1A1;ng th&#x1EE9;c d&#x1EC5; d&#xE0;ng truy c&#x1EAD;p trong Laravel.</p>
</blockquote>
<!--kg-card-end: markdown--><p><strong>3. T&#x1EA1;o &#x111;&#x103;ng k&#xFD;, &#x111;&#x103;ng nh&#x1EAD;p trong laravel</strong></p><!--kg-card-begin: markdown--><ul>
<li>Trong laravel h&#x1ED7; tr&#x1EE3; ng&#x1B0;&#x1EDD;i d&#xF9;ng t&#x1EA1;o nhanh ch&#x1EE9;c n&#x103;ng &#x111;&#x103;ng k&#xFD; &#x111;&#x103;ng nh&#x1EAD;p v&#xE0; x&#xE1;c th&#x1EF1;c ng&#x1B0;&#x1EDD;i d&#xF9;ng gi&#xFA;p tri&#x1EC3;n khai authentication &#x111;&#x1B0;&#x1EE3;c nhanh ch&#xF3;ng</li>
</ul>
<!--kg-card-end: markdown--><hr><!--kg-card-begin: markdown--><p>B&#x1B0;&#x1EDB;c 1: t&#x1EA1;o m&#x1ED9;t project m&#x1EDB;i  <code>composer create-project laravel/laravel login_tutorial</code></p>
<blockquote>
<p>khi t&#x1EA1;o 1 project m&#x1EDB;i laravel s&#x1EBD; t&#x1EF1; t&#x1EA1;o ra c&#xE1;c file c&#x1EA7;n thi&#x1EBF;t trong model, config, views , database.</p>
</blockquote>
<p>B&#x1B0;&#x1EDB;c 2: C&#xE0;i &#x111;&#x1EB7;t c&#xE1;c g&#xF3;i laravel/ui b&#x1EB1;ng l&#x1EC7;nh <code> composer require laravel/ui</code></p>
<p>B&#x1B0;&#x1EDB;c 3: trong t&#x1EC7;p <code>.env</code> &#x111;&#x1ED5;i t&#xEA;n database v&#xE0; ch&#x1EA1;y l&#x1EC7;nh <code>php artisan ui vue --auth</code>  trong terminal &#x111;&#x1EC3; th&#x1EF1;c hi&#x1EC7;n t&#x1EA1;o b&#x1EA3;ng trong database v&#xE0;  giao di&#x1EC7;n hi&#x1EC3;n th&#x1ECB;  trong th&#x1B0; m&#x1EE5;c <strong>views/auth</strong></p>
<p><strong>l&#x1B0;u &#xFD;</strong> : c&#xE0;i &#x111;&#x1EB7;t  <code>npm install</code> v&#xE0; ch&#x1EA1;y nodejs b&#x1EB1;ng l&#x1EC7;nh <code>npm run dev</code> tr&#x1B0;&#x1EDB;c khi ch&#x1EA1;y l&#x1EC7;nh <code>php artisan ui vue --auth</code></p>
<p>B&#x1B0;&#x1EDB;c 4: ch&#x1EA1;y l&#x1EC7;nh  php artisan serve v&#xE0; m&#x1EDF; &#x111;&#x1B0;&#x1EDD;ng d&#x1EAB;n <code>http://127.0.0.1:8000/login</code> &#x111;&#x1EC3; m&#x1EDF; form &#x111;&#x103;ng nh&#x1EAD;p...</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2023/10/form-login.png" class="kg-image" alt loading="lazy" width="1449" height="583" srcset="https://blog.tmi-soft.com/content/images/size/w600/2023/10/form-login.png 600w, https://blog.tmi-soft.com/content/images/size/w1000/2023/10/form-login.png 1000w, https://blog.tmi-soft.com/content/images/2023/10/form-login.png 1449w" sizes="(min-width: 720px) 720px"></figure><!--kg-card-begin: html--><p style="text-align: center"> Giao di&#x1EC7;n hi&#x1EC3;n th&#x1ECB; s&#x1EBD; nh&#x1B0; tr&#xEA;n. </p><!--kg-card-end: html--><ul><li>N&#x1EBF;u b&#x1EA1;n mu&#x1ED1;n d&#xF9;ng bootstrap &#x111;&#x1EC3; t&#x1EA1;o l&#x1EA1;i giao di&#x1EC7;n b&#x1EA1;n c&#xF3; th&#x1EC3; ch&#x1EA1;y l&#x1EC7;nh :</li></ul><!--kg-card-begin: markdown--><p><code>php artisan ui bootstrap</code> v&#xE0; l&#x1EC7;nh <code>php artisan ui bootstrap --auth</code> &#x111;&#x1EC3; t&#x1EA1;o giao di&#x1EC7;n hi&#x1EC3;n th&#x1ECB; b&#x1EB1;ng bootstrap<br>
=&gt; l&#x1EC7;nh n&#xE0;y s&#x1EBD; thay th&#x1EBF; cho l&#x1EC7;nh <code>php artisan ui vue --auth</code> &#x1EDF; b&#x1B0;&#x1EDB;c 3**</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Cách đặt tên trong laravel]]></title><description><![CDATA[<p><strong>1. &#x110;&#x1EB7;t t&#xEA;n controller/model</strong></p><!--kg-card-begin: markdown--><ul>
<li>&#x111;&#x1EB7;t t&#xEA;n file cho model v&#xE0; controller gi&#x1ED1;ng nhau, &#x111;&#x1EC1;u &#x1EDF; d&#x1EA1;ng CapitalCase/PascalCase. T&#xEA;n &#x111;&#x1EB7;t ph&#x1EA3;i &#x1EDF; d&#x1EA1;ng s&#x1ED1; &#xED;</li></ul>]]></description><link>https://blog.tmi-soft.com/cach-dat-ten-trong-laravel/</link><guid isPermaLink="false">6520645760e96304841c3b48</guid><dc:creator><![CDATA[TuanPham]]></dc:creator><pubDate>Sat, 07 Oct 2023 01:30:00 GMT</pubDate><content:encoded><![CDATA[<p><strong>1. &#x110;&#x1EB7;t t&#xEA;n controller/model</strong></p><!--kg-card-begin: markdown--><ul>
<li>&#x111;&#x1EB7;t t&#xEA;n file cho model v&#xE0; controller gi&#x1ED1;ng nhau, &#x111;&#x1EC1;u &#x1EDF; d&#x1EA1;ng CapitalCase/PascalCase. T&#xEA;n &#x111;&#x1EB7;t ph&#x1EA3;i &#x1EDF; d&#x1EA1;ng s&#x1ED1; &#xED;t , vi&#x1EBF;t hoa ch&#x1EEF; c&#xE1;i &#x111;&#x1EA7;u , kh&#xF4;ng c&#xF3; kho&#x1EA3;ng c&#xE1;ch v&#xE0; n&#x1EBF;u &#x111;&#x1EB7;t t&#xEA;n cho controller th&#xEC; n&#xEA;n k&#x1EBF;t th&#xFA;c b&#x1EB1;ng &#x111;u&#xF4;i &quot;Controller&quot;</li>
</ul>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p>v&#xED; d&#x1EE5;: <code>ProductController</code>, <code>Product</code> , <code>User</code></p>
<ul>
<li>&#x110;&#x1EB7;t t&#xEA;n ph&#x1B0;&#x1A1;ng th&#x1EE9;c trong <strong>controller</strong></li>
</ul>
<ul>
<li>c&#xE1;c ph&#x1B0;&#x1A1;ng th&#x1EE9;c &#x111;&#x1EC3; th&#x1EF1;c hi&#x1EC7;n CRUD n&#xEA;n &#x111;&#x1EB7;t theo t&#xEA;n ph&#x1B0;&#x1A1;ng th&#x1EE9;c &#x111;&#x1ECB;nh s&#x1EB5;n trong laravel. c&#xF3; th&#x1EC3; th&#xEA;m &#x111;u&#xF4;i <code>--resource</code> trong khi t&#x1EA1;o file controller &#x1EDF; terminal &#x111;&#x1EC3; t&#x1EF1; &#x111;&#x1ED9;ng t&#x1EA1;o ra c&#xE1;c ph&#x1B0;&#x1A1;ng th&#x1EE9;c th&#x1B0;&#x1A1;ng &#x1EE9;ng &#x111;&#x1EC3; th&#x1EF1;c hi&#x1EC7;n th&#xEA;m, s&#x1EED;a, x&#xF3;a c&#x1A1; b&#x1EA3;n ...<br>
=&gt; khi &#x111;&#xF3; s&#x1EBD; t&#x1EA1;o ra c&#xE1;c method nh&#x1B0; <code>index,store, create, update,edit,destroy</code></li>
</ul>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p><strong>2. &#x110;&#x1EB7;t t&#xEA;n Database trong laravel</strong></p>
<!--kg-card-end: markdown--><p><em>2.1 &#x110;&#x1EB7;t t&#xEA;n b&#x1EA3;ng</em></p><!--kg-card-begin: markdown--><ul>
<li>&#x111;&#x1EB7;t t&#xEA;n &#x1EDF; d&#x1EA1;ng ch&#x1EEF; th&#x1B0;&#x1EDD;ng, c&#xF3; d&#x1EA5;u g&#x1EA1;ch d&#x1B0;&#x1EDB;i &#x111;&#x1EC3; ph&#xE2;n c&#xE1;ch ch&#x1EEF; c&#xE1;i  v&#xE0; ph&#x1EA3;i &#x1EDF; d&#x1EA1;ng s&#x1ED1; nhi&#x1EC1;u (snake case)</li>
</ul>
<!--kg-card-end: markdown--><p>v&#xED; d&#x1EE5;: <strong>categories , products , uploaded_images,...</strong></p><p><em>2.2 &#x110;&#x1EB7;t t&#xEA;n c&#x1ED9;t</em></p><!--kg-card-begin: markdown--><ul>
<li>t&#xEA;n &#x111;&#x1EB7;t ph&#x1EA3;i vi&#x1EBF;t th&#x1B0;&#x1EDD;ng , ph&#x1EA3;i &#x1EDF; d&#x1EA1;ng snake_case v&#xE0; l&#xE0; s&#x1ED1; &#xED;t</li>
</ul>
<!--kg-card-end: markdown--><p>2.3 &#x110;&#x1EB7;t t&#xEA;n kh&#xF3;a ch&#xED;nh / kh&#xF3;a ngo&#x1EA1;i</p><!--kg-card-begin: markdown--><ul>
<li>n&#x1EBF;u l&#xE0; kh&#xF3;a ch&#xED;nh s&#x1EBD; &#x111;&#x1EB7;t l&#xE0; <code>id</code></li>
<li>c&#xF2;n kh&#xF3;a ngo&#x1EA1;i s&#x1EBD; th&#xEA;m <code>_id</code><br>
v&#xED; d&#x1EE5;: <code>product_id</code> , <code>category_id</code> , ...</li>
</ul>
<!--kg-card-end: markdown--><p><strong>3. &#x110;&#x1EB7;t t&#xEA;n bi&#x1EBF;n</strong></p><!--kg-card-begin: markdown--><ul>
<li>t&#xEA;n bi&#x1EBF;n s&#x1EBD; &#x111;&#x1EB7;t th&#x1B0;&#x1EDD;ng &#x1EDF; d&#x1EA1;ng CamelCase. C&#x1EE5; th&#x1EC3; l&#xE0;  k&#xFD; t&#x1EF1; &#x111;&#x1EA7;u ti&#xEA;n  l&#xE0; ch&#x1EEF; th&#x1B0;&#x1EDD;ng , k&#xFD; t&#x1EF1; b&#x1EAF;t &#x111;&#x1EA7;u &#x1EDF; ch&#x1EEF; ti&#x1EBF;p theo l&#xE0; ch&#x1EEF; hoa<br>
v&#xED; d&#x1EE5;: <code>users</code> , <code>totalCount</code>, <code>itemPrice</code> , ...</li>
</ul>
<!--kg-card-end: markdown--><p><strong>4. &#x110;&#x1EB7;t t&#xEA;n Route trong laravel</strong></p><ul><li><strong>D&#xF9;ng t&#xEA;n r&#xF5; r&#xE0;ng v&#xE0; m&#xF4; t&#x1EA3;</strong>: &#x110;&#x1EB7;t t&#xEA;n sao cho n&#xF3; m&#xF4; t&#x1EA3; m&#x1EE5;c &#x111;&#xED;ch ho&#x1EB7;c ch&#x1EE9;c n&#x103;ng c&#x1EE7;a route. S&#x1EED; d&#x1EE5;ng t&#xEA;n r&#xF5; r&#xE0;ng v&#xE0; d&#x1EC5; hi&#x1EC3;u &#x111;&#x1EC3; gi&#xFA;p ng&#x1B0;&#x1EDD;i &#x111;&#x1ECD;c review code</li><li><strong>S&#x1EED; d&#x1EE5;ng phong c&#xE1;ch &#x111;&#x1EB7;t t&#xEA;n th&#x1ED1;ng nh&#x1EA5;t</strong></li><li><strong>Tr&#xE1;nh s&#x1EED; d&#x1EE5;ng k&#xFD; t&#x1EF1; &#x111;&#x1EB7;c bi&#x1EC7;t v&#xE0; d&#x1EA5;u c&#xE1;ch</strong>: T&#xEA;n route n&#xEA;n ch&#x1EC9; bao g&#x1ED3;m ch&#x1EEF; c&#xE1;i, s&#x1ED1;, d&#x1EA5;u g&#x1EA1;ch d&#x1B0;&#x1EDB;i (_) ho&#x1EB7;c d&#x1EA5;u g&#x1EA1;ch ngang (-) m&#xE0; kh&#xF4;ng s&#x1EED; d&#x1EE5;ng c&#xE1;c k&#xFD; t&#x1EF1; &#x111;&#x1EB7;c bi&#x1EC7;t ho&#x1EB7;c d&#x1EA5;u c&#xE1;ch.</li><li><strong>Ch&#xFA; &#xFD; &#x111;&#x1EBF;n s&#x1EF1; nh&#x1EA5;t qu&#xE1;n</strong>: &#x110;&#x1EA3;m b&#x1EA3;o r&#x1EB1;ng c&#xE1;c route trong d&#x1EF1; &#xE1;n c&#x1EE7;a b&#x1EA1;n c&#xF3; t&#xEA;n &#x111;&#x1EB7;t theo m&#x1ED9;t quy t&#x1EAF;c nh&#x1EA5;t qu&#xE1;n &#x111;&#x1EC3; d&#x1EC5; d&#xE0;ng qu&#x1EA3;n l&#xFD; v&#xE0; b&#x1EA3;o tr&#xEC; m&#xE3; ngu&#x1ED3;n.</li><li><strong>Ki&#x1EC3;m tra tr&#xF9;ng t&#xEA;n</strong>: &#x110;&#x1EA3;m b&#x1EA3;o r&#x1EB1;ng kh&#xF4;ng c&#xF3; tr&#xF9;ng l&#x1EB7;p t&#xEA;n route trong d&#x1EF1; &#xE1;n c&#x1EE7;a b&#x1EA1;n. Trong laravel y&#xEA;u c&#x1EA7;u t&#xEA;n route l&#xE0; duy nh&#x1EA5;t.</li></ul><!--kg-card-begin: html-->   <br>V&#xED; d&#x1EE5;:
<br><code>Route::get(&apos;/profile&apos;, [ProfileController, &apos;index&apos;])-&gt;name(&apos;profile.index&apos;);</code>
   <br>   <br>
// S&#x1EED; d&#x1EE5;ng snake_case <br>
<code>Route::get(&apos;/user-profile&apos;, [ProfileController, &apos;index&apos;])-&gt;name(&apos;profile.index&apos;);</code>
   <br>
<!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[Buổi 1: Tìm hiểu về Git flow]]></title><description><![CDATA[<p><strong><em>1. Git flow l&#xE0; g&#xEC;?</em></strong></p><p>L&#xE0; m&#xF4; h&#xEC;nh ph&#xE2;n nh&#xE1;nh git thay th&#x1EBF; li&#xEA;n quan t&#x1EDB;i vi&#x1EC7;c s&#x1EED; d&#x1EE5;ng c&#xE1;c t&#xED;nh n&#x103;ng v&#xE0;</p>]]></description><link>https://blog.tmi-soft.com/buoi-1-tim-hieu-ve-git/</link><guid isPermaLink="false">6520602860e96304841c3aca</guid><dc:creator><![CDATA[TuanPham]]></dc:creator><pubDate>Fri, 06 Oct 2023 23:50:00 GMT</pubDate><content:encoded><![CDATA[<p><strong><em>1. Git flow l&#xE0; g&#xEC;?</em></strong></p><p>L&#xE0; m&#xF4; h&#xEC;nh ph&#xE2;n nh&#xE1;nh git thay th&#x1EBF; li&#xEA;n quan t&#x1EDB;i vi&#x1EC7;c s&#x1EED; d&#x1EE5;ng c&#xE1;c t&#xED;nh n&#x103;ng v&#xE0; nhi&#x1EC1;u nh&#xE1;nh ch&#xED;nh nh&#x1EB1;m &#x111;&#x1A1;n gi&#x1EA3;n h&#xF3;a vi&#x1EC7;c qu&#x1EA3;n l&#xFD; ph&#xE1;t h&#xE0;nh.</p><p>Git-Flow g&#x1ED3;m c&#xF3; 2 nh&#xE1;nh ch&#xED;nh l&#xE0; Master v&#xE0; Develop v&#xE0; 3 nh&#xE1;nh Ph&#x1EE5; g&#x1ED3;m: Feature, Release,HotFix</p><p><strong><em>2. C&#xE1;c l&#x1EC7;nh c&#x1A1; b&#x1EA3;n trong git</em></strong></p><blockquote>	 git init : &#xA0;&#x111;&#x1EC3; kh&#x1EDF;i t&#x1EA1;o m&#x1ED9;t kho ch&#x1EE9;a Git m&#x1EDB;i (Git Repo) &#x1EDF; loca</blockquote><blockquote><em>	git add</em> : s&#x1EED; d&#x1EE5;ng &#x111;&#x1EC3; th&#xEA;m c&#xE1;c n&#x1ED9;i dung m&#x1EDB;i c&#x1EAD;p nh&#x1EAD;t trong th&#x1B0; m&#x1EE5;c l&#xE0;m vi&#x1EC7;c, n&#xF3; chu&#x1EA9;n b&#x1ECB; n&#x1ED9;i dung s&#x1EAF;p x&#x1EBF;p cho l&#x1EA7;n commit ti&#x1EBF;p theo.</blockquote><p>V&#xED; d&#x1EE5;:</p><p>+ &#x111;&#x1B0;a v&#xE0;o 1 file, th&#x1B0; m&#x1EE5;c c&#x1EE5; th&#x1EC3;: git add file1 file2 dir1 dir2 ...</p><p>+ &#x111;&#x1B0;a v&#xE0;o to&#xE0;n b&#x1ED9; th&#x1B0; m&#x1EE5;c l&#xE0;m vi&#x1EC7;c: git add all</p><p>+ add th&#x1B0; m&#x1EE5;c hi&#x1EC7;n t&#x1EA1;i : git add .</p><blockquote><em>	git status</em>: ki&#x1EC3;m tra tr&#x1EA1;ng th&#xE1;i t&#x1EAD;p tin</blockquote><blockquote><em>	git commit</em>: &#xA0;&#x111;&#x1B0;&#x1EE3;c s&#x1EED; d&#x1EE5;ng &#x111;&#x1EC3; th&#xEA;m t&#x1EA5;t c&#x1EA3; c&#xE1;c t&#x1EC7;p &#x111;&#x1B0;&#x1EE3;c s&#x1EAF;p x&#x1EBF;p v&#xE0;o kho l&#x1B0;u tr&#x1EEF;. M&#x1ED9;t commit trong Git s&#x1EBD; l&#x1B0;u tr&#x1EEF; &#xA0;tr&#x1EA1;ng th&#xE1;i hi&#x1EC7;n t&#x1EA1;i c&#x1EE7;a d&#x1EF1; &#xE1;n, bao g&#x1ED3;m c&#xE1;c thay &#x111;&#x1ED5;i &#x111;&#xE3; &#x111;&#x1B0;&#x1EE3;c th&#xEA;m v&#xE0;o v&#xF9;ng ch&#x1EDD;. C&#xF3; th&#x1EC3; kh&#xF4;i ph&#x1EE5;c l&#x1EA1;i b&#x1EB1;ng l&#x1EC7;nh <em>git reset</em></blockquote><blockquote><em>	git log</em>: xem th&#xF4;ng tin l&#x1ECB;ch s&#x1EED; commit &#x111;&#x1EC3; gi&#xE1;m s&#xE1;t l&#x1ECB;ch s&#x1EED; c&#x1EE7;a d&#x1EF1; &#xE1;n.</blockquote><blockquote><em>	git checkou</em>t: &#x111;&#x1B0;&#x1EE3;c d&#xF9;ng &#x111;&#x1EC3; chuy&#x1EC3;n nh&#xE1;nh ho&#x1EB7;c ph&#x1EE5;c h&#x1ED3;i file trong th&#x1B0; m&#x1EE5;c l&#xE0;m vi&#x1EC7;c t&#x1EEB; 1 commit tr&#x1B0;&#x1EDB;c &#x111;&#xE2;y</blockquote><p>V&#xED; d&#x1EE5;:</p><p>+ mu&#x1ED1;n chuy&#x1EC3;n sang nh&#xE1;nh master: git checkout master</p><p>+ ph&#x1EE5;c h&#x1ED3;i files t&#x1EEB; phi&#xEA;n b&#x1EA3;n c&#x169; (ph&#x1EE5;c h&#x1ED3;i index.html) &#xA0;: git checkout index.html</p><blockquote><em>	git merge</em>: s&#x1EED; d&#x1EE5;ng &#x111;&#x1EC3; g&#x1ED9;p nh&#xE1;nh, g&#x1ED9;p nh&#xE1;nh n&#xE0;y v&#xE0;o nh&#xE1;nh kh&#xE1;c</blockquote><blockquote><em>git rebase</em>: &#x111;&#x1B0;&#x1EE3;c s&#x1EED; d&#x1EE5;ng &#x111;&#x1EC3; t&#xE1;i c&#x1EA5;u tr&#xFA;c l&#x1ECB;ch s&#x1EED; commit c&#x1EE7;a m&#x1ED9;t nh&#xE1;nh . n&#xF3; &#xA0;c&#xF3; th&#x1EC3; di chuy&#x1EC3;n, thay &#x111;&#x1ED5;i ho&#x1EB7;c s&#x1EAF;p x&#x1EBF;p l&#x1EA1;i c&#xE1;c commit tr&#xEA;n m&#x1ED9;t nh&#xE1;nh sao cho ch&#xFA;ng th&#x1EA5;y nh&#x1B0; &#x111;&#x1B0;&#x1EE3;c ph&#xE1;t tri&#x1EC3;n theo m&#x1ED9;t c&#xE1;ch li&#xEA;n t&#x1EE5;c t&#x1EEB; m&#x1ED9;t &#x111;i&#x1EC3;m g&#x1ED1;c.</blockquote><blockquote><em>git push</em>: s&#x1EED; d&#x1EE5;ng &#x111;&#x1EC3; &#x111;&#x1EA5;y c&#xE1;c commit m&#x1EDB;i &#x1EDF; m&#xE1;y tr&#x1EA1;m l&#xEA;n server, l&#x1EC7;nh n&#xE0;y c&#x1EAD;p nh&#x1EAD;t kho l&#x1B0;u tr&#x1EEF; v&#x1EDB;i c&#xE1;c thay &#x111;&#x1ED5;i m&#x1EDB;i nh&#x1EA5;t</blockquote><p>C&#xE1;c tham s&#x1ED1; hay d&#xF9;ng:</p><p>--all &#x111;&#x1EA9;y t&#x1EA5;t c&#x1EA3; c&#xE1;c nh&#xE1;nh l&#xEA;n server</p><p>--tags : &#x111;&#x1EA9;y t&#x1EA5;t c&#x1EA3; tag l&#xEA;m server</p><p>--delete: x&#xF3;a m&#x1ED9;t nh&#xE1;nh ch&#x1EC9; ra tr&#xEA;n server</p><blockquote><em>git fetch</em> : truy c&#x1EAD;p v&#xE0;o kho d&#x1EEF; li&#x1EC7;u t&#x1EEB; xa th&#xF4;ng qua remote repository, &#xA0;t&#x1EA3;i v&#x1EC1; d&#x1EEF; li&#x1EC7;u t&#x1EEB; Remote Repo, c&#x1EAD;p nh&#x1EAD;t c&#xE1;c tham chi&#x1EBF;u t&#x1EEB; xa tr&#xEA;n m&#xE1;y t&#xED;nh &#x111;&#x1EC3; ph&#x1EA3;n &#xE1;nh nh&#x1EEF;ng thay &#x111;&#x1ED5;i m&#x1EDB;i nh&#x1EA5;t.</blockquote><p>V&#xED; d&#x1EE5;:</p><p>T&#x1EA3;i v&#x1EC1; t&#x1EA5;t c&#x1EA3; th&#xF4;ng tin trong remote: git fetch origin ho&#x1EB7;c git fetch &#x2013;all</p><blockquote><em>git pull</em> : l&#xE0; l&#x1EC7;nh &#x111;&#x1B0;&#x1EE3;c s&#x1EED; d&#x1EE5;ng &#x111;&#x1EC3; l&#x1EA5;y c&#xE1;c t&#x1EAD;p tin t&#x1EEB; kho l&#x1B0;u tr&#x1EEF; t&#x1EEB; a tr&#x1EF1;c ti&#x1EBF;p v&#xE0;o th&#x1B0; m&#x1EE5;c l&#xE0;m vi&#x1EC7;c, n&#xF3; t&#x1B0;&#x1A1;ng &#x111;&#x1B0;&#x1A1;ng l&#x1EC7;nh git fetch v&#xE0; git merge</blockquote><blockquote><em>cherry-pick</em> : L&#xE0; m&#x1ED9;t c&#xE1;ch &#x111;&#x1EC3; checkout 1 commit b&#x1EA5;t k&#x1EF3; t&#x1EA1;i 1 branch &#x111;&#x1B0;&#x1EE3;c ch&#x1EC9; &#x111;&#x1ECB;nh v&#x1EC1; branch hi&#x1EC7;n t&#x1EA1;i.</blockquote><p>V&#xED; d&#x1EE5;: l&#x1EA5;y 1 branch b&#x1ECF; v&#xE0;o master:</p><p><em>git checkout master</em></p><p><em>git cherry-pick feature-A</em></p><blockquote>**<em>git stash</em> l&#xE0; m&#x1ED9;t l&#x1EC7;nh t&#xED;ch h&#x1EE3;p &#x111;&#x1EC3; l&#x1B0;u tr&#x1EEF; ho&#x1EB7;c l&#x1B0;u tr&#x1EEF; c&#xE1;c thay &#x111;&#x1ED5;i trong c&#xF4;ng c&#x1EE5; ph&#xE1;t tri&#x1EC3;n ph&#x1EA7;n m&#x1EC1;m Git ch&#x1B0;a s&#x1EB5;n s&#xE0;ng &#x111;&#x1EC3; &#x111;&#x1B0;&#x1EE3;c cam k&#x1EBF;t. Khi nh&#xE0; ph&#xE1;t tri&#x1EC3;n ch&#x1EA1;y l&#x1EC7;nh git stash , Git s&#x1EBD; l&#x1B0;u tr&#x1EEF; t&#x1EA5;t c&#x1EA3; c&#xE1;c thay &#x111;&#x1ED5;i trong m&#x1ED9;t stash v&#xE0; &#x111;&#x1EB7;t l&#x1EA1;i tr&#x1EA1;ng th&#xE1;i c&#x1EE7;a kh&#xF4;ng gian l&#xE0;m vi&#x1EC7;c v&#x1EC1; tr&#x1EA1;ng th&#xE1;i cam k&#x1EBF;t tr&#x1B0;&#x1EDB;c &#x111;&#xF3;.</blockquote>]]></content:encoded></item><item><title><![CDATA[performance optimization]]></title><description><![CDATA[<h2 id="i-database">I. Database </h2><ol><li><strong>Eager loading</strong></li></ol><p>M&#x1ED9;t v&#x1EA5;n &#x111;&#x1EC1; kh&#xE1; ph&#x1ED5; bi&#x1EBF;n khi ch&#xFA;ng ta ph&#xE1;t tri&#x1EC3;n &#x1EE9;ng d&#x1EE5;ng b&#x1EB1;ng framework Laravel, &#x111;&#xF3; l&#xE0; v&#x1EA5;n &#x111;&#x1EC1; truy</p>]]></description><link>https://blog.tmi-soft.com/system-optimization/</link><guid isPermaLink="false">64e4270260e96304841c3966</guid><dc:creator><![CDATA[Trungtq]]></dc:creator><pubDate>Tue, 22 Aug 2023 04:40:52 GMT</pubDate><media:content url="https://blog.tmi-soft.com/content/images/2023/08/SaoLuuRegEdit_00-600x327.jpg" medium="image"/><content:encoded><![CDATA[<h2 id="i-database">I. Database </h2><ol><li><strong>Eager loading</strong></li></ol><img src="https://blog.tmi-soft.com/content/images/2023/08/SaoLuuRegEdit_00-600x327.jpg" alt="performance optimization"><p>M&#x1ED9;t v&#x1EA5;n &#x111;&#x1EC1; kh&#xE1; ph&#x1ED5; bi&#x1EBF;n khi ch&#xFA;ng ta ph&#xE1;t tri&#x1EC3;n &#x1EE9;ng d&#x1EE5;ng b&#x1EB1;ng framework Laravel, &#x111;&#xF3; l&#xE0; v&#x1EA5;n &#x111;&#x1EC1; truy v&#x1EA5;n N + 1 query. Vi&#x1EC7;c s&#x1EED; d&#x1EE5;ng Eloquent Relationships n&#x1EBF;u kh&#xF4;ng &#x111;&#x1EC3; &#xFD; ho&#x1EB7;c ch&#x1B0;a th&#x1EF1;c s&#x1EF1; hi&#x1EC3;u th&#xEC; r&#x1EA5;t d&#x1EC5; x&#x1EA3;y ra v&#x1EA5;n &#x111;&#x1EC1; n&#xE0;y, d&#x1EAB;n &#x111;&#x1EBF;n th&#x1EEB;a r&#x1EA5;t nhi&#x1EC1;u c&#xE1;c c&#xE2;u truy v&#x1EA5;n.</p><p>Vd: </p><pre><code class="language-none">$books = Books::all();
 
foreach ($books as $book) {
    echo $book-&gt;category-&gt;name;
}
</code></pre><p>N&#x1EBF;u ch&#xFA;ng ta s&#x1EED; d&#x1EE5;ng code nh&#x1B0; tr&#xEA;n kia v&#x1EC1; m&#x1EB7;t k&#x1EBF;t qu&#x1EA3; ho&#xE0;n to&#xE0;n k sai. Tuy nhi&#xEA;n v&#xF2;ng l&#x1EB7;p n&#xE0;y s&#x1EBD; th&#x1EF1;c hi&#x1EC7;n m&#x1ED9;t truy v&#x1EA5;n &#x111;&#x1EC3; truy xu&#x1EA5;t t&#x1EA5;t c&#x1EA3; c&#xE1;c books trong c&#x1A1; s&#x1EDF; d&#x1EEF; li&#x1EC7;u, sau &#x111;&#xF3; m&#x1ED9;t truy v&#x1EA5;n kh&#xE1;c cho t&#x1EEB;ng books &#x111;&#x1EC3; l&#x1EA5;y ra t&#xEA;n th&#x1EC3; lo&#x1EA1;i s&#xE1;ch. &#x110;&#x1EC3; gi&#x1EA3;i quy&#x1EBF;t b&#xE0;i to&#xE1;n n&#xE0;y ch&#xFA;ng ta s&#x1EBD; s&#x1EED; d&#x1EE5;ng <strong><a href="https://laravel.com/docs/8.x/eloquent-relationships#eager-loading">Eager Loading</a></strong> v&#xE0; m&#xEC;nh s&#x1EED;a l&#x1EA1;i code m&#x1ED9;t x&#xED;u &#x1EA1;:</p><pre><code class="language-none">$books = Books::with(&apos;category&apos;)-&gt;get();
 
foreach ($books as $book) {
    return $book-&gt;category-&gt;name;
}
</code></pre><p>B&#x1EB1;ng c&#xE1;ch s&#x1EED; d&#x1EE5;ng eager loading th&#xEC; gi&#x1EDD; &#x111;&#xE2;y trong l&#xFA;c truy v&#x1EA5;n l&#x1EA5;y ra t&#x1EA5;t c&#x1EA3; books, ch&#xFA;ng ta &#x111;&#xE3; l&#x1EA5;y ra t&#xEA;n th&#x1EC3; lo&#x1EA1;i c&#x1EE7;a books. V&#x1EDB;i c&#xE1;ch n&#xE0;y &#x1EDF; b&#xE0;i to&#xE1;n tr&#xEA;n ch&#xFA;ng ta &#x111;&#xE3; gi&#x1EA3;m c&#xF2;n 2 c&#xE2;u truy v&#x1EA5;n.</p><p>2. <strong>Database index (indexing).</strong></p><figure class="kg-card kg-image-card"><img src="https://images.viblo.asia/bf286be5-ae8c-4842-809b-dbc74f36797f.png" class="kg-image" alt="performance optimization" loading="lazy"></figure><figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2023/08/image-8.png" class="kg-image" alt="performance optimization" loading="lazy" width="343" height="56"></figure><figure class="kg-card kg-image-card"><img src="https://images.viblo.asia/9b8127dd-7c8d-440f-8449-ef31c735cfef.png" class="kg-image" alt="performance optimization" loading="lazy"></figure><p>Index l&#xE0; g&#xEC;? Index l&#xE0; m&#x1ED9;t d&#x1EA1;ng c&#x1EA5;u tr&#xFA;c d&#x1EEF; li&#x1EC7;u, trong &#x111;&#xF3; ch&#x1EE9;a gi&#xE1; tr&#x1ECB; c&#x1EE7;a m&#x1ED9;t tr&#x1B0;&#x1EDD;ng nh&#x1EA5;t &#x111;&#x1ECB;nh trong m&#x1ED9;t b&#x1EA3;ng d&#x1EEF; li&#x1EC7;u, &#x111;&#x1ED3;ng th&#x1EDD;i tr&#x1ECF; &#x111;&#x1EBF;n row d&#x1EEF; li&#x1EC7;u t&#x1B0;&#x1A1;ng &#x1EE9;ng. Vi&#x1EC7;c &#x111;&#xE1;nh index cho c&#xE1;c tr&#x1B0;&#x1EDD;ng l&#xE0; r&#x1EA5;t c&#x1EA7;n thi&#x1EBF;t n&#xF3; gi&#xFA;p t&#x103;ng hi&#x1EC7;u su&#x1EA5;t khi thu th&#x1EAD;p d&#x1EEF; li&#x1EC7;u.</p><p>Do &#x111;&#xF3;, khi th&#x1EF1;c hi&#x1EC7;n t&#x1ED1;i &#x1B0;u hi&#x1EC7;u n&#x103;ng n&#xEA;n &#x111;&#xE1;nh index cho c&#xE1;c tr&#x1B0;&#x1EDD;ng, &#x1B0;u ti&#xEA;n theo nguy&#xEA;n t&#x1EAF;c:</p><ol><li>&#x1AF;u ti&#xEA;n kh&#xF3;a ch&#xED;nh (Trong Laravel kh&#xF3;a ch&#xED;nh &#x111;&#xE3; &#x111;&#x1B0;&#x1EE3;c &#x111;&#xE1;nh index)</li><li>Kh&#xF3;a ngo&#x1EA1;i tr&#xEA;n c&#xE1;c b&#x1EA3;ng</li><li>C&#xE1;c tr&#x1B0;&#x1EDD;ng xu&#x1EA5;t hi&#x1EC7;n trong c&#xE2;u c&#xE1;c c&#xE2;u truy v&#x1EA5;n where</li></ol><p><strong>L&#x1B0;u &#xFD;:</strong> Vi&#x1EC7;c &#x111;&#xE1;nh index cho m&#x1ED9;t s&#x1ED1; tr&#x1B0;&#x1EDD;ng trong DB gi&#xFA;p cho vi&#x1EC7;c select d&#x1EEF; li&#x1EC7;u ra nhanh h&#x1A1;n, tuy nhi&#xEA;n n&#xF3; s&#x1EBD; khi&#x1EBF;n cho vi&#x1EC7;c create v&#xE0; update ch&#x1EAD;m h&#x1A1;n so v&#x1EDB;i vi&#x1EC7;c ch&#x1B0;a &#x111;&#xE1;nh index.</p><h2 id="ii-code">II. code</h2><ol><li>in_Array() </li></ol><p>Khi b&#x1EA1;n g&#x1ECD;i <code>in_array($needle, $haystack)</code>, PHP s&#x1EBD; duy&#x1EC7;t qua t&#x1EEB;ng ph&#x1EA7;n t&#x1EED; c&#x1EE7;a <code>$haystack</code> v&#xE0; so s&#xE1;nh n&#xF3; v&#x1EDB;i <code>$needle</code>. N&#x1EBF;u m&#x1ED9;t ph&#x1EA7;n t&#x1EED; trong <code>$haystack</code> kh&#x1EDB;p v&#x1EDB;i <code>$needle</code>, h&#xE0;m s&#x1EBD; tr&#x1EA3; v&#x1EC1; <code>true</code>. N&#x1EBF;u kh&#xF4;ng c&#xF3; ph&#x1EA7;n t&#x1EED; n&#xE0;o kh&#x1EDB;p, h&#xE0;m s&#x1EBD; tr&#x1EA3; v&#x1EC1; <code>false</code>.</p><figure class="kg-card kg-code-card"><pre><code class="language-none">$exist_license_keys = [...]; // tr&#xEA;n 200,000 item
        $create_license_keys = [];

        for ($i = 0; $i &lt; $count; $i++) {
            while (true) {
                $license_key = Str::random(9);

                if (! in_array($license_key, $exist_license_keys) &amp;&amp; ! in_array($license_key, $create_license_keys)) { // check t&#x1ED3;n t&#x1EA1;i data m&#x1EDB;i t&#x1EA1;o kh&#xF4;ng c&#xF3; trong m&#x1EA3;ng m&#x1EDB;i v&#xE0; c&#x169;
                    $create_license_keys[] = $license_key;
                    break;
                }
            }
        }
</code></pre><figcaption>x&#x1EED; l&#xED; &gt; 10s n&#x1EBF;u $count &gt; 10000</figcaption></figure><p>&#x110;o&#x1EA1;n code tr&#xEA;n m&#x1EE5;c &#x111;&#xED;ch &#x111;&#x1EC3; t&#x1EA1;o 1 m&#x1EA3;ng ch&#x1EE9;a c&#xE1;c m&#xE3; kh&#xF4;ng tr&#xF9;ng v&#x1EDB;i m&#xE3; c&#x169;. N&#x1EBF;u $count nh&#x1ECF; &#x111;o&#x1EA1;n code tr&#xEA;n kh&#xF4;ng c&#xF3; &#x1EA3;nh h&#x1B0;&#x1EDF;ng g&#xEC; nh&#x1B0;ng khi $count l&#x1EDB;n th&#x1EDD;i gian x&#x1EED; s&#x1EBD; r&#x1EA5;t l&#xE2;u &#xA0;v&#xEC; m&#x1ED7;i 1 v&#xF2;ng l&#x1EB7;p c&#x1EA7;n ki&#x1EC3;m tra gi&#xE1; tr&#x1ECB; 2 l&#x1EA7;n d&#xF9;ng in_array() .Thay v&#xEC; vi&#x1EBF;t nh&#x1B0; tr&#xEA;n t&#x1EA1;o tr&#x1B0;&#x1EDB;c t&#x1EA1;o tr&#x1B0;&#x1EDB;c t&#x1EA5;t c&#x1EA3; c&#xE1;c m&#xE3; v&#xE0; check tr&#xF9;ng sau</p><figure class="kg-card kg-code-card"><pre><code class="language-none">$exist_license_keys = [...]; // tr&#xEA;n 200,000 item
        $create_license_keys = [];

        for ($i = 0; $i &lt; $count; $i++) {
            $create_license_keys[] = Str::random(9);
        }
        
        $new_array = array_diff(array_unique($create_license_keys), $exist_license_keys);
        $newCount = count($new_array);
        if($new_count == $count) {
        	return $new_array;
        } else {
            for ($i = 0; $i &lt; $count - $new_count; $i++) {
                while (true) {
                    $license_key = Str::random(9);

                    if (! in_array($license_key, $exist_license_keys) &amp;&amp; ! in_array($license_key, $new_array)) { // check t&#x1ED3;n t&#x1EA1;i data m&#x1EDB;i t&#x1EA1;o kh&#xF4;ng c&#xF3; trong m&#x1EA3;ng m&#x1EDB;i v&#xE0; c&#x169;
                        $new_array[] = $license_key;
                        break;
                    }
                }
            }
            return $new_array;
        }
        
        
       
</code></pre><figcaption>x&#x1EED; l&#xED; ~ 1s</figcaption></figure><p>=&gt; ch&#xFA;ng ta c&#x1EA7;n ch&#xFA; &#xFD; hi&#x1EC3;u r&#xF5; c&#xE1;ch ho&#x1EA1;t &#x111;&#x1ED9;ng c&#x1EE7;a c&#xE1;c h&#xE0;m mu&#x1ED1;n d&#xF9;ng v&#xE0; y&#xEA;u c&#x1EA7;u c&#x1EE7;a &#x111;&#x1EA7;u v&#xE0;o/ &#x111;&#x1EA7;u ra c&#x1EE7;a h&#x1EC7; th&#x1ED1;ng &#x111;&#x1EC3; l&#x1EF1;a ch&#x1ECD;n &#x111;&#xFA;ng c&#xE1;c h&#xE0;m &#x111;&#x1EC3; x&#x1EED; l&#xED; tr&#xE1;nh vi&#x1EC7;c l&#xE0;m gi&#x1EA3;m hi&#x1EC3;u su&#x1EA5;t c&#x1EE7;a h&#x1EC7; th&#x1ED1;ng.</p><p>2. T&#x1ED1;i &#x1B0;u c&#xE1;c b&#x1B0;&#x1EDB;c s&#x1EED; l&#xED;</p><pre><code>    $users = User::get();
        $data = [];
        foreach ($users as $user) {
            $data[] = [
                &apos;id&apos; =&gt; $user-&gt;id,
                &apos;name&apos; =&gt; $user-&gt;name,
                &apos;description&apos; =&gt; $user-&gt;description_admin,
            ];
</code></pre><p>Thay V&#xEC; s&#x1EED; l&#xED; 2 b&#x1B0;&#x1EDB;c ta c&#xF3; th&#x1EC3; g&#x1ED9;p l&#x1EA1;i th&#xE0;nh 1 b&#x1B0;&#x1EDB;c sau</p><pre><code>    $users = User::select(&apos;id&apos;, &apos;name&apos;, &apos;description_admin as description&apos;)-&gt;get()-&gt;toArray();
</code></pre><p>= &gt; l&#xE0;m g&#x1ECD;n c&#xE1;c b&#x1B0;&#x1EDB;c th&#x1EF1;c thi tr&#xE1;nh l&#xF2;ng v&#xF2;ng t&#x1ED1;n th&#x1EDD;i gian th&#x1EF1;c hi&#x1EC7;n nhi&#x1EC1;u l&#x1EA7;n</p><p>......</p><p></p><p>Tr&#xEA;n &#x111;&#xE2;y l&#xE0; m&#x1ED9;t s&#x1ED1; tips m&#xEC;nh t&#x1EEB;ng d&#xF9;ng &#x111;&#x1EC3; c&#x1EA3;i thi&#x1EC7;n performance cho c&#xE1;c d&#x1EF1; &#xE1;n. Hy v&#x1ECD;ng s&#x1EBD; gi&#xFA;p &#xED;ch &#x111;&#x1B0;&#x1EE3;c cho m&#x1ECD;i ng&#x1B0;&#x1EDD;i &#x1EA1;</p><p>T&#xE0;i li&#x1EC7;u tham kh&#x1EA3;o : <a href="https://viblo.asia/p/nhung-tips-toi-uu-hoa-performance-trong-ung-dung-laravel-aWj53BBGl6m">https://viblo.asia/p/nhung-tips-toi-uu-hoa-performance-trong-ung-dung-laravel-aWj53BBGl6m</a></p>]]></content:encoded></item><item><title><![CDATA[RESTful API trong Laravel]]></title><description><![CDATA[<h2 id="1-restful-api-l%C3%A0-g%C3%AC">1. RESTful API l&#xE0; g&#xEC; ?</h2><ul><li>REST (Representational State Tranfer): l&#xE0; m&#x1ED9;t lo&#x1EA1;t h&#x1B0;&#x1EDB;ng d&#x1EAB;n v&#xE0; d&#x1EA1;ng c&#x1EA5;u tr&#xFA;c d&#xF9;ng cho vi&#x1EC7;c chuy&#x1EC3;n &#x111;&#x1ED5;i</li></ul>]]></description><link>https://blog.tmi-soft.com/buoi-6-training-06-2023/</link><guid isPermaLink="false">64e4135d60e96304841c388f</guid><dc:creator><![CDATA[Nguyễn Đình Thắng]]></dc:creator><pubDate>Tue, 22 Aug 2023 03:00:22 GMT</pubDate><media:content url="https://blog.tmi-soft.com/content/images/2023/08/WhydoyouneedmockAPI.jpeg" medium="image"/><content:encoded><![CDATA[<h2 id="1-restful-api-l%C3%A0-g%C3%AC">1. RESTful API l&#xE0; g&#xEC; ?</h2><ul><li>REST (Representational State Tranfer): l&#xE0; m&#x1ED9;t lo&#x1EA1;t h&#x1B0;&#x1EDB;ng d&#x1EAB;n v&#xE0; d&#x1EA1;ng c&#x1EA5;u tr&#xFA;c d&#xF9;ng cho vi&#x1EC7;c chuy&#x1EC3;n &#x111;&#x1ED5;i d&#x1EEF; li&#x1EC7;u d&#x1EF1;a tr&#xEA;n giao th&#x1EE9;c kh&#xF4;ng tr&#x1EA1;ng th&#xE1;i &#x111;&#x1EC3; t&#x1B0;&#x1A1;ng t&#xE1;c (th&#x1B0;&#x1EDD;ng l&#xE0; HTTP)</li><li>API (Application Programming Interface): ph&#x1B0;&#x1A1;ng th&#x1EE9;c k&#x1EBF;t n&#x1ED1;i v&#x1EDB;i c&#xE1;c th&#x1B0; vi&#x1EC7;n v&#xE0; &#x1EE9;ng d&#x1EE5;ng kh&#xE1;c </li></ul><h2 id="2-http-method-theo-chu%E1%BA%A9n-restful-api">2. HTTP method theo chu&#x1EA9;n RESTful API:</h2><ul><li><strong>GET</strong>: truy xu&#x1EA5;t t&#xE0;i nguy&#xEA;n (READ)</li><li><strong>POST</strong> : t&#x1EA1;o t&#xE0;i nguy&#xEA;n m&#x1EDB;i (CREATE)</li><li><strong>PUT / PATCH</strong>: c&#x1EAD;p nh&#x1EAD;t, s&#x1EED;a &#x111;&#x1ED5;i t&#xE0;i nguy&#xEA;n (UPDATE)</li><li><strong>DELETE</strong> : x&#xF3;a t&#xE0;i nguy&#xEA;n (DELETE)</li></ul><h2 id="3-restful-api-trong-laravel">3. RESTful API trong Laravel</h2><ul><li>C&#xE1;c route theo chu&#x1EA9;n RESTful API &#x111;&#x1B0;&#x1EE3;c vi&#x1EBF;t trong file routes/api.php</li><li>Trong Laravel ta c&#xF3; th&#x1EC3; gom c&#xE1;c route n&#xE0;y b&#x1EB1;ng 1 c&#xE2;u duy nh&#x1EA5;t: <code>Route::resource(&apos;users&apos;, &apos;Admin\UserController)</code></li></ul><figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2023/08/image-1.png" class="kg-image" alt="RESTful API trong Laravel" loading="lazy" width="1920" height="1073" srcset="https://blog.tmi-soft.com/content/images/size/w600/2023/08/image-1.png 600w, https://blog.tmi-soft.com/content/images/size/w1000/2023/08/image-1.png 1000w, https://blog.tmi-soft.com/content/images/size/w1600/2023/08/image-1.png 1600w, https://blog.tmi-soft.com/content/images/2023/08/image-1.png 1920w" sizes="(min-width: 720px) 720px"></figure><ul><li>Laravel cung c&#x1EA5;p route resource &#x111;&#x1EC3; x&#xE2;y d&#x1EF1;ng RESTful API</li><li>L&#x1EC7;nh artisan t&#x1EA1;o REST controller: <code>php artisan make: controller controller_name --resource</code></li><li>L&#xFA;c n&#xE0;y, controller v&#x1EEB;a t&#x1EA1;o s&#x1EBD; t&#x1EF1; &#x111;&#x1ED9;ng render ra c&#xE1;c ph&#x1B0;&#x1A1;ng th&#x1EE9;c: </li></ul><!--kg-card-begin: html--><table style="box-sizing: border-box; border-collapse: collapse; margin-bottom: 0px; margin-top: 1em; display: block; width: 660px; overflow: auto; color: rgb(27, 27, 27); font-family: &quot;Open Sans&quot;, -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, &quot;Helvetica Neue&quot;, Arial, sans-serif, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;; font-size: 18px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><thead style="box-sizing: border-box;"><tr style="box-sizing: border-box;"><th style="box-sizing: border-box; text-align: -webkit-match-parent; border: 1px solid rgb(214, 214, 215); padding: 0.75rem; vertical-align: top;">METHOD</th><th style="box-sizing: border-box; text-align: -webkit-match-parent; border: 1px solid rgb(214, 214, 215); padding: 0.75rem; vertical-align: top;">&#xDD; NGH&#x128;A</th></tr></thead><tbody style="box-sizing: border-box;"><tr style="box-sizing: border-box;"><td style="box-sizing: border-box; border: 1px solid rgb(214, 214, 215); padding: 0.75rem; vertical-align: top;">index()</td><td style="box-sizing: border-box; border: 1px solid rgb(214, 214, 215); padding: 0.75rem; vertical-align: top;">Hi&#x1EC3;n th&#x1ECB; danh s&#xE1;ch t&#xE0;i nguy&#xEA;n</td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box; border: 1px solid rgb(214, 214, 215); padding: 0.75rem; vertical-align: top;">create()</td><td style="box-sizing: border-box; border: 1px solid rgb(214, 214, 215); padding: 0.75rem; vertical-align: top;">Th&#xEA;m m&#x1EDB;i</td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box; border: 1px solid rgb(214, 214, 215); padding: 0.75rem; vertical-align: top;">store()</td><td style="box-sizing: border-box; border: 1px solid rgb(214, 214, 215); padding: 0.75rem; vertical-align: top;">L&#x1B0;u tr&#x1EEF; 1 t&#xE0;i nguy&#xEA;n m&#x1EDB;i</td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box; border: 1px solid rgb(214, 214, 215); padding: 0.75rem; vertical-align: top;">show($id)</td><td style="box-sizing: border-box; border: 1px solid rgb(214, 214, 215); padding: 0.75rem; vertical-align: top;">Hi&#x1EC3;n th&#x1ECB; 1 t&#xE0;i nguy&#xEA;n theo tham s&#x1ED1; truy&#x1EC1;n v&#xE0;o</td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box; border: 1px solid rgb(214, 214, 215); padding: 0.75rem; vertical-align: top;">edit($id)</td><td style="box-sizing: border-box; border: 1px solid rgb(214, 214, 215); padding: 0.75rem; vertical-align: top;">S&#x1EED;a 1 t&#xE0;i nguy&#xEA;n theo tham s&#x1ED1; truy&#x1EC1;n v&#xE0;o</td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box; border: 1px solid rgb(214, 214, 215); padding: 0.75rem; vertical-align: top;">update(Request $quest, $id)</td><td style="box-sizing: border-box; border: 1px solid rgb(214, 214, 215); padding: 0.75rem; vertical-align: top;">C&#x1EAD;p nh&#x1EAD;t 1 t&#xE0;i nguy&#xEA;n theo tham s&#x1ED1; truy&#x1EC1;n v&#xE0;o</td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box; border: 1px solid rgb(214, 214, 215); padding: 0.75rem; vertical-align: top;">destroy($id)</td><td style="box-sizing: border-box; border: 1px solid rgb(214, 214, 215); padding: 0.75rem; vertical-align: top;">X&#xF3;a 1 t&#xE0;i nguy&#xEA;n theo tham s&#x1ED1; truy&#x1EC1;n v&#xE0;o</td></tr></tbody></table><!--kg-card-end: html--><img src="https://blog.tmi-soft.com/content/images/2023/08/WhydoyouneedmockAPI.jpeg" alt="RESTful API trong Laravel"><p></p><ul><li>Test route: <a href="http://127.0.0.1:8000/api/users/">http://127.0.0.1:8000/api/auth/users</a> v&#x1EDB;i ph&#x1B0;&#x1A1;ng th&#x1EE9;c GET</li></ul><figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2023/08/image-3.png" class="kg-image" alt="RESTful API trong Laravel" loading="lazy" width="613" height="134" srcset="https://blog.tmi-soft.com/content/images/size/w600/2023/08/image-3.png 600w, https://blog.tmi-soft.com/content/images/2023/08/image-3.png 613w"></figure><figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2023/08/image-2.png" class="kg-image" alt="RESTful API trong Laravel" loading="lazy" width="1907" height="1080" srcset="https://blog.tmi-soft.com/content/images/size/w600/2023/08/image-2.png 600w, https://blog.tmi-soft.com/content/images/size/w1000/2023/08/image-2.png 1000w, https://blog.tmi-soft.com/content/images/size/w1600/2023/08/image-2.png 1600w, https://blog.tmi-soft.com/content/images/2023/08/image-2.png 1907w" sizes="(min-width: 720px) 720px"></figure><ul><li>Test route: <a href="http://127.0.0.1:8000/api/users/">http://127.0.0.1:8000/api/auth/users</a> v&#x1EDB;i ph&#x1B0;&#x1A1;ng th&#x1EE9;c POST</li></ul><figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2023/08/image-5.png" class="kg-image" alt="RESTful API trong Laravel" loading="lazy" width="591" height="126"></figure><figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2023/08/image-4.png" class="kg-image" alt="RESTful API trong Laravel" loading="lazy" width="1897" height="1080" srcset="https://blog.tmi-soft.com/content/images/size/w600/2023/08/image-4.png 600w, https://blog.tmi-soft.com/content/images/size/w1000/2023/08/image-4.png 1000w, https://blog.tmi-soft.com/content/images/size/w1600/2023/08/image-4.png 1600w, https://blog.tmi-soft.com/content/images/2023/08/image-4.png 1897w" sizes="(min-width: 720px) 720px"></figure><ul><li>Test route: <a href="http://127.0.0.1:8000/api/users/">http://127.0.0.1:8000/api/auth/users/</a>{id} v&#x1EDB;i ph&#x1B0;&#x1A1;ng th&#x1EE9;c DELETE</li></ul><figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2023/08/image-7.png" class="kg-image" alt="RESTful API trong Laravel" loading="lazy" width="679" height="216" srcset="https://blog.tmi-soft.com/content/images/size/w600/2023/08/image-7.png 600w, https://blog.tmi-soft.com/content/images/2023/08/image-7.png 679w"></figure><figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2023/08/image-6.png" class="kg-image" alt="RESTful API trong Laravel" loading="lazy" width="1898" height="1056" srcset="https://blog.tmi-soft.com/content/images/size/w600/2023/08/image-6.png 600w, https://blog.tmi-soft.com/content/images/size/w1000/2023/08/image-6.png 1000w, https://blog.tmi-soft.com/content/images/size/w1600/2023/08/image-6.png 1600w, https://blog.tmi-soft.com/content/images/2023/08/image-6.png 1898w" sizes="(min-width: 720px) 720px"></figure><h2 id="4-tr%E1%BA%A1ng-th%C3%A1i-http">4. Tr&#x1EA1;ng th&#xE1;i HTTP</h2><ul><li>201 Created: T&#xE0;i nguy&#xEA;n m&#x1EDB;i &#x111;&#xE3; &#x111;&#x1B0;&#x1EE3;c t&#x1EA1;o th&#xE0;nh c&#xF4;ng.</li><li>400 Bad Request: Y&#xEA;u c&#x1EA7;u kh&#xF4;ng h&#x1EE3;p l&#x1EC7; ho&#x1EB7;c thi&#x1EBF;u th&#xF4;ng tin c&#x1EA7;n thi&#x1EBF;t.</li><li>401 Unauthorized: Y&#xEA;u c&#x1EA7;u c&#x1EA7;n x&#xE1;c th&#x1EF1;c, th&#xF4;ng tin x&#xE1;c th&#x1EF1;c kh&#xF4;ng h&#x1EE3;p l&#x1EC7;.</li><li>403 Forbidden: Server &#x111;&#xE3; hi&#x1EC3;u y&#xEA;u c&#x1EA7;u, nh&#x1B0;ng t&#x1EEB; ch&#x1ED1;i th&#x1EF1;c hi&#x1EC7;n.</li><li>404 Not Found: T&#xE0;i nguy&#xEA;n &#x111;&#x1B0;&#x1EE3;c y&#xEA;u c&#x1EA7;u kh&#xF4;ng t&#x1ED3;n t&#x1EA1;i.</li><li>500 Internal Server Error: L&#x1ED7;i t&#x1EEB; ph&#xED;a m&#xE1;y ch&#x1EE7;, kh&#xF4;ng th&#x1EC3; ho&#xE0;n th&#xE0;nh y&#xEA;u c&#x1EA7;u.</li></ul>]]></content:encoded></item><item><title><![CDATA[Báo cáo - Liên lạc - Trao đổi như thế nào cho hiệu quả ?]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2023/08/ba-o-ca-o--lie-n-la-c-trao--o--i------.webp" class="kg-image" alt loading="lazy" width="620" height="380" srcset="https://blog.tmi-soft.com/content/images/size/w600/2023/08/ba-o-ca-o--lie-n-la-c-trao--o--i------.webp 600w, https://blog.tmi-soft.com/content/images/2023/08/ba-o-ca-o--lie-n-la-c-trao--o--i------.webp 620w"></figure><p>Nh&#x1B0; m&#x1ECD;i ng&#x1B0;&#x1EDD;i &#x111;&#xE3; bi&#x1EBF;t ngo&#xE0;i k&#x1EF9; n&#x103;ng chuy&#xEA;n m&#xF4;n, &#x111;&#x1EC3; &#x111;&#x1EA1;t &#x111;&#x1B0;&#x1EE3;c hi&#x1EC7;u qu&#x1EA3; cao trong c&#xF4;ng vi&#x1EC7;c</p>]]></description><link>https://blog.tmi-soft.com/bao-cao-lien-lac-trao-doi-nhu-the-nao-cho-hieu-qua/</link><guid isPermaLink="false">64e1c62660e96304841c3736</guid><dc:creator><![CDATA[Nguyễn Anh Tuấn]]></dc:creator><pubDate>Sun, 20 Aug 2023 08:50:00 GMT</pubDate><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://blog.tmi-soft.com/content/images/2023/08/ba-o-ca-o--lie-n-la-c-trao--o--i------.webp" class="kg-image" alt loading="lazy" width="620" height="380" srcset="https://blog.tmi-soft.com/content/images/size/w600/2023/08/ba-o-ca-o--lie-n-la-c-trao--o--i------.webp 600w, https://blog.tmi-soft.com/content/images/2023/08/ba-o-ca-o--lie-n-la-c-trao--o--i------.webp 620w"></figure><p>Nh&#x1B0; m&#x1ECD;i ng&#x1B0;&#x1EDD;i &#x111;&#xE3; bi&#x1EBF;t ngo&#xE0;i k&#x1EF9; n&#x103;ng chuy&#xEA;n m&#xF4;n, &#x111;&#x1EC3; &#x111;&#x1EA1;t &#x111;&#x1B0;&#x1EE3;c hi&#x1EC7;u qu&#x1EA3; cao trong c&#xF4;ng vi&#x1EC7;c ch&#xFA;ng ta c&#x1EA7;n c&#xF3; nh&#x1EEF;ng k&#x1EF9; n&#x103;ng m&#x1EC1;m (soft skill) nh&#x1B0; l&#xE0;m vi&#x1EC7;c nh&#xF3;m, gi&#x1EA3;i quy&#x1EBF;t ph&#xE2;n t&#xED;ch v&#x1EA5;n &#x111;&#x1EC1;, b&#xE1;o c&#xE1;o, li&#xEA;n l&#x1EA1;c trao &#x111;&#x1ED5;i,... </p><p>B&#xE0;i vi&#x1EBF;t n&#xE0;y m&#xEC;nh s&#x1EBD; vi&#x1EBF;t v&#x1EC1; b&#xE1;o c&#xE1;o, li&#xEA;n l&#x1EA1;c v&#xE0; trao &#x111;&#x1ED5;i trong c&#xF4;ng vi&#x1EC7;c. M&#x1EE5;c &#x111;&#xED;ch v&#xE0; l&#xE0;m sao &#x111;&#x1EC3; v&#x1EAD;n d&#x1EE5;ng &#x111;&#x1B0;&#x1EE3;c v&#xE0;o trong c&#xF4;ng vi&#x1EC7;c m&#x1ED9;t c&#xE1;ch ph&#xF9; h&#x1EE3;p</p><p>N&#x1ED9;i dung b&#xE0;i vi&#x1EBF;t</p><ol><li>M&#x1EE5;c &#x111;&#xED;ch c&#x1EE7;a b&#xE1;o c&#xE1;o, li&#xEA;n l&#x1EA1;c v&#xE0; trao &#x111;&#x1ED5;i</li><li>Nh&#x1EEF;ng tr&#x1B0;&#x1EDD;ng h&#x1EE3;p n&#xE0;o c&#x1EA7;n b&#xE1;o c&#xE1;o, li&#xEA;n l&#x1EA1;c v&#xE0; trao &#x111;&#x1ED5;i</li><li>C&#xE1;ch th&#x1EE9;c &#x111;&#x1EC3; b&#xE1;o c&#xE1;o, li&#xEA;n l&#x1EA1;c v&#xE0; trao &#x111;&#x1ED5;i hi&#x1EC7;u qu&#x1EA3;</li></ol><p></p><h2 id="1-m%E1%BB%A5c-%C4%91%C3%ADch-c%E1%BB%A7a-b%C3%A1o-c%C3%A1o-li%C3%AAn-l%E1%BA%A1c-v%C3%A0-trao-%C4%91%E1%BB%95i">1. M&#x1EE5;c &#x111;&#xED;ch c&#x1EE7;a b&#xE1;o c&#xE1;o, li&#xEA;n l&#x1EA1;c v&#xE0; trao &#x111;&#x1ED5;i</h2><p>B&#xE1;o c&#xE1;o li&#xEA;n l&#x1EA1;c trao &#x111;&#x1ED5;i l&#xE0; n&#xF3;i &#x111;&#x1EBF;n vi&#x1EC7;c giao ti&#x1EBF;p hi&#x1EC7;u qu&#x1EA3; trong l&#xE0;m vi&#x1EC7;c nh&#xF3;m hay l&#xE0;m vi&#x1EC7;c &#x1EDF; c&#xF4;ng ty.</p><p>V&#x1EAD;y &#x111;&#x1EC3; th&#x1EA5;y &#x111;&#x1B0;&#x1EE3;c m&#x1EE5;c &#x111;&#xED;ch c&#x1EE7;a b&#xE1;o c&#xE1;o li&#xEA;n l&#x1EA1;c trao &#x111;&#x1ED5;i ch&#xFA;ng ta c&#x1EA7;n &#x111;i xem c&#xE1;c tr&#x1B0;&#x1EDD;ng h&#x1EE3;p d&#x1B0;&#x1EDB;i &#x111;&#xE2;y </p><p><strong>1.1 C&#xF4;ng vi&#x1EC7;c c&#xF3; th&#x1EC3; ti&#x1EBF;n tri&#x1EC3;n 1 smooth</strong></p><p>Khi l&#xE0;m vi&#x1EC7;c nh&#xF3;m m&#xE0; c&#xF3; b&#xE1;o c&#xE1;o, li&#xEA;n l&#x1EA1;c v&#xE0; trao &#x111;&#x1ED5;i th&#xEC; s&#x1EBD; d&#x1EC5; d&#xE0;ng bi&#x1EBF;t &#x111;&#x1B0;&#x1EE3;c ai &#x111;ang l&#xE0;m task g&#xEC; v&#xE0; ti&#x1EBF;n &#x111;&#x1ED9; &#x111;ang &#x1EDF; &#x111;&#xE2;u r&#x1ED3;i.</p><p>Ngo&#xE0;i ra, khi ho&#xE0;n th&#xE0;nh c&#xF4;ng vi&#x1EC7;c m&#xE0; c&#xF3; b&#xE1;o c&#xE1;o th&#xEC; c&#xF3; th&#x1EC3; s&#x1EAF;p x&#x1EBF;p c&#xF4;ng vi&#x1EC7;c ti&#x1EBF;p theo 1 c&#xE1;ch d&#x1EC5; d&#xE0;ng v&#xE0; ng&#x1B0;&#x1EDD;i kh&#xE1;c trong team c&#x169;ng c&#xF3; th&#x1EC3; follow &#x111;&#x1B0;&#x1EE3;c.</p><p>N&#x1EBF;u b&#xE1;o c&#xE1;o ti&#x1EBF;n &#x111;&#x1ED9; &#x111;&#xFA;ng th&#x1EDD;i &#x111;i&#x1EC3;m th&#xED;ch h&#x1EE3;p th&#xEC; c&#x1EA5;p tr&#xEA;n s&#x1EBD; kh&#xF4;ng m&#x1EA5;t th&#x1EDD;i gian c&#x169;ng nh&#x1B0; c&#xF4;ng s&#x1EE9;c &#x111;&#x1EC3; h&#x1ECF;i ti&#x1EBF;n &#x111;&#x1ED9; v&#xE0; nh&#x1B0; th&#x1EBF; c&#xF4;ng vi&#x1EC7;c c&#xF3; th&#x1EC3; ti&#x1EBF;n tri&#x1EC3;n 1 c&#xE1;ch smooth.</p><p><strong>1.2 &#xA0;C&#xF3; th&#x1EC3; t&#x1EAD;p trung v&#xE0;o task c&#x1EE7;a m&#xEC;nh</strong></p><p>Khi kh&#xF4;ng n&#x1EAF;m &#x111;&#x1B0;&#x1EE3;c ti&#x1EBF;n &#x111;&#x1ED9; c&#xF4;ng vi&#x1EC7;c c&#x1EE7;a c&#xE1;c member kh&#xE1;c th&#xEC; s&#x1EBD; &#x111;&#x1ED9;t nhi&#xEA;n r&#x1A1;i v&#xE0;o tr&#x1B0;&#x1EDD;ng h&#x1EE3;p &quot;&#x1EE6;a, task c&#x1EE7;a em xong r&#x1ED3;i &#xE0;&quot;, &quot;Ai s&#x1EBD; &#x111;&#x1ED1;i &#x1EE9;ng task n&#xE0;y cho kh&#xE1;ch h&#xE0;ng&quot; d&#x1EAB;n t&#x1EDB;i kh&#xF4;ng t&#x1EAD;p trung &#x111;&#x1B0;&#x1EE3;c v&#xE0;o c&#xF4;ng vi&#x1EC7;c c&#x1EE7;a m&#xEC;nh.</p><p>Khi kh&#xF4;ng t&#x1EAD;p trung &#x111;&#x1B0;&#x1EE3;c v&#xE0;o c&#xF4;ng vi&#x1EC7;c c&#x1EE7;a m&#xEC;nh s&#x1EBD; l&#xE0;m gi&#x1EA3;m n&#x103;ng su&#x1EA5;t, s&#x1EBD; d&#x1EC5; ph&#xE1;t sinh OT ho&#x1EB7;c l&#x1ED7;i trong qu&#xE1; tr&#xEC;nh l&#xE0;m.</p><p>V&#xEC; th&#x1EBF; khi c&#xF3; b&#xE1;o c&#xE1;o li&#xEA;n l&#x1EA1;c r&#xF5; r&#xE0;ng th&#xEC; s&#x1EBD; n&#x1EAF;m &#x111;&#x1B0;&#x1EE3;c ai l&#xE0;m c&#xF4;ng vi&#x1EC7;c g&#xEC; v&#xE0; nhanh ch&#xF3;ng ph&#xE1;t hi&#x1EC7;n ra v&#x1EA5;n &#x111;&#x1EC1; s&#x1EDB;m n&#x1EBF;u c&#xF3; v&#xE0; &#x111;i&#x1EC1;u ch&#x1EC9;nh &#x111;&#x1ED9; &#x1B0;u ti&#xEA;n c&#x1EE7;a c&#xF4;ng vi&#x1EC7;c m&#x1ED9;t c&#xE1;ch d&#x1EC5; d&#xE0;ng.</p><p><strong>1.3 Quan h&#x1EC7; gi&#x1EEF;a &#x111;&#x1ED3;ng nghi&#x1EC7;p t&#x1ED1;t h&#x1A1;n</strong></p><p>B&#xE1;o c&#xE1;o li&#xEA;n l&#x1EA1;c th&#x1EF1;c ch&#x1EA5;t l&#xE0; communication.</p><p>Khi l&#xE0;m &#x111;&#x1B0;&#x1EE3;c vi&#x1EC7;c communication t&#x1ED1;t th&#xEC; s&#x1EBD; c&#xF3; s&#x1EF1; ph&#x1ED1;i h&#x1EE3;p v&#xE0; h&#xE0;nh &#x111;&#x1ED9;ng hi&#x1EC7;u qu&#x1EA3; trong team, d&#x1EAB;n &#x111;&#x1EBF;n quan h&#x1EC7; gi&#x1EEF;a c&#xE1;c member t&#x1ED1;t l&#xEA;n.</p><p>Kh&#xF4;ng n&#xEA;n n&#xF3;i b&#x1EB1;ng mi&#x1EC7;ng m&#xE0; n&#xEA;n d&#xF9;ng chat app (slack, chat work) ho&#x1EB7;c email &#x111;&#x1EC3; l&#x1EA1;i b&#x1EB1;ng ch&#x1EE9;ng &#x111;&#x1EC3; tr&#xE1;nh ph&#xE1;t sinh trouble tranh c&#xE3;i &#x111;&#xE3; n&#xF3;i nh&#x1B0; th&#x1EBF; n&#xE0;y ho&#x1EB7;c ko n&#xF3;i nh&#x1B0; th&#x1EBF; n&#xE0;y &#x1EA3;nh h&#x1B0;&#x1EDF;ng &#x111;&#x1EBF;n quan h&#x1EC7; gi&#x1EEF;a c&#xE1;c member.</p><p>Ngo&#xE0;i ra khi quan h&#x1EC7; gi&#x1EEF;a c&#xE1;c &#x111;&#x1ED3;ng nghi&#x1EC7;p t&#x1ED1;t l&#xEA;n th&#xEC; hi&#x1EC7;u qu&#x1EA3; c&#xF4;ng vi&#x1EC7;c c&#x1EE7;a team t&#x103;ng l&#xEA;n, m&#x1ECD;i ng&#x1B0;&#x1EDD;i trong team d&#x1EC5; d&#xE0;ng trao &#x111;&#x1ED5;i &#xFD; ki&#x1EBF;n v&#x1EDB;i nhau h&#x1A1;n. T&#x1EEB; &#x111;&#xF3; c&#xF3; th&#x1EC3; k&#x1EF3; v&#x1ECD;ng nh&#x1EEF;ng ideal m&#x1EDB;i c&#xF3; th&#x1EC3; n&#x1EA3;y sinh.</p><p><strong>1.4 C&#xF3; th&#x1EC3; nhanh ch&#xF3;ng gi&#x1EA3;i quy&#x1EBF;t trouble</strong></p><p>Khi b&#xE1;o c&#xE1;o li&#xEA;n l&#x1EA1;c ch&#xED;nh x&#xE1;c th&#xEC; c&#xF3; th&#x1EC3; nhanh ch&#xF3;ng gi&#x1EA3;i quy&#x1EBF;t &#x111;&#x1B0;&#x1EE3;c trouble.</p><p>Khi x&#x1EA3;y ra trouble b&#xE1;o c&#xE1;o ngay th&#xEC; s&#x1EBD; c&#xF3; th&#x1EC3; nhanh ch&#xF3;ng &#x111;&#x1B0;a ra x&#x1EED; l&#xFD; tr&#x1B0;&#x1EDB;c m&#x1EAF;t l&#xE0;m gi&#x1EA3;m thi&#x1EC3;u r&#x1EE7;i ro v&#xE0; t&#x1ED5;n th&#x1EA5;t.</p><p>Ngo&#xE0;i ra, tu&#x1EF3; t&#x1EEB;ng lo&#x1EA1;i trouble m&#xE0; c&#xF3; th&#x1EC3; b&#xE1;o c&#xE1;o tr&#x1B0;&#x1EDB;c &#x111;&#x1EC3; t&#x1EEB; &#x111;&#xF3; c&#xF3; s&#x1EF1; chu&#x1EA9;n b&#x1ECB; v&#xE0; &#x111;&#x1ED1;i &#x1EE9;ng 1 c&#xE1;ch d&#x1EC5; d&#xE0;ng.</p><p>C&#x1EA7;n chia s&#x1EBB; trouble &#x111;&#x1EBF;n v&#x1EDB;i m&#x1ECD;i ng&#x1B0;&#x1EDD;i trong c&#xF4;ng ty v&#xE0; c&#xE1;ch th&#x1EE9;c ph&#xF2;ng ch&#x1ED1;ng x&#x1EA3;y ra trouble l&#x1EA7;n n&#x1EEF;a. </p><h2 id="2-nh%E1%BB%AFng-tr%C6%B0%E1%BB%9Dng-h%E1%BB%A3p-n%C3%A0o-c%E1%BA%A7n-b%C3%A1o-c%C3%A1o-li%C3%AAn-l%E1%BA%A1c-v%C3%A0-trao-%C4%91%E1%BB%95i">2. Nh&#x1EEF;ng tr&#x1B0;&#x1EDD;ng h&#x1EE3;p n&#xE0;o c&#x1EA7;n b&#xE1;o c&#xE1;o, li&#xEA;n l&#x1EA1;c v&#xE0; trao &#x111;&#x1ED5;i</h2><p>&#x110;&#x1EC3; ph&#xE1;t huy &#x111;&#x1B0;&#x1EE3;c h&#x1EBF;t nh&#x1EEF;ng gi&#xE1; tr&#x1ECB; c&#x1EE7;a b&#xE1;o c&#xE1;o li&#xEA;n l&#x1EA1;c th&#xEC; quan tr&#x1ECD;ng l&#xE0; c&#x1EA7;n bi&#x1EBF;t &#x111;&#x1B0;&#x1EE3;c c&#xE1;c tr&#x1B0;&#x1EDD;ng h&#x1EE3;p n&#xE0;o c&#x1EA7;n s&#x1EED; d&#x1EE5;ng. Ch&#xFA;ng ta h&#xE3;y c&#xF9;ng &#x111;i v&#xE0;o t&#x1EEB;ng tr&#x1B0;&#x1EDD;ng h&#x1EE3;p c&#x1EE5; th&#x1EC3; &#x1EDF; b&#xEA;n d&#x1B0;&#x1EDB;i</p><p>2.1 B&#xE1;o c&#xE1;o khi ph&#xE1;t sinh trouble ho&#x1EB7;c xong c&#xF4;ng vi&#x1EC7;c</p><p>Th&#x1EDD;i &#x111;i&#x1EC3;m b&#xE1;o c&#xE1;o l&#xE0; r&#x1EA5;t quan tr&#x1ECD;ng.</p><p>V&#xED; d&#x1EE5; n&#x1EBF;u xong c&#xF4;ng vi&#x1EC7;c b&#xE1;o c&#xE1;o ho&#x1EB7;c nh&#x1EEF;ng task d&#xE0;i th&#xEC; c&#xF3; th&#x1EC3; ph&#xE1;t sinh tr&#x1B0;&#x1EDD;ng h&#x1EE3;p kh&#xF4;ng k&#x1ECB;p &#xA0;</p><p>B&#xE1;o c&#xE1;o khi n&#x1EAF;m &#x111;&#x1B0;&#x1EE3;c khi n&#xE0;o c&#xF3; th&#x1EC3; xong c&#xF4;ng vi&#x1EC7;c -&gt; ng&#x1B0;&#x1EDD;i giao task y&#xEA;n t&#xE2;m.</p><p>Khi b&#xE1;o c&#xE1;o ti&#x1EBF;n &#x111;&#x1ED9; c&#xF4;ng vi&#x1EC7;c &#x111;&#x1EC3; c&#xF3; th&#x1EC3; bi&#x1EBF;t &#x111;&#x1B0;&#x1EE3;c ti&#x1EBF;n &#x111;&#x1ED9; c&#xF4;ng vi&#x1EC7;c th&#xEC; c&#x1EA7;n c&#xF3; d&#x1EF1; ki&#x1EBF;n ho&#xE0;n th&#xE0;nh.</p><p>Tr&#x1B0;&#x1EDD;ng h&#x1EE3;p kh&#xF4;ng ho&#xE0;n th&#xE0;nh &#x111;&#xFA;ng deadline th&#xEC; c&#xF3; th&#x1EC3; &#x1EA3;nh h&#x1B0;&#x1EDF;ng &#x111;&#x1EBF;n ti&#x1EBF;n &#x111;&#x1ED9; chung c&#x1EE7;a d&#x1EF1; &#xE1;n ho&#x1EB7;c l&#xE0;m m&#x1EA5;t s&#x1EF1; tin t&#x1B0;&#x1EDF;ng c&#x1EE7;a kh&#xE1;ch h&#xE0;ng v&#xEC; th&#x1EBF; b&#xE1;o c&#xE1;o tr&#x1B0;&#x1EDB;c l&#xE0; quan tr&#x1ECD;ng.</p><p>Ngo&#xE0;i ra nh&#x1EEF;ng trouble t&#x1B0;&#x1A1;ng t&#x1EF1; x&#x1EA3;y ra c&#x1EA7;n nhanh ch&#xF3;ng b&#xE1;o c&#xE1;o l&#x1EA1;i.</p><p><strong>2.2 Tr&#x1B0;&#x1EDD;ng h&#x1EE3;p c&#x1EA7;n ch&#x1EC9; &#x111;&#x1ECB;nh ng&#xE0;y gi&#x1EDD; c&#x1EE5; th&#x1EC3;</strong></p><p>Tr&#x1B0;&#x1EDD;ng h&#x1EE3;p c&#x1EA7;n ch&#x1EC9; &#x111;&#x1ECB;nh ng&#xE0;y gi&#x1EDD; ho&#x1EB7;c kho&#x1EA3;ng th&#x1EDD;i gian th&#xEC; n&#x1EBF;u kh&#xF4;ng b&#xE1;o c&#xE1;o th&#xEC; d&#x1EC5; ph&#xE1;t sinh trouble</p><p>V&#xED; d&#x1EE5; khi nh&#x1EAD;n &#x111;&#x1B0;&#x1EE3;c message &quot;&#x110;&#x1EBF;n mai g&#x1EED;i l&#x1EA1;i t&#xE0;i li&#x1EC7;u&quot; th&#xEC; s&#x1EBD; c&#xF3; r&#x1EA5;t nhi&#x1EC1;u c&#xE1;ch hi&#x1EC3;u &#x1EDF; &#x111;&#xE2;y</p><ul><li>&#x110;&#x1EBF;n mai n&#xEA;n trong h&#xF4;m nay g&#x1EED;i</li><li>G&#x1EED;i tr&#x1B0;&#x1EDB;c 8h s&#xE1;ng mai OK</li><li>G&#x1EED;i tr&#x1B0;&#x1EDB;c 17h ng&#xE0;y mai &#xA0;OK</li></ul><p>n&#x1EBF;u ng&#x1B0;&#x1EDD;i li&#xEA;n l&#x1EA1;c &#x1EDF; tr&#xEA;n m&#xE0; c&#x1EA7;n s&#x1EED; d&#x1EE5;ng trong ng&#xE0;y mai m&#xE0; g&#x1EED;i tr&#x1B0;&#x1EDB;c 17h ng&#xE0;y mai l&#xE0; mu&#x1ED9;n m&#x1EA5;t. V&#xEC; th&#x1EBF; c&#x1EA7;n &#xFD; th&#x1EE9;c &#x111;&#x1B0;&#x1EE3;c vi&#x1EC7;c thi&#x1EBF;u gi&#x1EA3;i th&#xED;ch, thi&#x1EBF;u x&#xE1;c nh&#x1EAD;n s&#x1EBD; d&#x1EAB;n t&#x1EDB;i &#x1EA3;nh h&#x1B0;&#x1EDF;ng &#x111;&#x1EBF;n c&#xF4;ng vi&#x1EC7;c.</p><p>Tr&#x1B0;&#x1EDD;ng h&#x1EE3;p tr&#xEA;n &#x1EDF; trong n&#x1ED9;i b&#x1ED9; c&#xF4;ng ty th&#xEC; c&#xF3; th&#x1EC3; kh&#xF4;ng v&#x1EA5;n &#x111;&#x1EC1; g&#xEC; nh&#x1B0;ng n&#x1EBF;u li&#xEA;n quan &#x111;&#x1EBF;n kh&#xE1;ch h&#xE0;ng th&#xEC; s&#x1EBD; l&#xE0;m m&#x1EA5;t ni&#x1EC1;m tin c&#x1EE7;a kh&#xE1;ch h&#xE0;ng.</p><p>&#x110;&#x1EC3; c&#xF3; th&#x1EC3; l&#xE0;m vi&#x1EC7;c smooth gi&#x1EEF; &#x111;&#x1B0;&#x1EE3;c ni&#x1EC1;m tin c&#x1EE7;a kh&#xE1;ch h&#xE0;ng th&#xEC; khi li&#xEA;n l&#x1EA1;c c&#x1EA7;n ch&#x1EC9; &#x111;&#x1ECB;nh r&#xF5; ng&#xE0;y gi&#x1EDD; </p><p><strong>2.3 Tr&#x1B0;&#x1EDD;ng h&#x1EE3;p c&#x1EA7;n trao &#x111;&#x1ED5;i &#x111;&#x1EC3; gi&#x1EA3;i quy&#x1EBF;t v&#x1EA5;n &#x111;&#x1EC1;</strong></p><p>&#x110;&#x1EC3; trao &#x111;&#x1ED5;i hi&#x1EC7;u qu&#x1EA3; th&#xEC; c&#x1EA7;n x&#xE1;c &#x111;&#x1ECB;nh r&#xF5; &#x111;&#x1B0;&#x1EE3;c v&#x1EA5;n &#x111;&#x1EC1; c&#x1EA7;n gi&#x1EA3;i quy&#x1EBF;t l&#xE0; g&#xEC;.</p><h2 id="3-c%C3%A1ch-th%E1%BB%A9c-%C4%91%E1%BB%83-b%C3%A1o-c%C3%A1o-li%C3%AAn-l%E1%BA%A1c-v%C3%A0-trao-%C4%91%E1%BB%95i-hi%E1%BB%87u-qu%E1%BA%A3">3. C&#xE1;ch th&#x1EE9;c &#x111;&#x1EC3; b&#xE1;o c&#xE1;o, li&#xEA;n l&#x1EA1;c v&#xE0; trao &#x111;&#x1ED5;i hi&#x1EC7;u qu&#x1EA3;</h2><p>Trao &#x111;&#x1ED5;i li&#xEA;n l&#x1EA1;c kh&#xF4;ng ch&#x1EC9; nh&#x1EB1;m m&#x1EE5;c &#x111;&#xED;ch n&#xE2;ng cao hi&#x1EC7;u qu&#x1EA3; c&#xF4;ng vi&#x1EC7;c m&#xE0; c&#xF2;n g&#x1EAF;n k&#x1EBF;t quan h&#x1EC7; gi&#x1EEF;a m&#x1ECD;i ng&#x1B0;&#x1EDD;i v&#x1EDB;i nhau.</p><p>V&#xEC; th&#x1EBF; ch&#xFA;ng ta c&#x1EA7;n hi&#x1EC3;u c&#xE1;ch th&#x1EF1;c hi&#x1EC7;n trao &#x111;&#x1ED5;i b&#xE1;o c&#xE1;o li&#xEA;n l&#x1EA1;c m&#x1ED9;t c&#xE1;ch hi&#x1EC7;u qu&#x1EA3;.</p><p><strong>3.1 B&#xE1;o c&#xE1;o t&#x1EEB; k&#x1EBF;t lu&#x1EAD;n</strong></p><p>Tr&#x1B0;&#x1EDD;ng h&#x1EE3;p n&#xE0;y ch&#x1EE7; y&#x1EBF;u l&#xE0; b&#xE1;o c&#xE1;o t&#x1EEB; c&#x1EA5;p d&#x1B0;&#x1EDB;i l&#xEA;n c&#x1EA5;p tr&#xEA;n ho&#x1EB7;c cho member m&#x1EDB;i v&#x1EDB;i member c&#x169;.</p><p>Khi b&#xE1;o c&#xE1;o h&#xE3;y &#xFD; th&#x1EE9;c vi&#x1EC7;c truy&#x1EC1;n &#x111;&#x1EA1;t k&#x1EBF;t lu&#x1EAD;n tr&#x1B0;&#x1EDB;c b&#x1EB1;ng c&#xE1;ch ph&#x1EA3;i t&#x1EF1; m&#xEC;nh x&#xE1;c nh&#x1EAD;n ti&#x1EBF;n &#x111;&#x1ED9; c&#xF4;ng vi&#x1EC7;c c&#x1EE7;a &#x111;&#x1ED1;i ph&#x1B0;&#x1A1;ng &#x111;&#x1EC3; &#xA0;kh&#xF4;ng s&#x1EED; d&#x1EE5;ng qu&#xE1; nhi&#x1EC1;u th&#x1EDD;i gian c&#x1EE7;a &#x111;&#x1ED1;i ph&#x1B0;&#x1A1;ng, &#x111;&#x1EC3; &#x111;&#x1ED1;i ph&#x1B0;&#x1A1;ng c&#xF3; th&#x1EC3; hi&#x1EC3;u &#x111;&#x1B0;&#x1EE3;c v&#x1EA5;n &#x111;&#x1EC1; t&#x1EEB;ng ch&#xFA;t m&#x1ED9;t v&#xE0; c&#xF3; th&#x1EC3; &#x111;&#x1B0;a ra ch&#x1EC9; th&#x1ECB;.</p><p>H&#x1EA7;u h&#x1EBF;t c&#xE1;c tr&#x1B0;&#x1EDD;ng h&#x1EE3;p n&#xE0;y l&#xE0; b&#xE1;o c&#xE1;o b&#x1EB1;ng mi&#x1EC7;ng nh&#x1B0;ng m&#xE0; v&#x1EDB;i m&#x1ED9;t s&#x1ED1; tr&#x1B0;&#x1EDD;ng h&#x1EE3;p n&#x1ED9;i dung ph&#x1EE9;c t&#x1EA1;p th&#xEC; c&#x1EA7;n c&#xF3; bi&#x1EC3;u &#x111;&#x1ED3; ho&#x1EB7;c h&#xEC;nh v&#x1EBD; &#x111;&#x1EC3; th&#x1EC3; hi&#x1EC7;n n&#x1ED9;i dung m&#x1ED9;t c&#xE1;ch d&#x1EC5; hi&#x1EC3;u.</p><p><strong>3.2 Li&#xEA;n l&#x1EA1;c v&#x1EDB;i nhi&#x1EC1;u ng&#x1B0;&#x1EDD;i th&#xF4;ng qua 1 l&#x1EA7;n</strong></p><p>Tr&#x1B0;&#x1EDD;ng h&#x1EE3;p n&#xE0;y khi mu&#x1ED1;n chia s&#x1EBB; v&#x1EDB;i to&#xE0;n th&#x1EC3; c&#xF4;ng ty hay team. Khi mu&#x1ED1;n li&#xEA;n l&#x1EA1;c v&#x1EDB;i nhi&#x1EC1;u ng&#x1B0;&#x1EDD;i, c&#xF3; th&#x1EC3; s&#x1EED; d&#x1EE5;ng daily meeting ho&#x1EB7;c th&#x1EF1;c hi&#x1EC7;n khi meeting </p><p>Ngo&#xE0;i ra, n&#x1EBF;u c&#xF9;ng 1 li&#xEA;n l&#x1EA1;c &#x111;&#x1EBF;n nhi&#x1EC1;u ng&#x1B0;&#x1EDD;i th&#xEC; kh&#xF4;ng n&#xEA;n truy&#x1EC1;n mi&#x1EC7;ng m&#xE0; s&#x1EED; d&#x1EE5;ng mail ho&#x1EB7;c chat app &#x111;&#x1EC3; n&#x1ED9;i dung truy&#x1EC1;n &#x111;&#x1EA1;t &#x111;&#x1B0;&#x1EE3;c th&#x1ED1;ng nh&#x1EA5;t kh&#xF4;ng c&#xF3; s&#x1EF1; sai l&#x1EC7;ch.</p><p><strong>3.3 Trao &#x111;&#x1ED5;i sau khi &#x111;&#xE3; ch&#x1EC9;nh l&#xFD;</strong></p><p>Ng&#x1B0;&#x1EDD;i trao &#x111;&#x1ED5;i c&#xF3; th&#x1EC3; l&#xE0; s&#x1EBF;p, c&#x1EA5;p tr&#xEA;n, &#x111;&#x1ED3;ng nghi&#x1EC7;p, v&#xEC; th&#x1EBF; m&#xE0; n&#x1ED9;i dung s&#x1EBD; kh&#xE1;c nhau. V&#xEC; ch&#xFA;ng ta s&#x1EBD; s&#x1EED; d&#x1EE5;ng th&#x1EDD;i gian c&#x1EE7;a ng&#x1B0;&#x1EDD;i kh&#xE1;c n&#xEA;n h&#xE3;y nhanh ch&#xF3;ng truy&#x1EC1;n &#x111;&#x1EA1;t n&#x1ED9;i dung 1 c&#xE1;ch &#x111;&#x1A1;n gi&#x1EA3;n nh&#x1EA5;t. V&#xEC; th&#x1EBF; vi&#x1EC7;c quan tr&#x1ECD;ng l&#xE0; c&#x1EA7;n ch&#x1EC9;nh l&#xFD; l&#x1EA1;i th&#xF4;ng tin mu&#x1ED1;n trao &#x111;&#x1ED5;i</p><ul><li>B&#x1ED1;i c&#x1EA3;nh c&#x1EE7;a t&#xEC;nh tr&#x1EA1;ng hi&#x1EC7;n t&#x1EA1;i </li><li>M&#x1EE5;c ti&#xEA;u hi&#x1EC7;n t&#x1EA1;i</li><li>&#x110;&#x1EC3; ho&#xE0;n th&#xE0;nh th&#xEC; c&#x1EA7;n l&#xE0;m g&#xEC;</li></ul><p>Sau khi &#x111;&#xE3; ch&#x1EC9;nh l&#xFD; l&#x1EA1;i c&#xE1;c th&#xF4;ng tin tr&#xEA;n th&#xEC; c&#x1EA7;n truy&#x1EC1;n &#x111;&#x1EA1;t 1 c&#xE1;ch &#x111;&#x1A1;n gi&#x1EA3;n d&#x1EC5; hi&#x1EC3;u &#x111;&#x1EC3; &#x111;&#x1ED1;i ph&#x1B0;&#x1A1;ng nhanh ch&#xF3;ng hi&#x1EC3;u &#x111;&#x1B0;&#x1EE3;c v&#x1EA5;n &#x111;&#x1EC1;. Khi &#x111;&#xF3; s&#x1EBD; c&#xF3; th&#x1EC3; s&#x1EBD; d&#x1EC5; d&#xE0;ng &#x111;&#x1B0;a ra l&#x1EDD;i khuy&#xEA;n.</p><p>Nh&#x1B0; v&#x1EAD;y l&#xE0; m&#xEC;nh &#x111;&#xE3; gi&#x1EDB;i thi&#x1EC7;u m&#x1EE5;c &#x111;&#xED;ch v&#xE0; c&#xE1;c tr&#x1B0;&#x1EDD;ng h&#x1EE3;p c&#x1EA7;n s&#x1EED; d&#x1EE5;ng. Khi s&#x1EED; d&#x1EE5;ng th&#xEC; n&#xEA;n s&#x1EED; d&#x1EE5;ng nh&#x1B0; th&#x1EBF; n&#xE0;o cho hi&#x1EC7;u qu&#x1EA3; b&#xE1;o c&#xE1;o li&#xEA;n l&#x1EA1;c v&#xE0; trao &#x111;&#x1ED5;i.</p><p>Ch&#xFA;c c&#xE1;c b&#x1EA1;n th&#xE0;nh c&#xF4;ng trong c&#xF4;ng vi&#x1EC7;c v&#xE0; cu&#x1ED9;c s&#x1ED1;ng.</p><p>Tham kh&#x1EA3;o: <a href="https://go.chatwork.com/ja/column/business_chat/business-chat-185.html">https://go.chatwork.com/ja/column/business_chat/business-chat-185.html</a></p>]]></content:encoded></item></channel></rss>