SOLID – Open close principle implemented in golang

Notice: Draft version

This is just draft version of how we organize code structure to follow open close principle in golang

Todo: class diagram

Shape interface, define must have GetArea() function

Then Square struct which implement Shape interface

Same as Square struct, the Circle struct

Then ShapeManager struct

Then, the main.go file

Whenever you add more type of shape, for eg: a rectangle:

It’s convenience when we wanna add more types of Shape and follow the O principle in SOLID

Gist file: https://gist.github.com/nguyentienlong/925f8571f149ddc7b75cbb2c4882d891

Fixing aws eks pod evicted because of disk pressure

When working with AWS EKS, we might cause with disk pressure warning  when describing the “Evicted” pod (out of resource warning from aws eks).

kubectl describe pod ingress-nginx-controller-xxx -n ingress-nginx

Status: Failed
Reason: Evicted
Message: Pod The node had condition: [DiskPressure].

describe pod status

You can edit the volume size param as below (via cloudformation)


eks worker node edit cloudformation stack (increase to 20GB – EBS volume size)

The cloudformation template above related to this template file.

After increasing the storage size of the node (~ an ec2 instance), now “Evicted” pod (DiskPressure) will disappear.

Hope this well hope who is facing with this issue on AWS EKS 😉

Ref(s):

  1. https://medium.com/faun/kubelet-pod-the-node-was-low-on-resource-diskpressure-384f590892f5
  2. https://kubernetes.io/docs/tasks/administer-cluster/out-of-resource/

Note lại vài dòng rơi rớt sau chuyến đi Thẩm Quyến 2019

Cuối năm, cũng đang loay hoay càm pen cho mấy ì ven đặc biệt, thì được sếp cho đi tham quan Thẩm Quyến (vé vớt :D). Con người như được bừng tỉnh vì lại được đi đây đi đó.

Trung Quốc, một nước lớn, gã khổng lồ trên thế giới … Những kỳ tích trong những thập niên vừa qua làm tăng thêm sự tò mò cho những nae AhaMove cùng chuyến đi.

Nếu bạn đến du lịch Trung Quốc, người bản địa sẽ nói với bạn rằng: “Nếu muốn xem Trung Quốc cổ một nghìn năm thì hãy đến Bắc Kinh, xưa một trăm năm thì đến Thượng Hải, còn muốn xem những kì tích vài thập niên trở lại đây thì nên đến Thẩm Quyến”. Câu nói này thực sự có ý nghĩa, đối với người dân Trung Quốc Đại Lục, Thẩm Quyến thực sự là miền đất hứa.

trích dẫn

Ấn tượng đầu tiên khi đặt chân đến Thẩm Quyến (Shenzhen) là sự hiện đại, ngăn nắp … đường phố không chật hẹp, ko có hiện tượng kẹt xe, nhiều cây xanh 2 bên đường, qui hoạch của họ rất nhiều công viên, cây xanh … Hệ thống tàu điện ngầm của họ đầy đủ, hiện đại, tiện nghi, đúng giờ …

QR code được áp dụng khắp nơi, từ vỉa hè cho đến nhà hàng, …

Còn nhiều và rất nhiều cảm nhận, suy nghĩ. Nhưng giờ chỉ còn rơi rớt đâu đó dưới những tấm hình được chụp bởi những nae AhaMove

Chào 2020

Chào 2020, cầu mong cho một năm mới sức khoẻ, an bình, vạn sự hanh thông.

Năm mới, cầu mong cho bản thân tìm lại được chính mình – stay hungry, stay foolish – khéo léo hơn.

Năm mới, cố gắng duy trì thể thao điều độ hơn, ít nhất cũng được như 2019

Năm mới gắng đi bôn ba nhiều hơn, đọc nhiều sách hơn, viết nhiều bài kỹ thuật hơn, humble hơn, bền bỉ hơn.

Năm mới hi vọng son sẻ hơn (cái này quan trọng nhất).

Happy new year 2020!

Hội chứng ITB và cách khắc phục của cá nhân

Sau giải HCM Run 2019, bị đau phần phía sau bên phải trục cúi (đầu gối). Lân la hỏi khắp 500 ace đồng run, mỗi người chỉ mỗi cách. Không dám chạy nặng, chỉ đạp và bơi là chính, nếu có chạy thì cũng chỉ lê lết nhè nhẹ hi vọng qua con đau rồi hi vọng hồi phục bằng niềm tim @@, nhưng kết quả không khả quan hơn, chân vẫn đau vùng bên hông phải khớp gối chân phải và trái.

Tuần rồi đi brick với ace hội 3D, nêu rõ triệu chứng với ace trong hội, xâu chuỗi là quá trình tập recovery thì ~80% mình dính chưởng ITBS. Sau đó, mình có tìm hiểu các liệu pháp khác phục trên mạng, và cũng tham khảo lời khuyên từ các ace bạn đồng run, mình note lại đây hi vọng sẽ giúp được ai đó bị ITBS.

ITBS là gì?

ITBS là viết tắt Iliotibial Band (IT Band) Syndrome (tạm dịch là hội chứng đau dải cơ IT, IT này ko phải là “i tờ” trong CS đâu nhe :P).

IT Band là dải cơ kéo dài từ hông đến đầu gối (mặt phía ngoài) của mỗi chân, dải này dày lên ở phần trục cúi (đầu gối) mỗi chân. Trong quá trình tập luyện, nếu băng bó quá chật, hoặc vận động quá mức, cường độ cao và lâu, IT band (dải cơ IT) này có thể cạ(cà, ma sát) quá mức vào xương đùi hoặc xương chậu bên trong trục cúi (đầu gối) dẫn đến bị sưng, viêm gây ra đau dải IT này.

Các bài tập giảm đau:

Phòng tránh và các bải tập bổ trợ:

Chế độ ăn uống:

Bên cạnh chế độ tập luyện để phục hồi, chế độ ăn uống cũng quan trọng không kém, bạn có thể tăng thêm đậu bắp, hạt mè đen trong khẩu phần ăn, để bổ trợ thêm cho xương khớp.

Vật lý trị liệu:

Ngoài ra, bạn cũng có thể đi đến các trung tâm vật lý trị liệu, để được matxa chân, đây là cơ sở matxa ở HCM mình đi và thấy rất hiệu quả, cơ sở này của Viện Vật Lý Y Sinh học (109A Pasteur, Phường Bến Nghé,Quận 1, Tp. Hồ Chí Minh)

Tham khảo & credits:

Thanks to anh Hung Dinh và Tim Marbach đã góp ý và gửi các tài liệu liên quan đến ITBS.Kết:Chấn thương là điều không thể tránh khỏi khi tập luyện thể thao, vì vậy hãy nên khởi động kỹ trước khi tập.

Khi bị chấn thương, hãy thả lỏng, nghỉ ngơi, nặng thì nên đến thẳng bệnh viện để chuẩn đoán kỹ càng và kịp thời, nhẹ và lầy lội thì tự binh liệu pháp cho hợp với cơ địa của mỗi người (có chọn lọc trên các ý kiến tham khảo).Bài viết theo quan điểm và trải nghiệm cá nhân, có tham khảo nhiều ý kiến tư vấn của nhiều ace đồng run, hi vọng giúp đỡ được ai đó bị ITBS giống mình.

Link đến bài viết trên facebook cá nhân: https://www.facebook.com/notes/long-kaht/hội-chứng-itb-và-cách-khắc-phục-của-cá-nhân/2620215474718303/

Tổng kết năm 2018, chào đón 2019

Một năm 2018 chuẩn bị sang trang, cho năm 2019 đầy háo hức sắp tới, ngồi xem lại một năm ảm đạm, chạy nhiều nhất từ trước đến giờ.

– Năm nay, chuyển về làm gần nhà, công việc cũng okay

– Năm nay, thể thao nhiều, sức khoẻ lên

– Năm nay, học được nhiều về cách thức vận hành, build up công ty từ ý tưởng đến thực tế, move fast failed fast

– Năm nay bớt bay bay, mơ mộng, thiếu thực tế

– Năm nay gặp được nhiều cao nhân giúp đỡ, góp ý

– Năm nay đọc được nhiều sách hay, ý nghĩa, thực tế …

Looking forward to exciting 2019 year ahead! xD

Cầu mong an yên, hạnh phúc cho gia đình. Nhớ ba nhiều!

Sài gòn 31/12/2018

Mở source API – hệ thống cho thuê xe hơi (xe máy) tự lái (người tự lái)

Cuối năm, rì viu một năm nhiều sự kiện, rồi chuẩn bị tinh thần chiến đấu cho năm mới.

Sáng tính chạy 21km ủng hộ vnuwillrun, cơ mà cái mũi lại bị đau một cách vô duyên khó hiểu làm nóng sốt và ảnh hưởng đến thể trạng. Rồi cũng lết được cỡ 16km vừa đi bộ vừa chạy. Nói chung cũng tạm được …

Nhìn lại một năm chả có j hay ho, bể kèo này nọ, thôi thì cứ vô vi đi mà sống cho thanh thản, đọc lại cái bản báo cáo 2019-2025 của google, cuộc chiến những năm tới sẽ rất hấp dẫn và nhiều thử thách. Về với đội đại ka Ngôn học được nhiều thứ: thực tế, move fast, failed fast, Long hạn chế bay bay … Nói chung là học được nhiều thứ lắm …

Thấy còn dư tí năng lượng đang hype do chạy bộ chưa đã, chỉnh sửa luôn xiu source cho thuê xe tự lái (người thue xong rồi tự lái, chứ không phải thuê bác tài, hoặc xe có khả năng tự lái nhe), rồi opensource cho anh chị em nào cần …

https://github.com/nguyentienlong/wolverine

Về cơ bản, thì khi đưa lên github, mình chỉ hide những thông tin sensitive, còn nhiều thiếu sót, hi vọng được nhận nhiều feedback từ các bạn.

Happy weekend 😉

Áp dụng GnuPG vào việc bảo mật giao tiếp giữa 2 server

    • Tôi may mắn có dịp được làm vài dự án có liên quan đến mã hoá, lĩnh vực mà tôi chả biết gì, nhớ lại thời đi học cứ mỗi lúc thầy Khang Võ (khoa mạng máy tính dạy) thì nổ lùng bùng cái đầu (có lẽ thời đó quá gà, hoặc có thể thầy dạy khó hiểu quá xD :))). Rảnh rổi, ngồi gom góp tổng hợp lại, biết đâu ai đó lại cần, mà cũng có thể diễn giải theo cách của dân không chuyên lại dễ hiểu hơn cho các bạn cần tìm hiểu về mã hoá, và các ứng dụng thực tế của nó.

      GnuPG là gì, và các thuật ngữ liên quan (theo RFC 4880):

      Theo tôi hiểu, khi giao tiếp giữa 2 bên Lan và Điệp một cách bình thường thì chả có gì bàn ở đây, trường hợp 2 bên có bí mật gì đó thì sẽ áp dụng phương pháp sau:
      – Lan và Điệp cùng dùng phần mềm GnuPG để tạo cặp private & public keys (cặp khoá bí mật và công khai), và trao đổi 2 khoá public cho lẫn nhau.

      longka key list
      longka key list

      – Lan soạn tin nhắn, mã hoá bằng pub-key của Điệp, ký(sign) bằng khoá bí mật của chính Lan, gửi qua email cho Điệp.
      – Điệp nhận được email của Lan, chột miệng thốt lên “Oát đờ heo”, bụng thì nghĩ có lẽ nào máy Lan bị hách(hacked). Bình tâm lại, Điệp rít hơi thuốc lào, nhớ lại lần hẹn hò hôm trước trong CGV Lan có gửi cho Điệp cái pub-key trong cái hộp con đum. Điệp từ tốn, import pub-key của Lan, rồi decrypt (giải mã) email Lan gửi qua. Điệp hớn hở đọc tin nhắn.
      – Điệp đọc xong, lại dùng pub-key của Lan để encrypt (mã hoá) nội dung email, và ký bằng khoá bí mật của Điệp rồi gửi qua Lan.
      – Lan cũng follow trình tự các bước Điệp làm, rồi đọc tin nhắn Điệp gửi.

      Tại sao nên dùng GPG
      Tại sao là GPG, mà không dùng các phương pháp khác, câu hỏi này xin phép được để ngõ, vì tôi chưa có điều kiện tiếp các phương pháp mã hoá khác khi giao tiếp trên phía server.

      Ví dụ:

      Đầu tiên, hãy tạo ra 2 cặp khoá(pub, secret) ở máy của bạn trước:

      gpg –gen-key, sau đó nhập tên kêy, email

      Sau đó, list lại những key đã tạo, ở bước này bạn đã có 2 id cho 2 keys với id lần lượt:  longka, và alien

      Tiếp đến export pulic key dạng armor:

      Sau khi đã có pub-key bạn có thể public nó, gửi cho những người mà bạn cần liên lạc.

      Giờ tôi sẽ gửi thông điệp sau đến Lan, dùng gpg cmd như sau:

      Thông điệp (do longka@longka.info gửi đến alien@mar.com) được mã hóa như sau:

      Sau đó, longka@longka.info in ra và nhờ bồ câu gửi đến cho alien@mars.com, nhận được, chạy lệnh sau để giải mã nội dung

      Public GPG key của tôi 😉

      Tài liệu tham khảo

      https://www.digitalocean.com/community/tutorials/how-to-use-gpg-to-encrypt-and-sign-messages

      https://tools.ietf.org/html/rfc4880#section-1.1

      Kết luận: khi thiết kế API cho clients sử dụng, nhiều khi dữ liệu truyền dữ clients và API có thể bị chôm và sử dụng vào mục đích chơi không đẹp (ko fair). Thì việc mã hóa thông tin truyền, nhận là một điều cần thiết. GPG là một phương pháp hợp lý, giải quyết được vấn đề.

      Bài viết viết vội khi chuẩn bị đi xem trận chung kết lượt đi tại KUL, mong được các bạn, anh, chị cao nhân góp ý và chỉ giáo nếu thấy còn điều nào chưa đúng, chưa chuẩn.

      TSN, 11Dec2018 – Việt Nam Chiến Thắng!!! 🇻🇳🇻🇳🇻🇳🇻🇳🇻🇳

Check python syntax within nodejs application

Sometimes , we need to check the python script syntax in a NodeJS application. For eg: a formular is stored in a database (via NodeJS application) as a python script syntax, then we use python eval() function to execute that python function.

We can use NodeJS child process to call to python (py_compile module) to check the syntax only (not exec)

Python code to check the syntax:

Here is the result:

Full code on github:
https://github.com/nguyentienlong/python_syntax_cheker_with_nodejs

Hope this will help anyone facing with the same use case to me!

php ? (?? and ?:) == (!empty and isset)

Simple, but sometimes we use it in wrong way!

So:

 

More example: