diff --git a/apps/blog/_posts/2015/03/bigdata-cai-dat-apache-spark-tren-ubuntu.md b/apps/blog/_posts/2015/03/bigdata-cai-dat-apache-spark-tren-ubuntu.md index a30b98f9..edd17944 100644 --- a/apps/blog/_posts/2015/03/bigdata-cai-dat-apache-spark-tren-ubuntu.md +++ b/apps/blog/_posts/2015/03/bigdata-cai-dat-apache-spark-tren-ubuntu.md @@ -1,5 +1,5 @@ --- -title: BigData - Cài đặt Apache Spark trên Ubuntu 14.04 +title: Cài đặt Apache Spark trên Ubuntu 14.04 date: '2015-03-27' author: Duyet tags: diff --git a/apps/blog/_posts/2015/04/big-data-explained-in-less-than-2-minutes.md b/apps/blog/_posts/2015/04/big-data-explained-in-less-than-2-minutes.md index f0599795..88d2d0e2 100644 --- a/apps/blog/_posts/2015/04/big-data-explained-in-less-than-2-minutes.md +++ b/apps/blog/_posts/2015/04/big-data-explained-in-less-than-2-minutes.md @@ -1,5 +1,5 @@ --- -title: Big Data - Explained in Less Than 2 Minutes - To Absolutely Anyone +title: Big Data Explained in Less Than 2 Minutes date: '2015-04-12' author: Duyet tags: diff --git a/apps/blog/_posts/2015/04/bootstrap-gioi-thieu-ve-components.md b/apps/blog/_posts/2015/04/bootstrap.md similarity index 97% rename from apps/blog/_posts/2015/04/bootstrap-gioi-thieu-ve-components.md rename to apps/blog/_posts/2015/04/bootstrap.md index 1325aebf..2892ad94 100644 --- a/apps/blog/_posts/2015/04/bootstrap-gioi-thieu-ve-components.md +++ b/apps/blog/_posts/2015/04/bootstrap.md @@ -1,14 +1,12 @@ --- -title: - Bootstrap - Giới thiệu về Components thành phần được xây dựng sẵn trong Twitter - Bootstrap +title: Twitter Bootstrap date: '2015-04-27' author: Duyet tags: - CSS modified_time: '2015-04-27T20:50:25.576+07:00' thumbnail: https://1.bp.blogspot.com/-TAp70-55a34/VT3u2ezvzzI/AAAAAAAACaA/L32plzw7ZWY/s1600/bs-components-intro.png -slug: /2015/04/bootstrap-gioi-thieu-ve-components.html +slug: /2015/04/bootstrap.html category: Web description: Ở bài trước mình đã giới thiệu về Bootstrap về hệ thống Grid, giúp bạn tạo nên bố cục, giao diện Responsive cho trang web. Cùng với các định dạng sẵn tất cả các Tag HTML theo phong cách của Bootstrap nếu muốn dùng nhanh thì có thể không cần phải code thêm chút CSS nào nữa. Mình sẽ giúp các bạn tìm hiểu tiếp Components là gì và cách sử dụng chúng ra sao. --- diff --git a/apps/blog/_posts/2015/04/gioi-thieu-ve-google-materialize-css.md b/apps/blog/_posts/2015/04/gioi-thieu-ve-google-materialize-css.md index 8f615753..82e797d7 100644 --- a/apps/blog/_posts/2015/04/gioi-thieu-ve-google-materialize-css.md +++ b/apps/blog/_posts/2015/04/gioi-thieu-ve-google-materialize-css.md @@ -1,5 +1,5 @@ --- -title: Giới thiệu về Google Materialize CSS framework +title: Google Materialize CSS framework date: '2015-04-27' author: Duyet tags: diff --git a/apps/blog/_posts/2015/04/git-va-cac-khai-niem-co-ban.md b/apps/blog/_posts/2015/04/git-va-cac-khai-niem-co-ban.md index 61177b86..156f3ecb 100644 --- a/apps/blog/_posts/2015/04/git-va-cac-khai-niem-co-ban.md +++ b/apps/blog/_posts/2015/04/git-va-cac-khai-niem-co-ban.md @@ -1,5 +1,5 @@ --- -title: Git - Git là gì và các khái niệm cơ bản trong git +title: Khái niệm cơ bản trong git date: '2015-04-26' author: Duyet tags: diff --git a/apps/blog/_posts/2015/04/linux-mot-so-thu-thuat-voi-trinh-soan.md b/apps/blog/_posts/2015/04/linux-mot-so-thu-thuat-voi-trinh-soan.md index 9a3c3ded..9fc18cb6 100644 --- a/apps/blog/_posts/2015/04/linux-mot-so-thu-thuat-voi-trinh-soan.md +++ b/apps/blog/_posts/2015/04/linux-mot-so-thu-thuat-voi-trinh-soan.md @@ -1,5 +1,5 @@ --- -title: 'Linux - một số thủ thuật với trình soạn thảo vim ' +title: 'Linux - một số thủ thuật với trình soạn thảo vim' date: '2015-04-25' author: Duyet tags: diff --git a/apps/blog/_posts/2015/04/nodejs-gioi-thieu-meanjs-fullstack.md b/apps/blog/_posts/2015/04/nodejs-gioi-thieu-meanjs-fullstack.md index b336d2af..91245b8a 100644 --- a/apps/blog/_posts/2015/04/nodejs-gioi-thieu-meanjs-fullstack.md +++ b/apps/blog/_posts/2015/04/nodejs-gioi-thieu-meanjs-fullstack.md @@ -1,5 +1,5 @@ --- -title: Nodejs - Giới thiệu MEANJs Fullstack và cách cài đặt +title: MEAN.js Fullstack date: '2015-04-05' author: Duyet tags: diff --git a/apps/blog/_posts/2015/04/nodejs-gioi-thieu-yeoman-grunt-va-bower.md b/apps/blog/_posts/2015/04/nodejs-gioi-thieu-yeoman-grunt-va-bower.md index 8462c5ac..9192caa8 100644 --- a/apps/blog/_posts/2015/04/nodejs-gioi-thieu-yeoman-grunt-va-bower.md +++ b/apps/blog/_posts/2015/04/nodejs-gioi-thieu-yeoman-grunt-va-bower.md @@ -1,5 +1,5 @@ --- -title: Nodejs - Giới thiệu Yeoman, Grunt và Bower +title: Yeoman, Grunt và Bower date: '2015-04-20' author: Duyet tags: diff --git a/apps/blog/_posts/2015/04/open-source-tim-hieu-ve-giay-phep-apache.md b/apps/blog/_posts/2015/04/open-source-tim-hieu-ve-giay-phep-apache.md index 5360236e..40250bc9 100644 --- a/apps/blog/_posts/2015/04/open-source-tim-hieu-ve-giay-phep-apache.md +++ b/apps/blog/_posts/2015/04/open-source-tim-hieu-ve-giay-phep-apache.md @@ -1,5 +1,5 @@ --- -title: ' Open Source - Tìm hiểu về giấy phép Apache' +title: Tìm hiểu về giấy phép Apache date: '2015-04-11' author: Duyet tags: diff --git a/apps/blog/_posts/2015/04/php-bai-1-tong-quan-ve-web-va-thiet-lap.md b/apps/blog/_posts/2015/04/php-bai-1-tong-quan-ve-web-va-thiet-lap.md index 3bd77bd1..3cb9bc0d 100644 --- a/apps/blog/_posts/2015/04/php-bai-1-tong-quan-ve-web-va-thiet-lap.md +++ b/apps/blog/_posts/2015/04/php-bai-1-tong-quan-ve-web-va-thiet-lap.md @@ -10,7 +10,7 @@ modified_time: '2015-04-18T20:57:32.802+07:00' thumbnail: https://4.bp.blogspot.com/-QxU1LVBUcsA/VS6XNXt1ozI/AAAAAAAACRk/Og_wF5j7WDM/s1600/mohinh01.jpg slug: /2015/04/php-bai-1-tong-quan-ve-web-va-thiet-lap.html category: PHP -description: Hơn 70% website hiện tại trên thế giới phát triển trên nền ngôn ngữ PHP là minh chứng cụ thể cho thấy đây là một ngôn ngữ mạnh mẽ, phổ biến, dễ sử dụng để phát triển Web trong thời điểm hiện tại. Có thể kể đến một số website hiện tại đang sử dụng PHP là ngôn ngữ nền tảng như Facebook, Wikipedia, Yahoo, Photobucket,… +description: Hơn 70% website hiện tại trên thế giới phát triển trên nền ngôn ngữ PHP là minh chứng cụ thể cho thấy đây là một ngôn ngữ mạnh mẽ, phổ biến, dễ sử dụng để phát triển Web trong thời điểm hiện tại. Có thể kể đến một số website hiện tại đang sử dụng PHP là ngôn ngữ nền tảng như Facebook, Wikipedia, Yahoo, Photobucket, … --- Hơn 70% website hiện tại trên thế giới phát triển trên nền ngôn ngữ PHP là minh chứng cụ thể cho thấy đây là một ngôn ngữ mạnh mẽ, phổ biến, dễ sử dụng để phát triển Web trong thời điểm hiện tại. Có thể kể đến một số website hiện tại đang sử dụng PHP là ngôn ngữ nền tảng như Facebook, Wikipedia, Yahoo, Photobucket,… diff --git a/apps/blog/_posts/2015/04/bigdata-getting-started-with-spark-in-python.md b/apps/blog/_posts/2015/04/pyspark.md similarity index 99% rename from apps/blog/_posts/2015/04/bigdata-getting-started-with-spark-in-python.md rename to apps/blog/_posts/2015/04/pyspark.md index c9e04bc2..c178626e 100644 --- a/apps/blog/_posts/2015/04/bigdata-getting-started-with-spark-in-python.md +++ b/apps/blog/_posts/2015/04/pyspark.md @@ -1,5 +1,5 @@ --- -title: Big Data - Getting Started with Spark (in Python) +title: PySpark Getting Started date: '2015-04-18' author: Duyet tags: @@ -8,7 +8,7 @@ tags: - Big Data modified_time: '2015-04-18T20:48:17.707+07:00' thumbnail: https://1.bp.blogspot.com/-Y0pygPjEUNs/VTJddlh9IfI/AAAAAAAACTQ/_LKZZPXV9Wk/s1600/delays_large.png -slug: /2015/04/bigdata-getting-started-with-spark-in-python.html +slug: /2015/04/pyspark.html category: Data description: 'Hadoop is the standard tool for distributed computing across really large data sets and is the reason why you see "Big Data" on advertisements as you walk through the airport. It has become an operating system for Big Data, providing a rich ecosystem of tools and techniques that allow you to use a large cluster of relatively cheap commodity hardware to do computing at supercomputer scale. Two ideas from Google in 2003 and 2004 made Hadoop possible: a framework for distributed storage (The Google File System), which is implemented as HDFS in Hadoop, and a framework for distributed computing (MapReduce).' --- diff --git a/apps/blog/_posts/2015/04/database-tim-hieu-ve-csdl-redis.md b/apps/blog/_posts/2015/04/redis.md similarity index 99% rename from apps/blog/_posts/2015/04/database-tim-hieu-ve-csdl-redis.md rename to apps/blog/_posts/2015/04/redis.md index a4140ca1..9a9fa001 100644 --- a/apps/blog/_posts/2015/04/database-tim-hieu-ve-csdl-redis.md +++ b/apps/blog/_posts/2015/04/redis.md @@ -1,5 +1,5 @@ --- -title: Database - Tìm hiểu về CSDL Redis +title: Redis date: '2015-04-06' author: Duyet tags: @@ -8,7 +8,7 @@ tags: - NoSQL modified_time: '2015-04-06T00:32:31.095+07:00' thumbnail: https://1.bp.blogspot.com/-5k958LlJol8/VSFvGnofvCI/AAAAAAAACOY/WM4CxLtpcOU/s1600/redis.png -slug: /2015/04/database-tim-hieu-ve-csdl-redis.html +slug: /2015/04/redis.html category: Data description: Redis là 1 trong số các hệ quản trị cơ sở dữ liệu phát triển mang phong cách NoSQL. Redis là hệ thống lưu trữ key-value với rất nhiều tính năng và được sử dụng rộng rãi. Redis nổi bật bởi việc hỗ trợ nhiều cấu trúc dữ liệu cơ bản (hash, list, set, sorted set, string), đồng thời cho phép scripting bằng ngôn ngữ lua. --- diff --git a/apps/blog/_posts/2015/04/slack-cong-cu-chat-trong-viec-theo-doi-tien-do-du-an.md b/apps/blog/_posts/2015/04/slack-cong-cu-chat-trong-viec-theo-doi-tien-do-du-an.md deleted file mode 100644 index 77fa40d3..00000000 --- a/apps/blog/_posts/2015/04/slack-cong-cu-chat-trong-viec-theo-doi-tien-do-du-an.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Slack - công cụ chat trong việc theo dõi tiến độ công việc của project -date: '2015-04-26' -author: Duyet -tags: - - Tools -modified_time: '2015-04-26T00:42:36.740+07:00' -thumbnail: https://4.bp.blogspot.com/-L2pkSjtbhqQ/VTvQbexFy_I/AAAAAAAACWU/cUhMb50WKnA/s1600/2377299_slack-500.jpg -slug: /2015/04/slack-cong-cu-chat-trong-viec-theo-doi-tien-do-du-an.html -category: News -description: Slack là gì? Đây là một dịch vụ chat mới, được phát triển để chúng ta hãy quên đi việc giao tiếp bằng email hay bằng các phần mềm chat thông thường (như Skype, Yahoo, iMessage...). Ưu điểm của nó, thứ nhất là đa nền tảng (máy tính, Android, iOS) nên mọi người trong công ty có thể chat nhóm với nhau bất kể họ dùng thiết bị gì. ---- - -Slack là gì? Đây là một dịch vụ chat mới, được phát triển để chúng ta hãy quên đi việc giao tiếp bằng email hay bằng các phần mềm chat thông thường (như Skype, Yahoo, iMessage...). Ưu điểm của nó, thứ nhất là đa nền tảng (máy tính, Android, iOS) nên mọi người trong công ty có thể chat nhóm với nhau bất kể họ dùng thiết bị gì. -Thứ hai và cũng là cái đáng nói nhất là khả năng liên kết với các ứng dụng lưu trữ của những hãng khác, ví dụ như Dropbox, Google Drive, GitHub... để cùng nhau theo dõi tiến độ công việc ngay trong cửa sổ chat của Slack. Gói miễn phí của Slack cho phép người ta có thể lưu trữ tới 10.000 tin nhắn mà nhóm đã trao đổi với nhau, 5GB dung lượng lưu trữ và cho phép liên kết 5 dịch vụ của hãng khác. Các gói có phí sẽ có nhiều chức năng và lưu trữ thoải mái hơn. - -![](https://4.bp.blogspot.com/-L2pkSjtbhqQ/VTvQbexFy_I/AAAAAAAACWU/cUhMb50WKnA/s1600/2377299_slack-500.jpg) - -Nói tóm lại, đặc điểm giúp Slack nổi bật hơn các phần mềm chat khác hiện nay đó là khả năng tích hợp chức năng chat nhóm và chức năng theo dõi tiến độ công việc (từ Google Drive, Dropbox...) trong một chỗ duy nhất, mọi người trong nhóm hay trong công ty có thể vừa trao đổi vừa làm việc mà không cần phải mở cùng lúc quá nhiều cửa sổ hay trình duyệt. - -![](https://2.bp.blogspot.com/-HCCNiPWX9xE/VTvQlrWdapI/AAAAAAAACWc/Lq-MNQdMeEk/s1600/2377290_slack-06.png) - -Slack là sản phẩm của hãng TinySpeck với đồng sáng lập là anh Stewart Butterfield, người trước đây từng là đồng sáng lập dịch vụ chia sẻ ảnh nổi tiếng Flickr của Yahoo. Stewart rời Yahoo hồi tháng 7/2008 và thành lập TinySpeck một năm sau đó. Anh Stewart nói, mục đích của Slack là giải phóng con người ta khỏi mớ email lộn xộn, tại sao phải dùng email để vừa đính kèm file vừa trao đổi công việc, nó phức tạp, mất thời gian lại quá rắc rối. Trong khi một dịch vụ chat như Slack có thể cho người ta chat nhóm theo thời gian thực lại vừa truy cập được toàn bộ file được lưu trữ trên các dịch vụ khác. - -Được biết, Slack đã chạy thử nghiệm từ tháng 8/2013 và hôm qua đã được cho chạy chính thức. Theo thống kê thì trong số các tin nhắn được trao đổi trên Slack, có đến 10% tin nhắn được gửi đi và 20% tin nhắn nhận được trên các thiết bị di động, không phải là máy tính (iOS, Android). - -Nói về sản phẩm của mình, anh Stewart cho biết mọi thứ diễn bên trong Slack rất ư là "điên cuồng", trong số các nhóm thử nghiệm của Slack kể từ tháng 8 năm ngoái cho đến nay, anh nhận thấy có nhiều nhóm trải dài từ 10 cho đến 250 thành viên và từng người trong đó đều sử dụng Slack mỗi ngày, điều này cho thấy tác dụng của Slack là rất lớn và thật sự có hiệu quả. Không chỉ những người làm trong lĩnh vực công nghệ mà kể cả các nhóm người khác như người trong nhà thờ, công ty vật liệu xây dựng hay một nhóm người trong chính quyền Anh cũng đang sử dụng loại hình chat mới mẻ này. - -![](https://3.bp.blogspot.com/-75MMeW0DaUU/VTvQuMTR9AI/AAAAAAAACWk/BQSvVE-mIqU/s1600/2377292_slack-08.png) - -Mặc dù Slack đã bước vào giai đoạn hoạt động chính thức nhưng hiện nay do số lượng đăng ký quá đông nên nhà sản xuất phải áp dụng hình thức xếp hàng, tức là ai đăng ký trước có trước, những người đến sau thì phải chờ nhưng chắc chắn đến ngày 18/02 này thì sẽ được sử dụng luôn. Về các gói cước của Slack, họ vẫn có gói miễn phí để khuyến khích càng nhiều người dùng càng tốt. Tuy nhiên, như đã nói ở trên, tài khoản Free chỉ cho phép người ta xem được 10.000 tin nhắn mới nhất, các tin nhắn cũ hơn vẫn nằm trên máy chủ của Slack nhưng muốn xem được chúng thì ta phải dùng gói trả phí, ví dụ như gói Standard giá 8$ hoặc Plus giá 15$/tháng. Ngoài ra Slack còn có các gói tài khoản Enterprise dành cho doanh nghiệp với giá từ 49-99$/tháng nhưng phải chờ đến năm 2015 mới có. - -Dự kiến trong năm nay, Slack sẽ tích hợp thêm nhiều tính năng mới ví dụ như tích hợp email, có thêm tài khoản khách (Guest Accounts) và tính năng thống kê chi tiết dành cho các tài khoản trả phí. - -## Hình ảnh - -[![](https://3.bp.blogspot.com/-WcMdIuFF_DQ/VTvRbW5BPoI/AAAAAAAACW4/xJHu2MifECU/s1600/2377287_slack-03.png)](https://3.bp.blogspot.com/-WcMdIuFF_DQ/VTvRbW5BPoI/AAAAAAAACW4/xJHu2MifECU/s1600/2377287_slack-03.png) - -[![](https://3.bp.blogspot.com/-yRjR3QjCV7U/VTvRbo1NWSI/AAAAAAAACW8/FvYHtX9WbTA/s1600/2377289_slack-05.png)](https://3.bp.blogspot.com/-yRjR3QjCV7U/VTvRbo1NWSI/AAAAAAAACW8/FvYHtX9WbTA/s1600/2377289_slack-05.png) - -[![](https://4.bp.blogspot.com/-wwX9d6IlgRA/VTvRawXmnXI/AAAAAAAACWw/oQ3N0P109zY/s1600/2377291_slack-07.png)](https://4.bp.blogspot.com/-wwX9d6IlgRA/VTvRawXmnXI/AAAAAAAACWw/oQ3N0P109zY/s1600/2377291_slack-07.png) - -[![](https://2.bp.blogspot.com/-ztYyuZEaucE/VTvRb8i90ZI/AAAAAAAACXA/naxPXUKI30s/s1600/2377293_slack-09.png)](https://2.bp.blogspot.com/-ztYyuZEaucE/VTvRb8i90ZI/AAAAAAAACXA/naxPXUKI30s/s1600/2377293_slack-09.png) - -[![](https://4.bp.blogspot.com/-uXm4TU_UjE0/VTvRc-1csmI/AAAAAAAACXQ/SRrZtT8HklQ/s1600/2377294_slack-10.png)](https://4.bp.blogspot.com/-uXm4TU_UjE0/VTvRc-1csmI/AAAAAAAACXQ/SRrZtT8HklQ/s1600/2377294_slack-10.png) - -[![](https://4.bp.blogspot.com/-GU3SPAVBmo0/VTvRdbzEIYI/AAAAAAAACXY/wZyX6Q_eLt0/s1600/2377295_slack-11.png)](https://4.bp.blogspot.com/-GU3SPAVBmo0/VTvRdbzEIYI/AAAAAAAACXY/wZyX6Q_eLt0/s1600/2377295_slack-11.png) - -[![](https://2.bp.blogspot.com/-UMxRcEkC3fc/VTvRd4tXB5I/AAAAAAAACXc/uvNu_A6qvxI/s1600/2377296_slack-12.png)](https://2.bp.blogspot.com/-UMxRcEkC3fc/VTvRd4tXB5I/AAAAAAAACXc/uvNu_A6qvxI/s1600/2377296_slack-12.png) - -[![](https://1.bp.blogspot.com/--TbBoSt6gBM/VTvReoqr-hI/AAAAAAAACXw/7QX1zlnKHJI/s1600/2377297_slack-13.png)](https://1.bp.blogspot.com/--TbBoSt6gBM/VTvReoqr-hI/AAAAAAAACXw/7QX1zlnKHJI/s1600/2377297_slack-13.png) - -[![](https://3.bp.blogspot.com/-XlD-fAwZMfQ/VTvRfO2njdI/AAAAAAAACXo/1aKFdJS0as4/s1600/2377298_slack-14.png)](https://3.bp.blogspot.com/-XlD-fAwZMfQ/VTvRfO2njdI/AAAAAAAACXo/1aKFdJS0as4/s1600/2377298_slack-14.png) - -[![](https://4.bp.blogspot.com/-ue8V_l-u5w0/VTvRfD8clXI/AAAAAAAACXs/Z4-aNxpLgDg/s1600/screen800x500.jpeg)](https://4.bp.blogspot.com/-ue8V_l-u5w0/VTvRfD8clXI/AAAAAAAACXs/Z4-aNxpLgDg/s1600/screen800x500.jpeg) - -[![](https://2.bp.blogspot.com/-JTc-8xBmMMw/VTvRfwfiCmI/AAAAAAAACX4/s_uU6pwk0yk/s1600/slack_notifications.jpg)](https://2.bp.blogspot.com/-JTc-8xBmMMw/VTvRfwfiCmI/AAAAAAAACX4/s_uU6pwk0yk/s1600/slack_notifications.jpg) - -Nguồn: tinhte.vn diff --git a/apps/blog/_posts/2020/05/spark-history-server-on-k8s.md b/apps/blog/_posts/2020/05/spark-history-server-on-k8s.md index e51cc187..c68e9fbd 100644 --- a/apps/blog/_posts/2020/05/spark-history-server-on-k8s.md +++ b/apps/blog/_posts/2020/05/spark-history-server-on-k8s.md @@ -1,6 +1,7 @@ --- title: Spark History Server on Kubernetes date: '2020-05-29' +featured: true author: Duyet category: Data Engineer tags: diff --git a/apps/blog/_posts/2020/12/airflow-taskflow-api.md b/apps/blog/_posts/2020/12/airflow-taskflow-api.md index bfbfc3e8..d87747c3 100644 --- a/apps/blog/_posts/2020/12/airflow-taskflow-api.md +++ b/apps/blog/_posts/2020/12/airflow-taskflow-api.md @@ -1,6 +1,7 @@ --- title: Airflow 2.0 - Taskflow API date: '2020-12-26' +featured: true author: Duyet category: Data Engineer tags: diff --git a/apps/blog/_posts/2021/12/rust-strategy-design-pattern.md b/apps/blog/_posts/2021/12/rust-strategy-design-pattern.md index aca0a6ef..4309ce64 100644 --- a/apps/blog/_posts/2021/12/rust-strategy-design-pattern.md +++ b/apps/blog/_posts/2021/12/rust-strategy-design-pattern.md @@ -2,6 +2,7 @@ title: 'Rust Design Pattern: Strategy Pattern' date: '2021-12-19' author: Duyet +series: Rust Design Patterns category: Rust 🦀 tags: - Rust @@ -12,27 +13,15 @@ slug: /2021/12/rust-strategy-design-pattern.html description: Strategy design pattern là một technique nhằm mục đích phân tách nhiều vấn đề, tách software modules thông qua Dependency Inversion. --- -
Chuỗi bài viết Rust Tiếng Việt là một trong những nội dung nằm trong sách Rust Tiếng Việt
- -
-

Stragery là một trong những pattern thuộc nhóm Behavioural Patterns

- - -
+**Chuỗi bài viết [Rust Tiếng Việt](/tag/rust-tiếng-việt/) là một trong những nội dung nằm trong sách [**Rust Tiếng Việt**](https://rust-tieng-viet.github.io/?utm_source=blog.duyet.net&utm_medium=post&utm_campaign=launch_rust_tieng_viet)** + +**Strategy là một trong [những pattern](/tag/rust-design-patterns) thuộc nhóm **[**Behavioural Patterns**](/tag/behavioural-patterns)\*\* + +- Behavioural Patterns + - [**Strategy Design Pattern**](/2021/12/rust-strategy-design-pattern.html) + - [Command Design Pattern](/2022/02/rust-command-design-pattern.html) +- [Creational Patterns](/tag/creational-patterns) +- [Structural Patterns](/tag/structural-patterns) [Strategy design pattern](https://en.wikipedia.org/wiki/Strategy_pattern) là một technique nhằm mục đích phân tách nhiều vấn đề, tách software modules thông qua [Dependency Inversion](https://en.wikipedia.org/wiki/Dependency_inversion_principle). diff --git a/apps/blog/_posts/2022/02/rust-builder-design-pattern.md b/apps/blog/_posts/2022/02/rust-builder-design-pattern.md index 1087812e..fe5fef8d 100644 --- a/apps/blog/_posts/2022/02/rust-builder-design-pattern.md +++ b/apps/blog/_posts/2022/02/rust-builder-design-pattern.md @@ -2,6 +2,8 @@ title: 'Rust Design Pattern: Builder Pattern' date: '2022-02-13' author: Duyet +featured: true +series: Rust Design Patterns category: Rust 🦀 tags: - Rust @@ -13,25 +15,14 @@ slug: /2022/02/rust-builder-design-pattern.html description: Builder được sử dụng cực kỳ phổ biến trong Rust so với các ngôn ngữ khác, bởi vì Rust không có overloading. --- -
Chuỗi bài viết Rust Tiếng Việt là một trong những nội dung nằm trong sách Rust Tiếng Việt
- -
-

Builder là một trong những pattern thuộc nhóm Creational Patterns

- -
+Chuỗi bài viết [Rust Tiếng Việt](/tag/rust-tiếng-việt/) là một trong những nội dung nằm trong sách [**Rust Tiếng Việt**](https://rust-tieng-viet.github.io/?utm_source=blog.duyet.net&utm_medium=post&utm_campaign=launch_rust_tieng_viet) + +Builder là một trong [những pattern](/tag/rust-design-patterns) thuộc nhóm **[Creational Patterns](/tag/creational-patterns)**. + +- Behavioural Patterns +- Creational Patterns + - [**Builder Design Pattern**](/2022/02/rust-builder-design-pattern.html) +- Structural Patterns # Rust Builder Design Pattern diff --git a/apps/blog/_posts/2022/02/rust-command-design-pattern.md b/apps/blog/_posts/2022/02/rust-command-design-pattern.md index 8aa0d6a4..3f84db45 100644 --- a/apps/blog/_posts/2022/02/rust-command-design-pattern.md +++ b/apps/blog/_posts/2022/02/rust-command-design-pattern.md @@ -2,6 +2,8 @@ title: 'Rust Design Pattern: Command Pattern' date: '2022-02-13' author: Duyet +featured: true +series: Rust Design Patterns category: Rust 🦀 tags: - Rust @@ -12,26 +14,13 @@ slug: /2022/02/rust-command-design-pattern.html description: Ý tưởng cơ bản của Command Pattern là tách các actions thành các object riêng và gọi chúng thông qua parameters. --- -
Chuỗi bài viết Rust Tiếng Việt là một trong những nội dung nằm trong sách Rust Tiếng Việt
- -
-

Stragery là một trong những pattern thuộc nhóm Behavioural Patterns

- -
+Chuỗi bài viết [Rust Tiếng Việt](/tag/rust-tiếng-việt/) là một trong những nội dung nằm trong sách [**Rust Tiếng Việt**](https://rust-tieng-viet.github.io/?utm_source=blog.duyet.net&utm_medium=post&utm_campaign=launch_rust_tieng_viet). + +- **Behavioural Patterns**: + - [Strategy Design Pattern](/2021/12/rust-strategy-design-pattern.html) + - [**Command Design Pattern**](/2022/02/rust-command-design-pattern.html) +- [Creational Patterns](/tag/creational-patterns) +- [Structural Patterns](/tag/structural-patterns) Ý tưởng cơ bản của [Command Pattern](https://en.wikipedia.org/wiki/Command_pattern) là tách các actions thành các object riêng và gọi chúng thông qua parameters. diff --git a/apps/blog/_posts/2022/02/rust-small-crates-design-pattern.md b/apps/blog/_posts/2022/02/rust-small-crates-design-pattern.md index fd5075d8..f9fdc2df 100644 --- a/apps/blog/_posts/2022/02/rust-small-crates-design-pattern.md +++ b/apps/blog/_posts/2022/02/rust-small-crates-design-pattern.md @@ -3,6 +3,8 @@ title: 'Rust Design Pattern: Prefer Small Crates' date: '2022-02-13' author: Duyet category: Rust 🦀 +featured: true +series: Rust Design Patterns tags: - Rust - Vietnamese @@ -14,25 +16,14 @@ twitterCommentUrl: https://twitter.com/search?q=https%3A%2F%2Fblog.duyet.net%2F2 description: Prefer small crates that do one thing well. Để có được sự hiệu quả, mọi crate phải được thiết kế tốt, lựa chọn dependencies kỹ càng và càng độc lập càng tốt. --- -
Chuỗi bài viết Rust Tiếng Việt là một trong những nội dung nằm trong sách Rust Tiếng Việt
+Chuỗi bài viết [Rust Tiếng Việt](/tag/rust-tiếng-việt/) là một trong những nội dung nằm trong sách [**Rust Tiếng Việt**](https://rust-tieng-viet.github.io/?utm_source=blog.duyet.net&utm_medium=post&utm_campaign=launch_rust_tieng_viet). -
-

Prefer Small Crates là một trong những pattern thuộc nhóm Structural Patterns

- -
+Prefer Small Crates là một trong [những pattern](/tag/rust-design-patterns) thuộc nhóm **[Structural Patterns](/tag/structural-patterns)**. + +- Behavioural Patterns +- Creational Patterns +- Structural Patterns + - [**Prefer Small Crates**](/2022/02/rust-small-crates-design-pattern.html) Không hẳn là một Design pattern, mình thấy đây là một tư tưởng khi viết các project bằng Rust. diff --git a/apps/blog/_posts/2022/08/rust-rayon.md b/apps/blog/_posts/2022/08/rust-rayon.md index aca4a69e..b0045490 100644 --- a/apps/blog/_posts/2022/08/rust-rayon.md +++ b/apps/blog/_posts/2022/08/rust-rayon.md @@ -1,6 +1,7 @@ --- title: 'Rust: Rayon - A data parallelism library for Rust' date: '2022-08-06' +featured: true author: Duyet category: Rust 🦀 tags: diff --git a/apps/blog/_posts/2022/09/rust-question-mark-operator.md b/apps/blog/_posts/2022/09/rust-question-mark-operator.md index 5cd5d91d..b703aead 100644 --- a/apps/blog/_posts/2022/09/rust-question-mark-operator.md +++ b/apps/blog/_posts/2022/09/rust-question-mark-operator.md @@ -1,6 +1,7 @@ --- title: 'Rust: Why ? is good' date: '2022-09-24' +featured: true author: Duyet category: Rust 🦀 tags: diff --git a/apps/blog/_posts/2024/03/clickhouse-monitoring.md b/apps/blog/_posts/2024/03/clickhouse-monitoring.md index ea882885..b50ab2a5 100644 --- a/apps/blog/_posts/2024/03/clickhouse-monitoring.md +++ b/apps/blog/_posts/2024/03/clickhouse-monitoring.md @@ -12,6 +12,7 @@ tags: slug: /2024/03/clickhouse-monitoring.html thumbnail: /media/2024/03/monitoring-clickhouse/clickhouse-monitoring.png description: Now that you have your first ClickHouse instance on Kubernetes and are starting to use it, you need to monitoring and observing what happens on it is an important task to achieve stability. +twitterCommentUrl: https://x.com/search?q=https%3A%2F%2Fblog.duyet.net%2F2024%2F03%2Fclickhouse-monitoring.html --- Now that you have your [first ClickHouse instance on Kubernetes](https://blog.duyet.net/2024/03/clickhouse-on-kubernetes.html) and are starting to use it, you need to monitoring and observing what happens on it is an important task to achieve stability. There are many ways: diff --git a/apps/blog/_posts/2024/05/clickhouse-mergetree.md b/apps/blog/_posts/2024/05/clickhouse-mergetree.md index 8f4c8ad7..2c644c36 100644 --- a/apps/blog/_posts/2024/05/clickhouse-mergetree.md +++ b/apps/blog/_posts/2024/05/clickhouse-mergetree.md @@ -11,6 +11,7 @@ tags: slug: /2024/05/clickhouse-mergetree.html thumbnail: /media/2024/05/clickhouse-mergetree-parts-merge.png description: After starting this series ClickHouse on Kubernetes, you can now configure your first single-node ClickHouse server. Let's dive into creating your first table and understanding the basic concepts behind the ClickHouse engine, its data storage, and some cool features +twitterCommentUrl: https://x.com/search?q=https%3A%2F%2Fblog.duyet.net%2F2024%2F05%2Fclickhouse-mergetree.html --- After starting this series [ClickHouse on Kubernetes](https://blog.duyet.net/2024/03/clickhouse-on-kubernetes.html), you can now configure your first single-node ClickHouse server. diff --git a/apps/blog/_posts/2024/06/clickhouse-replacingmergetree.md b/apps/blog/_posts/2024/06/clickhouse-replacingmergetree.md index 5fda8ead..52da94c4 100644 --- a/apps/blog/_posts/2024/06/clickhouse-replacingmergetree.md +++ b/apps/blog/_posts/2024/06/clickhouse-replacingmergetree.md @@ -11,6 +11,7 @@ tags: slug: /2024/06/clickhouse-replacingmergetree.html thumbnail: /media/2024/06/clickhouse-replacingmt/clickhouse-replacingmergetree-illustration.png description: My favorite ClickHouse table engine is `ReplacingMergeTree`. The main reason is that it is similar to `MergeTree` but can automatically deduplicate based on columns in the `ORDER BY` clause, which is very useful. +twitterCommentUrl: https://x.com/search?q=https%3A%2F%2Fblog.duyet.net%2F2024%2F06%2Fclickhouse-replacingmergetree.html --- My favorite ClickHouse table engine is `ReplacingMergeTree`. The main reason is that it is similar to [`MergeTree`](/2024/05/clickhouse-mergetree.html) but can automatically deduplicate based on columns in the `ORDER BY` clause, which is very useful. diff --git a/apps/blog/_posts/2024/06/clickhouse-replicatedreplacingmergetree.md b/apps/blog/_posts/2024/06/clickhouse-replicatedreplacingmergetree.md index e839a6cd..f74824c3 100644 --- a/apps/blog/_posts/2024/06/clickhouse-replicatedreplacingmergetree.md +++ b/apps/blog/_posts/2024/06/clickhouse-replicatedreplacingmergetree.md @@ -12,6 +12,7 @@ tags: slug: /2024/06/clickhouse-replicatedreplacingmergetree.html thumbnail: /media/2024/06/clickhouse-replicated/clickhouse-replicatedreplacingmergetree.png description: Now you have a large single node cluster with a ReplacingMergeTree table that can deduplicate itself. This time, you need more replicated nodes to serve more data users or improve the high availability. +twitterCommentUrl: https://x.com/search?q=https%3A%2F%2Fblog.duyet.net%2F2024%2F06%2Fclickhouse-replicatedreplacingmergetree.html --- Now you have a large single node cluster with a [ReplacingMergeTree](https://blog.duyet.net/2024/06/clickhouse-replacingmergetree.html) table that can deduplicate itself. This time, you need more replicated nodes to serve more data users or improve the high availability. diff --git a/apps/blog/_posts/2024/11/clickhouse-rust-udf.md b/apps/blog/_posts/2024/11/clickhouse-rust-udf.md index 3b99a597..923ac782 100644 --- a/apps/blog/_posts/2024/11/clickhouse-rust-udf.md +++ b/apps/blog/_posts/2024/11/clickhouse-rust-udf.md @@ -9,6 +9,7 @@ tags: slug: /2024/11/clickhouse-rust-udf.html thumbnail: /media/2024/11/udf/clickhouse-rust-udf-dbt.png description: In Data Platform System with ClickHouse, rather than extracting data from ClickHouse for processing in external systems, we can perform transformations directly within ClickHouse itself. ClickHouse can call any external executable program or script to process data. My idea is using custom **User-Defined Functions (UDFs) written in Rust** to handle data transformations between tables. +twitterCommentUrl: https://x.com/search?q=https%3A%2F%2Fblog.duyet.net%2F2024%2F11%2Fclickhouse-rust-udf.html --- Why Rust? diff --git a/apps/blog/next.redirects.js b/apps/blog/next.redirects.js index e4aebfb1..5e5cbbe5 100644 --- a/apps/blog/next.redirects.js +++ b/apps/blog/next.redirects.js @@ -103,6 +103,21 @@ const redirects = async () => [ destination: '/2015/04/mongo-web-query.html', permanent: true, }, + { + source: '/2015/04/database-tim-hieu-ve-csdl-redis.html', + destination: '/2015/04/redis.html', + permanent: true, + }, + { + source: '/2015/04/bootstrap-gioi-thieu-ve-components.html', + destination: '/2015/04/bootstrap.html', + permanent: true, + }, + { + source: '/2015/04/bigdata-getting-started-with-spark-in-python.html', + destination: '/2015/04/pyspark.html', + permanent: true, + }, ] module.exports = redirects diff --git a/packages/components/Footer.tsx b/packages/components/Footer.tsx index 1f99e787..3039d88d 100644 --- a/packages/components/Footer.tsx +++ b/packages/components/Footer.tsx @@ -49,14 +49,16 @@ function FooterHeader({ children }: { children: ReactNode }) { const navigation = { general: [ { - name: "Rust Tiếng Việt (Book)", + name: "Rust Tiếng Việt", href: "https://rust-tieng-viet.github.io/?utm_source=blog&utm_medium=footer&utm_campaign=rust_tieng_viet", }, { name: "/ai", href: `${BLOG_URL}/ai` }, { name: "/archives", href: `${BLOG_URL}/archives` }, { name: "/series", href: `${BLOG_URL}/series` }, + { name: "/tags", href: `${BLOG_URL}/tags` }, ], profile: [ + { name: "About", href: `${BLOG_URL}/about` }, { name: "Linkedin", href: "https://linkedin.com/in/duyet" }, { name: "Resume", href: CV_URL }, { name: "Projects", href: "https://github.com/duyet?tab=repositories" },