Skip to main content

Posts

Showing posts from 2024

Người mới (newbie) có nên viết bài?

Có. Người mới (trong một vấn đề X) có những ưu thế nhất định: góc nhìn mới: người có kinh nghiệm thường đã quen với vấn đề tồn tại, biết cách né tránh nó, dần khiến họ cảm thấy nó là bình thường, 1 chút bất tiện nhỏ, và không dẫn đến thay đổi tốt hơn. Một nhân viên mới 2 3 tháng đầu là thời gian quý báu nhất mà nhà tuyển dụng cần tận dụng để tìm ra các vấn đề của hệ thống/ quy trình hiện tại. sai lầm là bình thường: người mới có thể sẽ viết sai, nhưng phần mềm nào mà không có bug, kể cả viết bởi các thiên tài? vậy cớ gì một bài viết của 1 người bình thường không được quyền có bug? sai lầm là một phần tất yếu của trưởng thành. sự mới mẻ: người ta luôn thích cái mới, người mới viết bài sẽ viết bài có tính tích cực, vui vẻ, khiến xã hội ngày càng tươi đẹp, nở hoa. viết giúp cho suy nghĩ: khi viết 100 dòng, người viết cần ít nhất 1 giờ để viết, và khi viết, cần nhiều thời gian để tìm hiểu để viết cho gần đúng nhất, khiến hiểu về vấn đề X rõ hơn. Đọc chỉ mất 10 phút, và không cần ngh...

Prometheus căn bản

Căn bản không nghĩa là đơn giản hay dễ. Điều này càng đúng khi nói về time series database (TSDB) như Prometheus. Time series là 1 nhánh của toán học, mà chỉ có 1 thứ dễ khi nói về toán, đó là dễ sai. Thời gian là 1 khái niệm không được định nghĩa rõ ràng, chỉ có trong trí tưởng tượng của con người https://en.wikipedia.org/wiki/Time . Chú ý: vì vậy bài viết này, giống mọi bài viết khác, có thể sai. Bài viết giúp trả lời các câu hỏi: Time series là gì Metric và label là gì Các kiểu metric Các kiểu dữ liệu trong PromQL Instant vector khác gì range vector Instant vector selector khác gì range vector selector Instant query khác gì range query Operator khác gì function [bài sau] Cài và chạy Prometheus Xem bài trước . Các khái niệm trong Prometheus Data model - Timeseries Data model Prometheus fundamentally stores all data as time series: streams of timestamped values belonging to the same metric and the same set of labeled dimensions. Prometheus chứa tất cả dữ liệu n...

[go] Viết test code prometheus xem delta và rate tính thế nào

Bài trước đã dùng mắt để chạy code funcDelta và funcRate của Prometheus để xem code chạy qua những dòng nào, những phép tính nào được tính trong extrapolatedRate . Bài này sẽ sử dụng go test coverage để xem code nào được chạy. Viết test Prometheus Code của funcDelta và funcRate đều nằm trong file promql/functions.go , theo quy ước chung của Go, test sẽ nằm trong promql/functions_test.go , nhưng file này chỉ chứa có 2 test: $ grep ^func -c functions*_test.go functions_internal_test.go:1 functions_test.go:2 Lý do là PromQL tự tạo ra 1 kiểu/ngôn ngữ test riêng cho ngôn ngữ PromQL, nằm trong thư mục promqltest/ chứ không phải Golang test thông thường. file promqltest/README.md viết: The PromQL test scripting language This package contains two things: an implementation of a test scripting language for PromQL engines a predefined set of tests written in that scripting language $ find promql/promqltest promql/promqltest promql/promqltest/README.md promql/promqltest/test...

[go] Đọc code prometheus xem vì sao delta tính sai kết quả

Prometheus là gì The Prometheus monitoring system and time series /ˈsɪr.iːz/ database. Prometheus, a Cloud Native Computing Foundation project, is a systems and service monitoring system. It collects metrics from configured targets at given intervals, evaluates rule expressions, displays the results, and can trigger alerts when specified conditions are observed. Prometheus là tên phần mềm metric monitoring tiêu chuẩn ngày nay. 10 năm trước là graphite. Stack phổ biến thời cloud: Prometheus lưu trữ time series, hiển thị biểu đồ dùng grafana, gửi cảnh báo alert dùng alertmanager. Prometheus viết bằng Go, bắt nguồn từ SoundCloud, code xem tại https://github.com/prometheus/prometheus Prometheus is an open-source systems monitoring and alerting toolkit originally built at SoundCloud. Since its inception in 2012, many companies and organizations have adopted Prometheus, and the project has a very active developer and user community. It is now a standalone open source project and main...

Đọc code bash xem vì sao echo * không hiện tên file ẩn

glob là gì $ whatis glob glob (7) - globbing pathnames Gõ man 7 glob có viết: NAME glob - globbing pathnames DESCRIPTION Long ago, in UNIX V6, there was a program /etc/glob that would expand wildcard patterns. Soon afterward this became a shell built-in. glob là khái niệm để "match" (chọn) filename sử dụng "pattern", gần giống với Regular Expression. Ví dụ trên shell gõ ls *.py sẽ hiện tên các file có đuôi .py . Điểm khác biệt so với Regular Expression: glob chỉ dùng để match filename, và các ký tự đặc biệt trong glob có ý nghĩa khác so với Regular Expression (ví dụ * có nghĩa khác). Wildcard pattern là gì Một string là 1 wildcard pattern nếu chứa ? * hoặc [ , glob là việc biến wildcard pattern thành list các filename "match" pattern. A '?' (not between brackets) matches any single character. A '*' (not between brackets) matches any string, including the empty string. Ví dụ $ touch error.c ...

bash chậm tới mức nào?

trên những môi trường không có ngôn ngữ nào khác, bash vẫn là lựa chọn duy nhất: docker entrypoint (script chạy 1 chương trình phức tạp trong docker) bash không dùng để viết chương trình cần hiệu năng cao, nhưng liệu bash chậm tới mức nào? Tính tổng từ 1 đến 1 triệu #1 x=0 for i in {1..1000000} ; do x=$((x+i)) done echo "$x" #2 x=0 for i in $(seq 1 1000000) ; do x=$((x+i)) done echo "$x" #3 x=0 for ((i=1;i<=1000000;i++)); do x=$((x+i)) done echo "$x" #4 x=0 i=1 while [ $i -le 1000000 ]; do x=$((x+i)) i=$((i+1)) done echo "$x" Trong 4 cách trên, cách 1 với {1..1000000} tạo 1 triệu phần tử trong RAM (như Python dùng list(range(1,1_000_001)) ), dùng hết 284MB RAM. cách 2 với seq 1 1000000 chỉ dùng 3.7MB RAM, nhưng phụ thuộc vào chương trình seq bên ngoài cách 3 và 4 tương tự nhau nhưng cách 4 chạy trên tất cả cách loại (POSIX) shell. Dùng shellcheck để biết cách 3 không chạy trên sh : $ sudo apt install -...

Đọc code xem NGINX auto dùng bao nhiêu worker_processes trong container

NGINX là HTTP server phổ biến nhất trên thế giới. NGINX có kiến trúc "master" - "worker", với master process làm nhiệm vụ quản lý, và các worker process sẽ nhận các HTTP request và xử lý. NGINX worker_processes là gì Số lượng worker process được set bằng config directive: worker_processes mặc định là 1, và có thể "tự động" với từ khóa auto . Syntax: worker_processes number | auto; Default: worker_processes 1; Context: main Defines the number of worker processes. The optimal value depends on many factors including (but not limited to) the number of CPU cores, the number of hard disk drives that store data, and load pattern. When one is in doubt, setting it to the number of available CPU cores would be a good start (the value “auto” will try to autodetect it). The auto parameter is supported starting from versions 1.3.8 and 1.2.5. https://nginx.org/en/docs/ngx_core_module.html#worker_processes khi set auto , NGINX sẽ try to autodetect ...

Docker image alpine/curl không phải alpine

Nếu cần chạy 1 câu lệnh curl (hay http client khác để truy cập web API) trên container, dùng image nào nhẹ nhất? NOTE: thay podman bằng docker nếu dùng docker. alpine rồi cài curl alpine vốn phổ biến trong giới container vì nhẹ, nhưng không có sẵn curl, phải cài: $ podman run -it alpine sh -c 'apk add curl>/dev/null; curl https://www.openbsd.org/robots.txt' User-agent: * Disallow: /cgi-bin/ Disallow: /donations.html alpine/curl KHÔNG PHẢI alpine Google alpine curl xem image alpine nào cài sẵn curl? thấy ngay kết quả top alpine/curl , và dùng có vẻ thành công: $ podman run -it docker.io/alpine/curl sh -c 'curl https://www.openbsd.org/robots.txt' Trying to pull docker.io/alpine/curl:latest... Getting image source signatures Copying blob 9f444ea7cf45 done Copying blob 299588fda28b done Copying blob c6a83fedfae6 done Copying config d4f2de61cf done Writing manifest to image destination Storing signatures User-agent: * Disallow: /cgi-bin/ Disallow: /donations.ht...

Rust không import

Mọi ngôn ngữ lập trình hiện đại đều có cơ chế để dùng lại code. C có #include<stdio.h> thì Python, Go, Java có import . Rust không như thế, không có import, không cần import. Rust dùng thư viện bằng path đầy đủ Không cần import. Ví dụ sử dụng các function trong thư viện std::fs : fn main() { std::fs::create_dir_all("a/b/c/d").unwrap(); std::fs::write("a/file", "Hello").expect("Cannot write file"); let rd = std::fs::read_dir("a").unwrap(); for i in rd { let i = i.unwrap(); if i.path().is_dir() { println!("Directory {}", i.file_name().to_string_lossy()); } else if i.path().is_file() { println!("File {}", i.file_name().to_string_lossy()); } } } Code tạo thư mục a chứa thư mục b chứa thư mục c chứa thư mục d, tương tự lệnh mkdir -p a/b/c/d trên Linux. Sau đó ghi ra 1 file text tên "file" trong thư mục "a" dòng ch...

Compile Kotlin có cần JDK không?

Hay "Một mình chống lại cả internet và AI (ChatGPT, Gemini)". Internet thường hay sai, thậm chí nhiều khi sai nhưng nghe có vẻ đúng đúng, là nền tảng cho sự "ảo tưởng" của các AI chatbot bịa ra đủ thứ và nói rất hay. build kotlin "Hello world" có cần JDK không? Với câu hỏi "I want to write kotlin hello world program and build with kotlinc, do I need to install JDK (not JRE)", lên mạng internet tìm câu trả lời: Ta tìm được StackOverFlow đầy uy tín (và nổi tiếng vì nhiều câu trả lời sai) SO https://stackoverflow.com/questions/48036758/is-the-jdk-required-for-kotlin Sololearn (học 1 mình?) https://www.sololearn.com/en/Discuss/2073812/why-does-kotlin-need-a-jdk-when-it-has-its-own-compiler Kotlin discuss https://discuss.kotlinlang.org/t/does-the-kotlin-compiler-require-a-jdk/2496 Thử hỏi ChatGPT Và AI của Google: Gemini Mọi câu trả lời đều là "có". Nhưng... bài trước Hello Kotlin 2024 hoàn toàn không thấy nhắc tới JDK, vậy c...

Hello Kotlin 2024

Kotlin là gì $ apt-cache show kotlin Package: kotlin Architecture: all Version: 1.3.31+~1.0.1+~0.11.12-2 ... Installed-Size: 286240 ... Homepage: https://kotlinlang.org Description-en: cross-platform, general-purpose programming languagehttps://kotlinlang.org/ Kotlin is a cross-platform, statically typed, general-purpose programming language with type inference. Kotlin is designed to interoperate fully with Java, and the JVM version of its standard library depends on the Java Class Library, but type inference allows its syntax to be more concise. Kotlin https://kotlinlang.org/ là một ngôn ngữ lập trình static-typing hiện đại (2011) phát triển bởi JetBrain (IDE: PyCharm, IntelliJ IDEA), chạy trên máy ảo JVM (của Java), tương thích với Java (dùng được thư viện Java), cú pháp ngắn gọn, hỗ trợ functional programming, được Google hỗ trợ là ngôn ngữ chính thức để viết app Android. Tại sao dùng Kotlin? Để hiểu 1 hệ thống đầy đủ, lập trình viên cần hiểu từ frontend (FE) tới backend...

Chơi CTF giúp gì cài OpenSearch?

OpenSearch vs ElasticSearch OpenSearch là 1 bản fork của Amazon từ ElasticSearch, sau vụ đổi license đình đám từ công ty Elastic đứng sau ElasticSearch không muốn Amazon thu lời từ sản phẩm open-source của họ. OpenSearch ngày càng khác biệt với ElasticSearch, mang theo những ưu / nhược điểm riêng. Một nhược điểm là nó fork từ bản cũ của ElasticSearch, nên nhiều lỗi còn rất khó đọc. Bài này nhờ kỹ năng chơi CTF với team PyMi mà giải quyết một vấn đề đau đầu. Một ưu điểm là OpenSearch hỗ trợ giải pháp login doanh nghiệp bằng SSO: SAML, OIDC, LDAP... còn ElasticSearch phải trả phí mua license. Chạy 1 node trên máy bằng podman (docker) podman là 1 phần mềm phát triển bởi RedHat thay thế cho docker, sau khi docker đổi qua tính phí trên Desktop (DockerDesktop), podman dần trở nên phổ biến. Câu lệnh podman tương thích với docker nên chỉ cần thay chữ podman trong bài thành docker là được. Bài này chạy bằng podman trên máy để bạn đọc có thể làm theo, thực tế chạy trên 1 K8S cluster ...

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG