October – Wake me up, breast cancer awareness month, rain and waiting for November.

I’ve just had a brief look at Facebook and realized that we’re in October already. The WHO page remind us that this is the month of breast cancer awareness (I’m always mistaken the logo of this thing). I remember reading the book “Breasts” Florence Williams, haven’t finished it yet, but it already gave me a fairly good amount of knowledge about women’s body, from a man’s point of view. Maybe I should have bought the book “Mon vagin, ma vie” (in french) as well when I had chance at the bookstore last September. I look at my body sometimes and I must say that nature has such a way to build things. It’s so hard for us men to understand the women’s body, therefore I’m grateful to those mentioned books, that allow me to understand better my wife, or other half of the world in general.

The rain comes more often, this month always make me want to listen some old songs like “I’ll take the rain” and “Rain and tears”, it must be a seasonal thing. Also, it’s time to listen “Wake me up when September ends” less often, to start waiting for “November rain”. Maybe.

Autumn is an awesome season, my most favorite season of the year.

[Đọc sách] Một cần câu của Trần Thanh Địch

Ban đầu viết tính để tag là đọc sách cũ, nhưng chữ cũ ở đây không có ý nghĩa lắm nên tôi dùng Đọc sách cho nó gọn, còn giá trị của cuốn sách vẫn y nguyên.

Nếu được chọn ra một trong những cuốn sách cho tôi cảm giác gần gũi quê nhà, rất “Việt Nam”, chắc tôi sẽ liệt Một cần câu vào trong số đó. Sách được viết năm 1994 (gần 30 năm rồi má ơi), được giải khuyến khích trong cuộc thi “Văn học thiếu nhi vì tương lai đất nước”. Một trong những tác phẩm cũng được giải trong cuộc thi này là Truyện cổ tích của vườn (Nguyễn Thị Bích Nga), cũng hay nhưng có nhiều chuyện buồn ở trong hơn, chắc các bạn đã từng nghe qua. Hồi xưa mình đọc bản giấy bản cỡ hộ chiếu, dày tầm lóng tay, vừa vặn nhét gối đầu giường, không to như Tobie Lolness thay luôn cả gối.

Một cần câu là một tác phẩm thuần về chuyện câu cá, miền quê có, thành thị có. Bên cạnh chuyện đi câu cá, Trần Thanh Địch còn khéo léo thêm vào những hình ảnh gia đình Việt Nam, những mối quan hệ mẹ con cậu dì gần gũi, và kể cả những số phận bất hạnh nhưng biết vượt qua khó khăn. Nói chung là đầy đủ trải nghiệm cho thiếu nhi, không ngạc nhiên khi đạt giải A văn học thiếu nhi (tôi mới biết Một cần câu đạt giải này khi tìm lại bản sách điện tử). Tác phẩm cho bạn đọc có những kiến thức mà trường học không dạy, cuộc sống hiện đại cũng chả có. Ví dụ như dùng cám rang để dụ cá ngạnh, hay dùng chỉ cột ốc để câu tôm tít, hay dùng vịt và nhái để câu cá lóc, hay câu cá mè bằng câu chùm. Mấy bạn ở nhà ruộng vườn thì biết những chuyện này, còn mấy bạn ở phố thị thì đố mà biết, với các bạn nó như là một thế giới kì diệu hay ho để mà đắm mình vào, thế giới mà trò chơi điện tử hay mạng xã hội internet không thể nào mang lại được. Văn của Trần Thanh Địch cũng không phải kiểu trau chuốt ảo diệu, cũng không phải bi sầu thảm não, cũng không gay cấn rùng rợn đến xiêu lòng. Văn của ông mộc, đọc Một cần câu cứ có cảm giác như rúc đầu vào ụ rơm, như mặc mỗi quần đùi mà đằm mình xuống suối mát. Một cần câu được chia thành nhiều truyện nhỏ, đọc một chút rồi hôm sau đọc tiếp tốt. Mình thì mỗi lần đọc là làm một mạch hết cuốn luôn.

Những bạn tree hugger hay những bạn thích giải cứu thế giới có thể sẽ không thích Một cần câu. Nhưng đó là một phần của Việt Nam, của những miền quê, của những giai đoạn khắc khổ nhưng hạnh phúc mà bố mẹ ông bà đã từng trải qua.

Ngoài Truyện cổ tích của vườn đã đề cập ở trên, một số truyện tương tự như Năm đêm với bé Su, Nhạc giữa trời đọc cũng thú vị không kém.

 

Reading books will never be obsolete

Books have always played an integral part in my journey growing up. While there are many different platforms of entertainment and to gain knowledge, and I do enjoy them, books will never be obsolete.

When we were little, colorful books helped us recognize the world, and they planted the seed of imagination and creativity. I will never forget my mom reading those books to me, and at the same time, explaining moral stories that came within. Children are like plain sheets of paper, and books like these are the brightest colors.

Next up, comics. I guess you have once asked your mom to get a new one every week. Or the little novels to long ones, the hesitation to read them because of the walls of text quickly faded as you read more and more.

There are two subjects that I think the learn-by-heart fashion is not suitable: 3D geometry and literature. Geometry is present everywhere in the world around us, and literature is all the reasons I mentioned above. You may argue with the high school approach of literature as one-sided, and while unfortunately that is true at the moment, literature is more than that. If you learn it by heart, then humanity could just print one massive book and distribute it to everyone. Yet you see, there are millions if not more books ready for us to read and feel, and people are still publishing new ideas in books.

Lastly, you don’t read a book once. Some books deserve more than one read. There are books that you perceive one way in the past, and differently now, maybe more differently in the future. They mark our progress as a human being. A poor man’s time machine that. Maybe you’ll read your favorite novel, and the image of a 7-year-old you enjoying the same thing more than 10 years ago pops up. Personally, that’s how I keep my memory fresh, how I relive my childhood. Life is cruel sometimes, and the memory train with books as carriages is a good way to soften things a bit.

So read.

Kiểm tra số chẵn, số lẻ bằng phép thao tác bit trên c++

Với một người không rành máy móc thì hẳn họ cũng sẽ biết rằng máy tính hoạt động theo nguyên tắc của hệ nhị phân (0 và 1). Các phép thao tác bit (bit-wise operations) trong C++ là một thứ khá hay ho để ta có thể vận dụng hệ nhị phân để giải quyết một số bài toán lập trình, mà chủ đề hôm nay sẽ là về kiểm tra tính chẵn lẻ của một số bất kỳ.

Thuật toán kiểm tra cơ bản rất dễ hiểu. Ta thử xem liệu số n nào đó có chia hết cho 2 hay không: nếu chia hết thì số đó là số chẵn, ngược lại là số lẻ.

Với các thao tác bit, ta sẽ ghép n với số 1 bằng toán tử AND. Toán tử AND sẽ chỉ trả về 1 nếu cả hai bit đầu vào đều là 1, đúng theo bảng chân trị của lý thuyết toán rời rạc. Khi một số lẻ ở hệ thập phân được chuyển đổi sang hệ nhị phân, chữ số cuối cùng sẽ luôn là số 1. Lợi dụng điều này, ta sẽ biết được số n ban đầu là lẻ hay chẵn bằng cách xem xét output của AND.

Ưu điểm của thao tác bit là nó chạy nhanh hơn cách thông thường, với lại làm bạn ngầu hơn với cả những người đã biết lập trình (haha).

Sau đây là đoạn code C++ mô phỏng lại những gì mình vừa nói.

#include <bits/stdc++.h>
using namespace std;
int main(){
     int n = 7;
     if (n & 1){
           cout << "odd number.";
     } //& là ký hiệu của phép AND trên C++.
     else cout << "even number.";
}

Một bài lập trình hay về số nguyên tố

Số nguyên tố là thứ quá đỗi quen thuộc với những ai học toán, cũng như đối với các lập trình viên. Ai học giải thuật đều đã giải qua những bài về số nguyên tố, với độ khó dàn trải từ đơn giản tới phức tạp, từ vòng lặp thử tính chia hết tới sàng số nguyên tố Eratosthene…

Hôm nay mình rảnh thì có nghĩ ra một bài như thế này, các bạn xem qua nhé!

Đề bài: Cho hai số nguyên dương x và y (các test case đưa vào luôn đảm bảo x > y). Viết chương trình kiểm tra xem x2 – y2 có phải là số nguyên tố hay không.

Thoạt nhìn qua thì bài này khá đơn giản. Tính x2 – y2, rồi kiểm tra. Nhưng khi x và y lớn, ví dụ cỡ 1018 thì cách này sẽ chạy quá thời gian.

Hãy quan sát biểu thức x2 – y2. Nếu bạn đã học 7 hằng đẳng thức đáng nhớ, sẽ dễ thấy rằng x2 – y2 có thể được viết dưới dạng (x-y)(x+y). Vì x và y đều là các số nguyên dương, nên x 1 và y 1. Từ đó suy ra: (x+y) 1.

Xét biểu thức còn lại, x-y. Sẽ xảy ra hai trường hợp là (x-y) 1 và (x-y)=1. Với trường hợp đầu tiên, x2 – y2 sẽ không là số nguyên tố vì vi phạm định nghĩa (chỉ có hai ước là 1 và chính nó). Do đó với (x-y)=1, biểu thức ban đầu sẽ tương đương với chỉ x+y. Ta chỉ cần xét x+y là đủ. Sau đây là code miêu tả bài toán này.

bool primeSquare(long long a, long long b)
{
    if (a-b != 1) return false;
    long long num = a + b;
    if (num % 2 == 0) return false;
    for (long long i = 3; i*i <= num; i += 2)
    {
        if (num % i == 0) return false;
    }
    return true;
}

Intuitive explanation to how dividing by 0 is impossible

We all know a random number times 0 always ends up 0, but the division for 0 is impossible. Computer programs return numerous errors upon stumbling across this matter, math leaners try their best with conditions to avoid dividing by 0. Some guys on YouTube even tried to prove that 1 equals to 0 using this very infamous numerical expression.

But why is that? Let us take a very straightforward and intuitive example to explain why dividing by 0 is a meaningless act.

Say you have a delicious cake. Rashford and Pogba come to your house to eat it with you. In order to make everyone happy, the cake must be divided into 3 equal parts, so each one of you will have a third of that cake. In another scenario, it is the same cake, but you celebrate something alone and want to eat the whole thing. Simple. You divide the cake by 1, so it ends up being itself. Bon appetit!

But what happens when you attempt to divide the cake by 0? The cake just disappears. Just a second ago, a delicious piece of culinary art stays in front of you, but now it is in the void. The act itself gets ridiculous when you think about it. Where is the cake? Ask the divisor.

That is the answer for dividing by 0. You cannot destroy matters, because the act of dividing by 0 “destroys” matters and numbers. For those who studied physics, you must be familiar with the Conservation of mass: “mass can neither be created nor destroyed, although it may be rearranged in space, or the entities associated with it may be changed in form.”

Put plots by Matplotlib to your standard

This post provide the modification for python script for plotting using matplotlib.

plt.rcParams['font.family'] = 'Myriad Pro'
plt.rcParams['font.serif'] = 'Myriad Pro'
plt.rcParams['font.monospace'] = 'PragmataPro Mono Liga'
plt.rcParams['font.size'] = 12
plt.rcParams['axes.labelsize'] = 12
plt.rcParams['axes.labelweight'] = 'bold'
plt.rcParams['axes.titlesize'] = 10
plt.rcParams['xtick.labelsize'] = 10
plt.rcParams['ytick.labelsize'] = 10
plt.rcParams['legend.fontsize'] = 10
plt.rcParams['figure.titlesize'] = 12