[Java]Để lập trình Java…

2009 February 21
tags:
by arkantos

Đầu tiên, bạn phải có một môi trường lập trình Java. Có rất nhiều môi trường như vậy, nhưng đơn giản nhất, và chính thống nhất thì có Java Developer’s Kit (JDK) của Sun. Hãy vào java.sun.com để  download.

Sau đó, bạn cài đặt JDK, và set up path information của máy tính để có thể tìm thấy javac java.

Khi chạy thì trên command promt, gõ lệnh, ví dụ:

javac HelloDate.java

Nếu không có lỗi thì tiếp tục:

java HelloDate

Khi lập trình với Java, bạn cũng nên có một IDE (editor). Ở đây tôi dùng JCreator.

[Java]Từ khóa “static”

2009 February 20
tags:
by arkantos

Thường thì, khi bạn tạo ra một class, bạn chỉ chỉ ra object thuộc class đó trông như thế nào, có những hành vi gì. Bạn chưa thật sự có bất cứ thứ gì cho đến khi bạn tạo ra một instance của class đó. Chỉ khi đó thì vùng lưu trữ cho data mới được tạo và method mới có hiệu lực.

Tuy nhiên, có hạn chế khi: 1. bạn chỉ muốn có một vùng lưu trữ  cho một loại dữ liệu thôi, không phụ thuộc vào số object được tạo ra, 2. bạn muốn có những method không gắn liền với object cụ thể nào cả, method mà có thể gọi ngay khi chưa tạo ra object nào cả. Để khắc phục hạn chế này, hãy sử dụng từ khóa static

Để làm cho một field hay method trở thành static, chỉ đơn giản đặt từ khóa static lên trước khai báo của nó.

Ví dụ:

class StaticTest {
  static int i = 47;
}

Bây giờ, nếu bạn tạo ra 2 object s1, s2 thuộc class trên thì nó vẫn chia sẻ chung một vùng lưu trữ  i. Tức là s1.i và s2.i là cùng 1 giá trị.

Để chỉ một biến static, có thể thông qua object như thông thường hoặc thông qua chính class.

Với static method cũng như vậy. Ví dụ:

class StaticFun {
  static void incr() { StaticTest.i++; }
}

Ta có thể gọi hàm incr() từ object thuộc class StaticFun, hoặc từ chính class StaticFun.

Điểm khác nhau: static, khi áp dụng với field thì sẽ thay đổi hoàn toàn cách lưu trữ data, một bên là chỉ một vùng cho mỗi class, một bên là một vùng cho mỗi non-static object. Còn khi áp dụng với method, tác dụng lớn nhất của nó là có thể gọi method mà không cần phải tạo object, điều này rất quan trọng ví dụ như khi định nghĩa main() method.

[Java]Khái niệm Object trong Java

2009 February 19
tags:
by arkantos

Đầu tiên, phải ghi nhớ một điều hết sức quan trọng khi lập trình với Java: Everything is an object.

Mặc dù bạn treat mọi thứ đều như object, nhưng thực tế cái bạn làm việc với lại là reference đến object đó. Cũng có thể có trường hợp reference không chỉ đến object nào cả. Ví dụ như thế này, ta khai báo:

String s;

Thì ta mới chỉ định nghĩa reference s còn chưa chỉ ra s refer đến object nào. Ta phải khai báo tiếp, chẳng hạn:

String s = "asdf";

Nhưng đây là cách khai báo chỉ dùng riêng cho đối tượng String thôi (có thể init bằng một đoạn text). Còn thường thì ta phải có một cách tổng quát hơn để thực hiện khởi tạo đối tượng.
Bạn phải nhớ điều tiếp theo: You must create all the objects

Bằng cách sử dụng từ khóa new

Ví dụ:
String s = new String("asdf");

Đến đây, ta sẽ tạm chuyển sang nói về một vấn đề khác:Where storage lives?
Có 6 vị trí để lưu data:
1. Registers: nơi lưu trữ nhanh nhất, nằm trong bộ vi xử lý. Nhưng số lượng rất rất hạn chế
2. The stack: nằm trong RAM, rất nhanh, chỉ sau registers thôi. Chứa các object refences.
3. The heap: vùng nhớ đa năng, nằm trong RAM, là nơi chứa tất cả các Java objects
4. Static storage:
5. Constant storage:
6. Non-RAM storage:

Có trường hợp đặc biệt là kiểu dữ liệu nguyên tố (primitive types). Thay vì tạo ra một biến bằng cách sử dụng new, một biến được tự động tạo ra mà không phải là reference. Biến này sẽ lưu giá trị và được đặt vào trong stack, hiệu quả hơn nhiêu.
Điều tiếp theo mà bạn cần ghi nhớ:You never need to destroy an object.
Ta thấy khi ví dụ như reference ra khỏi scope của nó thì sẽ mất, tuy nhiên object vẫn không mất đi theo. Vậy lúc đó phải làm cách nào để object không ở mãi trong bộ nhớ, mặc dù reference đến nó đã hết hiệu lực? Câu trả lời là một chức năng của ngôn ngữ Java là garbage collector, theo dõi các object được tạo ra bằng từ khóa new và xem có object nào không còn được tham chiếu nữa, để giải phóng bộ nhớ cho object mới.
Khi muốn tạo một loại (type) các object thì làm thế nào? Ta sử dụng từ khóa class và định nghĩa type như sau:

class ATypeName { /* Class body goes here */ }

sau đó ta khai báo các fields và methods của lớp này.

- Fields: Một field được định nghĩa là một object mà ta có thể giao tiếp với nó thông qua reference của nó. Nó cũng có thể là một trong số các primitive types (ko phải reference). Nếu field là một reference thì ta phải khởi tạo để reference đó liên kết với object thực (trong một hàm constructor). Khi primitive types là một thành phần của class, nếu không khởi tạo nó thì nó sẽ nhận một giá trị mặc định được quy định sẵn, nhưng tốt nhất là bạn nên khởi tạo rõ ràng các biến của mình.

- Methods: “a way to do something”. Sẽ đề cập cụ thể sau.

Nói chung là, có thể coi một chương trình trong Java là một tập hợp các object với các method, sử dụng các object khác làm argument, và gửi message đến các object khác.

[Java]Java và Internet

2009 February 13
tags:
by arkantos

Trước hết, ta cần hiểu cơ  chế client/server:

Ý tưởng chính là có một nơi chứa được coi là một kho chứa dữ liệu (database ), mong muốn chia sẻ cho một số lượng machine hay người nào đó. Kho dữ liệu này có thể được sửa đổi, thêm bớt… nhưng mọi sự thay đổi phải được phản ánh tới tất cả các machine truy xuất đến nó. Kho chứa dữ liệu, software dùng để phân phát dữ liệu, và machine chứa database và software này, hơp lại thì ta gọi là server. Software nằm trong remote machine, thực hiện việc nhận, xử lý, display thông tin nhận được từ  server, gọi là client.

Trước đây, có một vấn đề là thường thì, mỗi khi client cần phải thực hiện một thao tác nào đó cần programming, nó đều phải gửi thông tin về server để yêu cầu xử lý. Phương pháp này có nhược điểm là, vắt kiệt công suất của server, tăng hao tốn băng thông, trong khi đó thì không tận dụng được sức mạnh của client. Vì thế, người ta đã cải tiến bằng cách, tích hợp thêm khả năng chạy các chương trình (trong web browser) ở phía client. Phương pháp này gọi là client-side  programming. Các phương pháp tiếp cận gồm có:

Plugins: Thêm các tính năng mới vào trong web browser

Scripting languages: JavaScript, VBScript, Tcl/Tk. Có thể giải quyết đến 80% các vấn đề gặp phải trong client-side programming. Nhược điểm là code sẽ visible với mọi người.

Java: gồm 2 thành phần là Applet và Java WebStart. Applet là một chương trình nhỏ chạy trong web browser. Chương trình này chạy được ở mọi môi trường, chỉ cần web browser có cài đặt Java interpreters. Nó có ưu điểm hơn Scripting language là nó ở dạng compiled, nên không sợ lộ source code. Tuy nhiên, dung lượng của nó lại lớn hơn nhiều so với scripting language. Về mặt bảo mật, thì Applet đảm bảo bảo mật bẳng cách chỉ chạy trong sandbox, nơi check xem Applet có thực hiện ghi hay xóa file trên đĩa hay không. Nên nói chung, Applet là khá an toàn đối với người sử dụng. Nếu muốn bảo mật hơn nữa, thì có tể sử dụng applet digital sign.

Còn Java WebStart là môi trường đê thực hiện các chương trình ko cần web browser để chạy. Cũng để phục vụ cho client-side programming.

Server-side programming:

Truyền thống thì, người ta hay sử dụng các ngôn ngữ như Perl, Python, C++ để tạo ra các CGI programs dùng để xử lý các request từ phía client. Bên cạnh đó, hiện nay có thêm Java-based web server, cho phép thực hiện tất cả programming trên Java, bẳng cách viết các chương trình gọi là Serverlet, và JSP.


[Linux]Cach mount phan vung Windows trong Ubuntu

2009 February 6
tags:
by arkantos

Hom nay, khong hieu sao phan vung Windows tu dung bien mat, mac du moi lan thi no’ tu dong xuat hien trong Ubuntu. Minh` co’ search qua mang mot chut, thi thay bai nay ap dung kha tot, nen copy ve day vay

Link goc’: http://www.cyberciti.biz/faq/mounting-windows-partition-onto-ubuntu-linux/

Q. How do I mount NTFS or FAT paritions under ubuntu Linux?

A. You can mount NTFS or FAT windows partition with mount command.

=> Click on Applications
=> Select Accessories
=> Select Terminal
=> Now terminal window will be on screen.

First you need to create directory where you can attach windows partition using mount command (for example /media/c for C:):# sudo mkdir -p /media/cNow find out list of partition (click on System > Administration > Disks ) or use following command:# sudo fdisk -l

Output:

Device Boot      Start         End      Blocks   Id  System
/dev/hdb1   *           1        2432    19535008+  86  NTFS
/dev/hdb2            2433        2554      979965   82  Linux swap / Solaris
/dev/hdb3            2555        6202    29302560   83  Linux

As you see /dev/hdb1 is NTFS partition. Now type following command:# sudo mount -t ntfs -o nls=utf8,umask=0222 /dev/hdb1 /media/cTo unmount Windows NTFS partition type command:# sudo umount /media/cTo mount FAT partition type command:# sudo mkdir -p /media/d
# sudo mount -t vfat -o iocharset=utf8,umask=000 /dev/hda1 /media/d

To unmount Windows FAT (mounted at /media/d) partition type command:# sudo umount /media/d

Where,

  • -t : Specify file system type (such as NTFS or FAT)
  • umask=VALUE: Set the umask (the bitmask of the permissions that are not present). The default is the umask of the current process. The value is given in octal.
  • iocharset=VALUE: Character set to use for converting between 8 bit characters and 16 bit Unicode characters. The default is iso8859-1. Long filenames are stored on disk in Unicode format.