Thứ Tư, 22 tháng 10, 2025

Bên kia ngôn ngữ - Language agnostic mind


Mỗi ngày tôi sử dụng nhiều ngôn ngữ cùng lúc. Trong cuộc sống hằng ngày, tiếng Việt là chủ đạo — tôi dùng để nói chuyện với gia đình, bạn bè, đọc tin tức và sách truyện. Thỉnh thoảng, tiếng Anh lại xen vào khi tôi trò chuyện với các con.

Trong công việc, tiếng Anh là ngôn ngữ chính để tôi đọc tài liệu và giao tiếp với đồng nghiệp đến từ khắp nơi: Philippines, Ấn Độ, Úc, Anh, Thụy Điển, và nhiều quốc gia khác.

Ngoài những ngôn ngữ “con người”, tôi còn sử dụng cả những ngôn ngữ “máy tính” như SQL, C#, Python, Go, JavaScript, v.v.

Hãy thử tưởng tượng xem — mỗi ngày phải ghi nhớ để làm việc với hàng đống từ vựng, cách diễn đạt, cú pháp của đủ loại ngôn ngữ như thế, chắc tôi phải là một người siêu thông minh lắm nhỉ?


I use multiple languages every day. Vietnamese is my main language for family, friends, news, and books, while English often slips in when I talk with my kids. At work, English is my primary language for reading documentation and communicating with colleagues from the Philippines, India, Australia, the UK, Sweden, and beyond.
Besides human languages, I also “speak” a few computational ones — SQL, C#, Python, Go, JavaScript, and more.
Just imagine having to remember all those vocabularies, idioms, and syntax rules across so many languages — I must be incredibly smart, right?

Lẽ dĩ nhiên, tôi đâu có thông minh đến mức ấy!
Trừ những trường hợp hiếm gặp có vấn đề về não bộ hay thần kinh, thì thật ra con người cũng chẳng khác nhau là bao.

Naturally, it's obvious that I'm not incredibly smart! 
Except for rare cases involving brain or neurological disorder, there isn't really much difference among people after all. 


Continue...

Thứ Tư, 31 tháng 7, 2019

CGI, Fast CGI, PHP-FPM


https://help.superhosting.bg/en/cgi-common-gateway-interface-fastcgi.html


First, the two protocols:
  • CGI scripts is a way how to run a server side script when a HTTP request comes; this has nothing to do with PHP
  • FastCGI is a "better CGI" - CGI is known to be slow, Fast CGI is a different approach with much faster results; this has also nothing to do with PHP.
Now the PHP related things:
  • mod_php is running a PHP as Apache module - that is PHP request is run under Apache process with everything that goes with it - Apache processes are defined by Apache configuration, PHP is run with Apache permission etc.
  • PHP-FPM is PHP's FastCGI implementation; PHP-FPM runs as a standalone FastCGI server and Apache connects to the server using Apache's module, usually mod_fcgid or mod_fastcgi; I personally think this is much better than running as mod_php, but it depends on your requirements and is also a little more complex; in this configuration, permission, processes related stuff & everything is run under PHP configuration, PHP user etc. & Apache connects to PHP as to a server; in this configuration it is also possible to have pool of PHP servers and to have PHP server on physically different machine than Apache. They say this is almost as fast as using Apache's module and there are benefits of better control over PHP configuration.
  • SuPHP - this was mostly used to address some problems of mod_php related to permissions; with mod_php PHP scripts are run under the Apache user/group; mod_suphp can run the scripts in different user; I never used it, PHP-FPM now should be much better choice
So, basically:
  • CGI, Fast-CGI are protocols; CGI is slow, Fast-CGI is much faster
  • mod_php (with underscore) and PHP-FPM are two basic ways how to run PHP
  • mod_SuPHP is similar to mod_php but can change the user/group that the process runs under

Thứ Ba, 9 tháng 10, 2018

Dynamic programming - rod cutting (Quy hoạch động)

Dynamic programming - rod cutting (Quy hoạch động)
Hãy xem bài toán đơn giản sau:
Có một thanh thép dài n = 10 mét
Có thể bán thanh thép với độ dài và giá tương ứng theo bảng sau:

Độ dài
1
2
3
4
5
6
7
8
9
10
Giá
1
5
8
9
10
17
17
20
24
30

Thanh độ dài 1: giá 1$
Thanh độ dài 2: giá 5$
....
Thanh độ dài 10: giá 30$

Câu hỏi đặt ra là: chúng ta nên cắt thanh thép như thế nào để có được số tiền lớn nhất?

Chúng ta có thể dễ dàng giải quyết bài toán với độ dài n=1,2,3 

R1 = 1
R2 = 5
R3 = 8

Với n=4 chúng ta có 8 cách cắt như sau: 

4 thanh độ dài = 1, R4=4
1 Thanh độ dài =1, 1 Thanh độ dài = 2, 1 thanh độ dài 1, R4=7
2 thanh độ dài = 2, R4 = 10
....
Như vậy R4=10 (cắt thành 2 thanh độ dài 2)

Số phương án cắt sẽ tăng theo hàm số mũ: 2 mũ (n-1) (với n là độ dài của thanh thép)

(*) Một cách tổng quát thì chúng ta sẽ thấy: Rn = Max(Pn, R1 + Rn-1, R2+ Rn-2, ... Ri + Rn-i .. ,Rn-1 + R1)

Với n=10, P10 = 30 như trên bảng giá ở trên, bài toán của chúng ta bây giờ là tìm i, để Ri + Rn-i là lớn nhất trong đó i = 1...n.


Nếu chúng ta tăng n bằng cách thêm vào mảng prices, có thể dễ dàng thấy thời gian thực hiện sẽ tăng theo. (2 mũ n-1)

Quay lại (*) chúng ta nhận thấy để tìm Rn chúng ta có thể đưa về bài toàn tìm Ri và Rn-i; và rõ ràng i và n-i là các bài toán nhỏ hơn.

(**) Rn-1 = Max(Pn-1, R1 + Rn-2, ..., Rn-2 + R1)

Chúng ta để ý sẽ thấy 2 dãy (*) và (**) sẽ chỉ khác nhau R1 + Rn-1 => như vậy nếu chúng ta lưu lại kết quả tính toán ở các bước thì ở những phép tính với bài toán lớn hơn phía sau sẽ tiết kiệm được rất nhiều bước tính toán

Các bạn có thể thử với đoạn code được bổ sung phần cache lưu lại kết quả tính toán ở đây

Trên đây là một ví dụ các các bài toán được gọi là Dynamic Programming, các bạn có thể tìm kiếm chi tiết hơn.

Câu hỏi:

Các bạn hãy tìm các bài toán tương tự có thể áp dụng cách tiếp cận này không?



Bên kia ngôn ngữ - Language agnostic mind

Mỗi ngày tôi sử dụng nhiều ngôn ngữ cùng lúc. Trong cuộc sống hằng ngày, tiếng Việt là chủ đạo — tôi dùng để nói chuyện với gia đình, bạn bè...