var store = [{
        "title": "Cùi Bắp's blog",
        "excerpt":"Từ hôm nay mình sẽ viết lại những gì mình học được trong một ngày vào đây.Rất có thể đây sẽ là bài viết duy nhất vì những ngày sau đó mình chẳng học được cái mẹ gì hết =))Thân ái :four_leaf_clover:","categories": ["Life"],
        "tags": ["Blog","Note"],
        "url": "https://euclid1990.github.io/life/cui-bap-s-blog/"
      },{
        "title": "[Docker Swarm] Nodes hoạt động như thế nào?",
        "excerpt":"Mở đầu cho chuỗi series giải thích hoạt động của Swarm mode trong Docker. Bài viết này mình xin được giới thiệu về cách thức hoạt động của một node trong Docker Swarm mode.How nodes work?Swarm mode lần đầu xuất hiện trọng phiên bản Docker Engine 1.12, cho phép người...","categories": ["Docker"],
        "tags": ["Swarm","Nodes"],
        "url": "https://euclid1990.github.io/docker/docker-swarm-how-nodes-work/"
      },{
        "title": "[Docker Swarm] Services hoạt động như thế nào?",
        "excerpt":"Tiếp tục cho chuỗi series giải thích hoạt động của Swarm mode trong Docker. Bài viết này mình xin được giới thiệu về cách thức hoạt động của một service trong Docker Swarm mode.How services work?Để deploy một image của ứng dụng, trong khi Docker Engine đang chạy ở chế...","categories": ["Docker"],
        "tags": ["Swarm","Services"],
        "url": "https://euclid1990.github.io/docker/docker-swarm-how-services-work/"
      },{
        "title": "[List.js] Thêm mới và xoá bỏ row trong table",
        "excerpt":"Trong lúc dịch tài liệu dự án, mình bắt gặp 1 yêu cầu nhỏ. Cụ thể là ở màn hình create (tạo mới) cần tạo ra một danh sách input động, các row trong table có thể tăng giảm dựa vào button add hoặc remove. Thực tế, đây là bài...","categories": ["Javascript"],
        "tags": ["Office work","Javascript"],
        "url": "https://euclid1990.github.io/javascript/List.js-add-remove-example/"
      },{
        "title": "[Capacity Planning] Đo lường và khắc phục sự cố sử dụng tài nguyên",
        "excerpt":"Có rất nhiều thành phần trong một hệ điều hành Linux có thể gây ảnh hưởng tới hiệu năng của hệ thống. Việc chủ động giám sát các (monitoring) components, sẽ là cách duy nhất để bảo vệ hệ thống của bạn. Bài viết này tôi sẽ đề cập tới...","categories": ["Linux"],
        "tags": ["LPIC-2","Monitoring"],
        "url": "https://euclid1990.github.io/linux/capacity-planning-measuring-and-troubleshooting-resource-usage/"
      },{
        "title": "Hướng dẫn cách tải về tệp .ipa bất kỳ phiên bản nào của ứng dụng trên App Store",
        "excerpt":"Nếu bạn đang dùng iOS device (iPhone, iPad) thì bài viết này sẽ rất hữu ích.Lý do mình viết bài này chỉ đơn giản là vì thiết bị iPhone mình đang dùng đã xuống cấp và hiệu năng không thể đáp ứng nổi phiên bản iOs hiện tại (11). Do...","categories": ["Tips"],
        "tags": [".ipa","App Store","Download"],
        "url": "https://euclid1990.github.io/tips/how-to-download-older-version-of-latest-ios-app-from-appstore/"
      },{
        "title": "[Elasticsearch] Sao lưu, phục hồi và đánh lại chỉ mục trong Elasticsearch",
        "excerpt":"Cấp cứu, code lỗi đi cmn hết dữ liệu Elasticsearch trên production rồi anh :rofl:Không sớm thì muộn ai trong chúng ta cũng sẽ được nghe câu nói trên :joy:. Phốt everywhere :fire:Cách đây không lâu mình và khách hàng phải xây dựng một hệ thống nội bộ cho họ...","categories": ["Infrastructure"],
        "tags": ["Snapshot","Backup","Restore","Reindex"],
        "url": "https://euclid1990.github.io/infrastructure/how-to-backup-restore-and-reindex-elasticsearch-indices/"
      },{
        "title": "[Laravel] Generate mix javascript bundle file hoạt động trên IE 11",
        "excerpt":"Hiện tại bên mình đang có 1 dự án code = Laravel Framework 5.6. Hôm nay bị khách hàng feedback về vụ Sweetalert2 không hoạt động được trên IE 11, trong khi Chrome, Firefox thì vẫn ngon lành cành đào. Khách hàng toàn dùng Chrome cơ mà tự nhiên hôm...","categories": ["Laravel"],
        "tags": ["Laravel"],
        "url": "https://euclid1990.github.io/laravel/make-laravel-mix-support-IE-11/"
      },{
        "title": "Làm việc để trưởng thành",
        "excerpt":"Tính tới thời điểm hiện tại, mình cũng đi làm được gần 5 năm, chuyển qua 3 công ty. Sự nghiệp làm dev đó nói ngắn thì ngắn mà dài thì cũng chẳng dài, biết bao nhiêu chuyện, bao nhiêu bài học quý giá mà công việc đã dạy cho...","categories": ["Life"],
        "tags": ["Life"],
        "url": "https://euclid1990.github.io/life/work-to-mature/"
      },{
        "title": "[Programing] Bắt đầu lập trình với Dart 2",
        "excerpt":"Cách đây 4 năm mình đã từng code thử Dart, và thực sự thấy nó chẳng có gì nổi trội, nên quyết định từ bỏ và ko học. Một thời gian bẵng đi, sau sự kiện Google I/O diễn ra vào tháng 6 năm 2018, khi Google chính thức release...","categories": ["Dart"],
        "tags": ["Dart"],
        "url": "https://euclid1990.github.io/dart/getting-started-with-dart/"
      },{
        "title": "[Programing] Những điểm cần lưu ý trong ngôn ngữ Dart 2",
        "excerpt":"Trong bài viết [trước] mình đã hướng dẫn các bạn cài đặt môi trường và setup các kiểu dự án Dart trên Intellij IDEA. Ở bài viết này mình sẽ mô tả chi tiết về cú pháp cũng như các tính năng của Dart :expressionless:.Nếu các bạn vẫn chưa sẵn...","categories": ["Dart"],
        "tags": ["Dart"],
        "url": "https://euclid1990.github.io/dart/a-tour-of-the-dart-language/"
      },{
        "title": "Mẹo vặt giúp code nhanh hơn với IntelliJ IDEA",
        "excerpt":"Dạo gần đây mình bắt đầu code Dart trên Intellij IDEA. Cảm giác đầu tiên khi chuyển từ Vim/Sublime sang là giao diện khá phức tạp và một mớ hỗn độn tính năng chưa dùng tới. Choáng cmnl :rofl:Dưới đây mình note lại các phím tắt (shortcut key) cũng như...","categories": ["Tips"],
        "tags": ["Dart","IntelliJ IDEA"],
        "url": "https://euclid1990.github.io/tips/intellij-idea-tips-and-tricks/"
      },{
        "title": "[Go] Tránh start một program đang chạy với Flock",
        "excerpt":"Hiện tại mình đang làm một dự án thực hiện xử lý bên dưới server (background processing). Hệ thống được viết toàn bộ bằng Go để tận dụng hết tốc độ cũng như sức mạnh của xử lý bất đồng bộ Goroutines. Cách đây gần một năm mình cũng từng...","categories": ["Go"],
        "tags": ["多重起動","Flock"],
        "url": "https://euclid1990.github.io/go/golang-file-lock-using-flock-system-call/"
      },{
        "title": "Hãy cứ đam mê, hãy cứ ước mơ, ngày mai sẽ khác",
        "excerpt":"#Chém_gió #For_fun Hà Nội, trong cái nắng hè oi ả giữa tháng 6, qua một đêm dường như những con đường vẫn như chảo lửa vậy :sunglasses: Trên con đường quen thuộc đi làm, giữa cái không khí oi bức, ngột ngạt, từng giọt mồ hôi rơi lăn xuống má thì bỗng nhiên...","categories": ["Life"],
        "tags": ["Keep Dreaming"],
        "url": "https://euclid1990.github.io/life/keep-dreaming-tomorrow-will-be-different/"
      },{
        "title": "Testing service workers trên HTTPS sử dụng self signed certificates",
        "excerpt":"Gần đây mình đang phát triển một ứng dụng web app (PWA). Tuy nhiên, khi debug service worker trên local với địa chỉ https://localhost:8500 (Mình hết cổng trên máy nên dùng tạm cổng này :rofl: :joy:) mình gặp phải lỗi sau:An SSL certificate error occurred when fetching the script.Failed to...","categories": ["Tips"],
        "tags": ["Progressive Web App","Service worker","Self SSL","Chrome"],
        "url": "https://euclid1990.github.io/tips/testing-service-workers-locally-with-self-signed-certificates/"
      },{
        "title": "Sử dụng rails console generator và rails migration độc lập cho dự án (non-Rails)",
        "excerpt":"Khi lập trình với Go thì mình không có gì để phàn nàn ngoài 1 điều là Go không support sẵn các thư viện hỗ trợ lập trình viên tiết kiệm thời gian cho việc tạo migration/schema.Dạo 1 vòng quanh github search các thư viện cho Go có thể gặp...","categories": ["Rails"],
        "tags": ["Active record"],
        "url": "https://euclid1990.github.io/rails/how-to-use-generator-and-migration-outside-of-rails/"
      },{
        "title": "Vietnam Kubernetes Community - First meetup",
        "excerpt":"Trong những năm gần đây meetup giữa những người làm công nghệ ngày càng trở nên phổ biến. Rất nhiều hoạt động meetup của cộng đồng các kỹ sư thuộc các mảng công nghệ được tổ chức.Được đối mặt và trò chuyện trực tiếp với những người có cùng đam...","categories": ["Meetup"],
        "tags": ["Kubernetes"],
        "url": "https://euclid1990.github.io/meetup/vietnam-kubernetes-first-meetup/"
      },{
        "title": "Chuyện encoding tiếng Nhật và format khi export CSV trong PHP với fputcsv",
        "excerpt":"Nếu ai đã từng join các dự án outsource cho khách hàng Nhật thì đều gặp bài toán phổ thông lấy dữ liệu từ database và xuất ra report .csv cho người dùng. Nghe rất đơn giản, ta chỉ cần dùng hàm có sẵn của PHP:fputcsv ( resource $handle ,...","categories": ["Outsource"],
        "tags": ["PHP"],
        "url": "https://euclid1990.github.io/outsource/php-fputs-csv-convert-utf8-to-shiftjs-encoding/"
      },{
        "title": "Hướng dẫn sử dụng Namecheap domain với AWS Route53 và AWS EC2",
        "excerpt":"Nếu bạn đang đọc bài viết này, thì rất có thể bạn đang gặp khó khăn khi di chuyển (transfer) tên miền (domain) từ các nhà cung cấp tên miền (domain providers) như Namecheap, GoDaddy, Porkbun, Domain.com … về Amazon Web Service (AWS) Route53.Có hai lý do khiến bạn gặp...","categories": ["Outsource"],
        "tags": ["AWS","DNS"],
        "url": "https://euclid1990.github.io/outsource/pointing-namcheap-domain-to-aws-route53-ec2/"
      },{
        "title": "Làm thế nào để tải video từ các trang web sử dụng giao thứ HLS với m3u8 file",
        "excerpt":"Trước hết, HLS là viết tắt của chữ HTTP Live Streaming, là một giao thức streaming bitrate được phát triển bởi Apple. Không giống như các kỹ thuật thông thường, HLS sử dụng cách chia tệp tin video ra làm nhiều file nhỏ, các file này thường có đuôi .ts...","categories": ["Tips"],
        "tags": ["HLS"],
        "url": "https://euclid1990.github.io/tips/download-video-from-hls-streaming-m3u8-file/"
      },{
        "title": "Sử dụng Google Spreadsheet hiệu quả hơn với Google Apps Script",
        "excerpt":"Google App Script (GAS) là ngôn ngữ lập trình dựa trên JavaScript với việc biên tập, biên dịch cũng như lưu trữ đều được đảm nhiệm bởi Gooogle. Về tài liệu liên quan tới GAS các bạn có thể tìm thấy rất nhiều tại đây.Việc hiểu và biết cách sử...","categories": ["Tips"],
        "tags": ["App scripts","Daily working"],
        "url": "https://euclid1990.github.io/tips/productivity-tips-for-google-spreadsheet-app-scripts/"
      },{
        "title": "Điều khiển từ xa máy tính Ubuntu qua máy Mac",
        "excerpt":"Hiện tại do nhu cầu công việc nên mình bắt buộc phải dùng 2 máy tính có 2 hệ điều hành khác nhau là Ubuntu 16.04 / Linux và MacOS High Sierra. Do máy Mac là máy làm việc chính nên khi phát sinh nhu cầu cần làm việc trên...","categories": ["Tips"],
        "tags": ["RDP","VNC","Remote"],
        "url": "https://euclid1990.github.io/tips/how-to-remote-access-ubuntu-from-mac-os/"
      },{
        "title": "Mô tả trực quan về virus Corona ở Vũ Hán - Trung Quốc",
        "excerpt":"(Cập nhật: 30/01/2020)Hôm nay là mùng 4 Tết, vậy là chỉ còn 2 ngày nữa là mọi người sẽ đều trở lại với công việc bộn bề hàng ngày, mặc dù là những ngày nghỉ nhưng thông tin về bệnh dịch viêm phổi lạ, do virus Corona được cho là...","categories": ["Life"],
        "tags": ["Virus","Corona","Wuhan"],
        "url": "https://euclid1990.github.io/life/wuhan-corona-virus-a-visual-explainer/"
      },{
        "title": "Một số kiến thức cơ bản mà Cloud Engineer cần nắm được",
        "excerpt":"Trong bài viêt này mình muốn giới thiệu với các bạn các kiến thức cần thiết khi làm việc như một Cloud Engineer hay Solution Architect trong dự án mà mình cảm thấy là cần phải biết và hiểu. Đôi khi chỉ đa phần là kiến thức cơ bản, nhưng...","categories": ["Cloud"],
        "tags": ["AWS","GCP"],
        "url": "https://euclid1990.github.io/cloud/cloud-engineer-essential-knowledge/"
      },{
        "title": "Nâng cấp Node.js lên phiên bản chỉ định hoặc mới nhất trên Unix/Linux",
        "excerpt":"Nay có việc phải code React.js mà Node trong máy hơi cũ, không xài được Typescript do dính lỗi:\\The engine \"node\" is incompatible with this module. Expected version \"^10.13.0 || ^12.13.0 || ^14.15.0 || &gt;=15.0.0\".Check phiên bản node hiện tại trong máy thì thấy đang chạy v14.3.0. Lên ngay phiên...","categories": ["Tips"],
        "tags": [],
        "url": "https://euclid1990.github.io/tips/upgrade-node.js-to-the-specified-or-latest-stable-version-on-linux-unix-copy/"
      },{
        "title": "Thiết lập ESLint cho dự án React sử dụng Typescript và tự động định dạng mã trên VSCode",
        "excerpt":"Mỗi lần khởi tạo một dự án Javascript và Typescript thì công việc cài đặt bộ Linting (Xác minh chất lượng mã, tự động định dạng lại source code cho đẹp, …), thiết lập rules cho Linting Tool là việc cần làm ngay từ thời điểm bắt đầu code.Có rất...","categories": ["Tips"],
        "tags": [],
        "url": "https://euclid1990.github.io/tips/setting-eslint-on-a-react-typescript-project-and-auto-format-vscode/"
      },{
        "title": "Áp dụng design patterns với Go",
        "excerpt":"Design Pattern (Mẫu thiết kế) giúp chúng ta giải quyết vấn đề một cách tối ưu nhất, có thể coi nó như là kim chỉ nam giúp các lập trình viên giải quyết vấn đề thay vì tự tìm kiếm giải pháp cho một vấn đề đã được chứng minh....","categories": ["Go"],
        "tags": ["Design patterns"],
        "url": "https://euclid1990.github.io/go/design-patterns-in-golang/"
      },{
        "title": "Hướng dẫn debug code Go trên Visual Studio Code / Terminal",
        "excerpt":"Trong bài viết này mình sẽ chia sẻ về cách debug Go code trên Visual Studio Code. Trước hết, chúng ta hãy tạo 1 đoạn code sample về tính số Fibonacci từ một danh sách các số cho trước trong Go như sau:fibonacci.gopackage mainimport \"fmt\"var m = make(map[int]int, 0)func fib(n...","categories": ["Go"],
        "tags": ["Debug"],
        "url": "https://euclid1990.github.io/go/how-to-debug-go-code-with-vscode-terminal/"
      },{
        "title": "Khó khăn gặp phải khi xác định AWS IAM Policy và cách khắc phục",
        "excerpt":"Tiêu đề bài viết khá dài, hiện tại mình vẫn chưa nghĩ ra được cái nào ngắn gọn mà đầy đủ ý hơn 😆The Principle of Least Privilege - Nguyên tắc đặc quyền tối thiểuKhông biết bạn đã từng nghe tới nguyên tắc này chưa? nhưng về cơ bản khi...","categories": ["Cloud"],
        "tags": ["AWS","GCP"],
        "url": "https://euclid1990.github.io/cloud/difficulty-in-determining-aws-iam-policies-for-least-privilege-compliance-and-solution/"
      },{
        "title": "Tuỳ biến phím tắt trên Slack và Mac với Karabiner",
        "excerpt":"Mình hiện tại đang dùng song song 2 công cụ chat khi làm việc đó là Chatwork và Slack. Tuy nhiên khi sử dụng 2 công cụ này mình gặp phải một vấn đề đó là: Phím tắt của 2 công cụ chat này không giống nhau Ví dụ: Trên...","categories": ["Tips"],
        "tags": ["MacOS","Slack","Chatwork","Karabiner"],
        "url": "https://euclid1990.github.io/tips/custom-slack-keyboard-shortcut-with-karabiner-on-mac/"
      },{
        "title": "Tổng hợp các mẫu tin nhắn xin nghỉ thông dụng gửi cho khách hàng Nhật",
        "excerpt":"Trong khoảng thời gian làm việc với khác hàng là người Nhật Bản, việc đứng ở vị trí trung gian giữa đội phát triển và khách hàng nên mình phải sử dụng tiếng Nhật hằng ngày để truyền tải thông tin. Do có khác biệt về nền văn hoá và...","categories": ["Tips"],
        "tags": ["Japanese"],
        "url": "https://euclid1990.github.io/tips/collection-of-common-leave-message-templates-sent-to-japanese-clients/"
      },{
        "title": "Phát hiện tình cờ về timezone của Việt Nam",
        "excerpt":"Nửa đêm ngồi code function chuyển đổi hiển thị thời gian cho người dùng trên nhiều vị trí địa lý mới phát hiện 1 sự thú vị không hề nhẹ 😂.Anh em coder động vào bài toán xử lý các trường datetime trong Database chắc hẳn ai cũng từng phải...","categories": ["TIL"],
        "tags": ["Javascript","Timezone"],
        "url": "https://euclid1990.github.io/til/vietnam-timezone-before-1975-year/"
      },{
        "title": "Nâng cấp phiên bản AWS RDS MySQL từ 5.7 lên 8.0",
        "excerpt":"Đã hơn 5 tháng trời trôi qua không viết một bài nào trên Blog, và mình đã quay trở lại rồi đây 😂Mình sẽ khởi động một chuỗi các bài viết mang tính thực chiến hơn là hướng dẫn chi tiết. Dù cho phương pháp trong bài viết có thể...","categories": ["Migration"],
        "tags": ["Real Life","AWS","RDS"],
        "url": "https://euclid1990.github.io/migration/upgrade-aws-rds-mysql-from-57-to-80/"
      },{
        "title": "Mở ứng dụng Local trên Internet bằng tính năng VSCode - Local Port Forwarding",
        "excerpt":"Trong quá trình phát triển ứng dụng, web/app chắc hẳn mỗi chúng ta đều đã từng gặp bài toán cần chia sẻ ứng dụng của mình cho một bên khác thông qua internet. Ví dụ: Bạn muốn demo website đang code cho khách hàng truy cập từ xa Bạn cần...","categories": ["Tips"],
        "tags": ["Debug","Vscode","Port Forwarding"],
        "url": "https://euclid1990.github.io/tips/access-localhost-from-the-internet-through-vscode-local-port-forwarding-feature/"
      },{
        "title": "Tại sao nên dùng String Union Types thay cho String Enums trong Typescript",
        "excerpt":"Khi sử dụng TypeScript, chúng ta thường gặp phải trường hợp xác định kiểu của một biến mà giá trị của nó rơi vào một hay nhiều khả năng khác nhau.Ví dụ, status của một button có thể là: \"hidden\", \"enabled\", \"disabled\".Với Typescript chúng ta có ít nhất hai cách//...","categories": ["Tips"],
        "tags": ["Typescript"],
        "url": "https://euclid1990.github.io/tips/why-should-you-use-string-literal-union-types-instead-of-string-enums-in-typescript/"
      },{
        "title": "Ngăn chặn truy cập tới ứng dụng web đặt sau AWS CloudFront theo Client IP",
        "excerpt":"Trong bài viết này mình mô tả một sự cố gần đây xảy ra trong hệ thống mà mình gặp phải khiến RDS Database CPU/Memory luôn gặp phải tình trạng quá tải, ảnh hưởng tới trải nghiệm người dùng. Đồng thời chia sẻ về các giải pháp khả thi mà...","categories": ["Cloud"],
        "tags": ["AWS","CloudFront","WAF","Nginx","DDos"],
        "url": "https://euclid1990.github.io/cloud/blocking-access-to-application-behind-cloudfront-by-client-ip/"
      },{
        "title": "Xây dựng serverless data stream pipeline bằng AWS Kinesis, Lambda, S3 cho Snowflake",
        "excerpt":"Trong bài viết này mình sẽ chia sẻ về một mô hình mà mình sử dụng để đề xuất khách hàng trong quá trình thực hiện estimate một dự án trong bộ phận, mà trên thực tế bản thân cũng chưa từng sử dụng (liều ăn nhiều :meat_on_bone:) nên có...","categories": ["Data-Pipeline"],
        "tags": ["AWS","Kinesis Data Streams","Data Pipeline","Snowflake"],
        "url": "https://euclid1990.github.io/data-pipeline/build-serverless-data-stream-pipeline-by-using-kinesis-lambda-s3-for-snowflake/"
      },{
        "title": "Làm thế nào để override 3rd typescript types được khai báo bởi install package trong node modules",
        "excerpt":"Hiện tại mình đang sử dụng thư viện openai-node. Tuy nhiên khi implement code theo sample trong Document (Uploading Your Batch Input File) của thư viện thì phát sinh lỗi:TSError: ⨯ Unable to compile TypeScript:worker/generate.ts:18:4 - error TS2322: Type '\"batch\"' is not assignable to type '\"fine-tune\" | \"assistants\"'.18 purpose: \"batch\",...","categories": ["Tips"],
        "tags": ["Typescript"],
        "url": "https://euclid1990.github.io/tips/override-third-party-typescript-types-in-node-modules/"
      },{
        "title": "Bypass internet packages với SSL/TLS Tunnel và SNI/DNS giả",
        "excerpt":"Gần đây mình có nhận được một số quảng cáo về việc hack 4G data, ban đầu mình cũng không tin việc đó, vì đơn giản cũng làm trong nghề, nên không nghĩ là cả một nhà mạng với bao nhiêu con người tài năng lại dễ dàng để xảy...","categories": ["TIL"],
        "tags": ["Research"],
        "url": "https://euclid1990.github.io/til/bypassing-content-based-internet-packages-with-an-ssltls-tunnel-sni-spoofing-and-dns-spoofing/"
      }]
