New FAMILUG

The PyMiers

Monday, 30 June 2014

Project Euler went offline

NOTICE
On Sunday 15 June 2014 it was discovered that Project Euler had been hacked and a decision was made to take the website offline. Project Euler has existed since 2001 and after thirteen years of it being carefully nurtured to become what it has become today we hope you understand that this decision was not made lightly. No one feels this sadness more than the team.
As the strength and priority of Project Euler is the rich and challenging problem set it provides then we are pleased to be able to allow the problems to remain accessible. However, please note that full functionality of the website, including the ability to check answers, register, and login to existing accounts, remains disabled. Over time certain features may be reinstated, but currently there is no definite time frame which can be stated. In addition no new problems are likely to appear until the website is back up and running again.

Friday, 27 June 2014

Sức khỏe... chuyện muôn thuở

PS1: cám ơn bạn +Nguyen Ha đã góp phần giữ gìn sự giàu đẹp của Tiếng Việt.
PS2: vẫn sai và sửa lại :v 


Là vốn quý gía nhất của mỗi con người, đầu xuân năm mới, người ta vẫn chúc nhau sức khoẻ đầu tiên.
Là điều mà không ai muốn nhắc tới, rồi cũng một ngày phải nhắc tới.
Là thứ mà ai cũng muốn có nhưng ít ai muốn luyện tập, nó chả khác gì sinh viên lười học mà vẫn muốn điểm cao.

Và là cái giá đắt phải trả cho những ai đam mê, một thứ gì. Những người chơi violin nhiều (nhiều ở đây là rất nhiều, là có thể tới 10.000 tiếng) - có thể gây hỏng tai, không lạ, bởi âm thanh phát ra từ violin rất lớn. Những người thành tài, sẽ luôn phải mang theo tật.

Khi các trường đại học ngày càng mọc lên như nấm, và trường quái nào cũng có khoa công nghệ thông tin. Thế nhưng có lẽ, chả có trường nào dạy sinh viên môn sức khoẻ trước khi dạy IT cả (đấy là tôi đoán thế, vì tôi học trường đại học công nghệ hàng đầu Việt Nam và họ chả dạy gì :3).

Những chuyên gia tôi quen, những người đã trong ngành hơn 10000 giờ thực thụ, họ đều mắc phải 1 trong các căn bệnh không mấy dễ chịu. Ngồi máy tính nhiều bạn sẽ mắc những căn bệnh sau (và có thể gọi là "bệnh nghề nghiệp") - và nó phổ biến cho dân văn phòng, những người cả ngày ngồi máy tính.

1. Xương khớp

Thursday, 26 June 2014

[bash] are you REALLY a bash user?

Nếu ngày nào cái màn hình trước mặt bạn cũng là cái terminal,
hẳn  69% bạn là một người biết dùng terminal.
Và nếu bạn dùng Ubuntu hay 96% các hệ điều hành Linux-based, thì bạn đang dùng bash trong cái terminal đó.

Gõ thử xem mình có phải đang dùng bash không:
$ echo $BASH_VERSION
4.3.18(1)-release
Nếu câu trả lời là có (như trên ^) thì đúng là bạn đang dùng bash rồi.

Vậy dùng bash thế nào cho nó đúng điệu :3
Hãy tận dụng những tính năng của nó.

1. for; while
Bash giúp giải quyết các công việc lặp đi lặp lại bằng một vòng lặp, muốn ping 10 ip từ 192.168.1.2 -> 192.168.1.11?
đơn giản:
$ for i in {2..11}; do ping -w1 -c1 192.168.1.$i; done

Wednesday, 25 June 2014

[cmd] find - tìm thấy mà không xoá được, why?

Đọc giả cuteanlame có một directory chứa các file sau:
# find /tmp/findtest -name '*-*' -or -name '*_*'
/tmp/findtest/meomeo_1
/tmp/findtest/meomeo_2
/tmp/findtest/gaugau-3
/tmp/findtest/meomeo_3
/tmp/findtest/gaugau-2
/tmp/findtest/gaugau-1
Bạn ấy muốn xoá các file có dấu "-" và dấu "_" trong tên, nên bạn làm thế này:
# find /tmp/findtest -name '*-*' -or -name '*_*' -delete
Nếu nhìn vào câu lệnh trên bạn đọc chính xác được lệnh find sẽ làm gì thì bạn không cần đọc tiếp bài này nữa. Và cũng xin chúc mừng vì bạn còn có thể dùng lệnh ``find`` tốt hơn rất nhiều người, thậm chí cả những superuser với kinh nghiệm dùng Linux 20 năm.

Monday, 23 June 2014

trello.com

Trong quá trình đi tìm các web app để quản lý thời gian, tớ đã sử dụng qua khá nhiều phần mềm quản lý project với mong muốn có 1 tool để quản lý các "project" cá nhân.
Sau youtrack, redmine, asana, agile zen, github/bitbucket issues, planbox ... thì tớ dừng chuyến phiêu lưu ấy lại tại sân bay "trello.com".

trello có một giao diện đơn giản, với các board (kanban) và trong board chia làm nhiều cột 





Giao diện thân thiện, cách dùng đơn giản, quảng cáo vậy thôi, dùng hay không thì tuỳ :3

https://trello.com/

Bỏ Facebook đi và N trang web...

Nếu ban đã đọc được dòng chữ đó đâu.đây vài ngày.qua, hẳn bạn sẽ nghĩ bài viết nói đúng ... nhưng chẳng có gì thay đổi.

Trong list N website ấy, có quora, có stackoverflow...

Và 5 phút trước tôi đã gỡ tất cả đống phần mềm ấy khỏi điện thoại.
Thứ quý giá nhất bạn có đó là thời gian. Và khi bạn đánh đổi nó lấy bất cứ điều gì thì 69% là bạn đang lỗ.
Đọc quora nhiều 96% là tốt hơn chơi FB, nhưng thứ gì đốt quá nhiều thời gian của bạn trong khi bạn có thể làm việc BẠN THẤY có ích hơn ... thì đều như nhau cả.

Tất nhiên không ai có thể sống cả ngày bằng lý trí được, nhưng hãy biết quý trọng thời gian của mình. Dành 15 phút và thử nghĩ xem nếu 7 ngày nữa là sinh nhật tuổi 40 của bạn...
Sẽ đau đầu lắm đấy!

Sunday, 22 June 2014

[Review] Learn python the hard way

Một câu nói rất hay mà tớ lượm được trong " Learn python the hard way":

Programming as a profession is only moderately interesting. It can be a good job, but if you want to make about the same money and be happier you could actually just go run a fast food joint. You are much better off using code as your secret weapon in another profession.
                                                                                            -- Red Shaw --

Chuyện bên lề.
Cuộc sống đầy dãy những thay đổi và điểm ngoặt!
Và một trong những điểm ngoặt lớn nhất trong cuộc đời tớ là khi tớ đặt chân vào thế giới của những programmer, và chính xác hơn đó là thời điểm tớ bắt đầu biết đến python.
Python giúp tớ tiếp cận với một thứ gọi là 'tư duy logic'
Python giúp tớ ...bla..bla
Và bây giờ, tớ có cảm giác.. tốt lên
Đầu tiên tớ học python tại đây:
https://docs.python.org/2/tutorial/index.html

Haizz, thật buồn khi phải nói rằng. một tháng đầu tiên, chắc tớ chỉ biết print string, và cao cấp hơn là viết được chương trình tính 100!
Vì sao lại vậy?
Lí do có lẽ do tớ lười + đầu đất ... bla...bla...
Và một lý do quan trọng hơn là :
https://docs.python.org/2/tutorial/index.html

Friday, 20 June 2014

[CLI] less - view file trên terminal


root@hvn-do-workspace:~# whatis less
less (1)             - opposite of more
root@hvn-do-workspace:~# whatis more
more (1)             - file perusal filter for crt viewing
Các UNIX developer khá là vui tính trong chuyện trả lời "whatis". Một câu trả lời cũng vui tính không kém khi hỏi :
# whatis git
git (1)              - the stupid content tracker
Khái niệm
Cơ bản thì less là 1 chương trình để view file text trên terminal. ``less`` chỉ để view chứ không edit file, các UNIX-like OSes đều cài sẵn ``vi`` và ``less``. So với ``vi``, khi xem các file lớn, ``less`` không cần phải đọc toàn bộ input file trước khi start (``vi`` sẽ đọc toàn bộ và nhét vào RAM) vì vậy less sẽ start nhanh hơn.

``less`` là một phiên bản cải tiến của ``more``, đây là một kiểu chơi chữ trong tiếng Anh:
less is more

Có 2 cách dùng ``less`` cơ bản:

1. less filename
đọc input file tên là filename 
Ví dụ:
less /etc/passwd 
 2. some commands | less
đọc qua pipeline (|) output của câu lệnh trước nó
Ví dụ:
ls -la | less (dùng khi output quá dài)
Các phím tắt
j : xuống
k : lên
space: xuống 1 màn hình
q: quit
/ tu_khoa: search down
? tu_khoa: search up
-N : hiển thị số dòng (bấm -N, enter)

Đọc thêm

Wednesday, 18 June 2014

tcpdump - lưu giữ mọi khoảnh khắc của network

thanhnguyen@thanhnguyen:~$ whatis tcpdump
tcpdump (8)          - dump traffic on a network
Có thể nói, tcpdump là một trong những lệnh hữu dụng nhất trong quản trị mạng.

Tại sao?
Có những lúc bạn thắc mắc về các vấn đề kết nối mạng, hoặc thỉnh thoảng không biết tại sao một server không RESPONSE một ping request của bạn...
Trong những trường hợp như thế, tcpdump là một tool vô cùng hữu ích đối với bạn, nó có khả năng capturing packets khá mạnh mẽ. Nó hoạt động trên network layer và có thể capture tất cả các packets ra vào máy tính. Ngoài ra, có thể sử dụng tcpdump để capture và save các packets tới một file nào đó và phân tích sau.

Sau đây, là một số option phổ biến khi sử dụng tcpdump command.

-i option
Được sử dụng để xác định interface. tcpdump capture các packets gửi tới và truyền đi qua một interface cụ thể. => Chọn Interface để tcpdump capture các packet

find - tìm hoài mà không thấy

người hãy nói
vì sao em không tìm được nó là tại làm sao:
root@elasticsearch-1:~# ls -l /var/run/crond.pid ; find /var/run -name 'cron*' | wc -l
-rw-r--r-- 1 root root 6 Jun 11 12:08 /var/run/crond.pid
0

Câu lệnh trên: khi dùng lệnh ls cho thấy file  /var/run/crond.pid có tồn tại, nhưng khi dùng lệnh find thì tìm không ra.
Hacker +Lam Tung  đã tìm ra một giải pháp (thêm dấu / ở cuối path):

root@elasticsearch-1:~# find /var/run/ -name 'crond*'
/var/run/crond.reboot
/var/run/crond.pid

Bài viết thực hiện trên:
$ lsb_release -a; find --version | grep find
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.4 LTS
Release:        12.04
Codename:       precise
find (GNU findutils) 4.4.2

Vậy tại sao find lại không tìm được, sau một hồi điều tra, thám tử cô nan đã tìm ra:

[Haskell] Haskeller, not hacker

Haskell /ˈhæskəl/
haskeller là từ chỉ những người dùng ngôn ngữ Haskell
hacker /ˈhakə/
Cho thêm từ hacker và để mọi người nhớ cách đọc của haskell

Haskell là gì?


Định nghĩa copy nguyên văn từ homepage haskell.org

Haskell is a computer programming language. In particular, it is a polymorphically statically typed, lazy, purely functional language, quite different from most other programming languages. The language is named for Haskell Brooks Curry, whose work in mathematical logic serves as a foundation for functional languages. Haskell is based on the lambda calculus, hence the lambda we use as a logo.

Như những gì họ chọn, 4 đặc tính nổi bật của Haskell gồm:
  1. Polymorphically
  2. Statically typed
  3. Lazy
  4. Purely functional

Tuesday, 17 June 2014

Chơi với docker, fail lần 1

Như phần tiếp theo của bài viết này
http://www.familug.org/2014/03/vm-tu-virtualbox-en-docker.html

hôm nay mình xin kể về chuyện chơi cùng Docker, và tại sao lại thất bại, tại sao lại tạm thời chia tay chỉ ngay sau nụ hôn đầu.

Tin đồn rằng vài ngày trước, một tổ chức nguy hiểm có tên xưa cũ là dotCloud đã chính thức thả  ra (release) một yêu nữ tên là Docker - một cái tên nghe là nghĩ đến sắt thép và không được mỹ miều cho lắm (http://blog.docker.com/2014/06/its-here-docker-1-0/).

Và không gì hơn nếu thiên thời, địa lợi, nhân hoà, chính lúc ấy mình cần cài một cái máy ảo để testing vài thứ. KVM không có trên OS X, Virtualbox gần như là lựa chọn duy nhất dẫu không mấy mặn mà. Vậy là Docker được mang ra nghịch.

Cài đặt:
Không có gì đặc biệt hay khó khăn, cứ theo tut mà cài  https://docs.docker.com/installation

Sau khi cài xong thì chạy thôi, dễ như ăn kẹo cao su :3
$ docker run ubuntu:12.04 /bin/echo 'hello thon'
hello thon
thật ra nó sẽ phải download image ubuntu 12.04 một lúc, xong mới chạy được như trên. Việc sử dụng không có gì phức tạp, cứ như tut mà làm :3 https://docs.docker.com/userguide/dockerizing

Để tương tác trực tiếp, chạy lệnh "run" với option '-i'

Thursday, 12 June 2014

Ý tưởng - Cơ hội

Là những thứ nếu bạn không nắm bắt, có khi, sẽ phải hối hận cả đời.

Có một người đàn ông kể rằng:
trước kia ông từng có nhiều ý tưởng, chúng có vể hơi bất khả thi, khó thực  hiện, hoặc
đôi khi vì ông không dám theo đuổi thực hiện nó. Rổi 3 năm sau, ông ta thấy một thằng nào đó, ôm cái ý tưởng đấy cùng với hàng triệu đô.

Tất nhiên cái từ "có một người đàn ông" không đủ thuyết phục để làm 1 câu chuyện nghe như bịa trở thành có phần giống thật, nhưng đã bao giờ bạn trong hoàn cảnh tương tự?

Nếu nảy ra 1 ý tưởng, hãy ghi nó lại ở nơi mà bạn biết mình sẽ tìm thấy nó ở đấy,
hay mang đi tặng làm "quà" cho bè bạn,
cũng có thể gồng mình lêntheo đuổi nó.

Cơ hội chỉ đến một vài lần trong đời, hãy nắm lấy nó.

Nói nhảm trước thềm worldcup :3

Monday, 9 June 2014

[network] ping - pong

Vô tình hôm nay hàm "command of today" của tớ trả về kết quả cho lệnh ping, và nó đặt ngay câu hỏi cho tớ rằng "ping là gì?", có chắc bạn sẽ trả lời đúng như những gì lệnh whatis trả về?

$ whatis ping
ping (8)             - send ICMP ECHO_REQUEST to network hosts

Bài viết thực hiện trên:
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.4 LTS
Release:        12.04
Codename:       precise
Hãy nhìn thật kỹ và phân tích từng dòng output:

$ping dantri.com -c1
PING dantri.com (222.255.27.51) 56(84) bytes of data.
64 bytes from static.vdc.vn (222.255.27.51): icmp_req=1 ttl=55 time=251 ms

--- dantri.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 251.466/251.466/251.466/0.000 ms

-c1 là option nói rằng chỉ gửi 1 ICMP ECHO_REQUEST duy nhất, nếu không có option này ping sẽ gửi lần lượt, liên tục cho đến khi nó nhận được SIGINT (user bấm Ctrl C)

Dòng output đầu tiên

PING dantri.com (222.255.27.51) 56(84) bytes of data.

Sunday, 8 June 2014

Giới thiệu và hướng dẫn sử dụng cơ bản iptables (Firewall)

1. iptables là gì?

thanhnt@Thanhnt:~$ whatis iptables
iptables (8) - administration tool for IPv4 packet filtering and NAT
Trước đây, gói firewall/NAT được sử dụng phổ biến trên linux là ipchans, dần dần bị thay thế dó có nhiều bug và thiếu tính năng, iptables ra đời.

So với ipchains, iptables có những ưu điểm vượt trội như:
  • Tích hợp cao với linux kernel
  • Có khả năng phân tích packet hiệu quả
  • Filter packet được dựa trên các MAC address và các giá trị của flags trong TCP header
  • Hệ thống log có các tùy chọn phù hợp, dựa trên mức độ và chi tiết reports
  • Translation địa chỉ mạng tốt hơn
  • Hỗ trợ tích hợp với các web proxy programs
  • Có khả năng ngăn chặn một số cơ chế tấn công theo kiểu DoS
...............

2. Một số lệnh cơ bản khi làm việc với iptables

[MacOSX] Khám phá Mac OS X (phần 1)

UPDATE 2017: bài viết này viết khi tác giả lần đầu dùng OSX, bạn nên dùng Brew thay vì MacPorts https://brew.sh/

Trăm nghe không bằng một thấy
trăm thấy không bằng một sờ

hãy cùng đi khám phá Mac OS X để trở thành 1 normal stupid user của hệ điều hành này.

Bài viết thừa nhận người đọc là 1 Linux / UNIX user.

Xách khoai lên và đi!

Trước tiên, bạn cần biết rằng Mac OS X là 1 variant của BSD, nó cũng là 1 UNIX-like OS.

Kiểm tra kernel version
$ uname -a
Darwin VietHungs-MacBook-Pro.local 12.5.0 Darwin Kernel Version 12.5.0: Mon Jul 29 16:33:49 PDT 2013; root:xnu-2050.48.11~1/RELEASE_X86_64 x86_64
Kiểm tra software version
$ sw_vers
ProductName:    Mac OS X
ProductVersion:    10.8.5
BuildVersion:    12F37
http://unix.stackexchange.com/questions/582/how-can-i-tell-what-version-of-os-x-im-on-from-the-command-line

Xem model identifier của máy

Mỗi dòng máy MacBook có một model identifier riêng (mà trong các bài hướng dẫn, người ta thường dùng tên này chứ không phải là MacBook Air mid 2013 blah blah).

Để xem model identifier:
Bấm vào quả táo góc trên, trái > About this Mac > More Info ... nếu bạn không thấy Model Identifier ở đâu > System report nếu vẫn chưa thấy > Ở đây sẽ nhìn thấy các thông tin về máy, phần cứng ...

VD:

Model Name:    MacBook Pro
Model Identifier:    MacBookPro10,1

Test trên OS X 10.9.4

Cài đặt phần mềm
Sau khi cài đặt xong thì tất cả ấn tượng chỉ có đẹp và lung linh, nhưng để làm việc được thì việc cài đặt cũng gian nan không ít.

Là 1 python programmer, sysadmin, linux cute user tất cả những gì cần để tớ có thể làm việc:
  1. vim
  2. git, tig
  3. bash
  4. pip/virtualenv + python 2.7
  5. irssi (IRC client)
  6. web browser
  7. Email client
  8. XMPP (Gtalk) chat client
  9. Gõ tiếng Việt 

1. vim
$ vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled May 15 2013 15:38:58)
Compiled by root@apple.com

Cài sẵn, chỉ cần config là dùng được.