Saturday, 31 March 2012

[CCGU] cd,pwd - di chuyển loanh quanh

vì một thế giới không bao giờ đứng yên ;)
Title phụ 2: cd, pwd - biết mình ở đứng đâu trong cuộc đời này ^^

Bắt đầu 1 quá trình tìm hiểu câu lệnh, con chuột bạch đầu tiên là lệnh cd

1. cd - Change Directory
famihug@hvn:~$ whatis cd
cd: nothing appropriate.
famihug@hvn:~$ man cd
No manual entry for cd
famihug@hvn:~$ which cd
famihug@hvn:~$ whereis cd
cd:
đúng như các cụ chém, vạn sự khởi đầu nan :D sử dụng "các câu lệnh tìm hiểu câu lệnh" mà kết quả toàn trả về không thấy không có. Tạm dừng nói về cd, hãy trả lời câu hỏi : tại sao các câu lệnh trả về kết quả như thế?

test


lamdt@lamdt-lap:~$ man cd
No manual entry for cd
lamdt@lamdt-lap:~$

[CCGU] Các câu lệnh để tìm hiểu câu lệnh

29-04-2012:update : apropos

Để dừng bạn thôi hỏi những câu như: ls, cd là cái gì, nó viết tắt của từ gì không thì bố ai mà nhớ được, nó đặt ở đâu... (bạn có 1 lợi thế cực lớn nếu biết Tiếng Anh, bởi các tên các chương trình thường là viết tắt của một hay vài từ tiếng anh nào đó)


 Hãy hỏi những gì muốn biết với cái terminal của bạn :

0. apropos - tìm kiếm công cụ
famihug@hvn:/home/famihug%whatis apropos                                   
apropos (1)          - search the manual page names and descriptions
Bạn cần thực hiện một công việc nào đó, có thể hệ điều hành bạn đang dùng có thể giúp nhưng bạn không biết tool mình cần tên là gì - apropos sẽ làm việc đó.
apropos tìm kiếm trong các trang hướng dẫn hay đoạn mô tả phần mềm từ khóa bạn yêu cầu. Ví dụ muốn tìm công cụ liên quan đến network:
famihug@hvn:/home/famihug%apropos network                                  
interfaces (5)       - network interface configuration for ifup and ifdown
aseqnet (1)          - ALSA sequencer connectors over network
avahi-autoipd (8)    - IPv4LL network address configuration daemon
byteorder (3)        - convert values between host and network byte order
ctstat (8)           - unified linux network statistics
dhclient-script (8)  - DHCP client network configuration script
endhostent (3)       - get network host entry
...

Friday, 30 March 2012

[CCGU] CLI căn bản

CLI là gì?

Command-line interface.
Interface là gì? tớ sẽ giải thích 1 cách dễ hiểu chứ không đảm bảo đúng hay chính xác :D
Interface là cách các đối tượng giao tiếp với nhau.Ở đây ta xét 1 đối tượng là người, 1 đối tượng là chương trình máy tính.

Có 2 loại Interface thường được nhắc đến là GUI và CLI (để ý chữ I ở cuối).
GUI = graphical user interface : người dùng và chương trình giao tiếp với nhau thông qua các nút bấm, hình ảnh ... Tiêu biểu nếu người dùng đồng ý thì bấm vào nút OK, không thì bấm nút Cancel


CLI = command-line interface: người dùng và chương trình giao tiếp với nhau thông qua các dòng lệnh (text). VD: nếu người dùng đồng ý thì gõ vào phím y rồi nhấn enter, không thì bấm phím n rồi gõ Enter

[CCGU] Chuẩn bị

Để theo loạt bài viết này, bạn cần chuẩn bị những điều dưới đây:

- Tính kiên trì, theo đến cùng các bài viết.
- Tinh thần tốt, đừng nhìn thấy toàn chữ mà hoảng! thật ra toàn những thứ rất đơn giản.
- Một cái hệ điều hành nhân Linux (Ubuntu, Fedora, Mint... tùy!). Nếu bạn muốn dùng trên Windows thì hãy tự làm khó mình với MinWG.
- Tiếng Anh hoặc ít nhất là bạn biết tra từ điển. Bởi loạt bài viết này không thể dạy bạn tất cả mọi thông tin về các công cụ, chúng tôi chỉ đưa ra những ví dụ thiết thực, muốn tìm hiểu thêm bạn phải tự đọc.
- Khả năng nói ra ý kiến của mình. Hãy comment những ý kiến của bạn, những suy nghĩ của bạn để chúng ta có thể cùng làm tốt hơn. Không hiểu ở đâu, hỏi ở đấy, cố đặt câu hỏi 1 cách dễ hiểu và chính xác.
- Sẵn sàng cùng chúng tôi viết bài cho "khóa học" này ;)

Sẵn sàng tất cả những điều trên rồi chúng ta sẽ bắt đầu!

Bài tiếp:
CLI căn bản - link sẽ update sau.

CCGU - cat cut grep uniq!

WHEN YOUR MIND MAKES LOVE WITH CLI


_________________**********_________________
DANH SÁCH BÀI VIẾT
---------------------------------------

UPDATE: Các bài viết sẽ được update, chỉnh sửa liên tục để có thể trở thành 1 tài liệu chuẩn :x 

Là gì?
1 ý tưởng - dự án tiếp theo của tớ :)) vẫn đều như vắt chanh.
Đọc là : xi xi di u - có nên đổi thành GUCC đọc là guxi không :))

Làm gì?
Viết 1 loạt các bài viết để "lê văn luyên" linux CLI. Nhìn xa hơn, có thể tổ chức thi thố, tự cấp chứng chỉ chơi bời  của  FAMILUG- chứng chỉ này rõ là đáng giá hơn bằng tin học A rồi :))

Slogan:
when your mind makes love with CLI :))

Ai thực hiện:
Trước mắt có HVN chịu trách nhiệm. Ai tham gia thì cứ post bài rồi đặt tag là CCGU là ok, không phải "xin phép" ! Hoan nghênh :x. Mọi bài viết gắn nhãn này thuộc bản quyền của FAMILUG, ghi kèm tên người viết.

Triết lý:
Với cái tên CCGU - "cat cut grep uniq" phần nào phản ánh các công cụ CLI cực phổ biến của Linux. Bạn có thể làm được cực nhiều việc với những công cụ đơn giản mà hiệu quả này. Không chỉ dừng lại ở 4 công cụ này, Project này sẽ giúp người tham gia có khả năng viết script Bash để phục vụ mục đích của mình, làm quen với các công cụ - ngôn ngữ như Sed, Awk, Bash
Nắm được các công cụ mạnh mẽ trên console, bạn có thể làm chủ mọi hệ điều hành nhân Linux.

Thuật ngữ:
CLI: command line interface - giao diện dòng lệnh, tòan là chữ mà không có hình ấy :D
Mấy từ kì lạ còn lại là tên các chương trình trên Linux :D

Tiềm năng mở rộng:
Nếu dự án phát triển tốt- tách thành 1 trang riêng, tạo công ăn việc làm "phát triển web" cho các dev mới vào nghề của FAMILUG. Nếu làm ăn không xong, góp phần chia sẻ kiến thức đến mọi người. Nhiều người tham gia - đào tạo những chuyên gia Linux, thành lập công ty blah blah ! không ai đánh thuế giấc mơ cả!


Thursday, 29 March 2012

Tiêm phòng chống SQL injection

Viết ngay kiểu quên, úp dết sau =))

1. Validate Input:
Dùng hàm để lọc input.
function sql_quote( $value ){
// kiem tra thiet lap trong file php.ini (bien ten la magic_quotes_gpc),
if( get_magic_quotes_gpc() ) //neu tra ve 1 -> tu la magic_quotes_gpc = ON
{
//để loại bỏ các dấu \
$value = stripslashes( $value );
}
//',",<,>,*,/,-,#,&
//check if this function exists : neu co ton tai thi PHP tu 5.0 tro len
if( function_exists( "mysql_real_escape_string" ) )
{
$value = mysql_real_escape_string( $value );
}
else
{ //for PHP version < 4.3.0 use addslashes
$value = addslashes( $value );
} //thoat ky tu : _ , % $value = str_replace("_","\_",$value);
$value = str_replace("%","\%",$value);
return $value;
}
?>


2. Dùng rewiteurl trong .htaccess để thay đổi url

3. Cắt ký tự nguy hiểm:(', \, "..)
Dùng trim();

4. Chặn thông báo lỗi:
- Thêm @ trước hàm dễ gây lỗi.
- error_reporting(0) ở đầu đoạn code php.

Wednesday, 28 March 2012

Vim autoclose

sau khi cài cái plugin autoclose.vim cho vim. Mỗi khi bạn bấm mở ngoặc, vim sẽ tự sinh dấu đóng ngoặc :x

Thường thì sau khi bấm { để mở block cho 1 hàm, bạn sẽ bấm enter, lên rồi k để lên, tab để nó vào đúng chỗ. Thay vì thế hãy bấm 2 lần phím {, mọi thứ đã sẵn sàng để viết :D


Nghe 1 bài nhạc hàng ngày

Gọi là nghe nhạc nhưng bạn có thể nghe bất cứ thứ gì. Từ truyện ma đến đoạn audio học ngôn ngữ...

Sẽ có các phương pháp xử lý sau:
1. Cài 1 chương trình / dùng điện thoại để báo thức đến giờ đấy thì phải nghe cái đấy.
2. Dùng cái đầu thần kì của bạn để nhớ đúng lúc ấy phải làm việc ấy =))
3. Dùng cron để hiện 1 thông báo là phải nghe cái đấy
4. Dùng cron để mở file nhạc đấy đúng giờ đấy. Mở "chúc bé ngủ ngon" lúc 9 h tối chẳng hạn :x

Tớ đã mần mò để làm cách số 4. Và cách này hòan tòan là dùng dòng lệnh. 2 phần mềm cần thiết để làm tut này là :
crontab : chắc máy nào cũng có sẵn
mpg123 : để play file mp3 trên console, không có thì cài
sudo apt-get install mpg123
Google thấy nói đến chương trình play nhưng ko thấy đâu để cài cả :D

BẮT ĐẦU:

Sunday, 18 March 2012

Something new...

Làm game bằng HTML5 =p~
http://webinsightlab.com/technology/15-best-html5-game-engines/

các CMS làm web nhanh. Luyên được 1 cái thì cứ 2 ngày đút túi 3-400 tiểu vặt cũng được :D
http://www.fiercecontentmanagement.com/story/drupal-joomla-and-wordpress-face-challenges-germany/2012-03-13

 PS: sorry, vừa đi khảo giá thì nó phải là 2-3 tr 1 cái đấy :))

Tìm địa chỉ các máy trong mạng

Để?

- Xem có những ai đang trong mạng của mình, làm gì đấy :))

Công cụ:

ping

nmap (không có thì cài), vài giây là xong

OS: Linux based (ai dùng Wins thì test tương tự nhé)
Tested on U10.10

Cách 1: broadcast rồi vào bảng arp xem có thằng nào trả lời.

Kết quả: không chắc là bạn có thể lấy hết ip của các máy trong mạng. Vì các máy dùng Windows thường để mặc định là không trả lời các lệnh broadcast.

Lệnh: ifconfig
xem Bcast  (broadcast)
ping đến địa chỉ broadcast:
ping -b 192.168.0.255
sau khi lệnh này kết thúc, gõ
arp -a
 và xem kết quả.

Cách 2: dùng nmap

Friday, 16 March 2012

Tấn công Man In The Middle - Phần 2

Phần 1: http://www.familug.com/2012/03/gioi-thieu-ve-cach-thuc-tan-cong-man-in.html

Phần trước tớ đã giới thiệu sơ qua về kiểu tấn công Man In The Middle (MITM).
Phần này, tớ sẽ mô tả cụ thể hơn (loại tấn công giả mạo ARP) để thấy hiệu-suất-cao của kiểu tấn công này mà tớ đã nói.

Thông thường kiến trúc trong mạng LAN được mô tả như thế này:


Máy của victim và attacker cùng cắm vào 1 switch, vậy làm thế nào để attacker có thể nằm vùng tại cầu nối giữa victim - server để capture được luồng dữ liệu trao đổi? Trong ví dụ mô phỏng ở phần trước của tớ (http://www.familug.com/2012/03/gioi-thieu-ve-cach-thuc-tan-cong-man-in.html) mới chỉ thực hiện trên local nên độ khái quát không cao, vì Wireshark chỉ capture các gói tin đi qua cổng mạng của máy mình. Việc giả mạo ARP sẽ giúp attacker sau khi kết nối được vào mạng LAN của victim có thể trở thành a-man-in-the-middle và sniff các gói tin.

Thursday, 15 March 2012

About contests

Thi thố,
trào lưu
...
hãy xem họ đang làm gì:
khi thấy ai cũng kéo nhau đi học ngôn ngữ này lập trình nọ thì dân tình cũng nô nức đi, học cho bằng bạn bằng bè => phong trào , trào lưu.
Không bàn đến việc hay hay dở nhưng nó cũng kéo các sv nhấc đít đi học thêm, không ở nhà quay gà tây và chơi game nữa :))

Thi thố (không phải thi cuối kỳ), kiếm 1 cái cuộc thi nào vào lĩnh vực bạn muốn và tham gia, có lẽ nó cũng giúp bạn có động lực hơn và đỡ nhàm chán. Lấy 1 cái chứng chỉ của Zend (cho PHP) hay SCJP cho Java chẳng hạn, cũng đáng lắm chứ :D
Chứng chỉ xịn này giúp bạn biết mình đang ở đâu, mà ghi vào CV thì sáng hơn cái bằng ĐH ấy chứ nhỉ ;))

Wednesday, 14 March 2012

Chơi bời ASCII :))

đẹpko :))


Tấn công Man In The Middle

Man In The Middle (MITM).

Phần 2: http://www.familug.com/2012/03/tan-cong-man-in-middle-phan-2.html

Kẻ tấn công MITM (attacker) sẽ nằm vùng trên đường kết nối (mạng LAN) nữa nạn nhân (victim) và server để nghe trộm (sniff) các gói tin được gửi - nhận (reques - reply). Minh họa như hình sau:



Kiểu tấn công MITM có hiệu suất cao bởi vì giao thức HTTP và Data Tranfer truyền tải dữ liệu theo chuẩn ASCII (http://vi.wikipedia.org/wiki/ASCII). Hay ngay cả các giao thức bảo mật như SSL hay HTTPS đều có thể bị nghe trộm. Khi bị tấn công, cả victim và server đều không biết dữ liệu trao đổi giữa họ sẽ đi qua máy của attacker. Do vậy attacker không chỉ đọc được cuộc trò chuyện này mà còn có thể thay đổi được nội dung của nó.
Có các kiểu tấn công MITM:
+ ARP Poison Routing.
+ Giả danh DNS.
+ Chiếm HTTP Session.
+ Giả mạo SSL..

Monday, 12 March 2012

Debugger và giấc mơ coder

Trước hết, chỉ là giật tít thôi, ko cần vác gạch ra ném :))

Trong những tay "lập trình" quanh đây, hầu như việc dùng 1 debugger là 1 điều khá xa lạ. Ngay cả bản thân tớ cũng chưa bao giờ dùng debugger cho đến khi đi làm - mặc dù cũng biết là nó tồn tại. Câu hỏi là debugger có thật sự cần thiết không, không có có chết không, và sao hầu như "những người quanh ta" lại không dùng nó.
Dưới đây là vài câu trả lời tớ có thể đưa ra:
- Debugger là 1 công cụ hỗ trợ việc lập trình - cụ thể là việc tìm lỗi. Bởi thế không dùng nó cũng chẳng chết ai. Tớ đã viết hơn chục nghìn dòng code mà chả dùng debugger lấy 1 lần :D
- Thấy "nhiều người" không dùng nó: bởi 2 lí do chính 
không ai dạy - quen với kiểu print ra để xem giá trị  và những gì các bạn làm quá nhỏ, khiến cho debugger thật sự không đóng vai trò lớn.
- Câu hỏi cuối: có cần/nên dùng không? tất nhiên là nên dùng và thành thạo. Bởi thay vì đi print từng dòng ra để xem giá trị thì debugger sẽ giúp bạn làm điều đó. Nếu từng lập trình, bạn hẳn đã từng thử tính: khi i = 1, a[i] = ..., i = 2, a[2] = ... hay thậm chí in nó ra kiểm tra. debugger sẽ giúp bạn làm điều đó nhanh hơn rất nhiều lần.

Hầu hết các debugger có chức năng cơ bản sau:
1. Đặt breakpoint - đánh dấu dòng lệnh mà bạn muốn chương trình dừng lại để kiểm tra các giá trị.
2. Step into, step over - "chạy" vào từng hàm, qua từng dòng lệnh. Dùng 2,3 ngày là thành thạo ngay.

Các debugger phổ biến:
Với C: gdb
Với Java: các IDE phổ biến đều có debugger của riêng mình
PHP:..
Python:...
nói chung là ASM thì không biết chứ ngôn ngữ nào mà chả có debugger :))

cuối cùng, giấc mơ coder là gì???
là lương tăng và viết chương trình không có lỗi :))

Sunday, 4 March 2012

Chia sẻ code OOP

Như các môn học cần code khác,môn này mọi người cũng phải code bằng C++ để đi thi nên việc gõ code vẫn nên làm :D

Tớ viết bài này lên để lấy chỗ mọi người chia sẻ các bài tập THẦY GIÁO CỦA CHÚNG MÌNH cho. Cũng chẳng nhiều nhặn gì, mỗi tuần 1,2 bài, gõ vào cho chạy là được. Để sao đến lúc đi thi, ai cũng được điểm cao , hoặc giả là xấu nhất thì cũng đủ qua. Khuyến khích tất cả mọi người tham gia, code post lên phải chạy được.

Có thể paste lên pastebin.com hoặc dùng git , cái này tùy. Tớ sẽ sưu tập lại và đưa lên kho git của FAMILUG.

Có gì thắc mắc, cứ thoải mái google rồi hỏi !
Gud week :))


Update danh sách bài tập:
Bài 1: Class Complex (số phức)
hainam: http://pastebin.com/BP00m7Tk

Bài 2: Class String
hainam: http://pastebin.com/2UZq98ky

Bài 3: Class Vector:
hainam: http://pastebin.com/fuFwmQhx