New FAMILUG
The PyMiers
Saturday 31 December 2016
Friday 30 December 2016
Vì sao 0.1 + 0.1 + 0.1 không bằng 0.3?
by
H
Nếu có thể trả lời chính xác câu hỏi sau và giải thích tại sao, bạn có thể
bỏ qua bài này:
Có thể sử dụng bất kỳ ngôn ngữ lập trình nào khác: Python, C, Java, Golang, ... kết quả là không đổi.
Câu trả lời ngắn gọn: Kết quả trả về là False, hay vế trái không bằng vế phải.
Trong Python, biểu thức này trả về đúng (True) hay sai (False)? hay nói cách khác, khi gõ biểu diễn trên máy tính vế trái có bằng vế phải không?0.1 + 0.1 + 0.1 == 0.3
Có thể sử dụng bất kỳ ngôn ngữ lập trình nào khác: Python, C, Java, Golang, ... kết quả là không đổi.
Câu trả lời ngắn gọn: Kết quả trả về là False, hay vế trái không bằng vế phải.
Float là gì?
Kiểu dữ liệufloat
là viết tắt của "real floating-point number" - kiểu "số thực dấu chấm động".float là một cách BIỂU DIỄN XẤP XỈ cho một số thực (real number) bằng cách đánh đổi độ chính xác (precision).
Các quy tắc / chuẩn để biểu diễn float được mô tả trong tiêu chuẩn quốc tế IEEE 754Số thực
là tập số gồm:- các số hữu tỷ (số biểu diễn được ở dạng phân số: VD: 2, 1/3)
- và các số vô tỷ (số không biểu diễn được ở dạng phân số: VD: căn bậc 2 của 2)
Số vô tỷ
Thursday 29 December 2016
Wednesday 28 December 2016
[pandas] Truy cập nội dung DataFrame
by
H
Bài trước đã hướng dẫn các khái niệm cơ bản và cách tạo một bảng dữ liệu bằng pandas.
Bài này sẽ hướng dẫn cách xem bất cứ phần nào ta muốn trong bảng (DataFrame) đã tạo.
Bài này sẽ hướng dẫn cách xem bất cứ phần nào ta muốn trong bảng (DataFrame) đã tạo.
Tạo bảng mới
In [1]: import pandas as pd
In [4]: import numpy as np
In [5]: dates = pd.date_range('20161212', periods=6)
In [6]: df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
In [7]: df
Out[7]:
A B C D
2016-12-12 -0.115304 -0.400382 1.254944 0.702264
2016-12-13 1.436155 0.476939 1.334369 0.223856
2016-12-14 -0.124606 -0.017318 0.824345 -0.432029
2016-12-15 -1.013802 0.266865 1.341752 -0.990876
2016-12-16 0.669347 -1.086764 0.555358 -0.579439
2016-12-17 -0.405407 -0.044016 -0.153047 -0.800809
Truy cập hàng và cột trong bảng
Lấy danh sách tên các cột (column)
In [60]: df.columns
Out[60]: Index(['A', 'B', 'C', 'D'], dtype='object')
Lấy danh sách tên các dòng (index)
[Swift] Phân biệt let và var - giữa struct và class - [phần 1]
by
Unknown
Để bắt đầu serial Kiến thức phỏng vấn cho lập trình viên iOS, mình xin đề cập đến hai khái niệm let và var trong ngôn ngữ Swift mà các bạn khi phỏng vấn sẽ rất hay hỏi.
Mình sẽ dùng phiên bản mới nhất đó là Swift 3 và mới hơ
I - Khái niệm:
var vs let - sẽ tương ứng với hai khái niệm biến số và hằng số
VD:
"Khai báo một hằng số tên là wife, có giá trị là Joana. Tiếp theo, khai báo một biến số tên là darling và cho nó một giá trị khởi tại là Beautiful Girl."
Mình sẽ dùng phiên bản mới nhất đó là Swift 3 và mới hơ
I - Khái niệm:
var vs let - sẽ tương ứng với hai khái niệm biến số và hằng số
VD:
let wife = "Joana"Hai dòng code trên có ý nghĩa như sau:
var darling = "Beautiful Girl"
"Khai báo một hằng số tên là wife, có giá trị là Joana. Tiếp theo, khai báo một biến số tên là darling và cho nó một giá trị khởi tại là Beautiful Girl."
Tuesday 27 December 2016
[Python] Tạo bảng dữ liệu với pandas
by
H
pandas là gì
pandas là bộ công cụ để phân tích và chỉnh sửa dữ liệu mạnh nhất thế giới, được sử dụng rộng rãi trong phân tích tài chính, phân tích dữ liệu.Python pandas |
pandas là một Python package.
Cài đặt pandas
(trong virtualenv):$ pip install pandas
...
Installing collected packages: pandasNOTE: pandas phụ thuộc vào package numpy, tức cài xong pandas thì đã có cả pandas lẫn numpy.
Successfully installed pandas-0.19.2
Muốn phân tích thì phải có dữ liệu và hiển thị nó lên bảng thành hàng cột đã rồi làm gì thì làm.
Trong bài đầu tiên của series, ta sẽ sử dụng pandas để tạo một bảng dữ liệu có hàng, cột, giống như Excel hay Google spreadsheet.
Kiểu dữ liệu trong pandas
pandas có hai kiểu dữ liệu chủ chốt- Series: kiểu dữ liệu một chiều (1D) - chuỗi các giá trị
- DataFrame: kiểu dữ liệu hai chiều (2D) - tức sẽ biểu diễn thành bảng , có hàng / cột trên Excel hay Google spreadsheet.
Monday 26 December 2016
[Debian] Khám phá các tiện ích trong package dpkg
by
H
Trong package dpkg có gì?
$ dpkg -L dpkg | grep bin/
/sbin/start-stop-daemon
/usr/bin/dpkg-split
/usr/bin/dpkg-statoverride
/usr/bin/dpkg
/usr/bin/dpkg-divert
/usr/bin/dpkg-query
/usr/bin/dpkg-maintscript-helper
/usr/bin/dpkg-deb
/usr/bin/update-alternatives
/usr/bin/dpkg-trigger
Các câu lệnh dpkg này làm gì?
Whatis:$ for binary in $(dpkg -L dpkg | grep bin/); do whatis $(basename $binary); done
start-stop-daemon (8) - start and stop system daemon programs
dpkg-split (1) - Debian package archive split/join tool
dpkg-statoverride (8) - override ownership and mode of files
dpkg (1) - package manager for Debian
dpkg-divert (8) - override a package's version of a file
dpkg-query (1) - a tool to query the dpkg database
dpkg-maintscript-helper (1) - works around known dpkg limitations in maintainer scripts
dpkg-deb (1) - Debian package archive (.deb) manipulation tool
update-alternatives (8) - maintain symbolic links determining default commands
dpkg-trigger (1) - a package trigger utility
dpkg - chương trình quản lý package cho Debian
dpkg có các câu lệnh để :[Python] thôi dùng subprocess.check_output
by
H
Function tiện tay subprocess.check_output rất hấp dẫn khiến người ta khó có thể từ chối dùng nó. Để kiểm tra output một câu lệnh, chỉ cần:
Nếu có lỗi xảy ra, ta chỉ nhận được một exception chứ không thu được phần lỗi của câu lệnh (stderr):
In [1]: import subprocess as sprChuyện này không có gì sai cho đến khi có gì đó sai sai xảy ra.
In [2]: output = spr.check_output(['ls', '/etc/hosts'])
In [3]: print(output)
b'/etc/hosts\n'
Nếu có lỗi xảy ra, ta chỉ nhận được một exception chứ không thu được phần lỗi của câu lệnh (stderr):
Sunday 18 December 2016
Làm quen với Ansible - viết playbook đơn giản
by
H
Sau khi đã cài đặt Ansible và chạy được ad-hoc command, bài viết này sẽ hướng dẫn viết các file playbook để thực hiện hàng loạt task thay vì chỉ chạy từng câu lệnh một. Các file Playbook này thường cho vào một git repo để tiện quản lý.
Ví dụ một playbook tên là vim.yml, chỉ chứa 1 play map tất cả các hosts với role cài vim:
Ansible playbook
Một Ansible Playbook là môt file ở định dạng YAML (.yml), nó ở dạng list và chứa một hoặc nhiều "play".Play
Mỗi "play" dùng để kết nối (map) một nhóm các "host" với một vài "role". Roles trong playbook được gọi là "tasks".Role và task
Một task thực hiện gọi đến một Ansible module nào đó.Ví dụ một playbook tên là vim.yml, chỉ chứa 1 play map tất cả các hosts với role cài vim:
$ cat vim.yml
---
- hosts: all
remote_user: root
tasks:
- name: Install vim
apt: name=vim state=present
Saturday 17 December 2016
Làm quen với Ansible - module, ad-hoc command
by
H
Mình dùng SaltStack để quản lý cấu hình và tự động hoá hệ thống.
Mình muốn thử dùng Ansible để xem có gì hay ho, vì nhiều người bị ho và cứ hỏi là SaltStack hơn Ansible cái gì, nên mình đọc doc.
Mình không hiểu nổi tại sao có cái document to đùng và xinh đẹp ở đấy thì mọi người chả đọc, cứ đi tìm cái đâu đâu, kỳ 😶
Nhận xét:
- Ansible khuyến khích người dùng cài từ bản develop checkout từ Ansible repo trên GitHub
- Nếu không được thì cài từ pip
- Nếu vẫn không được thì cài bằng các package manager của hệ thống như apt, yum...
- Phần hướng dẫn thì ít mà chú ý thì nhiều.
Mình muốn thử dùng Ansible để xem có gì hay ho, vì nhiều người bị ho và cứ hỏi là SaltStack hơn Ansible cái gì, nên mình đọc doc.
Mình không hiểu nổi tại sao có cái document to đùng và xinh đẹp ở đấy thì mọi người chả đọc, cứ đi tìm cái đâu đâu, kỳ 😶
Cài đặt Ansible
Nếu biết pip là gì thì dùng pip là nhanh gọn nhất, vì Ansible viết bằng Python, cài bằng pip là điều hiển nhiên không cần bàn cãi. Chạy lệnh sau:$ pip install ansibleNếu thấy dòng trên sau khi chạy lệnh pip tức là đã thành công.
...
Successfully installed ansible-2.1.0.0
Nhận xét:
- Ansible khuyến khích người dùng cài từ bản develop checkout từ Ansible repo trên GitHub
- Nếu không được thì cài từ pip
- Nếu vẫn không được thì cài bằng các package manager của hệ thống như apt, yum...
- Phần hướng dẫn thì ít mà chú ý thì nhiều.
Monday 5 December 2016
[Rust] Học Rust để tính toán
by
H
Việc học không có mục đích sẽ khó đi đến đích, dễ lạc lối và hoang mang.
Bài này giới thiệu đủ các khái niệm của Rust để tính toán cơ bản, cụ thể là làm vài bài ProjectEuler.net
Nếu ai hỏi học Rust làm gì, có ai thuê đâu? thì câu trả lời là mình học cho đỡ vui 🤑
Các khái niệm cần thiết gồm có:
- Đặt biến để chứa giá trị
- Thực hiện các phép toán cơ bản: cộng trừ nhân chia, chia lấy dư
- Các câu lệnh điều khiển: if/else if/else
- Các vòng lặp: while, for
- In ra màn hình: println!
Tạo project bằng câu lệnh:
Sửa file rustmath/src/main.rs
Đoạn code sau để kiểm tra số x có phải số chẵn không, in ra màn hình.
- Dùng hai dấu bằng ``==`` để kiểm tra xem giá trị vế trái và vế phải có bằng nhau không. Ở đây kiểm tra x chia cho 2 có dư 0 hay không (có chia hết không).
- Để in ra màn hình, dùng "macro": println! - có dấu ! chỉ rằng đây là một macro, macro là gì tạm thời để sau, giờ cứ biết làm thế để in ra màn hình.
- Trong khi gọi macro!(), dùng dấu ``{}`` để giữ chỗ cho giá trị sẽ được thay thế sau đó. Nội dung in ra nằm trong dấu nháy kép (double quotes): "{} is odd".
Thử làm bài Project Euler 1:
Tính tổng các số nhỏ hơn 1000 chia hết cho 3 hoặc chia hết cho 5.
Bài này giới thiệu đủ các khái niệm của Rust để tính toán cơ bản, cụ thể là làm vài bài ProjectEuler.net
Nếu ai hỏi học Rust làm gì, có ai thuê đâu? thì câu trả lời là mình học cho đỡ vui 🤑
Các khái niệm cần thiết gồm có:
- Đặt biến để chứa giá trị
- Thực hiện các phép toán cơ bản: cộng trừ nhân chia, chia lấy dư
- Các câu lệnh điều khiển: if/else if/else
- Các vòng lặp: while, for
- In ra màn hình: println!
Tạo project bằng câu lệnh:
cargo new --bin rustmathBấm vào đây để xem thêm về cách tạo Rust project và dùng cargo.
Sửa file rustmath/src/main.rs
Đoạn code sau để kiểm tra số x có phải số chẵn không, in ra màn hình.
fn main() {Giải thích:
let x = 42;
if x % 2 == 0 {
println!("{} is even", x);
} else {
println!("{} is odd", x);
}
}
- Dùng hai dấu bằng ``==`` để kiểm tra xem giá trị vế trái và vế phải có bằng nhau không. Ở đây kiểm tra x chia cho 2 có dư 0 hay không (có chia hết không).
- Để in ra màn hình, dùng "macro": println! - có dấu ! chỉ rằng đây là một macro, macro là gì tạm thời để sau, giờ cứ biết làm thế để in ra màn hình.
- Trong khi gọi macro!(), dùng dấu ``{}`` để giữ chỗ cho giá trị sẽ được thay thế sau đó. Nội dung in ra nằm trong dấu nháy kép (double quotes): "{} is odd".
Thử làm bài Project Euler 1:
Tính tổng các số nhỏ hơn 1000 chia hết cho 3 hoặc chia hết cho 5.
Sunday 4 December 2016
[Ebook] Tài liệu học lập trình miễn phí
by
H
Tiêu chí:
- Miễn phí
- Chất
- Nhóm theo ngôn ngữ.
Bash 🤓
- LinuxCommand
- ABS (Advanced Bash Scripting)
- Tutorial
- Dive into Python
- The Hitchhiker’s Guide to Python!
- Automate the Boring Stuff with Python
- Invent Your Own Computer Games with Python
- Hacking Secret Ciphers with Python
- How to Think Like a Computer Scientist
- SICP Python version
- Learn Python the hard way
- More ebooks: http://pythonbooks.org/free-books/
- Poignant Ruby
- Learn Ruby the hard way
- Real world Haskell
C
- Modern C
- Miễn phí
- Chất
- Nhóm theo ngôn ngữ.
Bash 🤓
- LinuxCommand
- ABS (Advanced Bash Scripting)
Python 😘
- hướng dẫn Python Tiếng Việt- Tutorial
- Dive into Python
- The Hitchhiker’s Guide to Python!
- Automate the Boring Stuff with Python
- Invent Your Own Computer Games with Python
- Hacking Secret Ciphers with Python
- How to Think Like a Computer Scientist
- SICP Python version
- Learn Python the hard way
- More ebooks: http://pythonbooks.org/free-books/
Ruby 🙄
- Poignant Ruby
- Learn Ruby the hard way Haskell 😏
- Learn You a Haskell- Real world Haskell
C
- Modern C
Subscribe to:
Posts (Atom)