How to …

HOW TO…

Get number of lines of a text file and assign this value to a variable

num_lines=($(wc -l ))

Ex:
Fruits.txt

Annona
Coconut
Papaya
Mango
Nuts

We have 5 lines.

num_lines=($(wc -l Fruits.txt))
echo "The number of lines in Fruits.txt is $num_lines"

The command above will print:

The number of lines in Fruits.txt is 5

Write log of a command in terminal to file

Ex:

echo "Have a nice working day!" > happy.txt

Result:
happy.txt

Have a nice working day!

Write an array to file

Ex:

arr=("Have" "a" "nice day")
printf "%s\n" "${arr[@]}" > myFile.txt

Result:
The content of myFile.txt

Have
a
nice day

Check number of arguments

Ex:

# if total arguments not equal 2
if [ $# -ne 2 ]; then               
    echo "usage: $0 Arg1 Arg2" 1>&2
    # $0 : name of script  file
    exit 1
fi

Compute time for run command

Ex:

begin=$(date +%s)

# Do something here...

end=$(date +%s)
echo "Time for running: `expr $end - $begin` s"

Get substring

Ex:

str="Have a nice day!"
sub=$(echo $str | cut -d' ' -f 1)
echo "$sub"
# explain:
# d : delimiter (space, \n, ',' ,..)
# 1 : index is marked start with 1 ...
# more information: type "man cut"

Result:

Have

Using regular expression

Ex:

str="My weight is 50.55"
pattern="[0-9][0-9][.][0-9][0-9]"

if [[ $str =~ $pattern]]; then
    echo ${BASH_REMATCH[1]}
fi

Result:

50.55

Replace a word in a string

Ex:

str="What a nice day!"
newStr=${str//What/Have}

echo "$newStr"

Result:

Have a nice day!

Push a string into a array (separate by space)

Ex:

str="What a nice day"
# Way1:
arr1=($str)
# Way2:
IFS=' ' read -a arr2 << 

echo "${arr1[@]}"

Result:

What a nice day

Get file name and its path from full path

Ex:

file="~/home/root/myfile.txt"
filename=$(basename $file)
path=${file%/*}

echo "Path: ${path}"
echo "File's name: $filename"

Result:

Path: ~/home/root
File’s name: myfile.txt

Advertisements

Some problems with array

Initialize an array

arr=(<element1> <element2> ...)
#===================================================
# example
arrNum=(1 2 3 4)

Access elements

${<NameOfArray>[index]}
#===================================================
# example
echo ${arrNum[1]}    # => 2

Print all elements

${<NameOfArray>[*]}    
# or 
${<NameOfArray>[@]}
#===================================================
# example
echo ${arrNum[*]}    # => 1 2 3 4

Get lengh

${#<NameOfArray>[*]} 
# or 
${#<NameOfArray>[@]}
#===================================================
# example
echo ${#arrNum[*]}    # => 4

——— Have fun! 🙂 ———

Vẽ biểu đồ với thư viện Matplotlib

Đây là một thư viện khá là mạnh mẽ trong việc tạo biểu đồ với Python. Để bắt đầu với nó chúng ta cần install nó. Nếu cài Anaconda thì nó đã có sẵn rồi! Ở đây tôi xài Jupyter notebook của Anoconda để code! (Nếu trên máy đã có Anaconda thì ta chỉ việc Run->powershell và cd đến thư mục muốn làm việc rồi gõ jupyter notebook và tạo một file để code!).
Nếu bạn muốn xài IDE khác để code thì có thể tham khảo link sau:
https://heoublog.wordpress.com/2016/09/27/cong-cu-de-lap-trinh-python/

Let’s start!

import matplotlib.pyplot as plt

# Từ điển chứa danh sách các món ăn và số người thích
Food_counts = {'Fish': 10, 'Meat': 20, 'Egg': 50, 'Milk': 30, 'Crab': 40}

# Chuẩn bị dữ liệu:
# Sort Số lượng người thích (giảm dần)
Counts = sorted(Food_counts.values(), reverse=True)
# Sort các món ăn dựa vào số lượng người thích (giảm dần)
Foods = sorted(Food_counts, key=Food_counts.__getitem__, reverse=True)

# Chỉ số các món ăn
ind_Foods= range(len(Food_counts))

# Vẽ biểu đồ cột
plt.bar(ind_Foods, Counts, align='center')
plt.xticks(ind_Foods, Foods)

# Label x, y axit
plt.xlabel('Foods')
plt.ylabel('Count (like)')
# Label title of bar char
plt.title('FOOD WHICH PEOPLE LIKE')

# Thêm các giá trị trên mỗi cột
for x, y in zip(ind_Foods, Counts):
    plt.text(x+0.02, y+0.05, '%d' % y, ha='center', va= 'bottom')

# Tăng trục y thêm 20 đơn vị
plt.ylim(0, Counts[0] + 20)

# Cuối cùng là show kết quả!!!
plt.show()

Kêt quả:

Đây chỉ là một ví dụ nho nhỏ nhưng khá hữu ích nếu bạn muốn thống kê một điều gì đó trong cuộc sống!!! Ngoài biểu đồ cột ra còn có khá là nhiều biểu đồ khác thú vị hơn.

Sau đây là một số link hướng dẫn, tham khảo nếu bạn có ý định tìm hiểu về thư viện này:
Matplotlib gallery:
http://www.labri.fr/perso/nrougier/coding/gallery/
Một thư viện ví dụ đồ sộ về matplotlib:
http://matplotlib.org/gallery.html
https://plot.ly/matplotlib/
——— Have fun! ——–

OpenMP

OpenMP (Open Multi-Processing)

OpenMP là một API hỗ trợ lập trình song song (ngoài ra bạn có thể tìm hiểu về CUDA của NVIDIA). OpenMP bao gồm nhiều chỉ thị chạy khác nhau. API này đã có sẵn trong Visual Studio C/C++. Vì thế khi sử dụng bạn chỉ cần import dòng này vào:

#include <omp.h>

là xong!

Bạn thử chạy dòng code này:

  
#include <stdio.h>
#include <omp.h>
#include <conio.h> # Để có thể sử dụng lệnh _getch() (dừng màn hình)

int main()
{
    #pragma omp parallel
    {
        printf("Hello world!\n");
    }

    _getch();
    return 0;
}

Sau khi chạy xong đoạn chương trình trên bạn có lẽ CHỈ THẤY 1 dòng Hello world! được xuất ra! Có lẽ bạn sẽ nói: “Như vậy mà gọi là SONG SONG ah?!? Có khác gì dòng code bình thường đâu?!?”.
Vấn đề là ở đây! Nếu bạn đã thiết lập chạy song song thì sẽ in ra 4 dòng Hello world! (Còn tùy vào máy của bạn có mấy nhân! Bạn có thể biết được số nhân của máy qua dòng lệnh sau:

printf("Số nhân: %d\n", omp_get_max_threads());

)
Tuy bạn có thể có 4 nhân nhưng lại không in ra được màn hình 4 dòng Hello world! là do bạn chưa enable cho nó!

Để Enable OpenMP bạn làm như sau:
* Phải chuột lên project của bạn, chọn properties.
* C/C++ -> Language, và thay đổi “OpenMP Support” thành ‘Yes’.
* Click OK!

Xong! Bạn có thể Ctrl+F5 lại xem!!! Nếu vẫn chỉ có 1 dòng được in ra thì máy của bạn chỉ hỗ trợ có 1 nhân thôi!

Bạn có thể tham khảo thêm tại đây

Thanh tra

Những ngày hôm nay có thể nói là mỗi ngày tới trường là một “niềm vui”! 🙂 Thật sự mà nói thì lâu lâu mới có một lần! Trường trở nên sạch sẽ hẳn ra! Cả về nghĩa đen lẫn nghĩa bóng! Đi dọc sân trường các thầy canh sinh viên như bảo vệ canh trộm. Cứ thấy ai không mang thẻ là “Đứng lại đó! Thẻ em đâu?”. Các sì tiu đần chạy như vịt! Tôi thật lấy làm cảm thán!!! 🙂

Đi đâu cũng thấy bảng hiệu giới thiệu trường, băng rôn treo đặt khắp nơi! Biểu tượng sì tiu đần ăn mặc lịch sự, đi khẽ nói nhẹ rất được chú trọng! Trong thang máy được đặt thêm 2 cái “mini tivi” chào đón cứ chớp nháy liên tục!!! >< Vào văn phòng ngồi học mà nghe các thầy cứ nói rôm rả "Trường mấy hôm nay sạch sẽ ghê!" có thầy nói lại "Chắc mai em ở nhà ngủ!" 🙂

Chuyện còn chưa dừng lại ở đây. Bạn tôi được thông báo nghỉ học chỉ vì một lý do hết sức giản đơn là vì "LỚP HỌC BẨN!" chỉ vì dạo này xuất hiện hai chữ "Thanh tra"!

Trường tôi nếu không nói chứ có niên kỉ lâu năm nên mọi thứ đề "cũ kĩ" chưa có tài chánh để nâng cấp!!! Thật sự thầy tôi nói không ngoa chứ "Trường ta cái gì cũng có chỉ thiếu một cái : TIỀN"! 🙂 Ôi thôi thôi!!! Nghe xong mà té ngửa! Thật đáng buồn làm sao!

Trường tôi hầu như không nhiều sự ép buộc như những trường khác! Bình thường các sì tiu đần thích nhất chữ na tru rồ! Nên từ này được các sì tiu đần vận dụng khăp mọi nơi trong trường nhưng chỉ vì hai chữ "THANH TRA" mà các sì tiu đần đều phải cầm hình tượng đi giữ trường! Tuy đây là một hình tượng tốt nhưng không na tru rồ tí nào!!! "THANH TRA" tới… thôi chết lo chạy thôi!!! 🙂

Bài phỏng vấn của Guido van Rossum

“Guido van Rossum is a Dutch programmer who is best known as the author of the Python programming language.”
—wikipedia—

Bài phỏng vấn Guido van Rossum (GvR), tác giả của Python, qua đó ta hiểu được công việc của ông tại Google (trước đây) và Dropbox (hiện tại), cũng như quan điểm của ông về lập trình hướng đối tượng, lập trình hàm, multi-line lambda, pypy, và Python 3.

Bạn có thể đọc ở đây: Link

Công cụ để lập trình Python

Hiện nay có rất nhiều Editor để học và làm việc với Python (hay còn gọi là IDE). Có thể kể đến một số IDE tiêu biểu như sau:
Atom (Free – Open Source)
Atom
IDE này được gọi là “A hackable text editor for the 21st Century” – một cái tên khá là kêu! Bạn có thể tải và xem thêm thông tin về IDE này tại trang web này: Atom

Tips

  • Bạn có thể cài thêm các package (các gói tiện ích) cho IDE này bằng cách nhấn tổ hợp phím Ctrl + Shift + P và nhập Install Packages And Themes. Trong đây chứa rất nhiều các package hữu ích giúp bạn code nhanh hơn! Có thể kể đến một số package sau: Autocomplete-python (package này rất tuyệt!), python-tools, Script (Run code in Atom), Activate-power-mode (package này khá là tuyệt khi bạn gõ code – như bắn pháo hoa zậy)… ngoài ra còn có khá nhiều nữa. Bạn chỉ cần nhập từ khóa python chương trình sẽ hiện ra các package có liên quan kèm theo mối package là một vài dòng thông tin liên quan đến package đó!

  • Ngoài ra bạn còn có thể cài thêm các theme khác cho IDE cũng bằng dòng lệnh trên.

  • Nếu bạn không thích package nào bạn có thể vô hiệu hóa (Disable) nó.

  • Ngoài Python, IDE này còn hỗ trợ khá nhiều ngôn ngữ lập trình khác như C/C++, C#, Javascript, TypeScipt,..

Sublime Text (Not Free – Use as free!!!)
sublimetext
IDE này được gọi là: “The text editor you’ll fall in love with” <3.

IDE này có nhiều điểm giống với Atom. Bạn có thể tải và xem thêm thông tin về IDE này tại trang web này: Sublime Text.

Tại sao nói Not FreeUse as free vì bạn có thể xài như bản full nhưng sau khoảng 20 lần save thì chương trình hỏi bạn có muốn mua không nhưng bạn yên tâm bạn chỉ cần Cancel là xong! :).

Lần đầu bạn tải về thì bạn cần cài thêm cái plugin Package Control (Để có thể cài thêm các package hữu ích khác!). Bạn có thể vào trang Package Control để có thể biết thêm chi tiết.

Để cài Package Control, bạn vào View -> Show Console. Lúc này chúng ta sẽ thấy một dòng console nhỏ phía dưới, hãy copy đoạn code dưới đây và paste vào khung nhập lệnh rồi ấn Enter.
Tùy theo phiên bản của sublime text:
Ver2:

"import urllib2,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1548d1514676163dafc88'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), 'wb' ).write(by) if dh == h else None; print('Error validating download (got %s instead of %s), please try manual install' % (dh, h) if dh != h else 'Please restart Sublime Text to finish installation')"

Ver3:

"import urllib.request,os,hashlib; h = '2915d1851351e5ee549c20394736b442' + '8bc59f460fa1548d1514676163dafc88'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)​"

Giờ thì Esc để tắt cái console đi. Cuối cùng là khởi động lại Sublime Text.
Sau khi khởi động Sublime Text nhấn tổ hợp phím Ctrl + Shift + P và nhập Package Control: Install Package. Cũng tương tự như đối với Atom, bạn có thể nhập từ khóa vd Python bạn sẽ nhận được một nùi các package có liên quan muốn cài cái nào chỉ cần click chọn là OK!

Tips

  • Bạn có thể paste 1 đoạn code bất kì (Python chẳng hạn) và nhấn tổ hợp phím Ctrl + Shift + P nhập Set Syntax: Python thì chương trình sẽ format code theo Python cho bạn!

  • Một số phím tắt thông dụng trong Sublime Text (bạn cũng có thể tìm thấy các phím tắt này ở một số IDE khác):

  • Ctrl+Shift+L …..: chọn các dòng sau đó nhấn tổ hợp phím này nó sẽ thêm các con trỏ vào cuối dòng và chúng ta tha hồ gõ trên nhiều dòng
  • Ctrl+Shift+Mũi tên lên xuống : di chuyển dòng code
  • Ctrl+D…………..: chọn các từ giống nhau có thể sửa đồng loạt (thêm con trỏ ở những nơi đã chọn)
  • Alt+F3…………..: giống Ctrl+D nhưng chọn hết
  • Ctrl+L…………..: Chọn các dòng code
  • Ctrl+Shift+K……..: Xóa dòng tại vị trí con trỏ
  • Ctrl+/…………..: bật/tắt chú thích cho dòng được bôi đen hay dòng có con trỏ
  • Ctrl+K+U…………: chuyển chữ thường thành chữ hoa
  • Ctrl+K+L…………: chuyển chữ hoa thành chữ thường
  • F6………………: bật tắt chế độ kiểm tra chính tả tiếng anh
  • Ctrl+H…………..: Search+Replace
  • F11……………..: bật/tắt fullscreen
  • Shift+F11………..: bật/tắt fullscreen ko có sidebar
  • Alt+Shift+1,2,3,4…: chia màn hình soạn thảo thành các cột (1, 2, 3, 4 cột)
  • Alt+Shift+5………: chia đều màn hình soạn thảo thành 4 vùng bằng nhau
  • Alt+Shift+8,9…….: chia màn hình soạn thảo thành 2, 3 dòng đều nhau
  • Bạn cũng có thể code ngôn ngữ khác trên IDE này (giống Atom)

Wing (Not Free)
wing

IDE này tập trung hỗ trợ cho việc code Python nên trông rất chuyên nghiệp! 🙂 Có thể nói là “support đến tận răng”. Đối với IDE này bạn có thể code Python (autocomplete code, hint code), run, debug, xem thông tin các module, tham số các hàm,… Nhưng bạn nếu là sinh viên có email sinh viên thì bạn có thể yêu cầu bản quyền phần mềm này cách miễn phí! (Bản quyền khoảng 6 tháng (12 tháng) / 1 máy. Nếu bạn muốn yêu cầu cho nhiều máy bạn có thể viết thư yêu cầu unclock thêm! Of course by English! 🙂 ).

Python Tools for Visual Studio (Free – Open Source)
ptfv

Đây là một plug-in cho Visual Studio. Nó không hề kém cạnh các IDE trên!!! Let’s try and feel! 🙂
Nếu máy bạn đang sở hữu Visual Studio 2015 thì bạn hoàn toàn có thể xài bản mới nhất (Đối với các bản Visual về trước (Visual Studio 2010 – 2013) bạn có thể xài bản thấp hơn).
Download tại: Download PTVS

JetBrains PyCharm (Not Free – Free)
jetbrain1

Đây cũng là IDE rất mạnh mẽ được rất nhiều các coder Python lựa chọn!

Tùy mục đích sử dụng, bạn có thể lựa chọn bản có phí, hay miễn phí, bản cho giáo dục (Edu). Tuy nhiên nếu bạn là học sinh / sinh viên bạn có thể dùng tải khoản email của mình để có thể đăng kí nhận miễn phí bản quyền các IDE của JetBrains (Giống với Dream pack). Tuy nhiên bạn cần tuân thủ các luật của nhà cung cấp! (Không dùng cho mục đích thương mại). Bạn có thể sở hữu các IDE sau ^^:

jetbrain

Link:
Link đăng kí tài khoản student để get free các IDE
Link download IDE

Notepad++ (Free)
notepad

Nếu bạn là một người thích sự “đơn giản” bạn có thể chọn cho mình IDE này! 🙂
Download tại: Notepad++


Trên đây chỉ là một số IDE mà tôi đã từng sử dụng để làm việc với Python! Hy vọng bài viết này sẽ giúp bạn chọn được IDE để code Python – một ngôn ngữ đáng học nhất mà tôi từng biết! 🙂

Cách để học bất cứ ngôn ngữ lập trình nào !?!

Có rất nhiều cách để học một ngôn ngữ lập trình (hầu như các ngôn ngữ lập trình có sự tương tự nhau – Đó là suy nghĩ của riêng cá nhân thôi!!!). Theo Zed A.Shaw – tác giả của cuốn sách Learn Python the hard way có đề xuất một phương pháp như sau:


1. Get a book or some introductory text about the language.
2. Go through the book and type in all the code, making it run.
3. Read the book as you work on the code , taking notes.
4. Use the language to implement a small set of programs you are familiar with in another language.
5. Read other people's code in the language, and try to copy their patterns.

Có thể tạm dịch như sau:

1. Kiếm một cuốn sách hoặc vài thông tin hướng dẫn về ngôn ngữ mà mình học.
2. Đọc qua cuốn sách và gõ các đoạn code trong sách đó, và quan trọng là những đoạn code đó chạy được.
3. Đọc kĩ cuốn sách để hiểu về các đoạn code đó, ghi chú lại những điểm quan trọng.
4. Sử dụng ngôn ngữ đó để thực hành với những bài tập nhỏ mà bạn đã thực hành với ngôn ngữ bạn đã biết.
5. Đọc code của người khác và thử sao chép phong cách lập trình của họ.

Riêng tôi, tôi cảm thấy việc gõ hết code là không cần thiết bởi vì nếu thực hành với số lượng code ít thì có thể được nhưng đối với một lượng code lớn thì có thể khá mệt (Thiếu động lực!) nên tốt nhất là nếu đoạn code quá dài thì nên copy và paste để xem kết quả! Lúc đó bạn sẽ biết kết quả và tới lúc quan tâm đến nó là đọc hiểu và nếu có thể thì code lại!!!

Đọc code của người khác – Đó là cách để nâng cao kỹ năng của bản thân. Thông qua code của người khác bạn có thể học được nhiều thứ như: phong cách lập trình, cách suy nghĩ,…
Bạn có thể lên Github để tìm một số đoạn code của ngôn ngữ lập trình mà mình học! Chúc bạn thành công!

Cách mà nghề chọn người

Khi còn học cấp 3, mấy thầy cô lớp tui toàn khuyên không nên chọn nghề giáo viên vì nó cực… hơn thế họ chọn nó vì cái duyên cái nợ!!! Bất quá mới chọn nghề giáo viên!

Còn tui thì thật sự mà nói khi còn học lớp 6. Lúc mới được tiếp cận với máy tính lần đầu được học rất nhiều lý thuyết cơ bản nhưng tui thật sự không thực hành được khi làm kiểm tra. Lần nào kiểm tra thực hành tui đều nơm nớp lo sợ ><
Kể từ khi biết có mạng tui ra net ngồi cũng bắt chước người ta mở máy lên rồi ngồi đợi như thằng đần, tui tự hỏi sao nó lại không zô được màn hình window như ở nhà??? Ngồi một hồi thì thấy mấy thằng choi choi nó zô kêu mở gì đó. Lúc đó tui cũng lạch bạch ra hỏi chủ quán thế là ảnh mở máy cho tui ^^! Tui mở cái trình duyệt web IE lên gõ bàn phím mà ngồi soi từng chữ… http://www.google.com.vn

Báo làm bạn với máy vi tính là báo về máy tính đầu tiên tui đọc đó!!! ^^ nhờ nó mà tui biết được rất nhiều phần mềm, các lỗi hay gặp với máy tính,… tiếp đó là báo Echip ^^. Sau đó cũng bày đặt lập email gửi những câu hỏi cho báo LBVMVT hầu hết đều được trả lời!!! Tui thấy rất zui!! Lúc đó tui rất là thích sưu tập các phần mềm máy tính đặc biệt là bản quyền các phần mềm!!!

Thế là 6 năm sau đó tui học lớp 12 và cuối kỳ 2 thì phải thi đại học. Phải chọn trường, chọn ngành học. Tui cũng như bao chúng bạn tìm hiểu về các trường đại học, nghề nghiệp,… Tui quyết định thi vào 2 trường ĐH KHTN (ngành CNTT – Chả biết trường này là trường nào cả!!! Ở quê tui chỉ biết Bách Khoa, Y dược balala) với ĐH Tôn Đức Thắng (ngành kỹ thuật hóa học. Tui vốn học khá giỏi môn Hóa đó nha!!! ^^) và không chọn thi bất kì trường Cao đẳng nào hết!!! ><

Anh tui sau khi nghe xong mới phán “mày được lắm… mày không sợ rớt hết 2 trường ah? Coi chừng phải đi nghĩa zụ nha con!!!” Lúc đó tui cũng thấy lo nhưng mà nước đã tát sau còn vớt lại được nên tui cũng kệ lun!!! 🙂 nhưng thật không ngờ tui đậu cả 2 trường – <tự khen>Cũng giỏi phết đó chứ!!! hihi</tự khen>. Đứng trước quyết định tiếp theo tui chọn CNTT vì tui nghĩ sẽ được típ xúc nhìu với máy tính!! 🙂

Thế là từ đó tui theo cái nghiệp này lun!!! Bạn bè tui từ khi nó biết tui học CNTT thì dân chúng cứ có lỗi, hư máy tính, cài lại Win,… thì cứ chỉ tui hết!!! Thành ra tui học CNTT mà cứ như thợ sửa máy tính í!!! 🙂 Nhưng cũng thấy zui !!!

Giờ tui nghĩ lại thì thấy hay hay lúc trước ghét máy tính bao nhiêu giờ lại chọn cái mà mình ghét!!! Đúng là ghét của nào trời trao của ấy mà!!! ^^