Viết cho tuổi 20
Bài viết mà thằng chả chém gió về tri túc các kiểu…
Đầu tiên tui xin cáo lỗi vì ba tuần vừa rồi không có bài mới nào cả. Lý do không viết bài là bởi vì tui đang tập trung viết XML parser.
Hôm nay tui muốn kế cho các bạn nghe một câu chuyện phiếm về đời engineering.
Chừng 3 tuần trước, tui có ý tưởng viết journals (daily blog) linh tinh trên Medium. Sau đó đọc RSS feed và hiển thị lại trên blog hqc.io.
Từ đó tui tìm hiểu các Elixir library liên quan và chọn được feeder_ex. Lý do chọn nó khá là đơn giản: nó có nhiều star nhất . Tuy nhiên sau khi dùng feeder_ex được một thời gian thì thấy nó không phù hợp vì:
Do đó, tui tự viết lại Việt, RSS parser của riêng tui (chưa 100% production-ready).
Có một số yêu cầu tui tự đặt cho mình khi viết Việt:
Và rồi thì tui cũng viết xong Việt.
Tuy nhiên việc khiến nhiều người không thích SAX parser là bởi vì handle các node khó hơn (tui sẽ viết một bài về SAX parser sau). Tui cũng vậy, vì thế trong quá trình viết Việt, tui có abstract ra một cái module để giúp việc handle SAX events dễ dàng hơn.
Tên của em ấy là FML.
Giả sử bạn có một XML document như sau:
<?rss version="1.0" encoding="UTF-8" standalone="yes" ?>
<document>
<accounts>
<account>
<name>Cam Huynh</name>
</account>
<account>
<name>John Cena</name>
</account>
<account>
<name>Cristiano Ronaldo</name>
</account>
</accounts>
<shops>
<shop>
<name>Hello Kitty</name>
</shop>
</shops>
</document>
Với SAX events bình thường thì việc handle node <name>
sẽ khá lẳng nhằng, bởi bạn không phân biệt được node đó là con của <account>
hay của <shop>
, vì SAX chỉ cho bạn node name và node attributes đang được duyệt.
FML sẽ giúp bạn handle việc đó dễ hơn. Khi bạn duyệt node <name>
, FML sẽ cung cấp thêm parent stack bên cạnh node name và node attributes.
def on_start_element({'name', _, _}, [{'account', _, _} | _parents], state) do
# Code eaten by the Internet
end
FML đánh đổi chút memory so với SAX event ban đâu, với max items trong stack = độ sâu nhất của một node con, nhưng bù lại, bạn có thể handle các node dễ hơn.
Sau khi sử dụng erlsom một hồi tui lại phát hiện có vẻ như erlsom cũng fail một số XML rules được cung cấp bởi tổ chức W3.
Và … tui lại tiếp tục tự viết XML parser.
Tình hình là nó vẫn chưa viết xong (nhưng rất gần rồi), nhưng tui nghiệm ra được cả núi thứ mà trước giờ đọc Dragon book không tài nào hiểu nổi.
Thật ra thì tăng bao nhiêu lương thì vợ bạn cũng giữ hết thôi, nhưng tui rút ra được mấy thứ hy vọng sẽ có ích cho đời engineering của bạn.
Trước có nghe một anh nói về điều này, lúc đó tui hơi ngờ vực chút.
Nhưng giờ thì tui nghĩ rằng đó là cách học và nhớ tốt nhất, vì lúc này kiến thức đã được liên kết với một cái gì đó có thực. Sau này khi nhắc đến kiến thức đó, bạn ngay lập tức nhớ nó được áp dụng như thế nào và giải quyết vấn đề gì.
Như trong bài viết đã nêu, tui bắt đầu hiểu các lý thuyết về parser và ứng dụng của chúng khi thực sự viết parser.
Nhờ vậy mà rất khó để bạn quên.
Tui thấy nhiều bạn hay học bằng cách chọn lấy một môn Computer Science thật khó, và nhào vào học nó.
Cách học này khá ổn, nhưng nếu bạn thấy nó không hiệu quả, có thể thử học với phương pháp bóc củ hành.
Ví dụ bạn muốn tìm hiểu về Git Internals. Bạn có bóc từng lớp của củ hành này, từ ngoài vào trong, như sau:
Lợi thế của cách học này là bạn từng bước nắm chắc các lớp của củ hành, và ở từng bước, bạn biết mình học thứ đó để làm gì.
Sau khi học quá nhiều thì việc đi chơi một chút sẽ giúp bạn thư giản đầu óc, giảm bớt căng thằng.
Vì vậy tui xin thông báo là tui lại đóng bàn phím một tháng để đi chơi. Hẹn gặp lại các bạn sau 1 tháng!
Bài viết mà thằng chả chém gió về tri túc các kiểu…
Macro không những là một trong những viên gạch giúp bạn meta-program với Elixir, mà nó còn là công cụ giúp Elixir meta-program … chính nó nữa.
Giới thiệu RFC7234 và một số kỹ thuật tăng tốc web với HTTP/1.1 Caching.
FML == F$ckMyLife ạ? :)))) Btw, link FML bị die rồi ạ :D
@ltpquang
> FML == F$ckMyLife ạ?
Ờ, 🙊, cơ mà đó là tên ở nhà, tên giấy tờ là Functional XML nhóe.
Link vẫn hoạt động mà nhỉ? https://github.com/qcam/fml