Showing posts with label Vietnamese. Show all posts
Showing posts with label Vietnamese. Show all posts

Sunday, May 03, 2009

JavaScript gotcha Overloading

Gotcha đơn giản là "got ya" , nghĩa là "Tóm được rồi", như khi bạn bắt được ai đó trong 1 trò chơi. Còn trong lập trình (programming, in other words "thảo chương") thì Gotcha được dùng với nghĩa tương tự: 1 feature ngoài mong đợi (unexpected) , thậm chí đi ngoài cả specs, mặc dù thường không được coi là bug.

Thường các gotcha lập trình này cần phải có nhiều kinh nghiệm mới phát hiện được (hoặc nhờ đọc bài viết của người có kinh nghiệm, hehe) . Nếu bạn đã từng trải qua hàng đống giờ dò lỗi (debug) vì 1 gotcha nào đó, thì hẳn sẽ rủa "mấy tay nào đó" làm cái chức năng ngớ ngẩn làm mất bao nhiêu công sức của mình. Do đó nếu có thời gian cũng nên xem thử các gotcha liên quan đến công việc của mình, phòng khi gặp trường hợp như trên.


JavaScript thì theo tôi biết có khoảng 15 gotcha dễ gặp, và overloading sẽ là gotcha đầu tiên trình bày ở đây.

(to be cont)

Sunday, January 11, 2009

ThunderBird Gmail IMAP

+ Trước tiên đăng nhập vào web mail.google.com, bật chức năng IMAP :

- Settings -> Forwarding and POP/IMAP -> IMAP access -> Status: Enable IMAP


+ Tạo account mới trong ThunderBird với tài khoản Gmail :

- Tools -> Account Settings -> Add Account -> Email account -> Next : nhập tài khoản mail Google (ví dụ: username@gmail.com )


+ Chọn phương thức lấy thư, server lấy thư, server gởi thư:

- Next : type of incoming server -> IMAP ; Incoming server -> imap.gmail.com ; Outgoing server -> smtp.gmail.com


+ Chọn tên hiển thị trong thư gởi đi và thư nhận : để đơn giản nên điền chính tài khoản mail Google

- Next : Incoming User Name: username@gmail.com , Outgoing User Name: username@gmail.com


+ Chọn tên đại diện cho tài khoản trong Thunder Bird:

- Next -> AccountName : "gì cũng được :) " -> Next -> Finish !


+ Thiết lập trong ThunderBird (Account Settings), phần máy chủ nhận (Server Setting) :

- Server Settings -> Port : 993.
- Server Settings -> Security Settings -> Use secure connection -> SSL .


+ Thiết lập trong ThunderBird (Account Settings), phần máy chủ gởi (Outgoing server SMTP) :

- Chọn tài khoản tương ứng (thường có chữ Default) -> Edit -> Server Name : smtp.gmail.com ; Port : 587 (hoặc 25 ) ; User name and password : username@gmail.com (nên điền đủ cả phần @) ; Use secure connection : TLS, if available


+ OK, OK , thiết lập cơ bản vậy là xong ! Bây giờ có thể thử get mail và send mail :-)


Còn phần Recommended Settings sẽ ở 1 post sau :-)

Have fun,




Tuesday, December 23, 2008

JavaCard quick notes

Những ai đã biết đến Java thì chắc hẳn cũng biết Sun đã phân Java ra làm 3 nền (platform) chính: Standard (Java SE), Enterprise (Java EE) và Micro (Java ME) . Tuy nhiên hiện nay có 2 hướng phát triển của Java có thể vươn ra thành 1 platform mới, đó là JavaCard và JavaFX .

Về JavaFX thì đã có giới thiệu sơ trong bài RIA , tuy nhiên triển vọng của JavaFX không khả quan lắm, khi 2 đối thủ cạnh tranh là Silverlight và Flex/OpenLaszlo đã vượt lên hẳn.

Còn JavaCard vẫn là 1 lĩnh vực mới mẻ ở VN , tuy nhiên tiềm năng rất lớn, vì có thể xây dựng hệ thống bán lẻ, hệ thống máy tự động (kiểu ATM cho ngân hàng), cũng như chính phủ điện tử. FYI, công ty lợi nhuận lớn nhất ở Hoa Kỳ năm ngoái là, không phải Microsoft vì MS chỉ đứng khoảng hạng 10, chính là WalMart , hệ thống bán lẻ giá rẻ toàn nước Mỹ. Bây giờ một số công ty VN bắt đầu tính đến thị trường này, và nước ngoài cũng có công ty ngấp nghé nhảy vào làm, vì thế JavaCard có tiềm năng khó lường.


Xin đưa lên vài bài dịch của bạn Trịnh Quốc Hùng để các bạn hiểu hơn về JavaCard .



=== Cài đặt plugin JCOP (3.1) cho Eclipse ===

Xin đặt vài dòng giới thiệu ngắn ngủi, JCOP - JavaCard OpenPlatform - khởi nguồn do IBM nghiên cứu - với tên gốc là JavaCard - là một bộ khung lập trình để phát triển cho công nghệ các loại thẻ thông minh (smart card), cho phép lập trình trên các loại thẻ có chip xử lý nhỏ mà ta đã thấy ứng dụng của chúng trong thực tế ngày nay: sim điện thoại, thẻ ngân hàng, thẻ nhân viên thông minh...
Nhưng sau năm 2007, IBM ngừng đầu tư và chuyển giao công nghệ cho hãng NXP Semiconductors - một trong những tập đoàn hàng đầu thế giới về công nghệ thẻ bao gồm cả thẻ "không tiếp xúc" (contactless). Từ đó, công cụ này có tên mới là JCOP với các version phát triển 1.0, 2.1 , 3.1, 4.1... Ngày nay, công cụ này không còn được tìm thấy trên mạng, mà nó chỉ được chuyền tay qua các thành viên hoặc được cấp từ chính hãng NXP với điền kiện có đăng ký hợp đồng. Dưới đây mình sẽ liệt kê từng bước cài đặt JCOP 3.1 thành công:


Điều kiện :
- Eclipse IDE từ version 3.2 đến 3.3.1, dùng khác các version này không đảm bảo build CAP file thành công.
- JCOP plugin for Eclipse version 3.1.2 , tool này bạn phải tự tìm hoặc đăng ký với NXP Semiconductors.


Thực hiện:
- Sau khi giải nén và khởi động IDE Eclipse.
  1. Chọn menu Help > Software Updates > Find and Install
  2. Trong hộp thoại Install/Update, chọn Search for new features to install và chọn Next
  3. Chọn nút nhấn New Archived Site . . . và chỉ đường dẫn đến file n
  4. Chọn liên tiếp Open -> OK -> Finish
  5. IDE Eclipse sẽ đòi hỏi khởi động lại.
Sau khi khởi động thành công, trong mục New Project sẽ có thêm cấp project "JavaCard Project". Nếu thấy mục này, coi như bạn đã cài đặt thành công plugin JCOP for Eclipse.


=== Tạo một JavaCard Project ===

theo các bước sau
  1. Trong menu New -> Project...
  2. Tại hộp thoại New Project, chọn mục JavaCard Project và chọn Next.
  3. Tại hộp thoại Java Card Project, điền thông tin Project Name và chọn Next.
  4. Tại đây bạn đã có thể chọn Finish. Nhưng mình thì thích đi từng bước hơn.
  5. Nếu chọn Next, bạn sẽ có thể chọn các chuẩn configuration card xác định cho loại project của mình (Java Card 2.2.1, JavaCard 2.1.1, Global Platform, ...)
  6. Chọn Next, chọn mục "Create a JavaCard Application using ...", chọn item "Basic JavaCard applet".
  7. Điền thông tin Package và Applet ClassName. Package là gói chứa đựng các Applet. Applet là gói ứng dụng sẽ được cài lên các chip xử lý.
  8. Chọn Next, điền thông tin PackageAID và AppletAID. Đây là mã xử lý của Package và Applet trên chip. Lưu ý: PackageAID và AppletAID được đặt tên dưới dạng chữ số hexadecimal. Chiều dài cho cả Package AID và AppletAID là 5 bytes. (bạn có thể đọc thêm thông tin trong tài liệu "Smart Card Handbook" để nắm vững hơn)
  9. Chọn Finish.
  10. Tới đây là bước kiểm tra bản quyền của NXP, cử sổ activate code sẽ hiện cho bạn 3 action activate: Đăng ký 1 activate code mới, sử dụng thẻ được cung cấp bới NXP để activate hoặc nhập lại 1 activate code đã được cung cấp bới NXP. Nếu không qua được bước này thì coi như quá trình tìm hiểu JavaCard, cardlet buộc phải chấm dứt.

Xong 9 bước trên vẫn chưa xong, mục đích là phải build được file có đuôi là .cap mới có thể upload vào thẻ. Dưới đây là các bước để Run/Debug project, trong quá trình Run/Debug thành công, file .cap sẽ được build và đặt ở thư mục "../bin" của project.
  1. Trong menu Run -> Open Run/Debug Dialog..
  2. Tạo mới một "JavaCard Application" và đặt các cấu hình phù hợp cho project.
  3. Chọn Run/Debug.

Kết quả trong cửa sổ JCOP Shell:


chú ý dòng : "cm> upload -b 250 .... .cap" là đường dẫn đến file cap đã được build thành công.
"cm> install -i abababab01 -q C9#() abababab00 abababab01"
-
abababab00 là tên packageAID
-
abababab01 là tên appletAID

"cm> card-info" cho thông tin card sau khi upload applet thành công.

Đến đây xem như bạn đã có thể tạo được một card applet (.cap) . Công việc kế tiếp sẽ còn nhiều cam go, nhưng đến đây mình cần phải dừng lại để suy ngẫm, đúc kết lại những gì mình đã làm được. Làm ly cafe nào.

Saturday, December 20, 2008

GoF Design Patterns [3]

Tiếp tục với những design patterns dễ gặp:


Factory Method (creational)

Facade (structural)

Observer (behavioural)





(will be updated on demand)

Wednesday, December 17, 2008

GoF Design Patterns [2]

Hãy bắt đầu bằng những Design Pattern đơn giản và dễ gặp nhất :-) .




Singleton (creational)

Bridge (structural)

Command (behavioural)



(will be updated on demand)

Monday, December 15, 2008

Rich Internet Application

Nói đơn giản, Rich Internet applications là những ứng dụng (application) chạy trên mạng máy tính (cụ thể là Internet) mà có nhiều tính năng (rich features) như là ứng dụng chạy stand-alone trên máy không nối mạng (thường gọi là desktop application) .


=== Sự ra đời của RIA ===

Từ những ngày khởi thủy của những ứng dụng trên máy tính đều được thực hiện trên các máy tính lớn (mainframe). Các máy trạm chỉ làm nhiệm vụ hiển thị thông tin được xử lý từ các mainframe. Sau đó, tốc độ phát triển phần cứng cho các máy trạm (terminals - từ đây ta sẽ gọi chung là clients , mặc dù không đúng lắm ) nhanh như vũ bão. Từ tốc độ xử lý, hệ thống lưu trữ, bộ nhớ đến các thành phần khác dành cho clients đều phát triển rất nhanh.Như vậy, nếu chỉ dành toàn bộ việc tính tóan cho mainframe, và các clients chỉ để hiển thị thông tin sẽ vô cùng lãng phí tài nguyên.

Sau đó đến giai đoạn phát triển của các ứng dụng dạng client/server. Lại có vấn đề về hệ thống phân tán. Sẽ mất nhiều công sức cho việc cài đặt, bảo dưỡng các ứng dụng trên clients. Rồi việc đảm bảo các ứng dụng trên clients phải tương thích với các platforms khác nhau.

Vào những năm 90, internet ra đời. Việc sử dụng các web browsers cho các thin clients được áp dụng rất mạnh mẽ và hiệu quả. Nhưng (lại nhưng) kiểu lập trình page-to-page, khiến các nhà phát triển ứng dụng rất khó khăn, mệt mỏi và có rất nhiều hạn chế. Rồi các giao diện người dùng đơn điệu, không hiệu quả. Để cố gắng khắc phục những nhược điểm này, RIA đã ra đời. Vậy RIA có những khả năng gì?
(Về định nghĩa, xin xem lại ở đầu bài này)


=== Khả năng của RIA ===

Có khả năng tương tác với DOM (Document Object Model), xây dựng những ứng dụng chạy trên nhiều loại browsers và platforms.

Có khả năng sử dụng được các đối tượng trên server như web services hay những công nghệ tương tự khác, làm cho các ứng dụng trên clients có thể kết nối với server minh bạch hơn, dễ dung hơn.

Có khả năng làm việc “offline”. Dữ liệu được đưa về clients, xử lý tại clients, sau đó trả lạ cho server, tránh việc quá tải đường truyền cũng như hệ thống xử lý của server.


=== Các khuynh hướng xây dựng RIAs ===

Hiện nay có 4 trường phái xây dựng RIAs : đầu tiên là Ajax (Asynchronous Javascript and XML) : sử các thư viện JavaScript như Dojo, OpenRico, Backbase và Yahoo ToolKit, etc . Tiếp theo là RIAs trên nền Flash Player với các công cụ như Flex, OpenLaszlo ( đây là công cụ Open source). Thứ 3 là Windows Presentation Foundation (WPF) sử dụng .NET framework 3, trong đó quan trọng là Silverlight. Cuối cùng là JavaFX, kết hợp với các công cụ GUI như : AWT/Swing, và Eclipse RCP (SWT/JFace). Trong đó, dường như WPF và JavaFX nhắm vào ứng dụng desktop hơn là RIAs, mặc dù chúng đều có thể phát triển cho RIAs.


Ajax : là 1 thuật ngữ. Nó được các nhà phát triển kết hợp từ nhiều công cụ (HTML,DHTML, Javascript), công nghệ, để chuyển dữ liệu từ server tới client mà không phải reload lại page. Thực ra, trước đây IFrames đã làm được những công việc này. Gần đây, Java script sử dụng XMLHttpRequest để thay thế applets, Iframe.


Flash : Là nền tảng để triển khai RIAs. Trước đây, flash được phát triển nhằm mục đích phục vụ xây dựng animations. Sau nhiều thập kỷ thành công, tới nay có tới 97% (theo Adobe Flex 3 : Training from the Source) các web browsers có cài đặt flash. Adobe nhận ra rằng, với flash có thể làm nhiều hơn việc chỉ phát triển animations. Vì thế Flex đã ra đời.

OpenLaszlo : là phần mềm open source với nền tảng phát triển là Javascript và XML và chạy trên nền flash. Các ứng dụng cũng được biên dịch thành các files SWF. Vì là công cụ open source nên Laszlo cũng gắn bó chặt chẽ với LAMP (Linux, Apache, MySQL và PHP).

Flex : (vì Flex là cái chúng ta đang quan tâm nên mình tách riêng ra 1 mục) được xây dựng với nền tảng là Eclipse. Flex 1 là phần mềm open source. Tuy nhiên, vào giữa năm 2006, Adobe đã thương mại hóa Flex 2, với những tính năng và ưu điểm vượt trội bản Flex 1. Gần đây, Adobe đã chính thức phát hành Flex 3 có những phần đáng chú ý như : Adobe AIR, cải thiện đáng kể hiệu năng của những files SWF. Có khả năng tích hợp các middle layers ngay trong ứng dụng như : PHP, ColdFusion, WebService, Flex Data Server (hay còn gọi là FDS). Từ phiên bản Flex 2 trở đi, các ứng dụng sử dụng ActionScript 3 và chạy trên nền Flash Player 9. Flex cho miễn phí Flex SDK, cũng như AIR SDK, chỉ thương mại Flex Builder (với giá bản full của Flex Builder 3 Pro là 699$). Thêm nữa, Flex là sự kết hợp không thể tách rời của ngôn MXML và ActionScript.


Windows Presentation Foundation (WPF) : là 1 tập hợp các công cụ để xây dựng các ứng dụng RIAs trên nền Windows.

WPF : nền tảng để xây dựng và chạy RIAs.
XAML : ngôn ngữ xây dựng nên RIAs.
Visual C# : IDE để viết ra RIAs


Java (JavaFX) : thật đáng tiếc , cho đến nay thì JavaFX vẫn chưa làm được gì nhiều và có vẻ đang tụt lại đáng kể trong cuộc đua này. Hy vọng Sun dẹp bớt những tham vọng ngu ngốc và hướng tới cộng đồng hơn, khi đó mới có thể hy vọng cạnh tranh thị phần RIA được.



(tạm thế đã , sẽ định dạng bài viết lại sau)

Friday, December 12, 2008

Javascript Libraries Overview

Từ khi những thuật ngữ như AJAX hay RIA xuất hiện, Javascript đã được phát triển mạnh và hình thành các thư viện, hay cũng có thể gọi là các framework để hỗ trợ ứng dụng web.
Hiểu biết về JavaScript đã trở thành 1 skill không thể thiếu với những ai làm lập trình web, và cũng là 1 skill khá quan trọng của các hacker. Tuy nhiên với web-development hiện nay thì lời khuyên là bạn nên nắm vững 1 thư viện nào đó, hơn là đi tìm kiếm các đoạn script mẫu ngắn phục vụ cho 1 mục đích nào đó.

Các thư viện JS mã mở và hữu ích hiện nay có thể kể: jQuery, mooTools, Prototype + Scriptaculous, YUI + ExtJS , Dojo, ...

(ngoài ra còn 1 số công nghệ JS có cả phần server side như : qooxdoo, echo2, GWT, DWR, jMaki, Qcodo, AjaxCFC, ... )



Dưới đây là 1 slideshow so sánh cơ bản các thư viện JS trên để bạn có thể chọn cho mình 1 cái phù hợp :



Have fun :D !

Tuesday, November 25, 2008

Technical forum structure

Nhân thấy các bạn bên forum của CLB tin học khoa CSE của trường ĐHBK HCM tranh luận về việc định hướng và tái cấu trúc forum, tớ thử nghĩ ra cấu trúc cho 1 forum định hướng kỹ thuật để thu hút được nhiều người giỏi tham gia.


Tuy nhiên chưa kịp post lên forum đó thì tớ đã bị "ban" nick vì "có quá nhiều sense of humour", đến nỗi vài anh bạn không-có-óc-hài-hước cảm thấy tủi thân.
(nghĩ kỹ thì nhờ bị "banned" mà tiết kiệm được mấy $ mỗi giờ, hehe )



Thôi thì cứ để các bạn ấy trưởng thành vậy, mình lo kiếm cơm qua ngày là đủ mệt rồi, gánh chi chuyện thiên hạ.

Monday, November 24, 2008

VIM for dummies [2]

Sau khi biết được cơ bản về VIM thì các bạn đã bắt đầu có thể dùng vim để soạn thảo (edit) rồi, nhưng để hiệu quả hơn thì cần biết thêm một số thiết lập, phím tắt và lệnh.

Bài này sẽ ôn lại một số điểm trong post trước và giới thiệu thêm một số thao tác thường gặp của vim . Hy vọng sau bài này thì các bạn yêu thích máy tính sẽ cảm thấy hứng thú với việc dùng vim trên Linux/BSD.



=== Khởi động vim ===

Ôn lại bài trước:
$ vim myfile.txt

Bài này thì ta khởi động cách khác:
$ vim

Khởi động kiểu này sẽ thấy hiện giữa màn hình các thông tin về tác giả (Bram Moolenaar - hiện đang làm cho Google), phiên bản (7.x.yz) , cách quit bằng :q , cách xem trợ giúp bằng :h , ...
Bây giờ để bắt đầu soạn thảo 1 file (giả sử tên myfile.txt) , ta gõ lệnh
:edit myfile.txt
hoặc đơn giản hơn chỉ cần :e myfile.txt .

Trong trường hợp bạn muốn mở nhiều file cùng lúc (ví dụ: file1.js , file2.cpp, file3.java, ...), thì vim cũng hỗ trợ nhiều cách. Nếu phiên bản vim của bạn hỗ trợ tab các file, thì nên mở bằng cách sau:
$ vim -p file1.js file2.cpp

Hoặc khi đang ở trong chế độ normal của vim, bạn dùng lệnh:
:tabedit file3.java
thì vim sẽ mở cho bạn file3.java trong 1 tab mới :) .
(Để ngắn gọn hơn có thể gõ :tabe file3.java )



=== Di chuyển / Cuộn màn hình ===

Ôn lại bài trước:
* trái và phải : là "h" và tương ứng "l"
* còn xuống , lên : là "j" , "k"


Di chuyển bằng các phím (ở normal mode):
+ Đến tab kế tiếp: gt , tab trước đó: gT
+ Đến file mà tên nằm ở dấu nháy: gf (để trở lại, dùng Ctrl+o hoặc Ctrl+6 )

+ Đến đầu file: gg
+ Đến (đầu) dòng cuối file: G (tức là Shift+g )
+ Đến dòng thứ 17: 17G

+ Đến cuối dòng: $
+ Đến đầu dòng (ký tự đầu): ^
+ Đến đầu dòng (cột 0): 0


Cuộn màn hình :
+ Cả trang : Ctrl+f (forward), Ctrl+b (backward)
+ Nửa trang : Ctrl+d (down), Ctrl+u (up)
+ Từng dòng : Ctrl+n (next), Ctrl+p (previous) . Hoặc phím cũ là Ctrl+e và Ctrl+y

Lưu ý: các tổ hợp phím scroll màn hình này cũng giống như khi dùng lệnh man, more hoặc less , nên khi xem manpage hay file nào các bạn cũng có thể scroll bằng các tổ hợp phím kể trên.



=== Tìm kiếm / Thay thế ===

Ôn lại bài trước:
phím / : tìm từ trên xuống
phím ?: tìm từ dưới lên (thường dùng để tìm cụm từ có chứa / )
Khi đã tìm thấy thì có thể bấm tiếp phím n hoặc N để tìm đến từ kế tiếp (next) .

Tìm ngay các từ giống từ đang ở dấu nháy (cursor) : phím * , hoặc #


Thay thế (substitute) thì dùng cú pháp mới gần giống sed: ( s/OLD/NEW/option )
+ thay toàn bộ chuỗi "OLD" bằng chuỗi "NEW" trong cả file:
:%s/OLD/NEW/g

+ thay toàn bộ chuỗi "OLD" bằng chuỗi "NEW" trong đoạn từ dòng 5 đến dòng 17 :
:5,17s/OLD/NEW/g

+ thay toàn bộ chuỗi "OLD" bằng chuỗi "NEW" trong 1 dòng (đang chứa cursor) :
:s/OLD/NEW/g

+ chỉ thay chuỗi "OLD" đầu tiên trong dòng bằng chuỗi "NEW" thì ko cần "g" :
:s/OLD/NEW

+ nếu muốn có xác nhận (confirm) trước khi thay thì ta thêm option là "c" :
:%s/OLD/NEW/gc


Các thao tác tìm kiếm và thay thế trên VIM cũng hỗ trợ biểu thức chính quy (Regular Expression) khá tốt. Các Regex được hỗ trợ trên vim hiện nay giống như của egrep, khá giống của perl . Nhưng để tránh phức tạp cho người mới dùng thì tớ chưa nêu ví dụ ở đây :D .



=== Sao chép / Xóa / Dán ===

Đơn giản:
- chép (copy/yank) : phím y
- xóa : phím d (hoặc phím x)
- dán : phím p

btw, trong VIM thì xóa (delete) luôn có nghĩa là cắt (cut), tức là mất đi trên màn hình hiển thị , nhưng ngay lúc đó đã lưu lại trong vùng nhớ nào đó (gọi là vùng register hoặc còn gọi là vùng buffer). Khi đó có thể dán (paste) lại màn hình soạn thảo của vim bằng phím p .


Để xóa 1 đoạn thì ta có thể làm các cánh sau:

1/ chuyển qua chế độ visual rồi chọn vùng cần xóa và bấm phím xóa

2/ dùng chức năng đánh dấu (mark) bằng phím m , đánh dấu 2 điểm rồi xóa từ điểm đầu đến điểm cuối

3/ chuyển sang chế độ chuột
set mouse=a
hoặc
set mouse=i
rồi dùng chuột để chọn vùng cần xóa, rồi bấm phím xóa.

4/ Ánh xạ các thao tác xóa thành tổ hợp phím nào đó (VD: kiểu Ctrl+C của Windows) , để chọn và xóa dễ hơn.

5/ Chuyển sang chế độ soạn thảo giống các chương trình trên Windows , tức là dùng lệnh behave mswin để nó chuyển chế độ chuột và các phím tắt giống kiểu Notepad++ trên Windows.

Đại khái như vậy, nhưng phần này tớ khoan nói rõ, ai quan tâm sẽ tự tìm hiểu :D .




=== Thiết lập / vimrc ===

Ôn lại bài trước:
* Chuyển theme màu khác cho vim, chẳng hạn theme "murphy" :
:colorscheme murphy

* Bật syntax highlight màu cho các ngôn ngữ lập trình, script :
:syntax on

* Bật số dòng (line number) lên cho dễ theo dõi:
:set number

* Bật chức năng hiện các lệnh (show command) đã gõ :
:set showcmd

* Bật "cây thước" để hiện số dòng, số cột, số ký tự đã gõ:
:set ruler

* Bật chức năng highlight các từ được search :
:set hlsearch

* Bật chức năng ignore case của từ được search để tìm được nhiều hơn :
:set ignorecase




=== Ánh xạ phím tắt ===

Ôn lại bài trước:
Để undo, thì trước tiên chuyển về normal mode (nhấn ESC) , rồi bấm phím u , thế là undo 1 lần. Muốn undo nữa thì nhấn u nữa, cứ thế. Còn để redo thì ở Normal mode ta bấm Ctrl+r (trong VIM thường ký hiệu là C-R) . Nếu muốn redo nữa thì lại bấm Ctrl+r tiếp, bạn có thể redo đến hết lần undo liên tục gần nhất.



=== Một số tham khảo ===

Ôn lại bài trước:
:h word
(với "word" là từ mà mình muốn coi help)

vim cũng có built-in sẵn 1 cái tutor về cách dùng VIM:
$ vimtutor

Sunday, November 23, 2008

Object-oriented programming principles

Sau khi đã biết được các nguyên lý cơ bản để phát triển phần mềm, một lập trình viên nên biết qua về các nguyên lý lập trình hướng đối tượng.

Một số bạn thì gọi cái này là các nguyên tắc thiết kế hướng đối tượng (OOD principles) . Theo tôi thì gọi như vậy là không chính xác. Các nguyên tắc OO này áp dụng cho lập trình (programming), từ thiết kế (design) đến viết mã (coding) đến kiểm thử (testing) , đều cần biết các nguyên tắc này và nên áp dụng ở từng giai đoạn luôn chứ không chỉ ở giai đoạn design.

Nói một cách ví von, so với cờ thì: các nguyên lý KISS, DRY, YAGNI,... là các thế tàn cuộc cơ bản, các nguyên lý OOP là các cách chơi trung cuộc, còn như Design Patterns thì là các kiểu khai cuộc . Mặc dù ngày nay Design Patterns được nhắc đến nhiều nhưng thực sự thì để nâng cao nội lực thì nên nắm vững OOP principles , còn DP thì ban đầu chỉ cần biết một ít đủ để áp dụng OOP là được.


Trong vài bài post sau này chúng ta sẽ thảo luận về Design Patterns , còn bây giờ tôi sẽ nêu 4 nguyên lý OOP cơ bản :

1/ Nguyên lý đóng mở - OCP : (open close principle)
Open for extension, but closed for modification.

Tạm dịch: Dễ mở rộng các hành vi, mà không cần phải sửa lại (class/interface/method)


2/ Nguyên lý thay thế Liskov - LSP : (Liskov substitute principle)
Derived classes must be substitutable for their base classes.

Tạm dịch: Các lớp dẫn xuất phải có khả năng thay thế hẳn lớp cơ sở


3/ Nguyên lý nghịch đảo phụ thuộc - DIP : (dependency inversion principle)
Depend on abstractions, not on concretions.

Tạm dịch: Nên phụ thuộc ở mức trừu tượng, tránh phụ thuộc cụ thể


4/ Nguyên lý phân tách giao diện - ISP : (interface segregation principle)
Make fine grained interfaces that are client specific.

Tạm dịch: Tạo các interfaces đã lọc kỹ và hướng tới người dùng


4 revisited/ Nguyên lý trách nhiệm đơn định - SRP: (single responsibility principle)
(Cái này là 1 góc nhìn khác của ISP, nếu bạn thích gọi là nguyên lý 5 thì cũng không sai mấy)
A class should have one, and only one, reason to change.

Tạm dịch: Khi thay đổi, mỗi lớp chỉ nên có 1 và chỉ 1 lý do



Ngoài ra còn các nguyên lý về phân gói (package), chia làm 2 nhóm:
+ tăng độ kết dính (increase cohesion) : REP, CCP, CRP
+ giảm độ ghép cặp (decrease coupling) : ADP, SDP, SAP

Tuy nhiên nên nắm vững 4 nguyên lý cơ bản ở trên trước khi tìm hiểu các nguyên lý về package & granuality .

Thursday, November 20, 2008

Scrum software development

Việc phát triển phần mềm ngày nay càng lúc càng lưu ý hơn đến việc sử dụng lại (re-use) và đáp ứng (adapt) với thay đổi của yêu cầu khách hàng, bởi kinh nghiệm cho thấy đó là điều tất yếu không thể tránh khỏi.
Vì thế các quy trình phát triển phần mềm cổ điển như WaterFall, Spiral, RUP, ... càng lúc càng ít được dùng, mà thay vào đó là các phương pháp có tính reusable và flexible cao. Các quy trình tập trung vào 2 tính năng trên được gọi là quy trình linh hoạt (Agile process) .

WaterFall fails


Trong họ Agile software development process thì đến nay đã được khoảng năm bảy loại, nhưng nổi bật nhất là Extreme Programming (XP) và Scrum .

Agile Basis



Tuy nhiên đến bây giờ thì Scrum xem như đã vượt qua XP và FDD để trở thành mô hình Agile được công nhận rộng rãi nhất. Bởi Scrum vừa tập hợp các best practices từ các mô hình khác (daily meeting, test automation, iterations,... ), vừa khai thác triệt để các giá trị Agile (team interaction, run first, customer collaboration, embrace change) .


Các thuật ngữ và khái niệm trong quy trình Scrum mới nghe thì hơi khó hiểu hơn bên XP, chẳng hạn chia Roles thành PigChicken , rồi nào là Sprint, nào là BackLog, rồi BurnDownChart, etc... liệu có vi phạm KISS ? (trong Agile thường dùng thuật ngữ "Assume Simplicity" hơn là K.I.S.S)


Lúc đầu tôi cũng nghĩ là chia như vậy hơi rắc rối, làm sao mà lại tốt hơn quy trình XP được. Nhưng sau quá trình chấp nhận làm quen thuật ngữ và áp dụng triệt để Scrum tôi đã cảm thấy nó nhỉnh hơn XP (có lẽ nhờ kinh nghiệm XP đã làm trước đây chăng? ) . Dẫu sao đi nữa thì nó cũng là một quy trình đáng giá và sẽ rất tốt nếu áp dụng cho 1 team gồm những lập trình viên có kinh nghiệm.


Hẹn lại trong 1 bài khác tôi sẽ trình bày rõ hơn các khái niệm trong quy trình Scrum và vì sao nó lại được đánh giá cao trong giới Agile. Nếu có thời gian thì giới thiệu sơ luôn các quy trình Agile khác như: AUP, DSDM, FDD, Getting Real, ...

Tuesday, November 11, 2008

Individual Income Tax

Hic, VN sắp đổi luật Thuế Thu Nhập Cá Nhân (PIT) mới rồi , thiệt tình từ ngày bác Dũng lên Prime Minister toàn ra quyết định ngược lòng dân: cho mở Casino, sáp nhập Hà Tây, fake giá USD, nâng giá xăng... nay lại thêm cái này nữa, chán không tả.

Luật thuế TNCN đã có từ năm 2007, nhưng trước đây thực hiện theo hướng dẫn khác:

ThueThuNhapCaNhan2007


Cách thực hiện theo thông tư sắp tới thì có 2 điểm đáng chú ý là:

- hạ mức bắt đầu nộp thuế từ 60 triệu VNĐ/năm xuống còn 48 triệu VNĐ/năm
(tức là thu nhập bình quân trên 4tr VNĐ/tháng đã đóng, thay vì trên 5tr VNĐ/tháng)

- thực hiện giảm trừ gia cảnh, mỗi nhân thân phù hợp được giảm 1.6 triệu/tháng .



Ai muốn xem kỹ hơn thuế TNCN 2007 thì tải ở đây:
Luat Thue Thu Nhap Ca Nhan 2007.pdf


Năm nay là 1 năm ảm đạm với nền kinh tế, đang tăng trưởng nhanh trở thành chậm và có thể là suy thoái, thậm chí khủng hoảng. Chẳng hiểu sao bác Ba lại đưa ra nhiều chính sách tồi quá.

Wednesday, November 05, 2008

Sample code Java

Lúc này lên mấy diễn đàn vẫn thấy nhiều câu hỏi kiểu "cho em xin đoạn source code có chức năng X" hoặc "ai có source mẫu để làm việc Y hay không" . Mặc dù các câu hỏi dạng này không được xem là thông minh lắm , và người có trình độ càng cao càng ít muốn trả lời câu hỏi loại này, nhưng tớ thấy cũng nên có ai đó chỉ ra vài lần thay vì đơn giản "Google is your friend" hoặc "STFW" . Vậy là có entry này :D


Trước khi đặt request về mã nguồn Java, bạn hãy thử tìm trước ở những nơi sau đây:
1/ thư mục sample và demo ở JAVA_HOME
2/ JavaAlmanac
3/ Java2s
4/ KodeJava
...


Nếu muốn tìm luôn ứng dụng kèm mã nguồn thì lên các trang host mã mở:
1/ SourceForge
2/ FreshMeat
3/ OhLoh
4/ Apache
5/ CodeGoogle
6/ LauchPad
7/ Savannah
8/ OspDev
...


Nếu muốn tìm nhanh 1 đoạn code chức năng hơi khó thì có thể dùng một số search engine chuyên tìm mã nguồn như:
1/ Krugle
2/ Codase
3/ Koders
4/ GoogleCodeSearch
5/ JExamples
...


Good luck & Have fun !

Saturday, November 01, 2008

Working for Japanese

Thân gửi các anh em lô-côn sờ táp, (local staff) Gửi các anh em bài Sớ tố khổ của một vài người cùng cảnh ngộ. Hy vọng là câu chuyện làm thuê cho Nhựt không chỉ để đem ra bàn tầm phào hay khơi chuyện cay cú cho các bạn! Nếu các bạn có nỗi niềm khổ sở nào, xin đừng giấu trong lòng! Hãy chia xẻ nỗi uất ức trong lòng, tin chắc các bạn sẽ bớt thấy tủi cho cái phận làm mướn, giống như tâm sự dưới đây.
Và xin nhớ nếu đem tâm sự chuyện này cho bọn làm mướn cho USA hay Canada, hay Đức biết, các bạn phải có giải thích thêm, không thì tụi nó không thể hình dung ra cảnh đời của chúng ta đâu.

Thân mến, Củ Chuối
--------------


* CÔNG NHÂN KỸ THUẬT CAO 1:

Nói chung, bác nào có tham vọng lương cao vượt mức, hết giờ làm là về, thăng tiến vùn vụt ở cty Nhật thì đừng hy vọng! Nói thế cho ngắn! Tiêu chí oánh giá nhân viên của chúng nó không phải là thông minh, nhanh nhẹn, hiệu quả công việc tốt bla bla ... mà là:

+ Cần cù đầu tiên (dù có thể hiệu quả cực kì kém cũng được, miễn sao gặp việc khó không nản chí, ngồi trâu bò quyết tâm chiến đấu trong vô vọng đến 10 - 11 giờ đêm vã cả mồ hôi là chúng nó rất sướng).

+ Kế đến là trung thành (cái này thì khỏi phải nói, các bác mà chuyển từ 1 cty Nhật sang 1 cty Nhật khác thì gần như chắc chắn chúng nó sẽ gọi điện bằng được cho GM cũ để check xem thằng này đi theo dạng gì, có bàn giao đầy đủ, tư cách tử tế không hay là chộp giật sai phạm...).

+ Rồi đến lễ phép (gặp phát gập người 1 góc tối thiểu 150 độ và càng thấp càng tốt, sáng đến phải chào, tối về cũng phải chào, chưa kể nhiều lần dạ thưa vô nghĩa khác trong ngày);

+ Nghe lời một cách máy móc (dù là lời trái ngang phi lý, dù là lời cay đắng khôn nguôi);

+ Hết lòng hầu hạ nịnh bợ (cái này thì dân Việt mình kệ cụ chúng nó, nhưng bác nào chịu khó nhẫn nại tí thì lại được quý. Còn bọn Nhật với nhau thì thực sự sợ cấp trên kinh khủng, búng tay phát là nháo nhác chạy đến như vịt, hôm nào có thằng xếp to hơn sang thì cả cty náo loạn, phó tổng đi coi toa lét sạch chưa, thơm chưa, G.Director với G. Manager thằng thì đóng mở cửa cho sếp, thằng thì dẹp đường xích hầu...);

+ Gọn gàng sạch sẽ (theo cái tiêu chuẩn 5S: Sờ trên Sờ dưới Sờ trái Sờ phải Sờ giữa của chúng nó) cùng nhiều tiêu chí vớ vẩn khác...



* CÔNG NHÂN KỸ THUẬT CAO 2:

+ Một đặc điểm nữa (của) bọn Nhật là sống lâu lên lão làng, kể cả thằng dốt nhất cứ phèng phèng đến một độ tuổi nào đó là lên chức y chang như nhau nếu có cùng thời gian cống hiến. Đi gặp đối tác mà cử người trẻ hơn bên nó chừng 10 tuổi là nó không thèm tiếp vì coi là không ngang vai vế.
Bác nào có giỏi mấy đi nữa, triển vọng mấy đi nữa mà "chẳng may" lại còn trẻ chung thì cũng khó được cất nhắc. Nói chung là cực lãng phí và vùi dập nhân tài. Hiếm hoi có ai người Việt xuất chúng lên được chức to trong cty Nhật thì cũng không bao giờ được thực sự làm trưởng vì chúng nó sẽ cài cắm một thằng Nhật kè kè bên cạnh để giám sát chi phối. Vậy là cũng không có toàn quyền trong lĩnh vực của mình.
Bên cạnh đấy, bọn Nhật ở Việt Nam có một cái Hiệp hội DN Nhật (phò) phạch gì đấy, trong đó nó phân chia rõ ra DN trong lĩnh vực, sản xuất, dịch vụ, tài chính ngân hàng bảo hiểm... và có tổ chức giao lưu định kỳ để tìm đối tác quan hệ, thống nhất policies về nhân sự, lương lậu, các mức trần với sàn bla bla... Do vậy việc chênh lệch mức lương cho nhân viên ở các cty Nhật là rất ít, hy vọng tìm kiếm lương cao vượt bậc ở các cty Nhật là điều mong manh, gần như không khả thi.

Mặt khác bọn Nhật chỉ quen mua sắm buôn bán thuê mướn với các đối tác là cty Nhật khác, chẳng hạn logistics là của Dragon hay Logitem, xây dựng nhà xưởng là Vinata, sửa chữa máy móc lắp đặt điện nước là Vina Kinden or Vina Shiroki, và IT thì 99% mời Fujitsu (chứ nào phải FPT)... dù cho giá cả cực kì đắt so với chỗ khác. Vì thế viễn cảnh rung đùi chen hoa hồng của Phong Kế toán, phòng Hành chính, phòng Mua bán ... người Việt là xa vời đi trông thấy.


Nói chung, sau những điều kể trên, làm cty Nhật cũng sẽ được mấy thứ:

+ Học được tính kiên nhẫn và ngồi dai giả vờ làm việc, được tác phong cúi đầu chào rất dẻo, đi lại rất nhanh, tay đánh đều, sáng và chiều được công khai tập thể dục.

+ Bọn Nhật ngoài giờ làm thì cởi mở và giải trí tẹt ga, có điều trong lúc vui chơi, nhiều anh Nhật hay lộ ra ra biểu hiện khá khác thường và đôi khi quá trớn... . Nhất là các chú Nhật làm sản xuất thì bậy bạ lộ liễu và không ngần ngại ...

+ Nếu cty Nhật phá sản thì chúng sẽ viết thư giới thiệu tử tế cho nhân viên đến làm nơi khác (tất nhiên là cũng là Nhât). Tuy nhiên thường anh em Việt Nam phong phanh cty sắp tạch là thu dọn bay mẹ hết từ trước rồi, hiếm ai chờ đến lúc nhận thư recommendation.

+ Một nét văn hóa đẹp của người Nhật là mỗi lần đi công tác về đều có quà gói rất đẹp (mặc dù nhiều khi cái thực chất bên trong lại rất phò). Và với tinh thần học hỏi lẫn nhau thì thấy, nhân viên Nhật hầu như không bao giờ bật sếp, hay chia sẻ trong công việc và ít cắn xé lẫn nhau hơn nhân viên Việt...

Về bọn Nhật, cứ chút chít thế đã các bác nhể.



* CÔNG NHÂN KỸ THUẬT CAO 3 :

Bổ sung thêm những tình tiết này:
Điểm dở hơi trước đã nhé, điểm hay nói sau:

1- Thích viết báo cáo: Cái quái gì cũng viết được thành báo cáo. Thực chất kết quả bằng quả táo thì nó viết được thành quả bưởi. Lắm khi mình là người trong cuộc, đọc xong còn giật mình. Cha chả là khiếp.

2- Rất hay để ý vặt: Thường chúng nó đứa nào cũng có một quyển sổ nhỏ. Để ý từng tí một. Tỉ dụ, hôm nay đứa A hắt hơi 2 lần, đứa B cười ha hả 3 lần, đứa C đi muộn, v.v... Dưng mà nó chỉ soi ngầm như thế thôi. Kệ bố nó.

3- Giả tạo rất giỏi: Có những việc chúng nó biết tỏng tong tong là như thế này rồi. Ấy thế mà khi nói chuyện với người khác, lúc nào cũng giả ngây giả ngô. Lúc nào cũng "sô đề sự nế". Nế cái con khỉ.

4- Tính sợ trách nhiệm cực cao: Việt Nam mình khoái Nhật vì nó đã mướn mình, đã mua hàng của mình thì nó cứ mua mãi. Dưng mà bản chất của nó là sợ trách nhiệm. Nhỡ ra, nếu nó thay đổi, công việc lại chẳng may có sự cố thì nó chết, nó không thể sương gió mà gánh trách nhiệm được.

5- Không công bằng trong công việc: Đến kỳ xét, cứ ai giỏi nịnh thì lên lương vù vù. Mở ngoặc ra là lương tớ vào dạng phọt phẹt vì lúc nào cũng có ý nghĩ: Ông phải uốn lưỡi nịnh mày thì thà ông về nhà ông tươi cười nịnh chồng ông còn hơn. Biết đâu, chồng ông tinh thần hăng tiết vịt, hiệu quả công việc cao hơn => cuối tháng đưa tiền cho ông bằng mấy lần cái số mày tăng lương ấy chớ lị.

6- Kibo bủn xỉn: Nó, nếu tiêu bằng tiền công thì vô tư lự lắm, nhất là tiêu cho chúng nó, cho vợ con chúng nó, chứ còn nếu tiêu bằng tiền túi chúng nó, hoặc giả tiêu bằng tiền công nhưng cho người Việt thì chắc nó trợn ngược mắt lên vì tiếc tiền mất.

7- Tính phân biệt chủng tộc và khinh người cực cao: Đối với chúng nó, Nhật mới chính là bố tổ của thiên hạ, còn hạng khác là vứt hết. Mặc dù chúng nó vừa mới hít đất chào mình, nhưng có thể trong đầu chúng nó rít lên "Tao chào thế cho mày ... nhục". Đối với chị em nào lấy chồng Nhật và sống ở Nhật thì ... thảm (về tinh thần). Khó có thể hoà đồng vào cuộc sống của nó được.

8- Con gái Nhật cứ như bị "down": Bà con xem phim "chiaki tiếp viên hàng không" thì biết. Nhiều khi thấy những con mụ hổ ăn không hết thịt, mắt một mí như mắt rắn, mà giọng thì cứ như "rắn giả lươn, xu hào giả miến", thẽ thọt: ... san, hey...." nghe mà điên tiết.

9- Cứ cái gì kho khó là nó cho lên thành đạo. Ví dụ như trà đạo. Nhìn mấy con mẹ đi lại lệt xệt như vừa đẻ xong, ngoáy ngoáy mấy tách trà mà thấy vướng cả mắt. Có cái quái gì, ông đây làm một phát ăn ngay.

10- Thô lỗ, bỉ ổi: Nhân viên nam (Nhật) có thể thoải mái đứng trong văn phòng để "sơ vin" quần. Không tin, xem những kênh truyền hình của nó thì biết. Có những cuộc thi "đánh rắm" nữa kìa. Mỗi thằng ngồi lên một đống bột và tiến hành... đứa nào thổi được bay đống bột đi thì đứa ấy chiến thắng.

11- Ngu dốt: Cái này tớ nói về cá nhân từng đứa Nhật. Nếu tách chúng nó ra để thi tay bo với mình (về kiến thức) thì nó chết ngay. Ngu nga ngu ngơ (dốt thật, nó không dở vờ đâu). Nhưng được cái nó đoàn kết, ghét nhau mấy cũng không nói xấu nhau trước mặt người khác bao giờ.


Những cái được đây:

- E có những người cùng khổ, có bác làm hơn chục năm thì chắc là khổ hơn e rùi

- E học cách ăn nhanh, đi nhanh, làm gì cũng nhanh

- E học cách căn giờ chính xác đến từng phút sau 1 lần e đi muộn có 5’ mà e bị sếp lườm đểu dù e đã xin lỗi trình bày lí do tắc đường.

- E chửi sếp thoải mái (cứ vừa chửi vừa cười nói với nhau bằng TV nó qué hiểu)

- E cãi sếp nham nhảm chứ ở Cty VN thì nó trù cho chết

- E chả phải biếu quà sếp dịp lễ tết

- E tự an ủi làm cho bọn Hàn có khi còn bị đánh (giống trong phim) còn ngoài đời e chứng kiến 1 thằng sếp HQ chửi e nhân viên ngay phòng dịch vụ khách hàng ở BĐ HN vì nó ko chịu thanh toán hết tiền tạm ngừng mobile 2 chiều để về nước.

Túm lại là:
Mặc dù nhiều người đã ra đi, nhưng E chấp nhận ở lại Cty này nó bọn nó mị dân rất giỏi các bác ạ. Đi đâu về cũng có quà dù g/t rất nhỏ. Nhân viên nữ mới sinh thì chỉ cần 3 tiếng sau là sếp đã đến tận viện thăm rùi. Sếp VN chắc phải chờ đầy tháng. Lương tháng thứ 13 thì sếp phải gọi từng thằng vào phòng hít đất cám ơn. Thế là nhân viên lại ngậm ngùi tiếp tục làm trâu làm bò trong năm tới và nhiều năm sau nữa.


* CÔNG NHÂN KỸ THUẬT CAO 4:

Một câu chuyện về cái lịch sự giả tạo của các bác Nhật:



* BONUS:

Trong các công ty ở VN có FSoft là học được kiểu Nhật triệt để nhất, từ chậm lên lương, thù vặt, đến việc mị dân, tạo sự kiện... Ai đã từng làm ở FSoft thì không cần làm cho Jap cũng biết thế nào là Bóc Lột Chuyên Nghiệp.

Theo đánh giá chủ quan của tôi thì nên làm thuê cho Úc, Anh, Đức, Pháp; kế đến là Mỹ và các nước Bắc Âu (Thụy Sĩ, ... ) , còn làm thuê cho các bác Nhật, Hàn thì cái đạt được cho mình còn kém hơn so với làm cho vài công ty Việt Nam (trừ việc đoàn kết nội bộ và tinh thần dân tộc) .



Have fun !

Thursday, October 23, 2008

Symfony quick note

Từ khi Ruby on Rails ra đời và thành công rực rỡ, cộng đồng PHP đã học hỏi Rails và bắt đầu tạo nên hàng loạt framework để phát triển web bằng PHP với nhiều điểm học lại từ Rails , trong đó các framework nổi tiếng nhất là Kohana (CodeIgniter), Symfony, Zend, CakePHP, Akelos, ...


(đang viết tiếp)

Monday, October 20, 2008

Tritanium Key

Yet another Vietnamese typing software !

http://www.mediafire.com/?hwyoa6csb0h
http://www.box.net/shared/ed4jtnag4c

Ai quan tâm có thể tải về chạy thử xem sao :)

Thursday, October 09, 2008

Linux directory structure

Nhìn "bề nổi" thì cấu trúc và cách tổ chức file của Linux cũng không khác DOS/Windows và các Hệ điều hành khác là mấy. Chỉ có vài điểm khác biệt mà bạn cần phải chú ý:

+ Cấu trúc thư mục của Linux KHÔNG cần khái niệm các ổ đĩa: Cho dù bạn có bao nhiêu phân vùng thì đường dẫn tuyệt đối của một thư mục cũng bắt đầu từ một thư mục gốc có tên là '/' (đọc là 'root') , chứ không phải là C: hay D: ^^ . Bởi các phân vùng luận lý hoặc các ổ đĩa vật lý đều có thể được sẽ được "map" (ánh xạ) vào một thư mục con riêng biệt bất kỳ .
(thực sự thì Windows cũng map tự động các phân vùng logic thành các tên C:\ , D:\ , ... )

+ Trong đường dẫn của Linux, các thư mục được phân cách nhau bằng ký hiệu slash (sổ trái) / , trong khi với DOS/Windows là ký hiệu sổ phải \ (backslash)

+ Tên của các tập tin hoặc thư mục trong Linux phân biệt chữ hoa và chữ thường, VD: 'abc', 'Abc', 'ABC' là khác nhau. (trong khi trong Windows thì không phân biệt)

LinuxDirectoryStructure-VsWin | Mediocre-Ninja.blogspot.com


Từ thư mục root ta sẽ có các thư mục con, mỗi thư mục con lại có một số thư mục con nữa, cứ thế tạo thành 1 cấu trúc thư mục dạng cây (và đó cũng là lý do tại sao thư mục đầu tiên được gọi là gốc/rễ: 'root' ) . Tuy nhiên do tính cơ động cao, dễ mount/unmount và không tự phân thành các phân vùng con, cấu trúc thư mục của Linux có thể trở thành rất lớn (big tree) và khó nhớ . Vì thế người ta đã cố gắng tạo một cấu trúc thư mục đồng nhất, tổ chức sắp xếp phân cấp thành các nhóm theo chức năng.

LinuxDirectoryStructure-Root | Mediocre-Ninja.blogspot.com


Cho đến nay hầu như cách tổ chức thư mục trên Linux/Unix đã được chuẩn hóa, mỗi dòng phân phối Linux đều giống nhau ở một số phần chung (kể cả các BSD và Unix khác cũng tương tự), có thể nói là thống nhất mặc dù số lượng dòng phân phối Linux lên đến hàng trăm !

Bây giờ ta sẽ lược sơ qua các thư mục chủ yếu mà hệ thống Linux nào cũng đặt làm mặc định (default) : / , /boot , /bin , /home , /usr , /opt, /etc , /dev, /var, /tmp , ...

LinuxDirectoryStructure-All | Mediocre-Ninja.blogspot.com


* Thư mục /
Đây thường được gọi với tên 'root directory' - nghĩa là thư mục gốc. Đây là nơi sẽ chứa mọi thư mục con khác. Đây là thư mục bắt buộc phải có cho bất cứ một hệ thống linux nào.


* Thư mục /boot
Thường được dùng để chứa kernel, và các cấu hình để boot hệ thống. Chẳng hạn có thư mục con /boot/grub là nơi chứa GRUB giúp cho việc multi-boot giữa nhiều hệ điều hành, đây là 1 thư mục đáng chú ý khi bạn cài song song Linux với Windows.


* Thư mục /home
Là nơi chứa tất cả các dữ liệu cá nhân cho từng user trên hệ thống (ngoại trừ user root). VD: tạo /home/CuTi là thư mục riêng cho user CuTi, /home/CuTeo là thư mục riêng cho user CuTeo ^^ . Cũng có thể phân ra kiểu khác: như có phòng ban SV và phòng ban GV thì ta đặt /home/SV/CuTi , /home/SV/CuTeo và /home/GV/Ninja, /home/GV/Mediocre , ...


* Thư mục /media và /mnt
Hai thư mục này thường được dùng để đặt các mount point, tức là điểm để mount thủ công các thiết bị. Như đã bàn ở trên, một partition muốn dùng được phải được mount. Các mount point đó thường được đặt trong /mnt. Một số các chương trình ứng dụng mới không dùng /mnt mà dùng /media là nơi default để đặt các mount point. Do đó, rất nhiều distro cung cấp cả hai thư mục, và sử dụng link để tương thích cho thói quen của user và các application.
(VD: phân vùng cài Windows của bạn thường được mount ở 1 trong 2 thư mục trên, USB flash disk cắm vào cũng thường được mount ở đây)


* Thư mục /usr
Là nơi chứa rất nhiều các chương trình được cài đặt trên hệ thống. Ngoài ra, các thư mục con của /usr còn dùng để chứa các tập tin chạy (binary), các library, các tập tin include, các manual pages, vân vân... Chẳng hạn từ điển StarDict thường được cài vào thư mục /usr/share/stardict , các tài liệu manual thì nằm trong /usr/man hoặc /usr/doc
(đây cũng là lý do mà sau khi cài Win tôi cài toàn bộ ứng dụng vào D:\usr thay vì C:\Program Files)


* Thư mục /dev
/dev là nơi kernel đặt các thiết bị (device) file. Trong linux và các hệ điều hành Unix-like, mỗi device đều được gán cho một file và các file này sẽ được đặt trong /dev. Chẳng hạn các ổ đĩa cứng ATA sẽ được nhận là /dev/hda , /dev/hdb, /dev/hdc... , còn các ổ SCSI và flash (USB) thì nhận là /dev/sda , /dev/sdb , ...
Ngoài các file device dành cho các hardware trên hệ thống, ở /dev còn có thêm một số file rất tiện dụng như /dev/zero, /dev/null, /dev/random.

Lưu ý: /dev là một pseudo fileSystem. Nghĩa là directory /dev là một file system ảo. Kernel sẽ tự tạo và đặt các device file vào /dev nếu như kernel nhận ra device đó. Bất kỳ một device nào cũng cần có driver để tương tác với kernel. Driver cho linux thường đã được nằm sẵn trong kernel. Bạn nào có config và rebuild kernel sẽ nhận ra có rất nhiều driver được support.


* Thư mục /etc
Nơi chứa các file cấu hình hệ thống, lưu dạng text để user dễ chỉnh sửa. Các tập tin đáng chú ý gồm có:
/etc/inittab : là một file định rõ những process nào được khởi động cùng hệ thống.
Ví dụ: bạn có thể cấu hình X –Windows có thể khởi động cùng với hệ thống hay ko, hoặc điều gì xảy ra khi bạn nhấn tổ hợp phím (CTRL+ALT+BACKSPACE).
/etc/fstab : file chứa thông tin mount tự động các thiết bị ngoại vi: HDD, CDROM ...
/etc/password : lưu giữ thông tin về user và password tương ứng


* Thư mục /bin
Đây là thư mục chứa các chương trình nhị phân (binary) thực thi cơ bản nhất trong hệ thống. Các file thực thi (executable) này thường là các chương trình thiết yếu và đủ để hệ thống có thể khởi động và làm việc ở mức căn bản.
(ngoài ra còn /usr/bin chứa nhiều utilities cho người dùng hơn, và một số hệ thống tạo ra /sbin , /usr/sbin dành cho các super user )


* Thư mục /lib
/lib thường là nơi chứa các library cần thiết cho hệ thống hoạt động. Một số thư mục khác cũng dùng để đặt lib gồm có: /usr/lib, /usr/local/lib.
Một thư mục đáng quan tâm khác trong /lib là /lib/modules. /lib/modules chứa các modules của kernel đang dùng. Nếu trên máy tính có nhiều hơn 1 kernel, trong /lib/modules sẽ có các directory khác tương ứng cho từng version của kernel.


* Thư mục /opt
/opt thường được dùng làm nơi cài đặt thêm các chương trình mang tính 'optional', có nghĩa là không có mặt mặc định chung cho hệ thống (server != desktop) . Chẳng hạn các gói như XAMPP thường được cài vào đây.


* Thư mục /tmp
Dùng để chứa các file tạm (temporary). Các file này thường được tạo khi chạy chương trình và xóa sau khi chương trình đã hoàn tất và thoát. (Nhưng các file tạm cỡ lớn và hay thay đổi thì thường lưu trong /var hơn là trong /tmp , chẳng hạn các file tạm của server , database)
Một điểm lưu ý là các users đều phải có quyền write và read trên /tmp. Một user bình thường hoàn toàn cần có /tmp để chứa các file tạm khi user đó sử dụng hệ thống.


* Thư mục /var
/var thường được gọi là 'kho chứa log' cho cả hệ thống. Mặc định, rất nhiều chương trình sẽ có log ở một trong các thư mục nằm trong /var. Để tránh bị "phình to" quá khổ thì thường sẽ có 1 script viết chạy thường trực kiểm tra dung lượng var và khi lớn đến mức nào đó sẽ report, gởi mail để có biện pháp clean hoặc tăng mount thêm ổ cứng vật lý ^^


* Thư mục /proc
/proc cũng là một pseudo fileSystem. Các file hoặc thư mục trong /proc sẽ được kernel khởi tạo trong lúc hoạt động. Trong /proc sẽ có các file hoặc thư mục tương ứng cho các process đang chạy, và ngay cả kernel. Rất nhiều kernel parameters có thể được xem và thay đổi bằng cách edit trực tiếp các file tương ứng trong /proc mà không cần dùng sysctl .


* Thư mục /root
/root là home directory cho account có quyền cao nhất trong hệ thống Linux, mặc định account này tên là 'root' . Thư mục này cũng tương tự như các home directory khác trên hệ thống. Chỉ khác ở điểm thư mục này không nằm trong /home/username mà được đặt ngay trong /


* [Bonus]
Ngoài các thư mục chính kể trên, Linux có thể còn một số thư mục khác nằm ngay trong / . Và thường Linux còn cần có một phân vùng hoán chuyển (swap) để làm vùng nhớ tạm khi RAM không đủ. Trước đây swap thường chiếm khoảng 1.5 đến 2.5 lần dung lượng RAM, nhưng bây giờ hệ thống nào cũng dư RAM, nên máy cá nhân chỉ cần 200-500 MB cho swap là đủ rồi :-)
(Cái Virtual Memory của Windows cũng là bắt chước từ cái swap này)


(Tổng hợp từ "Lập trình Linux" tập 1, khoaimi, và Wiki)

Wednesday, October 08, 2008

Vietnamese Typing

Vấn đề về gõ tiếng Việt, mã hóa Vietnamese Unicode, đối với tôi vẫn là đề tài khá thú vị. Nếu có điều kiện tôi sẽ viết nhiều hơn về đề tài này. Còn trong bài này chỉ xin giới thiệu sơ lược về các bộ gõ tiếng Việt .


Ở đây chỉ xét các ứng dụng trên máy vi tính phổ biến, còn trên các nền mobile hoặc chuyên biệt thì tạm thời chưa xét vì... chưa phát triển mấy :-) .


* Bộ gõ độc lập (standalone application) trên Linux và *BSD:
+ xvnkb của Đào Hải Lâm
+ x-unikey của Phạm Kim Long


* Bộ gõ độc lập (standalone application) trên MacOS:
+ VietPad của Nguyễn Quân (actually this is a text editor written in Java/.NET, so it can also be used in other platforms)
+ Vietnamese Keyboard Set của Gero Herrmann
+ MacVnKey của Ngô Đình Học


* Bộ gõ độc lập (standalone application) trên Windows: có khá nhiều lựa chọn
+ UniKey của Phạm Kim Long
+ WinVnKey của Nguyễn Tấn Cường, Nguyễn Thư, Ngô Đình Học et al
+ DotNetKey của Bùi Đức Tiến
+ Key4U của Nguyễn Anh Tuyên
+ VPSKeys của Ngô Đình Học et al

Ngoài top 5 kể trên còn có VietKey của Đặng Minh Tuấn, VietSpell của Lưu Hà Xuyên, mVietX của Phạm Sơn, VNCode của Nguyễn Thư, ...


* Bộ gõ JavaScript (web-based application) trên các trình duyệt: cũng khá phong phú
+ Mudim của Nguyễn Hoài Anh
+ A.V.I.M (tên cũ: H.I.M) của Đặng Trần Hiếu
+ mViet của Phạm Sơn
+ vietUni của Trần Anh Tuấn
+ vietTyping của Nguyễn Thắng

Ngoài top 5 kể trên còn có CH.I.M của Đào Hải Lâm, B.I.M của Sơn, VietJIE của Âu Địch Xương, VoviUnicode của Lý Phúc Hiếu, ... và vài bộ gõ tự viết dùng cho cá nhân
( các bộ gõ JS này hoàn toàn có thể làm thành 1 extension cho FireFox hoặc ThunderBird )


Bài đã khá dài nên phần về các kiểu gõ tiếng Việt (VNI, Telex, VIQR, TuBinhTran) sẽ được tách ra thành 1 entry khác .

Sunday, October 05, 2008

Planning 5 months

KẾ HOẠCH 5 THÁNG LẦN THỨ NHẤT :

* Objective: the title says it all

* Start date: 2008-10-05

* Due date: 2009-03-07 (duration: 5 months)

* Venue: working desk

* Agenda:

1/ Blog Mediocre-Ninja :

+ Mỗi tuần ít nhất 3 bài viết về kỹ thuật, công nghệ (computer-related) .

+ Các bài đó chủ yếu (hơn 50%) sẽ viết bằng tiếng Anh , trực tiếp soạn HTML .

+ Dùng một số thủ thuật để tăng page view và PageRank .


2/ Communication with hackers :

+ Tham gia IRC thường xuyên, học hỏi các cao thủ người Việt ở mỗi channel .

+ Tạo nick mới ở các diễn đàn, thêm nick những bạn cũ đã lâu không gặp .


3/ Project for fun :

+ Thứ nhất : ngốn 4500 trang sách tiếng Anh .

+ Thứ hai : làm 2 ứng dụng desktop , rồi port 1 cái sang mobile .

+ Thứ ba : làm 1 ứng dụng web, hoặc tham gia dự án collaboration .


4/ Miscellaneous :

+ tiếng Pháp, thời khóa biểu, chặn website .

+ xây dựng mô hình, quy trình công việc sử dụng triệt để OSS .


* Deadline: 2009-03-31

* Note: Các chi tiết Lưu lại dạng XML project để dễ mở bằng OpenProj, OpenWorkbench .