Write code, love life!
Look like you’ve found my tiny space on the Internet.
Beside some posts I’ve wrote here, you can find my notes in Everyday Learning
which writing about what I learned “everyday” 😁.
Write code, love life!
Look like you’ve found my tiny space on the Internet.
Beside some posts I’ve wrote here, you can find my notes in Everyday Learning
which writing about what I learned “everyday” 😁.
Chào anh em, hôm nay mình sẽ đào sâu hơn vào kỹ thuật đằng sau Flutter Rusty Voz. Không lan man về Flutter cơ bản, bài viết này sẽ xoáy sâu vào cách mình “reverse engineering” cơ chế của Voz để mang lại trải nghiệm Native tốt nhất. 1. Deep Dive: Voz Mechanics & Authentication 🔐 Voz sử dụng xenForo làm nền tảng, và việc giao tiếp API với nó không đơn thuần là RESTful chuẩn chỉ. Đó là cuộc chơi của Cookies, Tokens và… HTML Parsing. ...
Chuyện là đợt dính covid vừa rồi phải cách ly một mình một cõi, mình mới nhận ra là mình còn sở hữu một em kindle paper white đời thứ 3 vẫn còn ngon. Hồi đấy mua về để đọc truyện mà sau lại lười quá, vứt xó rồi quên luôn :sweat_smile:. Cách ly chán quá, nên mình có thời gian đọc cày xong Kimetsu no yaiba luôn. Rảnh thật đấy :relieved:. Mấy hôm nay thì mình có đọc tiếp Conan, bác tác giả ra chap mới lâu thiệt chứ. Thế là tình cờ phát hiện ra một trang truyện dịch lại những quyển tiêu thuyết (không phải là manga nha). Cơ mà đọc trên kindle quen rồi, đọc trên máy điện thoại hay tablet mình thấy khó tập trung hơn. Nên mình quyết định thử chuyển mấy cuốn truyện đó lên Kindle được hay không! ...
Chuyện kể rằng có một cậu thanh niên đua đòi đi làm blog. Sau khi tạo ra blog và làm hẳn một bài viết để chém gió cách làm blog trong 10 phút, cậu ta lại muốn blog phải có chỗ để các bạn đọc có thể góp ý, bởi lẽ cậu này viết ẩu lắm, bài viết ra không sai chỗ này thì cũng sai chỗ kia. Và thế là, cậu cũng sắm cho blog của mình một nút comment. Hồi đó, mọi người dùng Disqus nhiều lắm, nên là cậu cũng dùng Disqus. ...
Hôm trước tester có report cho mình một lỗi đó là khi đã thanh toán thành công rồi mà trên app mobile lại hiện là hoá đơn không hợp lệ. Nghe có vẻ magic :slightly_smiling_face:. Nào, cùng bắt đầu hành trình tìm cái ngu của bản thân nào! Hiểu vấn đề Bước đầu tiên là cần phải hiểu vấn đề đã. Nếu trên client báo lỗi như vậy thì có 2 khả năng ...
Hế lu mọi người, sau một năm sủi để tìm cách thoát ế, mình mới nhớ ra là mình vẫn còn 1 cái blog :grin:. Trở lại lần này, mình tự mày mò thêm 1 vài tính năng mới cho cái blog đã bị mạng nhện bám kín này như là đổi qua lại giữa Dark/light theme, hay là tự làm hệ thống comment riêng cho blog. Mấy cái này nếu có thời gian mình sẽ viết sau (hoặc là sủi tiếp :relieved:) ...
Sau khi viết một số bài trên Viblo, mình đã nảy ra ý định (thực ra là từ năm nhất rồi nhưng mà lười) làm một blog cá nhân để tổng hợp lại kiến thức cũng như nâng cao khả năng chém gió. Và… sau nửa buổi tối lục lọi trên Google và Github, cuối cùng mình cũng đã tìm được thứ mà mình cần: một static blog framework Tại sao lại là static? Thực tế, đa số các trang web chúng ta truy cập hiện nay đều là các web động (dynamic web), nghĩa là khi ta truy cập, server mới thực hiện quá trình load data và render ra HTML. Tuy nhiên, mục đích của mình chỉ là tạo ra một blog hiển thị nội dung có sẵn, nên việc triển khai một dynamic web là không cần thiết, lại còn phải config database, code củng nữa, mệt lắm :( ...
Memory leaks thường xảy ra mà không có bất cứ thông báo nào. Mặc dù việc sử dụng weak reference cho self trong các closure đã giúp ích rất nhiều, nhưng như thế là chưa đủ. Chúng ta có thể sử dụng memory graph debugging hoặc Xcode Instruments để tìm và giải quyết các lỗi về bộ nhớ. Nhưng nó khá phức tạp và tốn nhiều thời gian. Rất may là chúng ta có một cách đơn giản hơn, là bằng cách sử dụng unit test. Phương pháp này không thể ngăn chặn được tất cả các leak, nhưng nó vẫn rất hiệu quả. ...
Trong Swift, ta có kiểu reference type (Class) và value type (Struct, Tuble, enum). Kiểu value type có bản chất là copy. Có nghĩa là nếu bạn gán một value type cho một biến hoặc pass nó như một parameter của function (không phải inout), dữ liệu của value type này sẽ được copy. Lúc này, bạn sẽ có 2 value type có nội dung giống nhau nhưng có 2 địa chỉ bộ nhớ riêng biệt. Hôm nay chúng ta sẽ nói về Copy-on-Write (CoW), một thứ rất quan trọng để hiểu về cách quản lý bộ nhớ value type của Swift ...