Wednesday, December 14, 2005

Dynamic binding trong Java

Chẳng hạn ta thực hiện câu lệnh: x.f(param); khi đó dynamic binding sẽ họat động như sau:

+ Lấy tất cả các method có tên là f từ bảng method lookup (bảng này bao gồm cả các method ở các class cha của class mà x là một instance)
+ Lấy ra tất cả các method có tham số có kiểu phù hợp với param, phù hợp bao hàm cả việc implicit casting trong các method đã được lấy ở trên
+ Dựa trên kiểu của method (private, static, final hay constructor), khi này, JVM sẽ chọn đúng method cần thiết nhưng là static binding
+ Nếu vượt qua bước 3, JVM sẽ gọi method tương ứng với kiểu thực sự của x. Nếu không có method tương ứng với kiểu thực sự của x, JVM sẽ lần ngược lên inheritance hierachy để tìm và gọi method gần nhất.

Hơi ngớ ngẩn 1 chút nhưng bài này refine lại bài: Dynamic binding trong Java :-D

Sunday, December 11, 2005

100% Table Height

Hôm nay chẳng làm được mấy việc. Lên Tesco ngồi mãi Cho mới thèm mò đến. Test chương trình có tí lỗi cần sửa, giờ thì xong rồi.

Cả buổi chiều hì hục làm cái thiệp Giáng sinh cho cô ấy mà không hiểu sao trên máy mình IE hiển thị ngon thế mà đẩy lên server của Brinkster nó cứ đơ ra vậy nhỉ?

Loay hoay dùng Dreamweaver 8, phát hiện ra 1 lỗi của nó. Nếu save hăng quá thì file temp của file đang sọan thảo sẽ tèo, không những thế file gốc cũng biến mất luôn.

Có thêm kinh nghiệm về việc sử dụng thẻ table. Khi dùng thẻ table nếu đặt thuộc tính height là 100% thì nó cóc ăn. Để giải quyết vấn đề này, người ta phải dùng CSS. Cụ thể là như sau:

+ Khai báo 1 chú:

body, #wrapper {
height:100%;
}

+ Đặt thuộc tính id của bảng muốn có height là 100% là "wrapper"

Tối ngắm nghía chỉnh lại site một chút nào.

Cập nhật: Phần 100% table height thiếu 1 chút. Bạn bắt buộc phải đặt body có height là 100% thì mới ăn.

Saturday, December 10, 2005

Hỗn độn

1 ngày sau khi Sun đưa ra JDK 5.0 Update 6, JetBrains đã cập nhật IntelliJ IDEA lên build 4096 với một số sửa lỗi, bổ xung thêm một số tính năng trong DevKit plugin (bộ plugin hỗ trợ phát triển các plugin cho IntelliJ IDEA) và cập nhật lên JDK bản mới nhất. Phần tiêu đề và phần splash đã chuyển thành version 5.1 nhưng ảnh nền của splash vẫn bị để quên là 5.0.

Hì hục cả ngày đã hòan thành nốt công việc ở Samsung Tesco nhưng mai vẫn phải lụi cụi đi làm buổi sáng để chúng nó test chương trình. Tuần sau lại trở về head office cày tiếp RF cart system với Park. Chán bỏ cha ra nhưng việc thì vẫn phải làm.

Định chắc vẫn loay hoay với cái lỗi của MySQL nên chưa thấy dựng lại blog. Thuận đếch có gì để viết hay sao nên 2 hôm nay cũng ko cập nhật blog. Còn mình thì đang bịa ra để viết đây.

Hôm nay ông bạn Trang yêu quý cưới vợ. Gia đình chuẩn bị có vẻ phức tạp quá, măm đến 3 hôm cơ đấy. Biết là Trang cũng chưa muốn lấy vợ nhưng Giang nó cũng đã đến tuổi rồi, cái gì đến thì rồi nó cũng sẽ phải đến thôi. Chúc 2 bạn hạnh phúc! Mà quanh mình cũng có nhiều người biết yêu quý cái gia đình của mình đấy chứ, anh Châu này, anh Quang này, rồi Trang nữa. Họ đều là những người để mình nhìn nhận, học hỏi.

Hôm nay nói chuyện với Loan một chút, chẳng hiểu M có gì bất ngờ cho mình đợt tới nhỉ? Mình cũng chẳng kém đâu, M sẽ cực kì bất ngờ cho mà coi ;-)

Cuối tuần này chưa có kế hoạch gì rõ ràng cả.

Wednesday, December 07, 2005

JDK 5.0 Update 6 đã được tung ra

Đúng cái hẹn cứ 2 tháng một lần, Sun lại tung ra bản update tiếp theo cho JDK. Giờ đã là phiên bản update 6. Phiên bản này có sửa một loạt lỗi từ phiên bản update 5 và củng cố cũng như nâng cao tính bảo mật của Java, một tiêu chí đã được nhấn mạnh trong Java kể từ khi nó ra đời và thời gian rồi đã phát hiện 1 số lỗi. Tiếp tới có lẽ là 2 bản update nữa trước khi Mustang ra lò, dự kiến vào mùa hè 2006.

Giữa cái nóng như thiêu, như đốt của mùa hè 2006 để xem ngựa thảo nguyên (mustang) tung vó thế nào ;-)

Tuesday, December 06, 2005

Mục đích học Java của tôi

Đây là câu trả lời cho câu nói "Cho biết mục đích trước rồi bàn tiếp ;-)" của anh cl khi có 1 bạn hỏi "Học Java như thế nào?".

Em muốn học Java để:

+ Nắm chắc được những API của nó
+ Hiểu được cái hay của OO cũng như các nguyên tắc thiết kế
+ Có thể viết được những chương trình có khả năng mở rộng và flexible tốt nhất
+ Theo đuổi sở thích và đam mê của mình

Monday, December 05, 2005

ref và out

Trong C#, các biến có kiểu value type (int, long int, float, double, ...) có thể được truyền vào method bằng tham chiếu nếu bạn sử dụng từ khóa ref hoặc out khi khai báo tham số của method.

out khác ref ở điểm: tham số nào được khai báo out thì khi truyền từ bên ngoài vào không bắt buộc phải được khởi tạo giá trị. Ví dụ:


private static void DoSomething(ref int x, out int y) {
x = 2;
y = 1;
}

public static void Main() {
int x = 1;
int y;

DoSomething(x, y);
}

Có thể bạn sẽ lo lắng vậy y không cần khởi tạo mà vẫn dùng được. Yên tâm, M$ đã lo trước điều này và bắt bạn phải có câu lệnh gán giá trị vào biến được khai báo out.

ref và out thực chất là sự "đánh lừa" lập trình viên để họ ngỡ rằng mình có thể sử dụng các biến value type để truyền theo tham số. Nhưng thực chất bên trong M$ đã dùng boxing để chuyển về các kiểu refrence type tương ứng với các kiểu value type được dùng làm tham số.

Điều này không có trong Java mà trong Java bắt buộc bạn phải sử dụng reference type để khai báo cho tham số của method. Bạn lo lắng về việc phải chuyển từ primitive type sang reference type để truyền vào method? Ko phải lo, trong JDK 1.5 đã có auto-boxing. Còn bản thân tôi thích sự rõ ràng này!

Friday, December 02, 2005

Rửng mỡ!

Theo đúng như kế hoạch, Firefox 1.5 và KDE 3.5 đã được tung ra ngày 29/11.

+ Cảm nhận về Firefox chưa thấy có gì đặc sắc do có lẽ mình đã dùng quen các bản beta và RC trước đó rồi nhưng tốc độ load trang đã được cải thiện thêm 1 chút (lại chỉ là cảm nhận).

+ Vấn đề còn lại là của KDE. Ngay khi vừa được tung ra, KDE đã vướng 1 lỗi ngớ ngẩn liên quan đến thư viện python-qt. Khi mình định nâng cấp lên KDE 3.5, YAST của SuSE 10.0 đã thông báo thiếu thư viện python-qt v3.5.08. Tuy nhiên, sau hơn 1 ngày KDE 3.5 được tung ra, các YAST source server mới bắt đầu có thư viện python-qt v3.5.08. Thế nhưng khi tải thư viện này về và cài đặt, mình lại vướng 1 cái conflict với python-qt obsoletes PyQt. Dùng Linux mà thế này thì khốn khổ chẳng khác gì như khi dùng Windows mà gặp lỗi cả.

Cả ngày ngồi test cái chương trình mà điên hết tiết vì toàn không lấy được RSSI. Khốn khổ khốn nạn. Hôm nay, việc làm có ý nghĩa duy nhất là giở chứng lôi C# ra đọc và ăn được 2 bữa cơm no bụng. Rửng mỡ!