Skip to main content

Posts

Showing posts from January, 2023

[Go] Đôi khi 0.1 + 0.1 + 0.1 == 0.3

Trong cuộc sống, những thứ đúng là đúng, sai là sai thật dễ dàng, còn những thứ đôi khi thế này, đôi khi thế nọ, thì tùy. Như các học viên của https://pymi.vn đều biết vì sao 0.1 + 0.1 + 0.1 != 0.3 trong Python và hầu hết các ngôn ngữ khác, thì với Go, thực hiện 1 phép tính cộng đơn giản theo 2 cách khác nhau, cho ra 2 kết quả khác nhau. Cách giống các ngôn ngữ khác func main() { x := 0.1 fmt.Printf("%v + %v + %v == 0.3? %t\n", x, x, x, x+x+x == 0.3) fmt.Printf("%f\n", x+x+x) fmt.Printf("%.17f\n", x+x+x) } Kết quả giống như Python và các ngôn ngữ khác, 0.1 + 0.1 + 0.1 != 0.3 do kết quả vế trái là 0.30000000000000004 0.1 + 0.1 + 0.1 == 0.3? false 0.300000 0.30000000000000004 https://go.dev/play/p/eDe3szlFyi7 Cách của riêng Go Nếu viết khác đi một chút, sử dụng từ khóa const , hay viết trực tiếp mà không gán cho biến x , kết quả lại là đúng: func main() { const x = 0.1 fmt.Printf("%v + %v + %v == 0.3? %t\n", x,...

Go value receiver method vẫn thay đổi được giá trị?!

Bài viết đầu tiên của nhiều bài viết sẽ bán than về "Go" - ngôn ngữ lập trình non trẻ (since 2010) nhưng khá hot trên toàn cầu. Go is simple Go thường được nhìn nhận là "đơn giản", không phủ nhận việc làm xong gotour https://go.dev/tour/ khiến người học có thể bắt đầu viết code go, sau 1 tháng có thể tham gia code production (và viết bug). Có hẳn cuốn sách giá cả triệu đồng bán rất chạy về những mistake khi dùng ngôn ngữ đơn giản này 100 Go Mistakes and How to Avoid Them . Không dùng thì thôi, sao phải chê, thích chiến à? Có một sự thật đi làm khá lâu mới nhận ra, rằng 99.99% BẠN không phải người quyết định công ty/dự án dùng cái gì. Những người/thứ quyết định sẽ là: công nghệ có sẵn của công ty công nghệ quen thuộc của team bên trên chỉ xuống (CTO/architect...) khách hàng yêu cầu vậy nên thích hay không vẫn phải dùng. Mà dùng không sướng thì phê bình thôi. Go pointer receiver vs value receiver Go receiver có 2 loại là pointer và value. Trích từ Go...

Tạo giao diện gdb như peda/gef/pwndbg

GDB là một debugger lâu đời có rất nhiều tính năng. Nó giống vim / emacs nhiều điểm: nhiều tính năng nhưng mặc định thì không bật gì, khó dùng cài thêm các tính năng vào sẽ ngon lành việc cấu hình cũng cần phải học, nên có nhiều bản "distro" dùng sẵn. sau hàng chục năm config chán chê, người dùng hardcore lại quay về 1 file config đơn giản. GDB các bản mở rộng dễ dùng/tiện dụng hơn có: https://github.com/pwndbg/pwndbg https://github.com/longld/peda https://github.com/hugsy/gef https://github.com/snare/voltron Như vim có spacevim spf13-vim ... Tương tự với emacs: spacemacs doomemacs PS: tham khảo 2 phần trước: p1: https://n.pymi.vn/hgdb.html p2: https://n.pymi.vn/hgdb-arch.html PPS: nên đọc trên máy tính. Tạo giao diện giống pwndbg/gef/peda 3 bản mở rộng này nhìn chung đều có giao diện giống nhau. Màn hình sẽ hiện "context" với 3 phần: các register disassembly code stack gdb lấy thông tin các register Lệnh gdb info registe...

ElasticSearch/Java format thời gian không giống Python

Hầu hết các ngôn ngữ lập trình đều có sẵn thư viện để format thời gian, vì dù cho mỗi người một nghề - người làm web, sysadmin, kẻ làm data, scientist nhưng đâu ai thoát khỏi được thời gian? Cứ tưởng các ngôn ngữ lập trình format sẽ giống nhau, học 1 lần là dùng được mãi, ai ngờ! Photo by Aron Visuals on Unsplash Linux date, C, C++ Lấy làm mốc chuẩn, chương trình date trên UNIX/Linux dùng Ymd HMS cho ngày tháng năm giờ phút giây $ date +"%Y/%m/%d %H:%M:%S" 2023/01/04 20:16:48 $ date --version date (GNU coreutils) 8.30 Copyright (C) 2018 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by David MacKenzie. Có vẻ như bắt nguồn từ function strftime trong time.h của C https://en.cppreference.com/w/c/chrono/strftime , dễ hiểu C++ và Python cũng kế thừa và phát huy từ đó. Xem ...

Xiaomi - điện thoại thân thiện quảng cáo, mua ngay, giá hot

Android là hệ điều hành "mã nguồn mở", với dân công nghệ từ khóa này rất hấp dẫn, nó có nghĩa là "cái gì không thích thì mình có thể thay đổi" (code), sự thật thì ... rất rất xa. Android mã nguồn mở - mở ra chả làm được gì Đúng là Android là mã nguồn mở https://source.android.com , nhưng để tự build 1 cái ROM cài và dùng được cho máy điện thoại của bạn là một điều không hề đơn giản. Việc build cần tối thiểu 16GB RAM (khuyên dùng 32 hay 64GB), 400 GB ổ cứng https://source.android.com/docs/setup/start/requirements Build mất khoảng 24 giờ, và lỡ có 1 điều nhỏ gì sai thì làm lại từ đầu Chỉ build trên Linux Riêng yêu cầu 400GB ổ cứng đã gần như giới hạn hầu hết developer thường từ bỏ chuyện này. Thuê server, lấy ví dụ DigitalOcean, 32GB RAM 400GB ổ cứng SSD mất $376/tháng, đủ 1 một con điện thoại tầm trung. https://www.digitalocean.com/pricing/droplets 32 GiB 16 vCPUs 7,000 GiB 2x 400 GiB $0.55952 $376.00 nếu toàn bộ quá trình từ cài đặt/thử sai mất...

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