Category Archives: Chuyện coding

Tât tần tật những thứ liên quan đến coding.

Gắn râu JAV Idol – Phần 2: Làm quen với các thư viện và API cần sử dụng

Series này gồm 3 phần:

  1. Cơ chế hoạt động của các filter Snapchat và Facebook Messenger
  2. Làm quen với các thư viện và API cần sử dụng
  3. Gắn râu bằng cách kết hợp Face Detection + Image Processing và… Toán Học

 

Ở phần trước, chúng ta đã tìm hiểu về cơ chế hoạt động của các filter trên Snapchat và Facebook. Sau đó, chúng ta đã setup code gọi API để nhận diện các đặc điểm của khuôn mặt.

Trong phần này, chúng ta sẽ đi sâu vào việc sử dụng kĩ thuật xử lý hình ảnh để… gắn râu vào khuôn mặt nhé!

Continue reading Gắn râu JAV Idol – Phần 2: Làm quen với các thư viện và API cần sử dụng

Advertisements

Gắn râu Sơn Tùng – Phần 1 : Bắt chước tính năng cực hay của Snapchat và Facebook

Hôm trước, mình có nhận được một câu hỏi tưởng chừng đơn giản nhưng lại rất hóc búa từ một bạn đọc:

Anh ơi, tại sao Facebook Messenger và Snapchat có thể làm các filter ngầu lòi, có thể gắn râu, gắn tai thỏ, đội mũ cho người dùng qua camera vậy.

Đằng sau một tính năng vui vui, đơn giản như vậy lại là một nền tảng các công nghệ cực kì phức tạp từ facial recognition cho đến image processing, hoàn toàn… không dễ một xíu nào.

Vì thế, trong bài này, chúng ta cùng tìm hiểu cơ chế hoạt động của chúng, sau đó làm một ứng dụng tương tự mang tên … gắn râu Sơn Tùng nhé.

Series này gồm 3 phần:

  1. Cơ chế hoạt động của các filter Snapchat và Facebook Messenger
  2. Làm quen với các thư viện và API cần sử dụng
  3. Gắn râu bằng cách kết hợp Face Detection + Image Processing và… Toán Học

 

Đây là ảnh gốc Sơn Tùng trước khi được gắn râu:

Animated GIF - Find & Share on GIPHY

Còn đây là ảnh Sơn Tùng sau khi đã gắn râu nhờ ứng dụng:

Animated GIF - Find & Share on GIPHY

Thú vị chưa nào? Chúng ta cùng bắt đầu nhé!

Continue reading Gắn râu Sơn Tùng – Phần 1 : Bắt chước tính năng cực hay của Snapchat và Facebook

Theo chân đại ca Cảnh Trần – Data Scientist, phân tích nhiều điều thú vị về ngành JAV

Đọc xong cái tựa, các bạn đừng tưởng rằng mình lọt nhầm vào trang báo lá cải nào nhé! Đây vẫn là blog Tôi Đi Code Dạo, do mình – Hoàng Code Dạo – viết bài về code nha.

Tác giả bài viết:

  • Anh Cảnh Trần – Data Scientist: Data Analysis (Phân tích dữ liệu) và Data Visualization (Trình bày dữ liệu).
  • Hoàng Code Dạo – Blogger: Data Provider (Cung cấp dữ liệu) + Editor (Xào chế lại cho bài nó bựa)

 

Trong bài này, anh Cảnh chia sẻ về quá trình sử dụng Python và các kĩ thuật Data Analysis để phân tích và tìm hiểu dữ liệu về JAV Idol và movies; đồng thời rút ra khá nhiều điều thú vị!

Mặc dù đặt cái tựa giật gân thế thôi, nhưng đây là bài viết hoàn toàn mang tính chất học thuật và technical nhé!

Continue reading Theo chân đại ca Cảnh Trần – Data Scientist, phân tích nhiều điều thú vị về ngành JAV

Lật mặt tốc độ tải trang “rùa bò” của Sên Đô và Tiki

Trong bài trước, mình đã chia sẻ về công nghệ “hiện đại” đằng sau tốc độ tải trang chóng mặt của web Thế Giới Di Động.

Mình cũng có chia sẻ về cách optimize front-end nhằm đạt được tốc độ trên. Việc đó hoàn toàn không quá khó, dù bạn có là junior front-end dev. Điển hình là các trang phía dưới do mình đã otpimize:

Thế nhưng, nhiều bạn hỏi mình là “Nếu dễ vậy, tại sao các trang khác không bắt chước Thế Giới Di Động? Tại sao chỉ có TGDD là load nhanh?”

Thế là, mình lại đi tìm hiểu một số đối thủ khác của TGDD như Tiki, Sên Đô. Quả thật, các trang hơi load khá “rùa bò”, không nhanh bằng Thế Giới Di Động.

Tại sao vậy nhỉ? Chúng ta cùng tìm hiểu, thử đưa ra lời khuyên để cải thiện tốc độ tải trang xem sao nhé!

Full disclosure: Mình không được đồng quảng cáo nào khi khen thegioididong và chê các trang dưới đâu nhe nhe 😉

Continue reading Lật mặt tốc độ tải trang “rùa bò” của Sên Đô và Tiki

Công nghệ “hiện đại” phía sau tốc độ tải trang “chóng mặt” của Thế Giới Di Động

Cách đây vài hôm, mình nhận được một câu hỏi khá thú vị là: Trang Thế Giới Di Động (thegioididong.com) sử dụng công nghệ gì mà có thể tải nhanh chóng mặt như vậy?

Chỉ mất vài phút để mở web thế giới di động lên tìm hiểu, nhưng mình lại nhận được một câu trả lời vừa hay ho, vừa ngạc nhiên và vô cùng thú vị.

Nếu tò mò thì các bạn kéo xuống đọc tiếp nhé!

Full disclosure: Mình không được đồng quảng cáo nào khi khen team thegioididong đâu nhe 😉

Continue reading Công nghệ “hiện đại” phía sau tốc độ tải trang “chóng mặt” của Thế Giới Di Động

Tìm hiểu về ELK Stack – công cụ quản lý log ngầu nhất quả đất!

Hôm trước, trong bài viết về các công cụ “hay ho” mà lập trình viên ít biết, mình có nhắc đến logging.

Logging là một công cụ đơn giản và mạnh mẽ, ghi lại toàn bộ những hoạt động của hệ thống. 

Nhờ có logging, ta có thể tra cứu lại trạng thái của hệ thống trong quá khứ, những code nào đã được chạy, từ đó tìm ra lỗi và fix dễ dàng hơn.

Hôm nay, mình sẽ giới thiệu về ELK Stack, một trong các stack mạnh mẽ, phổ biến nhất dùng để ghi log nhé!

Rất nhiều hệ thống lớn trên thế giới (LinkedIn, Netflix, Medium) đều sử dụng stack này đấy!

Continue reading Tìm hiểu về ELK Stack – công cụ quản lý log ngầu nhất quả đất!

Công cụ đơn giản, bá đạo mà 69.96% sinh viên IT không biết – Phần 2 : Profiler và Command Line

Nối tiếp phần 1, mình sẽ tiếp tục giới thiệu về những công cụ đơn giản, bá đạo mà truờng không hề dạy, làm đồ án cũng không bao giờ dùng. Tuy nhiên, chúng lại đuợc áp dụng trong 96.69% dự án thực tế.

Thông qua những câu chuyện ngắn gọn, mình sẽ giới thiệu và giải thích về các công cụ này nhé. Chúng lần lượt là:

  • Phần 1: Unit Test và Logging
  • Phần 2: Profiler và Command Line

Nhắc lại một tí, hai nhân vật chính trong câu chuyện này là:

  • Tùng, một sinh viên Ép Tao Dê mới ra trường, gia nhập công ty phần mềm Ép Dê Tao với vị trí junior.
  • Sơn, một anh senior dev kì cựu cao to sáu múi.

Profiler – Code chậm thành nhanh, không còn memory leak

Chuyện thứ 3: Mấy tháng sau, Tùng đã không còn là junior developer nữa mà đã… lên chức thành developer. Anh Sơn cũng từ vị trí senior developer leo lên techinical lead.

Duyên trời run rủi, hai người lại bị điều vào chung 1 dự án. Đây là một dự án C#, công việc chính cũng là bảo trì và thêm chức năng mới.

Vì dự án đã được phát triển từ 5,6 năm trước nên code rất nhiều, cấu trúc vô cùng rắc rối và phức tạp. Hồi trước chỉ có khoảng 100-200 user nên không sao, bây giờ hệ thống đã lên tầm 50-100k user nên hệ thống bắt đầu bị chậm, lâu lâu lại crash vì thiếu RAM.

Nhận trọng trách mới, Tùng bắt tay vào optimize code để hệ thống chạy nhanh hơn, ít tốn RAM hơn. Tùng cắm đầu cắm cổ áp dụng đủ mọi kiến thức từ đổi thuật toán, thêm caching, thay ORM. Thế nhưng, sau một tuần, hiệu suất chỉ tăng mỗi … 5-10%.

Thấy tội nghiệp, anh Sơn liền ra tay, hướng dẫn Tùng cách dùng profiler.

Profiler là một công cụ cho phép ta đo đạc thời gian hoạt động, tài nguyên mà các đoạn code sử dụng, từ đó optimize cho hợp lý.

C# Profiler trong Visual Studio
Tùng lần luợt làm theo 4 bước:

  1. Chạy code cùng với profiler một thời gian
  2. Dựa theo profiler tìm, các đoạn code chạy chậm nhất, tốn tài nguyên nhất
  3. Optimize các đoạn code đó
  4. Chạy lại profiler để check kết quả

Đêm đó, hai anh em Sơn Tùng thức suốt đêm tại công ty để tình thương mến thương,… nhầm, để optimize code.

Hoá ra do mỗi lần truy cập, chương trình lại đọc thông tin từ một file text vài trăm MB trên ổ cứng, sau đó không close connection nên bị memory leak.

Anh Sơn chỉ việc load toàn bộ thông tin này lên RAM làm cache, hệ thống chạy nhanh gấp… 5 lần, hết tràn RAM chỉ nhờ 10 dòng code và profiler.

Nhờ profiler, Tùng và anh Sơn nhanh chóng optimize code và fix đuợc memory leak
Bài học rút ra: Profiler là một công cụ rất mạnh mẽ nhưng ít bạn biết vì … làm bài tập và dự án trên trường có bao giờ phải optimize code đâu.

Mỗi ngôn ngữ thường đi kèm với profiler, có khi tích hợp sẵn trong IDE luôn. Do vậy, khi cần optimize code, các bạn hãy nhớ đến profiler nhé.

Command Line – Cảnh giới “thần thánh” không cần chuột

Chuyện thứ tư: Một hôm nọ, Tùng may mắn được ngồi cạnh pair programming với anh Sơn. Tùng để ý anh rất ít khi dùng chuột mà chỉ toàn dùng bàn phím gõ gõ, trên màn hình đen thui nhấp nháy.

Thắc mắc, Tùng hỏi: Sau anh không dùng giao diện cho dễ mà gõ gõ chi vậy anh?

Anh Sơn trả lời: Hở? Em vẫn còn dùng giao điện àh? Chuyển qua dùng Terminal và Vim đi! Tăng ít nhất 50% năng suất làm việc đấy!

Bán tín bán nghi, Tùng cũng bắt đầu tập sử dụng command line và Vim trong các công việc thường ngày: Sửa file, build code, chạy code.

Sau một thời gian, Tùng nhận thấy mình bắt đầu viết code nhanh hơn, thực hiện công việc nhanh hơn, năng suất tăng còn hơn 50% mà anh Sơn đã quảng cáo.

Nhờ làm việc chung với anh Sơn, Tùng cảm thấy trình độ của mình ngày một tăng, tình cảm “chong xáng” dành cho anh cũng tăng theo.

Sự bá đạo của Command Line. Ảnh chôm của codeaholicguy
Command Line là một công cụ vô cùng mạnh mẽ mà nhiều bạn sinh viên/lập trình viên bỏ qua, do đã quá quen thuộc với Windows và IDE.

Ta có thể build code từ command line, sử dụng Git từ command line, thậm chí upload file hoặc deploy code từ command line nốt.

Command Line còn được những bạn làm về mạng hoặc sysadmin ưu dùng. Khi quản lý các server Ubuntu, bạn sẽ không thể dùng giao diện và click như Window mà phải SSH để kết nối tới server, sau đó dùng command line để quản lý.

Hoặc nếu bạn làm Front-end developer, command line càng là người bạn không thể thiếu. Hầu như các tool của mảng front-end (Babel, Webpack, npm) đều dựa trên nền NodeJS, chạy trên command line. Thành thạo command line là nền tảng để sử dụng các tool này.

Do đó, mình khuyến khích các bạn nên học và làm quen cách dùng command line nhé! Ví dụ như trong clip dưới, mình và Codeaholicguy có huớng dẫn cách dùng Git trên command line.

Bạn có thể cài Bash trên Windows 10, hoặc kiếm một con VPS Ubuntu để tập nghịch command line nhé. Ngoài ra, bạn có thể đọc cuốn này để nhập môn cách dùng command line: Learn Enough Command Line to Be Dangerous.

Nếu bạn có hứng thú thì cứ để lại comment nhé. Nếu có nhiều người quan tâm thì sau này mình sẽ có một series riêng về cách dùng command line nha!

Chuyện cuối cùng

Sau đó, anh Sơn và Tùng nhận ra tình cảm của mình dành cho nhau. Hai người sống hạnh phúc bên nhau đến cuối đời. Họ có với nhau một đứa con xinh xắn tên là Sơn Tùng MTP.

Từ đó Tùng và anh Sơn sống hạnh phúc bên nhau đến cuối đời
Các bạn có thể sẽ thắc mắc: Tại sao ngay từ đầu anh Sơn không vô giúp đỡ Tùng mẹ nó đi, chờ nó te tua rồi mới nhảy vô vậy?? Đương nhiên anh Sơn có thể làm vậy, nhưng để Tùng tự va chạm, tự trải nghiệm sẽ giúp Tùng học được nhiều hơn, nhớ lâu hơn.

Do vậy, khi gặp khó khăn, các bạn có thể hỏi người có kinh nghiệm hơn. Tuy nhiên, hãy tự mình tìm hiểu trước, vừa để cho bản thân mình, vừa tiết kiệm thời gian của người khác nhé!

Kết

Đấy, trong 2 phần của bài viết, mình đã chia sẻ về bốn công cụ đơn giản, mạnh mẽ nhưng rất hữu ích bao gồm:

  1. Unit Test
  2. Logging
  3. Profiler
  4. Command Line

Bạn còn biết công cụ nào nữa không? Hãy chia sẻ và thảo luận trong phần comment nhé ;).