<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tuan Tran</title>
    <link>https://ttuan.xyz/</link>
    <description>Recent posts by Tuan</description>
    <generator>Hugo -- gohugo.io</generator>
    <managingEditor>tuantv.nhnd@gmail.com (Tuan Tran)</managingEditor>
    <webMaster>tuantv.nhnd@gmail.com (Tuan Tran)</webMaster>
    <lastBuildDate>Wed, 29 Nov 2023 13:50:15 +0700</lastBuildDate>
    
        <atom:link href="https://ttuan.xyz/feed.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Articles Reading</title>
      <link>https://ttuan.xyz/articles-reading/</link>
      <pubDate>Mon, 28 Jul 2025 00:00:00 +0000</pubDate>
      <author>tuantv.nhnd@gmail.com (Tuan Tran)</author>
      <guid>https://ttuan.xyz/articles-reading/</guid>
      <description>

&lt;p&gt;Post này sẽ tổng hợp các bài Articles mình thấy có ích :v Vừa để lưu lại sau này dễ tìm, vừa để làm content cho chuyên mục &amp;ldquo;Đọc báo cuối tuần&amp;rdquo; =))&lt;/p&gt;

&lt;h2 id=&#34;2025-07-28&#34;&gt;2025-07-28&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@ashishps/system-design-was-hard-until-i-learned-these-30-concepts-78042ff99cae&#34; target=&#34;_blank&#34;&gt;System Design was HARD until I Learned these 30 Concepts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.finalroundai.com/blog/ai-vibe-coding-destroying-junior-developers-careers?ref=dailydev&#34; target=&#34;_blank&#34;&gt;How AI Vibe Coding Is Destroying Junior Developers&amp;rsquo; Careers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2024-09-27&#34;&gt;2024-09-27&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/&#34; target=&#34;_blank&#34;&gt;Learn Vim Progressively&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.moolenaar.net/habits.html&#34; target=&#34;_blank&#34;&gt;Seven habits of effective text editing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2024-07-31&#34;&gt;2024-07-31&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.hexdevs.com/posts/code-quality-ruby-on-rails/&#34; target=&#34;_blank&#34;&gt;How to Improve Code Quality on a Ruby on Rails Application&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2024-07-06&#34;&gt;2024-07-06&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://dev.to/alisamirali/mastering-solid-principles-1aa6&#34; target=&#34;_blank&#34;&gt;Mastering SOLID Principles ✅&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2024-02-21&#34;&gt;2024-02-21&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://zaidesanton.substack.com/p/the-most-underrated-skill-sql-for?ref=dailydev&#34; target=&#34;_blank&#34;&gt;Improve your SQL skills X2 in 5 minutes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2024-01-03&#34;&gt;2024-01-03&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.shakacode.com/blog/rails-7-1-adds-default-dockerfiles/&#34; target=&#34;_blank&#34;&gt;Rails 7.1 add default Dockerfile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://lucas.dohmen.io/posts/2024/01/01/rails-8-sneak-peek/&#34; target=&#34;_blank&#34;&gt;Rails 8 new features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://thoughtbot.com/blog/route-based-scaling-on-kubernetes-for-rails-monoliths&#34; target=&#34;_blank&#34;&gt;Route-Based Scaling on Kubernetes for Rails Monoliths&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/rails/rails/pull/47708&#34; target=&#34;_blank&#34;&gt;Thanh niên dùng ChatGPT tạo PR vào Rails =))&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://railsatscale.com/2023-10-24-memoization-pattern-and-object-shapes/&#34; target=&#34;_blank&#34;&gt;Performance impact of the memoization idiom on modern Ruby&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2023-05-04&#34;&gt;2023-05-04&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://vonheikemen.github.io/devlog/tools/configuring-neovim-using-lua/&#34; target=&#34;_blank&#34;&gt;Everything you need to know to configure neovim using lua&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://alpha2phi.medium.com/learn-neovim-the-practical-way-8818fcf4830f#545a&#34; target=&#34;_blank&#34;&gt;Learn Neovim The Practical Way&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://p5js.org/learn/debugging.html&#34; target=&#34;_blank&#34;&gt;A field guide to Debugging&lt;/a&gt;  ⭐⭐⭐⭐⭐&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2023-03-24&#34;&gt;2023-03-24&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://semaphoreci.com/blog/microservices-best-practices&#34; target=&#34;_blank&#34;&gt;Microservices Best Practices&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2022-11-29&#34;&gt;2022-11-29&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.widefix.com/actual-db-schema/&#34; target=&#34;_blank&#34;&gt;Actual DB Schema&lt;/a&gt; - Giữ DB schema nhất quán khi switch giữa các branch.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/rubycademy/the-evolution-of-ruby-strings-from-1-8-to-2-5-8b2ed8f39fad&#34; target=&#34;_blank&#34;&gt;The Evolution of Ruby Strings from 1.8 to 3.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://thevaluable.dev/vim-regular-expressions-in-depth/&#34; target=&#34;_blank&#34;&gt;Diving Deeper in Vim Regular Expressions&lt;/a&gt; - The Valuable Dev&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2022-10-25&#34;&gt;2022-10-25&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://thevaluable.dev/regular-expression-basics-vim-grep/&#34; target=&#34;_blank&#34;&gt;The Basics of Vim Regular Expressions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://richstone.io/heroku-alternatives-for-rails-projects-deploying-my-shit-on-fly-io/&#34; target=&#34;_blank&#34;&gt;Deploy Rails app to fly.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.testdouble.com/posts/2022-10-25-building-passwordless-email-auth-in-rails/&#34; target=&#34;_blank&#34;&gt;Building Passwordless Email Auth in Rails&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2022-08-30&#34;&gt;2022-08-30&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://thevaluable.dev/file-management-tools-linux-shell/&#34; target=&#34;_blank&#34;&gt;File Management Tools for Your Favorite Shell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://shopify.engineering/code-reviews-communication&#34; target=&#34;_blank&#34;&gt;When Culture and Code Reviews Collide, Communication is Key&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2022-08-17&#34;&gt;2022-08-17&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://bhserna.com/fetching-the-top-n-per-group-with-a-lateral-join-with-rails.html&#34; target=&#34;_blank&#34;&gt;Fetching the top n per group with a lateral join with rails&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2022-08-04&#34;&gt;2022-08-04&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://semaphoreci.com/blog/restructure-organization-microservice-applications&#34; target=&#34;_blank&#34;&gt;How to Restructure Your Organization for Microservice Applications&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2022-07-25&#34;&gt;2022-07-25&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://cloudash.dev/blog/best-practices-for-optimizing-lambda-functions&#34; target=&#34;_blank&#34;&gt;Best practices for optimizing lambda functions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2022-07-06&#34;&gt;2022-07-06&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://thoughtbot.com/blog/what-my-father-taught-me-about-software-development&#34; target=&#34;_blank&#34;&gt;What my father taught me about software development&lt;/a&gt; - Nice Article&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2022-06-10&#34;&gt;2022-06-10&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.appsignal.com/2022/06/08/add-feature-flags-in-ruby-on-rails-with-flipper.html&#34; target=&#34;_blank&#34;&gt;Add Feature Flags in Ruby on Rails with Flipper&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2022-05-27&#34;&gt;2022-05-27&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://thoughtbot.com/blog/a-case-for-query-objects-in-rails&#34; target=&#34;_blank&#34;&gt;A Case for Query Objects in Rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://rails-hosting.com/2022/#introduction&#34; target=&#34;_blank&#34;&gt;2022 Ruby on Rails Community Survey Results&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2022-05-24&#34;&gt;2022-05-24&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.arkency.com/keep-your-team-up-to-date-on-production-data-changes/&#34; target=&#34;_blank&#34;&gt;Keep your team up to date on production data changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nts.strzibny.name/understanding-viewcomponent-concepts/&#34; target=&#34;_blank&#34;&gt;Understanding ViewComponent concepts by building a button&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/event-streaming-rails-kafka/&#34; target=&#34;_blank&#34;&gt;Event Streaming in Rails with Kafka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.appsignal.com/2022/05/18/using-scientist-to-refactor-critical-ruby-on-rails-code.html&#34; target=&#34;_blank&#34;&gt;Using Scientist to Refactor Critical Ruby on Rails Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2022-05-13&#34;&gt;2022-05-13&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://andycroll.com/ruby/infrastructure-software-we-use-to-run-our-saas/&#34; target=&#34;_blank&#34;&gt;Software &amp;amp; Infrastructure we use to Run Our SaaS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2022-05-09&#34;&gt;2022-05-09&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://noelrappin.com/blog/2021/09/rails-7-and-javascript/&#34; target=&#34;_blank&#34;&gt;Rails and Javascript series: The evolution of JS with Rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://rubyonrails.org/doctrine&#34; target=&#34;_blank&#34;&gt;Rails Doctrine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://world.hey.com/dhh/rails-7-will-have-three-great-answers-to-javascript-in-2021-8d68191b&#34; target=&#34;_blank&#34;&gt;Rails 7 will have three great answers to JavaScript in 2021+&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2022-03-13&#34;&gt;2022-03-13&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://semaphoreci.com/blog/test-automation&#34; target=&#34;_blank&#34;&gt;The 6 Principles of Test Automation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://hanamimastery.com/episodes/17-inline-documentation-with-yard&#34; target=&#34;_blank&#34;&gt;Inline documentation - the secret habit of successful devs.&lt;/a&gt; - Nice article&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://hackaday.com/2019/03/05/good-code-documents-itself-and-other-hilarious-jokes-you-shouldnt-tell-yourself/&#34; target=&#34;_blank&#34;&gt;“GOOD CODE DOCUMENTS ITSELF” AND OTHER HILARIOUS JOKES YOU SHOULDN’T TELL YOURSELF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.arkency.com/dont-waste-your-time-on-assets-compilation-on-heroku/&#34; target=&#34;_blank&#34;&gt;Don&amp;rsquo;t waste your time on assets compilation on Heroku&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2022-03-03&#34;&gt;2022-03-03&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.bootrails.com/blog/rails-debug-with-ruby-debug/&#34; target=&#34;_blank&#34;&gt;Rails debug with ruby/debug&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.codewithjason.com/when-i-do-tdd-and-when-i-dont/&#34; target=&#34;_blank&#34;&gt;When I do TDD and when I dont&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.appsignal.com/2022/02/15/delayed-job-vs-sidekiq-which-is-better.html&#34; target=&#34;_blank&#34;&gt;Delayed Job vs Sidekiq - Which is better&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-11-17&#34;&gt;2021-11-17&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://dev.to/thegnarco/buffered-io-streams-in-ruby-mhl&#34; target=&#34;_blank&#34;&gt;Buffered IO Streams In Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.engineyard.com/developers-guide-scale-rails-apps&#34; target=&#34;_blank&#34;&gt;The Developers Guide To Scaling Rails Apps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dev.to/delbetu/join-vs-includes-vs-eager-load-vs-preload-36l3&#34; target=&#34;_blank&#34;&gt;Join vs includes vs eager load vs preload&lt;/a&gt; - Simple way&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-11-16&#34;&gt;2021-11-16&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://scottbartell.com/2021/09/29/ruby-clamp-and-minmax/&#34; target=&#34;_blank&#34;&gt;Exploring Ruby&amp;rsquo;s &amp;lsquo;clamp&amp;rsquo; and &amp;lsquo;minmax&amp;rsquo; methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://engineering.invoca.com/lessons-learned-in-a-major-rails-upgrade-strategy-1b0463ec41fc&#34; target=&#34;_blank&#34;&gt;Lessons learned in a major Rails upgrade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.thegnar.co/code-golf-conditionally-add-to-array&#34; target=&#34;_blank&#34;&gt;Code Golf: Conditionally Add To An Array&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/rubycademy/3-safe-ways-to-convert-values-into-array-in-ruby-c3990a5223ef&#34; target=&#34;_blank&#34;&gt;3 safe ways to convert values into array in Ruby&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-11-14&#34;&gt;2021-11-14&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.intermediateruby.com/how-to-audit-and-improve-your-ruby-rails-test-suite&#34; target=&#34;_blank&#34;&gt;How To Audit and Improve the Performance of Your RoR test Suite&lt;/a&gt; - Nice&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/sidekiq-job-flow&#34; target=&#34;_blank&#34;&gt;The Sidekiq job flow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/chat-app-rails-actioncable-turbo/&#34; target=&#34;_blank&#34;&gt;Building a Real-Time Chat App in Rails Using ActionCable and Turbo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/rails-on-kubernetes/&#34; target=&#34;_blank&#34;&gt;Run Your Rails App On Kubernetes: A Step-by-Step Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.engineyard.com/encrypted-credentials-in-rails-6.2-evolution&#34; target=&#34;_blank&#34;&gt;Evolution of Encrypted Credentials in Rails 6.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dev.to/vitaliipaprotskyi/what-does-class-self-actually-do-in-ruby-2on1&#34; target=&#34;_blank&#34;&gt;What does &amp;ldquo;class &amp;lt;&amp;lt; self&amp;rdquo; actually do in Ruby?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-11-13&#34;&gt;2021-11-13&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/readme/featured/why-the-lucky-stiff&#34; target=&#34;_blank&#34;&gt;What we can learn from “_why”, the long lost open source developer&lt;/a&gt; - Really nice story&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.hexdevs.com/posts/code-quality-ruby-on-rails/&#34; target=&#34;_blank&#34;&gt;How to Improve Code Quality on a Ruby on Rails Application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.appsignal.com/2021/10/20/optimistic-locking-in-rails-rest-apis.html&#34; target=&#34;_blank&#34;&gt;Optimistic Locking in Rails REST APIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ignaciochiazzo.medium.com/rack-middlewares-using-ruby-on-rails-af690b7bc3f8&#34; target=&#34;_blank&#34;&gt;Rack Middlewares in Ruby on Rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.ty-porter.dev/development/2021/08/23/metaprogramming-smarter-hashes.html&#34; target=&#34;_blank&#34;&gt;Metaprogramming Smarter Hashes in Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://hybrd.co/posts/github-issue-style-file-uploader-using-stimulus-and-active-storage&#34; target=&#34;_blank&#34;&gt;GitHub Issue-style File Uploader Using Stimulus and Active Storage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-11-10&#34;&gt;2021-11-10&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/hidden-gems-activesupport-descendants/&#34; target=&#34;_blank&#34;&gt;ActiveSupport&amp;rsquo;s #descendants Method: A Deep Dive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://andycroll.com/ruby/use-sidekiq-directly-not-through-active-job/&#34; target=&#34;_blank&#34;&gt;Use Sidekiq Directly, Not Through Active Job&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-11-06&#34;&gt;2021-11-06&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.appsignal.com/2021/09/21/how-to-reduce-memory-bloat-in-ruby.html&#34; target=&#34;_blank&#34;&gt;How to reduce memory bloat in Ruby&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-11-01&#34;&gt;2021-11-01&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://hanamimastery.com/articles/why-all-apis-are-inconsistent&#34; target=&#34;_blank&#34;&gt;Why ALL APIs are inconsistent?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://thoughtbot.com/blog/rubocop-custom-cops-for-custom-needs&#34; target=&#34;_blank&#34;&gt;Rubocop: Custom Cops for Custom Needs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-10-10&#34;&gt;2021-10-10&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/ruby-rbs-type-annotation/&#34; target=&#34;_blank&#34;&gt;Ruby rbs type annotation&lt;/a&gt; - New type syntax format language for Ruby.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/decoupling-ruby-delegation-dependency-injection/&#34; target=&#34;_blank&#34;&gt;Decoupling Ruby: Delegation vs Dependency Injection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.appsignal.com/2019/04/30/ruby-magic-hidden-gems-delegator-forwardable.html&#34; target=&#34;_blank&#34;&gt;Ruby&amp;rsquo;s Hidden Gems: Delegator and Forwardable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.rubypigeon.com/posts/value-semantics-gem-for-making-value-classes/&#34; target=&#34;_blank&#34;&gt;ValueSemantics - A gem for making value classes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.tomdalling.com/blog/software-design/what-is-the-purpose-of-private/&#34; target=&#34;_blank&#34;&gt;What Is The Purpose Of Private?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://konghq.com/blog/how-to-design-a-scalable-rate-limiting-algorithm/&#34; target=&#34;_blank&#34;&gt;How to Design a Scalable Rate Limiting Algorithm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/art-of-errors-in-ruby&#34; target=&#34;_blank&#34;&gt;The art of errors in Ruby&lt;/a&gt; - Nice article about handling errors.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://huzefabiyawarwala.medium.com/rails-on-docker-simplified-84c1bfb485c3&#34; target=&#34;_blank&#34;&gt;Rails On Docker Simplified&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://keygen.sh/blog/how-to-implement-totp-2fa-in-rails-using-rotp/&#34; target=&#34;_blank&#34;&gt;How to implement TOTP 2FA in Rails&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-09-21&#34;&gt;2021-09-21&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://jvns.ca/blog/2021/09/20/teaching-by-filling-in-knowledge-gaps/&#34; target=&#34;_blank&#34;&gt;Teaching by filling in knowledge gaps&lt;/a&gt; - Which are your knowledge gaps?&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.swyx.io/client-server-battle/&#34; target=&#34;_blank&#34;&gt;Why do Webdevs keep trying to kill REST?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-09-18&#34;&gt;2021-09-18&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.codewithjason.com/keep-rails-controllers-organized/&#34; target=&#34;_blank&#34;&gt;How I keep my Rails controllers organized&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pawelurbanek.com/optimize-rails-performance&#34; target=&#34;_blank&#34;&gt;My Recipe for Optimizing Performance of Rails Applications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://andycroll.com/ruby/compress-your-rails-html-responses-on-heroku/&#34; target=&#34;_blank&#34;&gt;Compress Your HTML Responses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://opensourcerails.org/&#34; target=&#34;_blank&#34;&gt;Open source Rails projects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/retention-science/ruby-is-still-a-diamond-b789d2661266&#34; target=&#34;_blank&#34;&gt;Ruby is Still a Diamond&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.matheusrich.com/dont-use-comments-use-code/&#34; target=&#34;_blank&#34;&gt;Don&amp;rsquo;t use comments! Use code.&lt;/a&gt; - Nice article&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.cloud66.com/taking-rails-to-the-next-level-with-hotwire/&#34; target=&#34;_blank&#34;&gt;Taking Rails to the next level with Hotwire&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-09-09&#34;&gt;2021-09-09&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://thoughtbot.com/blog/testing-your-edge-cases&#34; target=&#34;_blank&#34;&gt;Testing Your Edge Cases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://roadmap.sh/guides&#34; target=&#34;_blank&#34;&gt;Visual Guide&lt;/a&gt; - Nice guide to become a web developer&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-09-05&#34;&gt;2021-09-05&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/gce-cloud-storage-pubsub-uptime-monitoring-ruby/&#34; target=&#34;_blank&#34;&gt;Build an Uptime Monitoring System in Ruby with GCE, Cloud Storage, and PubSub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-08-29&#34;&gt;2021-08-29&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.nytimes.com/wirecutter/reviews/best-vpn-service/&#34; target=&#34;_blank&#34;&gt;The best VPN Service&lt;/a&gt; - Nice article to protect us from web surfing&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dev.to/devgraph/the-developers-guide-to-scaling-rails-apps-3kln&#34; target=&#34;_blank&#34;&gt;The developers guide to scaling Rails Apps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-08-23&#34;&gt;2021-08-23&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://world.hey.com/dhh/modern-web-apps-without-javascript-bundling-or-transpiling-a20f2755&#34; target=&#34;_blank&#34;&gt;Modern web apps without JavaScript bundling or transpiling&lt;/a&gt; - Nice Article&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jvns.ca/blog/confusing-explanations/&#34; target=&#34;_blank&#34;&gt;Patterns in confusing explanations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-08-17&#34;&gt;2021-08-17&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/building-app-rails-vue-vuex/&#34; target=&#34;_blank&#34;&gt;Building A Full-Stack Application With Vue, Vuex and Rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kubernetes-rails.com/&#34; target=&#34;_blank&#34;&gt;Deploying a Rails application to Kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/react-rails&#34; target=&#34;_blank&#34;&gt;React on Rails&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-08-14&#34;&gt;2021-08-14&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://viblo.asia/p/chat-chit-va-buc-tranh-ve-realtime-communication-maGK7vRA5j2&#34; target=&#34;_blank&#34;&gt;Chat chit và bức tranh về realtime communication&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-08-07&#34;&gt;2021-08-07&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/refactor-ruby-rails-service-object/&#34; target=&#34;_blank&#34;&gt;Refactor Ruby on Rails with Service Object&lt;/a&gt; - Nice article&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.codewithjason.com/productive-programming-day/&#34; target=&#34;_blank&#34;&gt;How to have a productive programming day&lt;/a&gt; - Nice article&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dev.to/truemark/search-engine-with-rails-and-elastic-search-5akf&#34; target=&#34;_blank&#34;&gt;Search Engine with Rails and Elastic Search&lt;/a&gt; - Nice tutorial&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.appsignal.com/2021/07/07/general-ruby-on-rails-problems-and-takeaways.html&#34; target=&#34;_blank&#34;&gt;General Ruby on Rails Problems and Takeaways&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.dmitry-ishkov.com/2021/07/ruby-http-server-from-ground-up.html&#34; target=&#34;_blank&#34;&gt;Understand HTTP by building a HTTP server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.thegnar.co/active-model-validations-csv&#34; target=&#34;_blank&#34;&gt;Validate CSV Input With ActiveModel::Validations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/documentation-worklow-rails/&#34; target=&#34;_blank&#34;&gt;Document workflow Rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://ja.cob.land/optimizing-memowise-performance&#34; target=&#34;_blank&#34;&gt;Optimize memowise performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.botreetechnologies.com/blog/ways-to-improve-web-performance-with-rails/&#34; target=&#34;_blank&#34;&gt;5 simple ways to imporve web performance with Rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://existentialmutt.com/2021/07/01/4-ways-to-make-a-gem/&#34; target=&#34;_blank&#34;&gt;4 way to make a gem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dev.to/truemark/update-multiple-records-at-once-in-rails-12m8&#34; target=&#34;_blank&#34;&gt;Update Multiple Records at Once in Rails&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-07-22&#34;&gt;2021-07-22&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.codewithjason.com/understanding-factory-bot-syntax-coding-factory-bot/&#34; target=&#34;_blank&#34;&gt;Build your own factory bot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/includes-method-in-rails&#34; target=&#34;_blank&#34;&gt;Include method in Rails&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-06-26&#34;&gt;2021-06-26&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://world.hey.com/jorge/a-story-of-rails-encryption-ce104b67&#34; target=&#34;_blank&#34;&gt;A story of Rails encryption&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/rails-security-authentication-leaks/&#34; target=&#34;_blank&#34;&gt;Rails Security Threats: Authentication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://eregon.me/blog/2021/06/04/review-of-ruby-installers-and-switchers.html&#34; target=&#34;_blank&#34;&gt;Review: Ruby Installers and Ruby Switchers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/handle-api-response-with-value-objects&#34; target=&#34;_blank&#34;&gt;Handle API response with value objects&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-05-22&#34;&gt;2021-05-22&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.dmitry-ishkov.com/2021/05/turbocharge-http-requests-in-ruby.html&#34; target=&#34;_blank&#34;&gt;Turbocharge HTTP requests in Ruby&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-05-16&#34;&gt;2021-05-16&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.moesif.com/blog/technical/cors/Authoritative-Guide-to-CORS-Cross-Origin-Resource-Sharing-for-REST-APIs/#&#34; target=&#34;_blank&#34;&gt;Authoritative guide to CORS (Cross-Origin Resource Sharing) for REST APIs&lt;/a&gt; - Nice Article&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.joyfulbikeshedding.com/blog/2019-03-14-what-causes-ruby-memory-bloat.html&#34; target=&#34;_blank&#34;&gt;What causes ruby memory bloat?&lt;/a&gt; - Nice&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@mccode/understanding-how-uid-and-gid-work-in-docker-containers-c37a01d01cf&#34; target=&#34;_blank&#34;&gt;Understanding how uid and gid work in Docker containers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://lipanski.com/posts/dockerfile-ruby-best-practices&#34; target=&#34;_blank&#34;&gt;Bestpractices to write Ruby Dockerfile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://piotrmurach.com/articles/working-with-capistrano-tasks-roles-and-variables/&#34; target=&#34;_blank&#34;&gt;Working with Capistrano: Tasks, Roles, and Variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://karma-runner.github.io/6.3/dev/git-commit-msg.html&#34; target=&#34;_blank&#34;&gt;Git commit Message&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-05-15&#34;&gt;2021-05-15&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/rails-ab-test&#34; target=&#34;_blank&#34;&gt;Your first A/B test with Rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dragonastronauts.com/2019/09/12/creating-multiple-models-with-form-objects-in-rails/&#34; target=&#34;_blank&#34;&gt;Creating multiple models with form objects in Rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.stevenrbaker.com/tech/history-of-rspec.html&#34; target=&#34;_blank&#34;&gt;History of RSpec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.greyblake.com/blog/2021-05-10-uuid-for-better-data-integrity/&#34; target=&#34;_blank&#34;&gt;UUID for better data integrity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.appsignal.com/2021/05/12/three-ways-to-avoid-duplicate-sidekiq-jobs.html&#34; target=&#34;_blank&#34;&gt;3 ways to advoid duplicate Sidekiq Jobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://solnic.codes/2021/05/11/the-5-rules-of-simple-rspec-tests/&#34; target=&#34;_blank&#34;&gt;5 rules of simple rspec tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jakeyesbeck.com/2021/04/10/avoid-models-in-migrations/&#34; target=&#34;_blank&#34;&gt;Avoid models in migrations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-05-05&#34;&gt;2021-05-05&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://tosbourn.com/ruby-on-rails-seo/&#34; target=&#34;_blank&#34;&gt;SEO for Ruby on Rails projects&lt;/a&gt; - Really nice article&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/rails-under-the-hood-routes&#34; target=&#34;_blank&#34;&gt;Rails under the hood: Routes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://frankgroeneveld.nl/2021/05/04/clean-up-html-class-attributes-in-ruby-on-rails/&#34; target=&#34;_blank&#34;&gt;Clean up HTML class attributes in Ruby on Rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/ruby-csv-common-issues&#34; target=&#34;_blank&#34;&gt;Common issues with CSV parsing and solutions to them&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.arkency.com/explaining-rack-desugaring-rack-builder-dsl/&#34; target=&#34;_blank&#34;&gt;Explaining Rack — desugaring Rack::Builder DSL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://rhardih.io/2021/04/listing-the-contents-of-a-remote-zip-archive-without-downloading-the-entire-file/&#34; target=&#34;_blank&#34;&gt;Listing the contents of a remote ZIP archive, without downloading the entire file&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-05-04&#34;&gt;2021-05-04&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://thedevpost.com/blog/12-most-asked-questions-about-ruby-on-rails/&#34; target=&#34;_blank&#34;&gt;12 Most Asked Questions About Ruby on Rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/git-tricks/&#34; target=&#34;_blank&#34;&gt;Top Ten Git Tips &amp;amp; Tricks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.scrapingbee.com/blog/best-ruby-http-clients/&#34; target=&#34;_blank&#34;&gt;Best Ruby HTTP Clients in 2021&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://earthly.dev/blog/brown-green-language/&#34; target=&#34;_blank&#34;&gt;Brown vs Green language&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.knapsackpro.com/2021/estimate-database-connections-pool-size-for-rails-application&#34; target=&#34;_blank&#34;&gt;Estimate database connections pool size for Rails application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://alexis.bernard.io/blog/2021-04-22/fast-text-search-with-postgresql-in-a-rails-project.html&#34; target=&#34;_blank&#34;&gt;Fast text search with PostgreSQL in a Rails project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.mikeperham.com/2021/04/20/a-tour-of-the-sidekiq-api/&#34; target=&#34;_blank&#34;&gt;A Tour of the Sidekiq API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nts.strzibny.name/improving-irb-with-custom-irbrc/&#34; target=&#34;_blank&#34;&gt;Improving IRB experience with a custom .irbrc&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-04-01&#34;&gt;2021-04-01&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ombulabs.com/blog/learning/software-development/the-s-in-solid.html&#34; target=&#34;_blank&#34;&gt;The S in SOLID&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://emmanuelhayford.com/dislodging-mimemagic-and-understanding-mit-gnu-gpl/&#34; target=&#34;_blank&#34;&gt;Dislodging mimemagic And Understanding MIT &amp;amp; GNU GPL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-03-25&#34;&gt;2021-03-25&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/the-magic-behind-ruby-on-rails-code&#34; target=&#34;_blank&#34;&gt;Explaining magic behind popular Ruby on Rails code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jvns.ca/blog/learn-how-things-work/&#34; target=&#34;_blank&#34;&gt;Get better at programming by learning how things work&lt;/a&gt; - Nice mindset&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-03-22&#34;&gt;2021-03-22&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/how-does-git-work/&#34; target=&#34;_blank&#34;&gt;How does Git work?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://fi.ort.edu.uy/innovaportal/file/2032/1/design_principles.pdf&#34; target=&#34;_blank&#34;&gt;Design Principles&lt;/a&gt; - Highly recommended&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/ruby-solid-design-principles/&#34; target=&#34;_blank&#34;&gt;Ruby SOLID Design Principles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.codewithjason.com/hybrid-approach-dockerizing-rails-applications/&#34; target=&#34;_blank&#34;&gt;My hybrid approach to Dockerizing Rails applications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.arkency.com/n-simple-ways-to-make-remote-work-less-lonely/&#34; target=&#34;_blank&#34;&gt;7 simple ways to make remote work feel less lonely&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-03-09&#34;&gt;2021-03-09&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/ruby-logger-lograge/&#34; target=&#34;_blank&#34;&gt;Logging in Ruby with Logger and Lograge&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-03-05&#34;&gt;2021-03-05&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/bundle-install-deep-dive&#34; target=&#34;_blank&#34;&gt;Inside Gemfile - intense dive in&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/the-family-of-anonymous-functions&#34; target=&#34;_blank&#34;&gt;The family of anonymous functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kipalog.com/posts/Caching-dai-phap-2--Cache-the-nao-cho-hop-ly&#34; target=&#34;_blank&#34;&gt;Caching đại pháp 2: Cache thế nào cho hợp lý?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-02-21&#34;&gt;2021-02-21&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.moesif.com/blog/financial/procurement/How-To-Be-An-Outstanding-Engineering-Manager-By-Investing-In-The-Right-Tools/&#34; target=&#34;_blank&#34;&gt;How to Be An Effective Engineering Manager By Investing In The Right Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://devchat.tv/ruby-rogues/ruby-487-our-development-setups/&#34; target=&#34;_blank&#34;&gt;Our development setups&lt;/a&gt; - Setup development workspace&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kipalog.com/posts/Caching-dai-phap-1--Nac-thang-len-level-cua-developer&#34; target=&#34;_blank&#34;&gt;Caching đại pháp 1: Nấc thang lên level của developer&lt;/a&gt; - Nice article&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/ruby-code-loader-zeitwerk/&#34; target=&#34;_blank&#34;&gt;Code Loaders in Ruby: Understanding Zeitwerk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/rails-design-patterns-the-big-picture&#34; target=&#34;_blank&#34;&gt;Rails design patterns&lt;/a&gt; - Tổng hợp một số design patterns trong Rails&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-02-08&#34;&gt;2021-02-08&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.engineyard.com/balancing-developer-productivity-code-quality-0-0&#34; target=&#34;_blank&#34;&gt;Writing an Instant Poll Rails App in a Single File&lt;/a&gt; - Rails app in 1 file&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://lbarasti.com/post/ruby_ractor/&#34; target=&#34;_blank&#34;&gt;Parallelism in Ruby with Ractors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jemma.dev/blog/gc-internal&#34; target=&#34;_blank&#34;&gt;Ruby Garbage Collection Deep Dive: GC::INTERNAL_CONSTANTS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-02-03&#34;&gt;2021-02-03&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://toidicodedao.com/2021/02/02/ngam-nguoi-ta-khong-danh-gia-ban-qua-ki-nang-ma-danh-gia-theo-thanh-tuu/&#34; target=&#34;_blank&#34;&gt;NGƯỜI TA KHÔNG ĐÁNH GIÁ BẠN QUA KĨ NĂNG, MÀ ĐÁNH GIÁ THEO THÀNH TỰU&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://andycroll.com/ruby/convert-iso-country-code-to-emoji-flag/&#34; target=&#34;_blank&#34;&gt;Convert a two character ISO country code to an emoji flag&lt;/a&gt; - From country code to country flag&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://toidicodedao.com/2021/01/26/khi-code-ma-bi-thi-phai-lam-sao-5-kinh-nghiem-sieu-hay-de-giai-quyet-van-de/&#34; target=&#34;_blank&#34;&gt;KHI CODE MÀ BÍ THÌ PHẢI LÀM SAO? 5 KINH NGHIỆM SIÊU HAY ĐỂ GIẢI QUYẾT VẤN ĐỀ&lt;/a&gt; - Nice article&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://emmanuelhayford.com/understanding-the-bcrypt-hashing-function-and-its-role-in-rails/&#34; target=&#34;_blank&#34;&gt;Understanding The bcrypt Hashing Function And Its Role in Rails&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-01-29&#34;&gt;2021-01-29&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@CGA1123/reducing-rails-memory-usage-by-15-56090b6294bd&#34; target=&#34;_blank&#34;&gt;Reducing Rails Memory Usage by ~15%&lt;/a&gt; - Nice Articles - How Puma works&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://emmanuelhayford.com/3-practical-uses-of-ruby-method-missing/&#34; target=&#34;_blank&#34;&gt;3 Practical Uses of Ruby&amp;rsquo;s &amp;ldquo;method_missing&amp;rdquo; You Should Know&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kipalog.com/posts/Performance-Optimization-104--Trinh-sat-ung-dung-voi-monitoring&#34; target=&#34;_blank&#34;&gt;Performance Optimization 104: Trinh sát ứng dụng với monitoring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/rails-routes-less-known-features&#34; target=&#34;_blank&#34;&gt;Rails routes - less known features&lt;/a&gt; - Some hidden features of Rails routes :v&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-01-19&#34;&gt;2021-01-19&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://nextlinklabs.com/insights/most-common-technical-debt-in-rails-projects&#34; target=&#34;_blank&#34;&gt;Most Common Types of Technical Debt in Rails&lt;/a&gt; - =)) Technical Debt =))&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.fastruby.io/blog/tags/upgrades&#34; target=&#34;_blank&#34;&gt;The Rails Upgrade Series&lt;/a&gt; - Complete upgrade series&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/ruby-aws-lambda/&#34; target=&#34;_blank&#34;&gt;Building, Testing and Deploying AWS Lambda Functions in Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.appsignal.com/2021/01/13/using-mixins-and-modules-in-your-ruby-on-rails-application.html&#34; target=&#34;_blank&#34;&gt;How to Use Mixins and Modules in Your Ruby on Rails Application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://toidicodedao.com/2021/01/20/cac-anti-pattern-nen-tranh-de-code-khong-bien-thanh-dong-rac/&#34; target=&#34;_blank&#34;&gt;CÁC ANTI-PATTERN NÊN TRÁNH ĐỂ CODE KHÔNG BIẾN THÀNH ĐỐNG RÁC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.fastruby.io/blog/rails/upgrade/testing/how-to-upgrade-rails-without-tests.html&#34; target=&#34;_blank&#34;&gt;How to Upgrade Rails Without a Test Suite&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-01-12&#34;&gt;2021-01-12&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.speedshop.co/2021/01/04/100-ms-to-glass-with-rails-and-turbolinks.html&#34; target=&#34;_blank&#34;&gt;How To Use Turbolinks to Make Fast Rails Apps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.speedshop.co/2021/01/04/secrets-to-speedy-ruby-apps-on-heroku.html&#34; target=&#34;_blank&#34;&gt;Make your Ruby or Rails App Faster on Heroku&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2021-01-11&#34;&gt;2021-01-11&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://thoughtbot.com/blog/zero-downtime-rails-deployments-with-kubernetes&#34; target=&#34;_blank&#34;&gt;Zero Downtime Rails Deployments with Kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/Yegorov/awesome-ruby-blogs&#34; target=&#34;_blank&#34;&gt;Awesome Ruby Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kipalog.com/posts/Performance-Optimization-101--Nhung-cau-hoi-co-ban&#34; target=&#34;_blank&#34;&gt;Performance Optimization 101: Những câu hỏi cơ bản&lt;/a&gt; - Really nice series&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/rails-request-cycle&#34; target=&#34;_blank&#34;&gt;Rails request cycle explained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kirshatrov.com/2021/01/06/ruby-concurrency-and-ecosystem/&#34; target=&#34;_blank&#34;&gt;Ruby 3, concurrency and the ecosystem&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-12-28&#34;&gt;2020-12-28&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.greyblake.com/blog/2020-12-21-hidden-cost-of-string-indexing-in-ruby/&#34; target=&#34;_blank&#34;&gt;Hidden cost of string indexing in Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.johnnunemaker.com/rails-easy-sitemaps/&#34; target=&#34;_blank&#34;&gt;Rails: Easy Sitemaps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bigbinary.com/blog/ruby-3-features&#34; target=&#34;_blank&#34;&gt;Ruby 3 is released - The list of Ruby 3 features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.fastruby.io/blog/rails/upgrade/prepare-for-rails-upgrade.html&#34; target=&#34;_blank&#34;&gt;How to Prepare Your Rails App for an Upgrade&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://codefol.io/posts/is-ruby-3-actually-three-times-faster/&#34; target=&#34;_blank&#34;&gt;Is Ruby 3 Actually Three Times Faster?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://scraperbox.com/blog/web-scraping-with-ruby&#34; target=&#34;_blank&#34;&gt;Web Scraping with Ruby&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-12-20&#34;&gt;2020-12-20&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ideamotive.co/blog/ruby-on-rails-experts-to-follow/&#34; target=&#34;_blank&#34;&gt;30 Ruby on Rails Experts, Bloggers and Influencers to Follow in 2020&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mikerogers.io/2020/12/14/how-to-make-rails-work-offline-via-service-workers&#34; target=&#34;_blank&#34;&gt;How to Make Rails Work Offline (PWA)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://codefol.io/posts/when-should-you-not-use-rails/&#34; target=&#34;_blank&#34;&gt;When Should You NOT Use Rails?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-12-14&#34;&gt;2020-12-14&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/rubycademy/the-evolution-of-ruby-strings-from-1-8-to-2-5-8b2ed8f39fad&#34; target=&#34;_blank&#34;&gt;The Evolution of Ruby Strings from 1.8 to 2.7&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-12-10&#34;&gt;2020-12-10&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://zachahn.com/posts/1607312460/&#34; target=&#34;_blank&#34;&gt;Overriding Rails’ field_error_proc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kirshatrov.com/2020/11/15/org-layers-of-abstraction/&#34; target=&#34;_blank&#34;&gt;Organizations and layers of abstraction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://buildingvts.com/diagnosing-performance-issues-in-rails-applications-9418eb5d872&#34; target=&#34;_blank&#34;&gt;Diagnosing performance issues in Rails applications&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-12-07&#34;&gt;2020-12-07&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://jvns.ca/blog/2020/12/05/day-20--trying-to-run-a-rails-app-in-google-cloud-run/&#34; target=&#34;_blank&#34;&gt;Trying to run a Rails app in GCP&lt;/a&gt; - =))))&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=tarmCEHfGa0&amp;amp;ab_channel=Semicolon%26Sons&#34; target=&#34;_blank&#34;&gt;Video - Code Diary: How and Why to Keep One&lt;/a&gt;- Manage your doc/tasks/notes with Code Diary&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-12-04&#34;&gt;2020-12-04&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.peterzhu.ca/ruby-range-bsearch/&#34; target=&#34;_blank&#34;&gt;1.5 is the midpoint between 0 and infinity in Ruby&lt;/a&gt; - Nice article&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://scottw.com/blog/tally/&#34; target=&#34;_blank&#34;&gt;Ruby Enumerable#tally&lt;/a&gt; - Ruby tally methods&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.engineyard.com/best-docker-container-tools-and-resources&#34; target=&#34;_blank&#34;&gt;Best Docker container tools and resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-11-30&#34;&gt;2020-11-30&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://rubyyagi.com/auto-migrate-heroku/&#34; target=&#34;_blank&#34;&gt;Automatically migrate database when pushing to Heroku&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-11-27&#34;&gt;2020-11-27&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/imgproxy/imgproxy&#34; target=&#34;_blank&#34;&gt;imgproxy&lt;/a&gt; - fast and secure on-the-fly image processing&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ruby3.dev/syntax-and-metaprogramming/2020/11/25/if-ruby-had-imports/&#34; target=&#34;_blank&#34;&gt;If Ruby had Import ..&lt;/a&gt; - How Ruby import module/class&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.eq8.eu/til/imagemagic-cache-resources-exhausted.html&#34; target=&#34;_blank&#34;&gt;imagemagic cache resources exhausted&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-11-25&#34;&gt;2020-11-25&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.bigbinary.com/2020/11/24/using-cloudfront-cdn-to-reduce-asset-delivery-time-from-30-seconds-to-3-seconds.html&#34; target=&#34;_blank&#34;&gt;Using Cloudfront CDN to reduce asset delivery time from 30 seconds to 3 seconds&lt;/a&gt; - Cache with Cloudfront&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.moncefbelyamani.com/a-trip-down-memory-lane-with-derailed-benchmarks/&#34; target=&#34;_blank&#34;&gt;A Trip Down Memory Lane With Derailed Benchmarks&lt;/a&gt; - Reduce gem memory usage&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://toidicodedao.com/2020/11/24/tu-thuyet-cua-so-vo-den-nhung-dong-code-tom-dan-deu-theo-nam-thang/&#34; target=&#34;_blank&#34;&gt;TỪ THUYẾT CỬA SỔ VỠ, ĐẾN NHỮNG DÒNG CODE TỞM DẦN ĐỀU THEO NĂM THÁNG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.fastruby.io/blog/ruby/performance/how-fast-are-ractors.html&#34; target=&#34;_blank&#34;&gt;How Fast are Ractors?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-11-24&#34;&gt;2020-11-24&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.pjam.me/posts/ruby-symbol-to-proc-the-short-version/&#34; target=&#34;_blank&#34;&gt;Ruby Symbol to Proc explained, the short version&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ruby3.dev/syntax-and-metaprogramming/2020/11/19/where-do-blocks-come-from/&#34; target=&#34;_blank&#34;&gt;Where Do Ruby Blocks Come From?&lt;/a&gt; - Interesting things about block&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-11-20&#34;&gt;2020-11-20&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.mayerdan.com/ruby/2020/11/15/benchmarking-JSON-parser&#34; target=&#34;_blank&#34;&gt;Benchmarking JSON parser&lt;/a&gt; - Compare OJ, SimpdJSON and FastJsonParser&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zverok.github.io/blog/2020-11-19-arg_defaults.html&#34; target=&#34;_blank&#34;&gt;Fun with Ruby method argument defaults&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/mcmire/super_diff&#34; target=&#34;_blank&#34;&gt;Super diff Gem - Better way to view diff JSON&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://code.dblock.org/2020/11/11/dup-dont-modify-input-hash-parameters-in-ruby.html&#34; target=&#34;_blank&#34;&gt;Dup, Don&amp;rsquo;t modify input hash param&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-11-16&#34;&gt;2020-11-16&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.objectrocket.com/blog/how-to/10-quick-tips-about-redis/&#34; target=&#34;_blank&#34;&gt;10 Quick tips about redis&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-11-14&#34;&gt;2020-11-14&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://kipalog.com/posts/The-nao-moi-la-1-DevOps-that-su&#34; target=&#34;_blank&#34;&gt;Thế nào mới là 1 DevOps thật sự&lt;/a&gt; - Bài viết khá thú vị về DevOps&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kipalog.com/posts/He-thong-analytic--suong-suong--tu-du-lieu-30-trieu-nguoi-dung&#34; target=&#34;_blank&#34;&gt;Hệ thống analytic &amp;ldquo;sương sương&amp;rdquo; từ dữ liệu 30 triệu người dùng&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-11-11&#34;&gt;2020-11-11&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://pawelurbanek.com/frontend-performance-optimization&#34; target=&#34;_blank&#34;&gt;Low Hanging Fruits in Frontend Performance Optimization&lt;/a&gt; - Nice article - Optimize Frontend performance&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/art-of-errors-in-ruby&#34; target=&#34;_blank&#34;&gt;The Art of error&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://scoutapm.com/blog/removing-deadweight-cleaning-up-our-rails-app&#34; target=&#34;_blank&#34;&gt;Removing deadweight - Cleaning up our Rails app&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-11-09&#34;&gt;2020-11-09&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://kipalog.com/posts/Open-Source-Story--Agar-IO-Clone&#34; target=&#34;_blank&#34;&gt;Open Source Story: Agar.IO Clone&lt;/a&gt; - Câu chuyện về việc a Huy viết Agar.io clone. Có rất nhiều ý tưởng, keyword hay ho (ví dụ &lt;a href=&#34;https://en.wikipedia.org/wiki/Quadtree&#34; target=&#34;_blank&#34;&gt;Quadtree&lt;/a&gt; :v )&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.codewithjason.com/different-kinds-rails-tests-use/&#34; target=&#34;_blank&#34;&gt;What are the different kinds of Rails tests and when should I use each?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.mikeperham.com/2020/11/09/the-leaky-bucket-rate-limiter/&#34; target=&#34;_blank&#34;&gt;The Leaky Bucket rate limiter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-11-04&#34;&gt;2020-11-04&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://pawelurbanek.com/pihole-local-computer&#34; target=&#34;_blank&#34;&gt;How to Setup Pi-hole on a Local Computer without Raspberry Pi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/ruby-command-line-application-homebrew&#34; target=&#34;_blank&#34;&gt;Create command line application with Ruby available via Homebrew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://toidicodedao.com/2019/10/08/message-queue-la-gi-ung-dung-microservice/&#34; target=&#34;_blank&#34;&gt;Message Queue trong hệ thống lớn và microservice &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-11-03&#34;&gt;2020-11-03&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://bilbof.com/2020/05/17/effective-daily-standups.html&#34; target=&#34;_blank&#34;&gt;Effective daily standups&lt;/a&gt; - Daily standups nên focus vào team và cách làm việc, support lẫn nhau hơn là những câu hỏi hqua/hnay làm gì, có gì đang block không? =))&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://samsaffron.com/archive/2019/10/08/debugging-unmanaged-and-hidden-memory-leaks-in-ruby&#34; target=&#34;_blank&#34;&gt;Debugging hidden memory leaks in Ruby&lt;/a&gt; - Nice author, nice articles&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.netguru.com/blog/most-loved-ruby-on-rails-open-source&#34; target=&#34;_blank&#34;&gt;Most Loved Ruby on Rails Open Source Projects&lt;/a&gt; - Biết để vào github đọc source code =))&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.moesif.com/blog/technical/timestamp/manage-datetime-timestamp-timezones-in-api/&#34; target=&#34;_blank&#34;&gt;Based on thousands of APIs, what is the best approaches and format for handling timezone, timestamps, and datetime in APIs and Apps&lt;/a&gt; - Nên đọc cả article + comments, về case study khi xử lý timezone, timestamps and datetime.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://tenderlovemaking.com/2020/01/13/guide-to-string-encoding-in-ruby.html&#34; target=&#34;_blank&#34;&gt;Guide to string encoding in Ruby&lt;/a&gt; - Nice article about string encoding :D&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sourcey.com/articles/building-the-perfect-rails-api&#34; target=&#34;_blank&#34;&gt;Building the perfect Rails API&lt;/a&gt; - Những việc nên làm khi build Rails API&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@daniellempesis/speeding-up-your-ruby-on-rails-app-4c37ec71b126&#34; target=&#34;_blank&#34;&gt;Speeding up your RoR app&lt;/a&gt; - Tăng tốc cho Rails app&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://rossta.net/blog/visual-guide-to-webpacker.html&#34; target=&#34;_blank&#34;&gt;Webpacker in Rails - A visual guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-11-02&#34;&gt;2020-11-02&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.rubyguides.com/2019/05/ruby-ascii-unicode/&#34; target=&#34;_blank&#34;&gt;Understanding Ruby: String Encoding, ASCII &amp;amp; Unicode&lt;/a&gt; - Nice article about Ruby string encoding, ASCII and Unicode&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://rubylearning.com/satishtalim/mutable_and_immutable_objects.html&#34; target=&#34;_blank&#34;&gt;Mutable and Immutable Objects&lt;/a&gt; - Nice article about mutable and immutable object&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.eq8.eu/til/ruby-logs-and-puts-not-shown-in-docker-container-logs.html&#34; target=&#34;_blank&#34;&gt;Ruby logs and puts not shown in docker container logs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://doctrina.org/How-RSA-Works-With-Examples.html&#34; target=&#34;_blank&#34;&gt;How RSA work?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-11-01&#34;&gt;2020-11-01&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.chrismytton.com/ruby-the-not-so-good-parts/&#34; target=&#34;_blank&#34;&gt;Ruby - The not so good path&lt;/a&gt; - Một số vấn đề chưa tốt trong Ruby&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/how-sidekiq-really-works&#34; target=&#34;_blank&#34;&gt;How Sidekiq really works&lt;/a&gt; - Deep dive into Sidekiq&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.planetargon.com/entries/things-i-learned-as-an-intern-that-i-did-not-learn-in-code-bootcamp&#34; target=&#34;_blank&#34;&gt;Things I Learned as an Intern that I Did Not Learn in Code Bootcamp
&lt;/a&gt; - Những bài học của 1 intern :D&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://rubyyagi.com/tailwind-css-on-rails-6-intro/&#34; target=&#34;_blank&#34;&gt;Getting started with Tailwind CSS on Rails 6&lt;/a&gt; - Hướng dẫn apply Tailwind vào Rails 6&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.codewithjason.com/make-sure-really-understand-feature-building/&#34; target=&#34;_blank&#34;&gt;How I make sure I really understand a feature before building it&lt;/a&gt; - Làm sao để chắc chắn bạn hiểu feature trước khi build nó?&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.driftingruby.com/episodes/benchmark-ruby-code&#34; target=&#34;_blank&#34;&gt;Benchmark Ruby Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nts.strzibny.name/ruby-build-and-ruby-install/&#34; target=&#34;_blank&#34;&gt;Installing Ruby with ruby-build and ruby-install&lt;/a&gt; - Phân biệt ruby-build vs ruby-install&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.mayurkumar.info/11-Terminal-shortcuts-that-will-make-you-Rockstar/&#34; target=&#34;_blank&#34;&gt;11 Terminal shortcuts that will make you Rockstar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://kipalog.com/posts/PlantUML---Tool-ve-cac-bieu-do-voi-nhung-dong-code-don-gian--nhanh-chong--tien-loi-89c0def9-999d-4a57-85a1-d6cd7cdec29e&#34; target=&#34;_blank&#34;&gt;PlantUML Tool&lt;/a&gt; - Tool đơn giản để vẽ UML&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.fastruby.io/blog/rails/performance/ruby/best-ec2-instance-for-rails-apps.html&#34; target=&#34;_blank&#34;&gt;What&amp;rsquo;s the Best EC2 Instance Type for Rails Apps?&lt;/a&gt; - Lựa chọn EC2 instances phù hợp với Rails Apps&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/rails-procedure-design-pattern&#34; target=&#34;_blank&#34;&gt;Rails procedure Design Pattern&lt;/a&gt; - Pattern cho việc xử lý mấy task liên quan tới step.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-10-24&#34;&gt;2020-10-24&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://longliveruby.com/articles/the-magic-behind-ruby-code&#34; target=&#34;_blank&#34;&gt;Explaining magic behind popular Ruby code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://engineering.wootric.com/scaling-wootrics-ruby-on-rails-monolith&#34; target=&#34;_blank&#34;&gt;Scaling Wootric’s Ruby on Rails Monolith&lt;/a&gt; - Bundle with private gem&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://tekin.co.uk/2020/10/better-git-diff-output-for-ruby-python-elixir-and-more&#34; target=&#34;_blank&#34;&gt;Better Git diff output for Ruby, Python, Elixir, Go and more&lt;/a&gt; - Config để nhìn output Git diff cho xịn xò hơn :v&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.mayerdan.com/ruby/2020/10/22/ar-find_or_create&#34; target=&#34;_blank&#34;&gt;Performance Benchmarks &amp;amp; Considerations between &lt;code&gt;create_or_find_by&lt;/code&gt; &amp;amp; &lt;code&gt;find_or_create_by&lt;/code&gt;&lt;/a&gt; - Đo benchmark 2 hàm của AR :v&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dev.to/coorasse/rails-api-be-nice-to-your-clients-1aep&#34; target=&#34;_blank&#34;&gt;Rails API: be nice to your clients&lt;/a&gt; - Config Rails API&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dev.betterdoc.org/ruby,/rails,/excel/2020/10/16/sane-excel-file-generation-with-ruby-on-rails.html&#34; target=&#34;_blank&#34;&gt;Sane Excel file generation with Ruby on Rails&lt;/a&gt; - Nice approach to generate excel file&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.botreetechnologies.com/blog/enable-ssl-for-rails-development-environment-two-minutes&#34; target=&#34;_blank&#34;&gt;How To Enable SSL For Rails Development Environment In Two Minutes&lt;/a&gt; - Đọc cho biết =)) Thực ra dùng ngrok nhanh hơn =))&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.abhaynikam.me/posts/introducing_boring_generators/&#34; target=&#34;_blank&#34;&gt;Introducing Boring Generators&lt;/a&gt; - Gem dùng để generate các code thường dùng&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/rubycademy/context-binding-in-ruby-fa118ea62269&#34; target=&#34;_blank&#34;&gt;Context Binding in Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/readme&#34; target=&#34;_blank&#34;&gt;Github README&lt;/a&gt; =))))&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-08-11&#34;&gt;2020-08-11&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://kipalog.com/posts/Nghe-thuat-xu-ly-background-job&#34; target=&#34;_blank&#34;&gt;Nghệ thuật xử lý background job&lt;/a&gt; - Xử lý background job cho bớt nông dân =))&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://piotrmurach.com/articles/streaming-large-zip-files-in-rails/&#34; target=&#34;_blank&#34;&gt;Streaming Large ZIP Files in Rails&lt;/a&gt; - Stream large ZIP files (nice article)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://dev.to/kwstannard/dotenv-but-7-lines-of-ruby-19lp&#34; target=&#34;_blank&#34;&gt;dotenv but 3 lines of ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://codewithoutrules.com/2020/04/20/productivity-skills/&#34; target=&#34;_blank&#34;&gt;The secret skills of productive programmers&lt;/a&gt; - Làm thế nào để trở thành productive programmer?&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.eq8.eu/philosophy/software-philosophy-quotes-and-memes.html&#34; target=&#34;_blank&#34;&gt;Software Philosophy Quotes and Memes&lt;/a&gt; - Tư liệu fun fun để làm slide =)))&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/BluezoneGlobal/react-native-bluetooth-scan/issues/17&#34; target=&#34;_blank&#34;&gt;Một số đề nghị với team Bluezone #17&lt;/a&gt; - just Hóng phốt =))&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;2020-08-07&#34;&gt;2020-08-07&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.honeybadger.io/blog/ruby-external-api-test/&#34; target=&#34;_blank&#34;&gt;How to Test Ruby Code That Depends on External APIs&lt;/a&gt; - Test Ruby code với external APIs&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pawelurbanek.com/rails-query-caching&#34; target=&#34;_blank&#34;&gt;How to Improve ActiveRecord Query Performance with Subquery Caching&lt;/a&gt; - Tăng hiệu năng của AR query với subquery caching&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://tenderlovemaking.com/2019/06/26/instance-variable-performance.html&#34; target=&#34;_blank&#34;&gt;Instance Variable Performance&lt;/a&gt; - Great Article - Đánh giá về performance của instance vartiable&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://toidicodedao.com/2020/08/04/developer-tien-hoa-phan-1/&#34; target=&#34;_blank&#34;&gt;Developer tiến hoá&lt;/a&gt; - =))))&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/ncase/trust&#34; target=&#34;_blank&#34;&gt;Game - The Evolution of Trust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://devblast.com/b/prepare-for-a-ruby-job-interview/&#34; target=&#34;_blank&#34;&gt;Prepare for a Ruby job interview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;nice-articles-which-are-saved&#34;&gt;Nice articles which are saved&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://kipalog.com/posts/71-giao-dien-nguoi-dung-tuyet-voi----Good-UI--Phan-1&#34; target=&#34;_blank&#34;&gt;71 giao diện người dùng tuyệt vời&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.catb.org/esr/faqs/smart-questions.html&#34; target=&#34;_blank&#34;&gt;How to ask questions the smart way&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.justinweiss.com/articles/how-rails-sessions-work/&#34; target=&#34;_blank&#34;&gt;How Rails Sessions Work&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.toptal.com/ruby-on-rails/decoupling-rails-components&#34; target=&#34;_blank&#34;&gt;Build Sleek Rails Components With Plain Old Ruby Objects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.sitepoint.com/common-rails-security-pitfalls-and-their-solutions/?utm_source=rubyweekly&amp;amp;utm_medium=email&#34; target=&#34;_blank&#34;&gt;Common Rails Security Pitfalls and their solutions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://rubygarage.org/blog/how-to-interview-your-ruby-on-rails-developer&#34; target=&#34;_blank&#34;&gt;How to interview your ruby on rails developer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://infinum.com/the-capsized-eight/best-ruby-on-rails-refactoring-talks&#34; target=&#34;_blank&#34;&gt;Best Ruby on Rails refactoring talks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/@rebo_dood/the-benefits-of-materialized-views-and-how-to-use-them-in-your-ruby-on-rails-project-4ac1b5432881&#34; target=&#34;_blank&#34;&gt;The Benefits of Materialized Views (and how to use them in your Ruby on Rails project)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://viblo.asia/p/6-dieu-rut-ra-khi-lam-viec-o-du-an-lon-bxjvZOBjGJZ&#34; target=&#34;_blank&#34;&gt;6 điều rút ra khi làm việc ở dự án lớn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://thoughtbot.com/blog/validation-database-constraint-or-both&#34; target=&#34;_blank&#34;&gt;Validation, Database Constraint, or Both?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://thoughtbot.com/blog/best-resources-to-upskill-your-technical-team&#34; target=&#34;_blank&#34;&gt;Best Resources to Upskill Your Technical&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://codegolf.stackexchange.com/&#34; target=&#34;_blank&#34;&gt;Code golf&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Pessimistic Version Contraint</title>
      <link>https://ttuan.xyz/til/others/pessimistic_version_constraint/</link>
      <pubDate>Thu, 24 Apr 2025 00:00:00 +0000</pubDate>
      <author>tuantv.nhnd@gmail.com (Tuan Tran)</author>
      <guid>https://ttuan.xyz/til/others/pessimistic_version_constraint/</guid>
      <description>

&lt;h1 id=&#34;pessimistic-version-constraint&#34;&gt;Pessimistic Version Constraint&lt;/h1&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Language (Tool)&lt;/th&gt;
&lt;th&gt;Syntax Example&lt;/th&gt;
&lt;th&gt;Interprets As&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;

&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Ruby (Bundler)&lt;/td&gt;
&lt;td&gt;~&amp;gt; 1.2.3&lt;/td&gt;
&lt;td&gt;&amp;gt;= 1.2.3 and &amp;lt; 1.3.0&lt;/td&gt;
&lt;td&gt;Only patch updates allowed&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;~&amp;gt; 1.2&lt;/td&gt;
&lt;td&gt;&amp;gt;= 1.2.0 and &amp;lt; 2.0.0&lt;/td&gt;
&lt;td&gt;Minor &amp;amp; patch updates allowed&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;~&amp;gt; 0.2.3&lt;/td&gt;
&lt;td&gt;&amp;gt;= 0.2.3 and &amp;lt; 0.3.0&lt;/td&gt;
&lt;td&gt;In pre-1.0, minor is treated as breaking&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Node.js (npm/yarn)&lt;/td&gt;
&lt;td&gt;~1.2.3&lt;/td&gt;
&lt;td&gt;&amp;gt;= 1.2.3 and &amp;lt; 1.3.0&lt;/td&gt;
&lt;td&gt;Similar to Ruby&amp;rsquo;s ~&amp;gt;&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;^1.2.3&lt;/td&gt;
&lt;td&gt;&amp;gt;= 1.2.3 and &amp;lt; 2.0.0&lt;/td&gt;
&lt;td&gt;Allows minor &amp;amp; patch updates (more open than ~&amp;gt;)&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;^0.2.3&lt;/td&gt;
&lt;td&gt;&amp;gt;= 0.2.3 and &amp;lt; 0.3.0&lt;/td&gt;
&lt;td&gt;Special rule for 0.x versions&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Python (pip)&lt;/td&gt;
&lt;td&gt;~= 1.2.3&lt;/td&gt;
&lt;td&gt;&amp;gt;= 1.2.3 and &amp;lt; 1.3.0&lt;/td&gt;
&lt;td&gt;Introduced in PEP 440&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;PHP (Composer)&lt;/td&gt;
&lt;td&gt;~1.2.3&lt;/td&gt;
&lt;td&gt;&amp;gt;= 1.2.3 and &amp;lt; 1.3.0&lt;/td&gt;
&lt;td&gt;Pessimistic constraint like Ruby&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Elixir (Mix)&lt;/td&gt;
&lt;td&gt;~&amp;gt; 1.2.3&lt;/td&gt;
&lt;td&gt;&amp;gt;= 1.2.3 and &amp;lt; 1.3.0&lt;/td&gt;
&lt;td&gt;Same semantics as Ruby&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Rust (Cargo)&lt;/td&gt;
&lt;td&gt;^1.2.3&lt;/td&gt;
&lt;td&gt;&amp;gt;= 1.2.3 and &amp;lt; 2.0.0&lt;/td&gt;
&lt;td&gt;Follows SemVer, major version fixed&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td&gt;Go (go.mod)&lt;/td&gt;
&lt;td&gt;&amp;gt;= 1.2.3&lt;/td&gt;
&lt;td&gt;No pessimistic operator&lt;/td&gt;
&lt;td&gt;Uses minimal version selection&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;h1 id=&#34;references&#34;&gt;References&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://stackoverflow.com/a/4292957&#34; target=&#34;_blank&#34;&gt;StackOverflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nodesource.com/blog/semver-tilde-and-caret&#34; target=&#34;_blank&#34;&gt;Nodejs - Semver Tilde and Caret&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>[Obsidian] Collapsing a section</title>
      <link>https://ttuan.xyz/til/obsidian/collapse_a_section/</link>
      <pubDate>Fri, 07 Feb 2025 00:00:00 +0000</pubDate>
      <author>tuantv.nhnd@gmail.com (Tuan Tran)</author>
      <guid>https://ttuan.xyz/til/obsidian/collapse_a_section/</guid>
      <description>

&lt;h2 id=&#34;collapsible-callout-in-obsidian&#34;&gt;&lt;strong&gt;Collapsible Callout in Obsidian&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;In Obsidian, you can collapse a section (without collapsing all sections) using a &lt;strong&gt;collapsible callout&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&#34;how-to-create-a-collapsible-callout&#34;&gt;&lt;strong&gt;How to Create a Collapsible Callout&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Use the following markdown:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;&amp;gt; &lt;/span&gt;&lt;span style=&#34;font-style:italic&#34;&gt;[!NOTE]- This is a collapsible callout.
&lt;/span&gt;&lt;span style=&#34;font-style:italic&#34;&gt;&lt;/span&gt;&amp;gt; It stays collapsed by default until the reader clicks to expand it.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt;
To make a callout collapsible, add a &lt;strong&gt;dash (-)&lt;/strong&gt; after the &lt;code&gt;[!type]&lt;/code&gt;, as shown above.&lt;/p&gt;

&lt;h2 id=&#34;pasting-multiple-lines-into-a-callout&#34;&gt;&lt;strong&gt;Pasting Multiple Lines into a Callout&lt;/strong&gt;&lt;/h2&gt;

&lt;h3 id=&#34;problem&#34;&gt;&lt;strong&gt;Problem&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Currently, if you copy and paste multiple lines into a callout, only the first line appears inside the callout.
This happens because each line inside a callout must start with &lt;code&gt;&amp;gt;&lt;/code&gt; (the blockquote symbol).&lt;/p&gt;

&lt;h3 id=&#34;solution&#34;&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;Follow these steps to paste multiple lines into a callout properly:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Paste your multiple lines inside the note.&lt;/li&gt;
&lt;li&gt;Select all the lines.&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Command + P&lt;/code&gt;, then search for and select &lt;strong&gt;&amp;ldquo;Toggle blockquote&amp;rdquo;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🎉 &lt;strong&gt;Done!&lt;/strong&gt; Now all lines will be inside the callout.&lt;/p&gt;

&lt;h2 id=&#34;references&#34;&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://forum.obsidian.md/t/is-there-a-markdown-to-create-foldable-sections-like-in-obsidian-release-notes/46805&#34; target=&#34;_blank&#34;&gt;Is there a markdown to create foldable sections like in Obsidian release notes?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://forum.obsidian.md/t/callout-pasting-multiple-items/51330&#34; target=&#34;_blank&#34;&gt;Callout: Pasting multiple items&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Free DB hosting</title>
      <link>https://ttuan.xyz/til/code/deploy/free_db_hosting/</link>
      <pubDate>Sat, 14 Sep 2024 00:00:00 +0000</pubDate>
      <author>tuantv.nhnd@gmail.com (Tuan Tran)</author>
      <guid>https://ttuan.xyz/til/code/deploy/free_db_hosting/</guid>
      <description>&lt;p&gt;Free DB hosting: &lt;a href=&#34;https://turso.tech/&#34; target=&#34;_blank&#34;&gt;https://turso.tech/&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;500 Databases&lt;/li&gt;
&lt;li&gt;9GB of total storage&lt;/li&gt;
&lt;li&gt;1 billion row reads&lt;/li&gt;
&lt;li&gt;Unlimited Embedded Replicas&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Mysql get Optimizer Trace</title>
      <link>https://ttuan.xyz/til/code/mysql/optimizer_trace/</link>
      <pubDate>Tue, 10 Sep 2024 00:00:00 +0000</pubDate>
      <author>tuantv.nhnd@gmail.com (Tuan Tran)</author>
      <guid>https://ttuan.xyz/til/code/mysql/optimizer_trace/</guid>
      <description>&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-mysql&#34; data-lang=&#34;mysql&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;-- Step 1: Enable optimizer trace
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt; optimizer_trace&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;enabled=on&amp;#34;&lt;/span&gt;;

&lt;span style=&#34;color:#75715e&#34;&gt;-- Step 2: Run the query
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;COUNT&lt;/span&gt;(&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;\&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; table_name;

&lt;span style=&#34;color:#75715e&#34;&gt;-- Step 3: Retrieve the optimizer trace
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;\&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; information_schema.OPTIMIZER_TRACE;

&lt;span style=&#34;color:#75715e&#34;&gt;-- Step 4: Disable the optimizer trace
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SET&lt;/span&gt; optimizer_trace&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;enabled=off&amp;#34;&lt;/span&gt;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Translate ebooks</title>
      <link>https://ttuan.xyz/til/others/translate_book/</link>
      <pubDate>Sun, 08 Sep 2024 00:00:00 +0000</pubDate>
      <author>tuantv.nhnd@gmail.com (Tuan Tran)</author>
      <guid>https://ttuan.xyz/til/others/translate_book/</guid>
      <description>

&lt;p&gt;&lt;img src=&#34;https://ttuan.xyz/img/til/translate_book.png&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;mục-đích&#34;&gt;Mục đích&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Một số sách mới, chỉ có tiếng Anh chứ chưa được dịch sang tiếng Việt. Đọc full tiếng Anh thì sẽ nhanh oải/ đọc chậm.&lt;/li&gt;
&lt;li&gt;Đọc song ngữ có thể giúp nâng cao vốn từ vựng.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;cách-thực-hiện&#34;&gt;Cách thực hiện&lt;/h2&gt;

&lt;h3 id=&#34;sử-dụng-plugin-trong-calibre&#34;&gt;Sử dụng plugin trong Calibre&lt;/h3&gt;

&lt;p&gt;Video hướng dẫn: &lt;a href=&#34;https://translator.bookfere.com/&#34; target=&#34;_blank&#34;&gt;https://translator.bookfere.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cách này thực hiện đơn giản, non-tech cũng có thể làm dễ dàng.
Có config sử dụng Google dịch =&amp;gt; Free&lt;/p&gt;

&lt;p&gt;Ngoài ra, ta cũng có thể config để sử dụng ChatGPT để dịch sách. (Mất phí để lấy Token)&lt;/p&gt;

&lt;h3 id=&#34;sử-dụng-chatgpt-độc-lập-qua-commandline-tool&#34;&gt;Sử dụng ChatGPT độc lập qua commandline tool&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Github: &lt;a href=&#34;https://github.com/yihong0618/bilingual_book_maker&#34; target=&#34;_blank&#34;&gt;https://github.com/yihong0618/bilingual_book_maker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Instruction: &lt;a href=&#34;https://hossie.notion.site/Bilingual_book_maker-Openai-caa7e5f9dd86450698e4a0a15a961bd3&#34; target=&#34;_blank&#34;&gt;https://hossie.notion.site/Bilingual_book_maker-Openai-caa7e5f9dd86450698e4a0a15a961bd3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cách này mình đánh giá khá cao. Tool chạy nhanh, custom config okela.&lt;/p&gt;

&lt;h2 id=&#34;chi-phí&#34;&gt;Chi phí&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;M có test thử bằng OpenAI, model GPT-3.5, giá cả khá ổn. Cuốn sách 500 trang giá ~1.5$. Nếu dùng model GPT-4o thì khá tốn =)) Dịch khoảng 60 trang thì đã ~5$ rồi =))&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just give it a try :D&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Mysql - Calculate table size</title>
      <link>https://ttuan.xyz/til/code/mysql/calculate_table_size/</link>
      <pubDate>Fri, 30 Aug 2024 00:00:00 +0000</pubDate>
      <author>tuantv.nhnd@gmail.com (Tuan Tran)</author>
      <guid>https://ttuan.xyz/til/code/mysql/calculate_table_size/</guid>
      <description>

&lt;h2 id=&#34;calculate-table-size&#34;&gt;Calculate table size&lt;/h2&gt;

&lt;p&gt;Whenever I add a new index to my table, I carefully consider the additional storage it will require.&lt;/p&gt;

&lt;p&gt;To assess this, I typically run a command both before and after adding the index:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-mysql&#34; data-lang=&#34;mysql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; table_name &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`Table`&lt;/span&gt;,
       &lt;span style=&#34;color:#a6e22e&#34;&gt;ROUND&lt;/span&gt;(data_length &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`Data Size (MB)`&lt;/span&gt;,
       &lt;span style=&#34;color:#a6e22e&#34;&gt;ROUND&lt;/span&gt;(index_length &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`Index Size (MB)`&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; information_schema.&lt;span style=&#34;color:#66d9ef&#34;&gt;tables&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; table_schema &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;your_data_base_name&amp;#39;&lt;/span&gt;
  &lt;span style=&#34;color:#66d9ef&#34;&gt;AND&lt;/span&gt; table_name &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;your_table_name&amp;#39;&lt;/span&gt;;


&lt;span style=&#34;color:#f92672&#34;&gt;+----------+----------------+-----------------+&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;Table&lt;/span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; Data &lt;span style=&#34;color:#a6e22e&#34;&gt;Size&lt;/span&gt; (MB) &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;Index&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Size&lt;/span&gt; (MB) &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;+----------+----------------+-----------------+&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; t_name   &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;       &lt;span style=&#34;color:#ae81ff&#34;&gt;18922&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;00&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;          &lt;span style=&#34;color:#ae81ff&#34;&gt;571&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;36&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;+----------+----------------+-----------------+&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;calculate-entire-database-size&#34;&gt;Calculate entire database size&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-mysql&#34; data-lang=&#34;mysql&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;SELECT&lt;/span&gt; table_schema &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`Database`&lt;/span&gt;,
       &lt;span style=&#34;color:#a6e22e&#34;&gt;ROUND&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;SUM&lt;/span&gt;(data_length) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`Total Data Size (MB)`&lt;/span&gt;,
       &lt;span style=&#34;color:#a6e22e&#34;&gt;ROUND&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;SUM&lt;/span&gt;(index_length) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`Total Index Size (MB)`&lt;/span&gt;,
       &lt;span style=&#34;color:#a6e22e&#34;&gt;ROUND&lt;/span&gt;((&lt;span style=&#34;color:#a6e22e&#34;&gt;SUM&lt;/span&gt;(data_length) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SUM&lt;/span&gt;(index_length)) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;AS&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`Total Size (MB)`&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;FROM&lt;/span&gt; information_schema.&lt;span style=&#34;color:#66d9ef&#34;&gt;tables&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;WHERE&lt;/span&gt; table_schema &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;trill_sun_stg_2&amp;#39;&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;GROUP&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; table_schema;

&lt;span style=&#34;color:#f92672&#34;&gt;+-----------------+----------------------+-----------------------+-----------------+&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;Database&lt;/span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; Total Data &lt;span style=&#34;color:#a6e22e&#34;&gt;Size&lt;/span&gt; (MB) &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; Total &lt;span style=&#34;color:#66d9ef&#34;&gt;Index&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Size&lt;/span&gt; (MB) &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; Total &lt;span style=&#34;color:#a6e22e&#34;&gt;Size&lt;/span&gt; (MB) &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;+-----------------+----------------------+-----------------------+-----------------+&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; db_name         &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;             &lt;span style=&#34;color:#ae81ff&#34;&gt;38236&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;00&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;               &lt;span style=&#34;color:#ae81ff&#34;&gt;3331&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;73&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;41567&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;73&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;+-----------------+----------------------+-----------------------+-----------------+&lt;/span&gt;
&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; row &lt;span style=&#34;color:#66d9ef&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;set&lt;/span&gt; (&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;03&lt;/span&gt; sec)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>Use VIA app for keymap</title>
      <link>https://ttuan.xyz/til/computer/use_via_for_keymap/</link>
      <pubDate>Wed, 21 Aug 2024 00:00:00 +0000</pubDate>
      <author>tuantv.nhnd@gmail.com (Tuan Tran)</author>
      <guid>https://ttuan.xyz/til/computer/use_via_for_keymap/</guid>
      <description>

&lt;h1 id=&#34;use-via-for-keymap&#34;&gt;Use VIA for keymap&lt;/h1&gt;

&lt;h3 id=&#34;setup-instructions&#34;&gt;Setup Instructions&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Connect Your Device:&lt;/strong&gt; Use the provided USB cable to connect your device to the keyboard, ensuring the keyboard is in wired mode. Then, open the VIA online configurator in Chrome by visiting &lt;a href=&#34;https://usevia.app/&#34; target=&#34;_blank&#34;&gt;usevia.app&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Download the JSON File:&lt;/strong&gt; Download the appropriate JSON file for your keyboard (e.g., from NuPhy&amp;rsquo;s website if you&amp;rsquo;re using a NuPhy keyboard). Upload this file manually to the VIA configurator.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enable Design Tab:&lt;/strong&gt; Click on the &amp;lsquo;SETTINGS&amp;rsquo; tab (represented by a gear icon). Turn on the &amp;lsquo;Show Design Tab&amp;rsquo; switch. This will make the design tab icon (a brush) appear in the top row of icons.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Upload JSON File:&lt;/strong&gt; Go to the design tab, and drag the JSON file you downloaded in Step 2 into the upload area at the top. After uploading, return to the &amp;lsquo;CONFIGURE&amp;rsquo; tab, click &amp;lsquo;Authorize Device,&amp;rsquo; and select your device name from the pop-up window. If successful, an on-screen keyboard will appear.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&#34;https://cdn.shopify.com/videos/c/o/v/94031c73c2d54a7182440f419ca7dae4.mp4&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h3 id=&#34;remapping-a-key&#34;&gt;Remapping a Key&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Access the &amp;lsquo;CONFIGURE&amp;rsquo; Tab:&lt;/strong&gt; Go to the &amp;lsquo;CONFIGURE&amp;rsquo; tab.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Remap the Key:&lt;/strong&gt; Click on the key you want to reassign on the keyboard. Then, choose the new key value from the table. If successful, the key&amp;rsquo;s legend will update to reflect the new assignment.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;Save Your Keymaps:&lt;/strong&gt; Use the &amp;lsquo;SAVE+LOAD&amp;rsquo; option (the disk icon on the left) to back up your keymaps.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&#34;https://cdn.shopify.com/videos/c/o/v/cbacb109f05848eca61c0457023a0287.mp4&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;references&#34;&gt;References&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://nuphy.com/pages/via-usage-guide-for-nuphy-keyboards&#34; target=&#34;_blank&#34;&gt;VIA Usage Guide for NuPhy Keyboards&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Fix blur text on Kindle</title>
      <link>https://ttuan.xyz/til/others/fix_blur_text_kindle/</link>
      <pubDate>Sun, 18 Aug 2024 00:00:00 +0000</pubDate>
      <author>tuantv.nhnd@gmail.com (Tuan Tran)</author>
      <guid>https://ttuan.xyz/til/others/fix_blur_text_kindle/</guid>
      <description>

&lt;h2 id=&#34;fixing-blurry-text-on-kindle&#34;&gt;Fixing Blurry Text on Kindle&lt;/h2&gt;

&lt;p&gt;When sending an ebook from &lt;a href=&#34;https://calibre-ebook.com/&#34; target=&#34;_blank&#34;&gt;Calibre&lt;/a&gt; to your Kindle, you might sometimes notice that the text appears blurry. To resolve this issue, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Calibre and select the ebook in question.&lt;/li&gt;
&lt;li&gt;Click on &amp;ldquo;Convert books.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;In the conversion settings, choose &amp;ldquo;Look and Feel&amp;rdquo; from the sidebar.&lt;/li&gt;
&lt;li&gt;Navigate to the &amp;ldquo;Styling&amp;rdquo; tab.&lt;/li&gt;
&lt;li&gt;Under the section &amp;ldquo;Select what style information you want completely removed,&amp;rdquo; check the box for &amp;ldquo;Colors.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Press &amp;ldquo;OK&amp;rdquo; to apply the changes, then resend the ebook to your Kindle.&lt;/li&gt;
&lt;/ol&gt;
</description>
    </item>
    
    <item>
      <title>Singleton class/method in Ruby</title>
      <link>https://ttuan.xyz/til/code/ruby/singleton/</link>
      <pubDate>Mon, 22 Jul 2024 00:00:00 +0000</pubDate>
      <author>tuantv.nhnd@gmail.com (Tuan Tran)</author>
      <guid>https://ttuan.xyz/til/code/ruby/singleton/</guid>
      <description>

&lt;h2 id=&#34;singleton&#34;&gt;Singleton&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Allow define methods that are only available on a single object rather than all instances of a class.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;singleton-class&#34;&gt;Singleton Class&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MyClass&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;

obj &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;MyClass&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;new

&lt;span style=&#34;color:#75715e&#34;&gt;# Define a method only for this object&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; obj
  &lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;singleton_method&lt;/span&gt;
    p &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Singleton Method&amp;#34;&lt;/span&gt;
  &lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;

obj&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;singleton_method
p &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;

&lt;span style=&#34;color:#f92672&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# This will raise error because the singleton method is defined only for obj&lt;/span&gt;
another_obj &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;MyClass&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;new
another_obj&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;singleton_method&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;class &amp;lt;&amp;lt; obj&lt;/code&gt; opens the Singleton class of obj. Methods in this class are only available on &lt;code&gt;obj&lt;/code&gt; and not on other instances of &lt;code&gt;MyClass&lt;/code&gt;&lt;/p&gt;

&lt;h3 id=&#34;singleton-methods&#34;&gt;Singleton Methods&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-ruby&#34; data-lang=&#34;ruby&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MyClass&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;

obj &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;MyClass&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;new

&lt;span style=&#34;color:#75715e&#34;&gt;# Define a method only for this specific object&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;obj&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;singleton_method&lt;/span&gt;
  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;I am a singleton method&amp;#34;&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;end&lt;/span&gt;

puts obj&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;singleton_method  &lt;span style=&#34;color:#75715e&#34;&gt;# Output: &amp;#34;I am a singleton method&amp;#34;&lt;/span&gt;

&lt;span style=&#34;color:#75715e&#34;&gt;# This will raise an error because other instances do not have this method&lt;/span&gt;
another_obj &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;MyClass&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;new
&lt;span style=&#34;color:#75715e&#34;&gt;# puts another_obj.singleton_method&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Singleton Class: A class created by Ruby for each object, allowing methods to be defined only on that object.&lt;/li&gt;
&lt;li&gt;Singleton Method: A method defined for a single object, making it unique to that object.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
  </channel>
</rss>
