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ỡ!

Wednesday, November 30, 2005

Một ngày nữa

Tin đầu tiên trong ngày đáng chú ý là 2 nhà phát triển Web Work đã bắt tay với (cũng) 2 nhà phát triển của Struts để tạo ra cái gọi là Struts Action Framework, hay Struts Ti. Cái tên Struts Ti đọc nhái thành "Sờ chút ti" (hay "Sờ ti chút" ;-)), chẳng thấy ý nghĩa chóe gì cả, Struts Action Framework có phải là "hầm hố" hơn ko nào? Điều đáng chú ý là các nhà phát triển các open source framework đã có xu hướng kết hợp lại với nhau nhằm (chưa biết thực tế ra sao) đưa ra 1 framework hứa hẹn hơn. Điều đó tốt hơn cho sự hỗn loạn của các framework hiện nay trong Java. Chúc Don Brown, Ted Husted, Jason Carreira, và Patrick Lightbody có thể đưa ra được 1 framework tốt, kết hợp được điểm mạnh của cả Struts và WebWork.

Tin thứ 2 là ngày hôm nay đoàn thể thao VN đã dành được 23 huy chương vàng, vươn lên đứng thứ 2, chỉ còn kém đoàn dẫn đầu chủ nhà Philipines có 6 huy chương vàng. Giữa cái XH hiện nay, điều duy nhất có thể gắn con người ta với nhau chính là thể thao. Chúc mừng các anh chị!

Hôm nay đã ngắm nghía qua đảo Jeju, thấy nó hay hơn nhiều so với công viên Vivaldi. Nếu túi tiền cho phép, làm chuyến đi Jeju, hòn đảo tình yêu, phát.

Kết thúc chương trình xác định vị trí được implement dựa trên việc dịch vectơ. Nhưng quả thực mà nói, mình đếch tin tưởng vào dự án này lắm vì cơ sở lý thuyết ko chắc chắn lại có quá nhiều các yếu tố ảnh hưởng nằm ngoài khả năng kiểm soát của con người.

Cập nhật mã nguồn custom file filter. Thực ra đổi tên biến private pattern thành regexPattern sẽ sáng sủa hơn 1 chút.

Bọn Brinkster vẫn bị lỗi ở phần File Manager. Không biết các loại tài khoản khác thế nào nhưng đúng là của cho không không phải của nào cũng thơm.

Tuesday, November 29, 2005

Một custom file filter đơn giản

Do nhu cầu công việc nên tôi nảy sinh ra ý định viết một custom file filter đơn giản. Nhiệm vụ của custom file filter là lọc các file có trong một thư mục theo một pattern lọc do người dùng cung cấp. Pattern này chấp nhận các ký hiệu wildcard (* và ?), giống như khi bạn dùng dir *.txt vậy.

Class CustomFileFilter implement interface FilenameFilter và bổ xung mã cho method accept() để phục vụ mục đích trên.

Ngoài ra, tôi có thêm một helper class để việc match tên file với pattern được dễ dàng.

Sau đây là mã nguồn:

CustomFileFilter.java


FilterHelper.java


Chú ý:
+ Các kí tự /, \, :, ?, *, ", <, >, | là các kí tự không được phép có trong tên file ở Windows.

+ Chương trình mới chỉ được thử nghiệm trên các tên file là các kí tự tiếng Anh trên Windows, chưa được thử nghiệm trên các tên file có các kí tự tiếng Việt, Hàn, ...

Cập nhật mã nguồn 29/11/2005: Trong class FilterHelper, đẩy phần chuyển plain pattern nhận từ ngoài sang regular expression pattern vào method buildRegexPattern.

Monday, November 28, 2005

ActiveState phò vật

Đang đọc regular expression định nghịch Perl tí thế mà vô site của ActiveState để download thử Komondo 3.5 về mà đíu được. Đăng ký thì bắt đến 2 lần, đến lúc nhập mail thì tòan báo Fatal Error không gửi được mail mà mình gõ cả mail Yahoo, cả mail công ty rồi đấy chứ. Phò vật!

Hot news: Theo kế hoạch thì FireFox 1.5 sẽ được tung ra vào ngày 29/11, cùng ngày với việc tung ra KDE 3.5.

Các tính năng mới trong FireFox 1.5: http://www.mozilla.org/products/firefox/releases/1.5.html

Các tính năng mới trong KDE 3.5: http://developer.kde.org/development-versions/kde-3.5-features.html

Wednesday, November 23, 2005

Thursday, November 17, 2005

VS 2005 is only for big things

When I try to edit and save a file which contains Korean characters but is saved in ASCII type, I got this message.


Maybe VS 2005 Team Edition for Software Developers can not proccess data 'cause it too small :-D

Tuesday, November 15, 2005

Ngày hôm nay...

Hết bão, lũ rồi lại cúm gà. Năm nay thực sự là năm khốn khổ.

Mới hôm nào đọc bài báo về 1 ông mất hơn 5 tỉ sau 1 trận bão, đến 1 gia đình chỉ có 2 bố con, bố tàn tật, con nhỏ dại ôm nhau trên giường chờ lũ cuốn, giờ lại đến những con người khốn khổ về cúm gà. Đọc những bài báo toàn những đau thương, khốn khổ, tủi cực, ngẫm lại mình chẳng ra cái chó gì, sống không ra chi, chết thì chỉ khổ gia đình, người yêu.

Giờ ngày cơm 2 bữa, sáng tu sữa đi làm, ngồi gõ code đầu không cần nghĩ. Nhiều lúc thấy cuộc sống sao mà chán ngán đến vậy.



Nhìn khuôn mặt người đàn ông này xem. Một khuôn mặt khốn khổ, đầy những nét đau thương. Thế nhưng họ vẫn sống và phải sống. Ngẫm lại mình, mình vẫn sống và phải sống!

Monday, November 14, 2005

Trách nhiệm

Hôm qua mình đã nói với cô ấy về quyết định của mình, một quyết định mà mình sẽ ko thay đổi. Nhưng giờ trong mình là 1 cảm giác lo lắng.

Trước mình hay than thở với anh Châu, giờ mình ko thể làm như vậy. Một người đàn ông phải biết cái gì đáng để than thở, mà cũng ko thể biến anh Châu thành cái sọt để mình chút đủ thứ suy nghĩ của mình vào đó.

Đi làm đã được 4 năm, vậy mà khả năng cũng như kiến thức mình tích lũy được cũng chẳng được là bao. Khả năng tập trung của mình chưa được tốt, mình vẫn còn luời làm, lười suy nghĩ lắm. Phải chăng mình chỉ có thể làm được thợ code? Thế thì tệ thật! Mình thèm được như anh Hải, Thuận, Thắng cận, có thể họ ko tòan năng trong công việc, nhưng nếu mình có được cái góc mà họ tốt nhất, mình sẽ thấy hạnh phúc hơn. Đó là chưa kể mong muốn được như anh Châu, điều đó có lẽ xa vời mất.

Hôm qua nói chuyện với cô ấy, xem mấy tấm ảnh cô ấy chụp ở đám cưới chị Thủy, mình thấy thương cô ấy quá. Giờ không chỉ là trách nhiệm của mình với gia đình, với chính bản thân mà còn cả trách nhiệm của mình đối với cô ấy.

2 chữ "trách nhiệm" thật đáng sợ. Nhưng nếu ko có những cái trách nhiệm ấy, sinh ra trên đời phỏng cũng chẳng có ý nghĩa gì.

Saturday, November 12, 2005

Linh tinh

Hôm nay thấy Sun đem Java Studio Enterprise ra "bỏ chợ" nhào vô định tải về thì gặp Fatal exception to tướng. Quay sang phơ Java Studio Creator, cũng thế nốt. Chán!


Cài Visual Studio 2005 Professional (VS2005) được gần 10 ngày rồi mà chưa nghịch được gì mấy. Nghía qua thì thấy nó thay đổi cách làm việc khá nhiều. Đặc biệt là giờ VS2005 đã nhúng 1 thằng web server vào bên trong nó (tiền thân của thằng này chắc là Cassini). Thêm nữa là việc tách riêng các ứng dụng web ra cái gọi là Visual Web Developer 2005.

Thế nhưng chưa gì đã phát hiện VS2005 có bug. Giống như anh T nói "Cái bọn của nợ, mỗi lần sản xuất được cái quần thì thể nào cũng có vài miếng vá ở mông". Nhưng nghe nói lỗi này ko gặp ở VS 2005 Team Edition. Giờ tớ đang download VS 2005 Team Edition for Software Developers đây. 1 ngày + 4 tiếng nữa mới xong :-D

Hôm qua thì ICQ Support Team thông báo hiện giờ đếch gửi SMS đi TW được nữa. Củ chuối thế, phương tiện để mình liên lạc với cô ấy dễ dàng và đơn giản nhất giờ đã đi tong.

Ngồi nghe mấy bản nhạc trong cd The Best Of Sad Music mà thấy buồn nẫu ruột và nhớ cô ấy. Khả năng kí tiếp HĐ với công ty đã chắc trong tầm tay, giờ là cần xác định thời gian bao lâu và đặt bút kí nữa thôi. Bao lâu à? Mình đã có tính toán, cân nhắc cả rồi.

Một bức ảnh đẹp



Một bức ảnh với gam màu sáng, hiền dịu, hòa bình nhưng vẫn có sự tương phản, đó là sự tương phản trong bối cảnh. Với 1 bóng cây cô đơn phía góc duới, trong khi xa xa đằng sau là rặng cây và lấp ló xa nữa là những ngôi nhà cao tầng hiện đại. Tuy nhiên ở giữa sự tương phản đó lại có sự kết nối của những cánh chim và một bóng đen (tớ cho nó là con ngựa cho nó thơ mộng). Bức tranh còn có sự tương phản giữa màu xanh của bầu trời và của thảm cỏ phía dưới. Đặc biệt, người chụp đã để một khoảng trời rất rộng ở phía trên để tạo sự thoáng đãng và mở.

Đẹp và nhẹ nhàng!

Chớm đông và cô gái Hàn quốc

















Thursday, October 27, 2005

I've got Manning's Ajax in Action

Đúng 5 ngày sau khi Manning release cuốn Ajax in Action, tôi đã có nó. Bạn hỏi tôi có từ đâu ấy à? Ấy đừng, tôi không thể nói ở đây được.

Đợt tới ngồi nhà đếch có Internet tôi sẽ đọc nó chơi. Have fun, Manning! ;-)

Monday, October 24, 2005

Một buổi sáng thanh bình!

Mặc dù đêm qua thức khá muộn nhưng sáng nay mình dậy khá sớm, có mỗi hơn 10h :-D

Sau mấy lời nhắn tin chúc cô ấy đi chơi vui vẻ, mình cắm đầu vào đọc Swing. Mở tung cửa sổ ra, nghe Canon in D trong cái thời tiết hơi lạnh lạnh bao quanh, cảm thấy lòng thật thoải mái. Có ai nghe Canon in D cùng mình ko?

Rock nhé: Yngwie Malmsteen
Violon + violoncen nhé: Bond
Rap nhé: Coolio
Techno nhé: Unknown

Mình khoái Yngwie MalmsteenBond hơn. Bạn thì sao?

Một buổi sáng thanh bình!

Saturday, October 22, 2005

Do not automatic compile in IntelliJ IDEA 5.0.2 Build #3516

When I try to create 2 class A and B, if in class A, it has a reference to class B, I can not compile class A in IntelliJ IDEA 5.0.2 Build #3516.


I found that if I compile class B first and then compile class A, it's OK.

public class A {

public A() {

B b = new B();

}

}

public class B {
}

And if I add main() method to class A

public static void main(String[] args) {

A a = new A();

}

then run class A. Now it works well!

Update at 6:57 PM: If you meet this problem, please enable Settings | Project Settings | Compiler | Honor dependencies on "Compile" command.

Thanks Sascha Weinreuter! But I think that it should be enable by default.

Wednesday, October 19, 2005

Refactoring problem in IntelliJ IDEA 5.0.2 Build #3516

I have a Sketch.java file in folder chap08, it includes a public class Sketch and some none public classes (SketchFrame, SketchPanel).

When I try to move these classes to package chap09, IntelliJ IDEA only can move class Sketch and SketchFrame. I saw that it still exists Sketch.java file in folder chap08 but it contains only class SketchPanel.

If I try to move class SketchPanel to package chap09, it shows an error "Sketch.java already exists in chap09" or something like that. I think that problem takes place 'cause the order in moving file of refactoring process is not correct. Stupid bug!

And I don't understand while in Project tab of Project pane, it shows class name, not file name. Please let the Package tab do it only!!!

Tuesday, October 18, 2005

Running button - A love game

I wrote this game to anger my darling. I will bet her that if she can click on the No button I will kiss her 10.000 kisses :-D

Description:

+ The game ask user "Do you love me?"
+ If user click "Yes", it will show "I love you too, honey!" and exit
+ If user move the mouse over the No button, this button will jump to another place so user can not click it

Note: User can not close the game by using Close button in the title bar

I will convert it to applet soon

Source code

Monday, October 17, 2005

Stupid bugs in Firefox 1.5 Beta 2

When I use right click on a part of table in UK Top Movies list of IMDB site, it show menu of Macromedia Flash plugin. See the picture


Sometimes righ click menu does not work. I must to click to activate another application then go back to Firefox and now it works.

And sometimes I can not paste the content which I copy from address bar (URL) or select & copy a part of Web page by using Ctrl + C.

Sometimes downloading file is fail but I don't clean the cache.

All of them are stupid bugs!

Sunday, October 16, 2005

A bug in IntelliJ IDEA 5.0.2 Build #3516

I found that in IntelliJ IDEA 5.0.2 Build #3516, the method seperator line will not show if I enter the close brace in the same line with open brace and method declaration.

Note: This problem will only take place when you have 2 successive methods but these methods do not implement anything. See the picture for more detail

Saturday, October 15, 2005

Must in love game

This is a funny game I wrote for my darling

Description:

+ This program will ask user "Do you love me?"
+ If user answers "Yes", proram will show "I love you too!!!" and exit
+ If user answers "No", it will show a confirm dialog to ask user again. This confirm dialog will be showed until user anwser "Yes"

Note: User can not close prgram by using Close button in the title bar

Source code

Friday, October 14, 2005

Làm thế nào để confirm khi đóng cửa sổ bằng nút Close trên title bar trong Java?

Đơn giản lắm thêm đoạn code sau để có 1 thằng cu "đứng nghe" sự kiện đóng cửa sổ vào constructor của frame:

addWindowListener(new
WindowAdapter() {

@Override
public void windowClosing(WindowEvent event) {

if (JOptionPane.showConfirmDialog(WindowsAdapterFrame.this,
"Are you sure in exit?",
"Try WindowAdapter",
JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {

System.exit(0);

}

}

}
);

Thế thôi à? Không đâu! 1 điều rất quan trọng là phải thiết lập hành động mặc định khi đóng cửa sổ là "KHÔNG LÀM GÌ CẢ"

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE)

Thẻ <code> đếch thò thụt gì cả. Thẻ <pre> thì okie nhưng dòng text dài thì trông thật ngu xuẩn. Firefox đã tệ, IE còn tởm hơn!

Thursday, October 13, 2005

Một điểm ngớ ngẩn trong Java

Trong Java, class SystemColor có 2 hằng desktopDESKTOP. Trong khi desktop có kiểu là Color thì DESKTOP lại có kiểu int. Ngớ ngẩn!

Chưa kể documentation của JDK 1.5 cũng dở hơi. Nhấn vào desktop hay DESKTOP đều nhảy tới DESKTOP hết.

NetBeans 5.0 Beta demo

Eclipse nguy đến nơi rồi :-D


http://www.javalobby.org/eps/netbeans5/

Manning's Ajax in Action is already for MEAP

Ajax in Action (in MEAP) was released by Manning in Oct. 5, 2005, late 2 days as schedule.


The final ebook (in PDF) will be released in Oct. 19, 2005 (as schedule). Hope that it will not late!

For more information, go here: http://www.manning.com/books/crane

IDEA IntelliJ 5.0.2 Build #3516 EA

Tuy đã có tên 5.0.2 nhưng thực ra đây mới chỉ là phiên bản early access của IDEA IntelliJ 5.0.2 mà thôi.


+ Cải tiến đầu tiên và dễ nhìn thấy nhất là JetBrains đã cập nhật JRE 1.5.0 Update 5 cho IDEA IntelliJ. Nhưng sao JetBrains lại đề là JDK 1.5.0_05 nhỉ? Ngớ ngẩn!

+ Performance tốt hơn, đặc biệt khi nạp project.

Có thể trong vòng từ 1 đến 2 tuần nữa bản IDEA IntelliJ 5.0.2 chính thức sẽ được release.

Tuesday, October 11, 2005

Firefox 1.5 Beta 2


Firefox 1.5 Beta 2 mới xuất chuồng được 2 ngày hôm nay.

Qua sử dụng ban đầu thì thấy phiên bản này đã đỡ đi được khá nhiều lỗi, đặc biệt một số lỗi rất ngu xuẩn như lúc hiện popup nhiều khi không thể đóng được, chạy Firefox nhìn thấy trong task list có firefox.exe nhưng chẳng thấy cửa sổ đâu cả, nhiều lúc cứ đớ đờ đơ cả máy ra...

Render của phiên bản này cũng tốt hơn (từ 1.5 Beta 1). Dùng phiên bản này vào Fixdown thấy lên được mục search, trong khi ở 1.0.x chẳng nhìn thấy đâu.

Hy vọng trong các phiên bản tiếp theo sẽ có nhiều cải tiến và đem lại tính ổn định cao hơn. Nếu không tớ quay lại dùng IE hoặc sang Opera (giờ đã free) còn tốt hơn.

Monday, October 10, 2005

Lạnh quá

Vừa ngồi nghịch Swing tí. Chạy mỗi cái chương trình hiển thị 2 cái frame trống trơn cùng một lúc mà màn hình rung bần bật. Đếch hiểu sao! Sư nó! Hóa ra tại cái driver của NVIDIA, làm ông mất công download.

Cái sứ Hàn này mới đầu tháng 10 mà đã lạnh quá đi mất. Hôm nay cả ngày nằm đắp chăn đếch buồn họat động. Sướng!

Sunday, October 09, 2005

Cảm nhận đầu tiên về SuSE Linux 10.0

Tôi vừa cài đặt xong SuSE Linux 10.0 sau gần 2 ngày rưỡi hì hục download (tại nhiều người sô vào download mà) cách đây khoảng 15 phút.

Sơ qua về SuSE 10.0

Từ phiên bản 10.0, SuSE được phát triển dựa trên dự án mã nguồn mở openSuSE và được Novell redistribute. Theo nhìn nhận từ bên ngoài, dự án này hoạt động khá "nhanh nhẹn", trước khi phiên bản chính thức của SuSE 10.0 được release, trên site openSuSE đã xuất hiện phiên bản alpha 1 của SuSE 10.1 với khá nhiều thay đổi như dùng KDE 3.5 beta, YAST không sửa đổi master boot record như các phiên bản trước, cập nhật nhân Linux mới nhất, cập nhật openLDAP mới nhất ...

Cũng nên nói đến điểm khác biệt trong việc phát triển 2 dự án phát triển HĐH Linux, openSuSE của Novell và Fedora của Redhat. Chúng khác nhau là ở chỗ: trong khi phiên bản mã nguồn mở SuSE của Novell giống hệt phiên bản họ bán (chỉ khác là phiên bản bán có thêm 1 số phần mềm không phải mã nguồn mở và hỗ trợ từ Novell) thì Fedora lại là phiên bản giản lược so với Red Hat Enterprise Linux WS. Theo ý kiến cá nhân, tôi cho rằng sự khác nhau này sẽ đem lại lợi thế cho Novell trong tương lai.

SuSE 10.0 được redistribute dưới 3 dạng:

+ Mã nguồn mở (OSS): Chỉ chứa các thành phần mã nguồn mở mà không chứa một số phần mềm không "mở" khác như J2SDK, Flash Player, Acrobat Reader, ... Miễn phí!

+ Evaluation: Giống như dạng OSS nhưng có kèm những phần mềm không "mở". Mang danh là evaluation nhưng không hề bị giới hạn thời gian sử dụng. (Không rõ Red Hat Enterprise Linux WS có đọan "free 30-day evaluation subscription" có phải là bị hạn chế sử dụng trong 30 ngày không? Có bạn nào confirm hộ cái.). Miễn phí!

+ Box/retail: Giống hệt evaluation nhưng có tài liệu hướng dẫn bằng sách in và hỗ trợ kĩ thuật từ Novell và tất nhiên là mất tiền, nhưng 60$ cũng không phải là cái giá quá đắt nếu so sánh với giá của Windows XP.

Bạn có thể download SuSE dưới dạng 5 đĩa CD (chỉ có bản 32 bit), 1 đĩa DVD kép (gộp chung cả 32 bit và 64 bit). Và hình như còn có bản DVD 32 bit riêng, 64 bit riêng. Tôi chỉ download dạng 5 CD do chưa có tiền mua DVD writer :-D

Cảm nhận đầu tiên về SuSE 10.0 (Tôi cài đặt bản evaluation)

Cái dễ nhìn thấy đầu tiên là Novell đã đổi màu cho SuSE. Nay thay vì màu xanh lục như trong bản 9.3, SuSE sử dụng màu xanh da trời làm chủ đạo.


Tiếp đó là phần giao diện khi đăng nhập đã thay đổi khá nhiều theo chiều hướng giống với Windows XP.

Quá trình cài đặt không khác SuSE Professional 9.3 nhiều. Nhưng có 1 điểm làm tôi đặc biệt thích thú, đó là việc cài đặt mạng. Ở phiên bản 9.3, tôi gặp một vấn đề là có lúc vào Internet được, có lúc không. Sau khi mò mẫm và làm liều, tôi remove cấu hình mạng cho card mạng, vậy là vào Internet ngon lành. Hóa ra SuSE 9.3 sử dụng cấu hình mặc định dùng DHCP cho cả card mạng và wireless adapter nên chúng "đánh nhau", có khi card mạng được nhận là thiết bị thứ nhất, có khi lại là thứ 2. Điều này tôi không hề vướng phải khi cài đặt SuSE 10.0, SuSE 10.0 không tự động đặt cấu hình mặc định cho card mạng.

Thêm một chút nữa, ở SuSE 9.3 khi cấu hình cho wireless adapter tôi phải khai báo cả MAC address của access point. Vấn đề này cũng không cần lo lắng trong SuSE 10.0. Bạn chỉ phải khai báo MAC address của access point khi sử dụng nhiều access point cùng một lúc mà thôi.


Trong menu start của KDE, tôi nghía thấy có 1 sự khác biệt nữa so với SuSE 9.3 là được bổ xung menu search.

Đây mới chỉ là cảm nhận đầu tiên của tôi về SuSE 10.0 ngay sau khi cài đặt. Hy vọng trong quá trình sử dụng, tôi sẽ có được thêm những đánh giá cụ thể và chi tiết hơn.

Tôi đang gõ bài này trên Windows XP. "Khởi động vào SuSE 10.0 thôi!" :-)

Cập nhật thêm hồi 10:49 sáng 9/10/2005

Friday, October 07, 2005

Nâng cấp cho áp dụng BFS để tìm đường đi ngắn nhất

+ Loại bỏ class FilterNode

+ Thêm class Matrix để thể hiện ma trận, do đó chuyển 2 method get từ class BFSAlgorithm sang class Matrix mới này

+ Thay vì đọc từ 2 file node.txtfilter.txt, giờ chương trình chỉ đọc từ file filter.txt và xử lý các node có label nhỏ hơn 100

+ Một số thay đổi lặt vặt khác

Tiếp tục nâng cấp...

Source code

A superabundant point in Java

In J2SDK 5, you can have many advantages from using enum. But maybe it has a superabundant point in Java when a enum's constructor has modifier.

You can declare a enum's constructor to be public or private. But who cares about it? No one! 'Cause enum's constructor can not use outside that enum.

Blah blah blah... :-D

Thursday, October 06, 2005

Picture of the day

One day ago, Google joined hands with Sun to create GoogleOffice (based on StarOffice and open source project OpenOffice). It will become a direct competion with Microsoft Office. The WAR is begun!

A day before release day of SuSE Linux 10.0

Today is Oct. 5, 2005, a day before release day of SuSE Linux 10.0. I used SuSE Linux Professional 9.3 some months ago but most of time I use Windows XP Professional. 'Cause I'm a lazy man while if I want to use Linux, I must change the way in working too much.

I'm using a Dell Inspiron 8600 so I'm really not happy with the way Linux (in this case, SuSE Linux Professional) display text on the screen. It's not clear! In this work, Windows does perfectly. Maybe my Dell laptop's screen use ratio 16:9 so Linux can not display well? Hope that this problem was fixed in SuSE Linux 10.0!

You can see major changes of SuSE Linux 10.0 here.

Tomorrow, I will get SuSE Linux 10.0 and install it on my laptop.

Update at 11:45 PM, Oct. 06, 2005: Downloading SuSE Linux 10.0. Speed of connection is very low! :-(

Tuesday, October 04, 2005

IDEA IntelliJ 5.0.2 was released???

This morning when I go to Jet Brains's EAP (Early Access Program) I meet IDEA IntelliJ Build #3506 and download it.

After installing this build I saw that its splash change to 5.0.2, not 5.0.1. Maybe am I in the first ones use v5.0.2 of IDEA IntelliJ? And why this build still use JRE 1.5.0_04, not 1.5.0_05?

Get IDEA IntelliJ 5.0.2(?) Build #3506

Saturday, October 01, 2005

Pass by name trong Java

Về nguyên gốc, do Java sử dụng truyền theo giá trị (pass by value) cho tham số của method nên với các kiểu primitive nên ta không thể thay đổi giá trị bên trong method mà làm ảnh hưởng đến giá trị của biến bên ngoài.

Tuy nhiên có một cách để vượt qua vấn đề này, đó là dùng các class
IntHolder
,
BooleanHolder
, hay class tương ứng với kiểu của tham số trong package
org.omg.CORBA

Dynamic binding trong Java

Giả sử ta gọi thực hiện x.m(p), dynamic binding sẽ họat động như sau:

+ JVM sẽ tìm tất cả các method có tên m() trong class của x và trong các class cha của x. Nếu không có, báo lỗi.

+ Chọn ra các method có tham số có kiểu phù hợp với kiểu của p (bao gồm cả vấn đề ép kiểu, ví dụ p có kiểu int thì chọn cả các method có tham số có kiểu long, float,...). Nếu không có, báo lỗi.

+ Xem xem có method m() có tham số kiểu có kiểu giống p trong class của x ko. Nếu có, thực hiện. Nếu không tìm ở các class cha. Nếu không có method m() nào có tham số có kiểu giống p ở class của x và các class cha, tìm method m() có tham số có kiểu gần nhất (chẳng hạn p có kiểu int thì tìm xem có method nào có tham số kiểu long không). Qúa trình này cứ lặp đi lặp lại.

Khi load class vào bộ nhớ, JVM đã load method lookup table của class đó nên khi cần tìm method sẽ không tốn nhiều thời gian.

NetBeans 5.0 BETA was released

Quote from netbeans.org

NetBeans IDE 5.0 introduces comprehensive support for developing IDE modules and rich client applications based on the NetBeans platform, the new intuitive GUI builder Matisse, new and redesigned CVS support, Weblogic9 and JBoss 4 support, and a lot of editor enhancements.

But according to NetBeans team, the final version of NetBeans 5.0 will only be released in Nov 2005. Too late!

For more detail, please visit netbeans.org

Tonight, I will try to use NetBeans 5.0 BETA.

Friday, September 30, 2005

Một sai lầm khi thiết kế class String???

Trong cuốn Java Programming Language 4th, method hashCode() của class Object được mô tả như sau:

public int hashCode()

Returns a hash code for this object. Each object has a hash code for use in hashtables. The default implementation returns a value that is usually different for different objects.

Thế nhưng khi thiết kế class String, người thiết kế lại cài đặt mã của method hashCode() như sau:

public int hashCode() {
int h = hash;
if (h == 0) {
int off = offset;
char val[] = value;
int len = count;

for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}

Với mã của method hashCode() của class String được cài đặt như trên thì

String s1 = "OK";



String s2 = new String("OK");

tuy là 2 object khác nhau nhưng lại có hash code như nhau.

Đây có phải là một sai lầm (sai semantic)?

Thursday, September 29, 2005

Ứng dụng thuật toán Bread First Search tìm đường đi ngắn nhất

Đầu bài của bài toán mà tôi cần giải quyết như sau:

Cho một ma trận mxn điểm với các phần tử chỉ nhận các giá trị 0 hoặc 1. Các điểm có giá trị 1 sẽ tạo thành đường đi, các điểm có giá trị 0 tạo thành chướng ngại vật.

Cho một tập các điểm thuộc ma trận trên, tìm đường đi ngắn nhất từ một điểm đến các điểm còn lại trong tập.

Sau khi có các đường đi ngắn nhất, lọc ra một điểm số điểm nằm trên các đường đi đó, những điểm này được gán nhãn. Xuất các nhãn đó ra Excel vào các sheet.

Chương trình về cơ bản đã hoàn thành (chạy đúng) nhưng còn cần refactor và refine lại một số phần.

Source code

Cập nhật 5:44 PM, Sep. 29, 2005:
Thực ra thì chương trình còn có nhiều phần còn ngớ ngẩn. Chẳng hạn, các class Node, FilterNode còn trùng lặp; đoạn mã chương trình chạy (class FilterTest) còn chộp giật thêm linh tinh; một số method trong class BFSAlgorithm đáng ra phải được đẩy ra ngoài... Tôi sẽ cố gắng sửa đổi chương trình trong thời gian ngắn nhất.

Cập nhật 12:32 PM, Sep. 30, 2005:
Chương trình nên được bổ xung class Matrix để thể hiện ma trận các Node thay vì dùng mảng 2 chiều như hiện giờ. Khi đó chuyển 2 method get() từ class BFSAlgorithm sang class Matrix.

Để đơn giản hóa cũng có thể gộp 2 class Node và FilterNode lại làm một.

Tổ chức lại class Utilities.

Tuesday, September 27, 2005

Core Java 7th Vol 1 có đoạn sai

Hôm nay đọc Core Java 7th Vol 1 đến đoạn Default Constructor (chương 4, Objects and Classes) phát hiện ra sách viết bố láo. Nguyên văn nhé:

A default constructor is a constructor with no parameters. For example, here is a default constructor for the Employee class:

public Employee()
{

name = "";
salary = 0;
hireDay = new Date();

}

với class Employee được khai báo như sau

class Employee {

String name;
int salary;
Date hireDay;

.....

}

Cái này mà gọi là default constructor à? Theo cuốn The Java Language Specification 3rd, default constructor là thế này:

If a class contains no constructor declarations, then a default constructor that takes no parameters is automatically provided:

- If the class being declared is the primordial class Object, then the default constructor has an empty body.

- Otherwise, the default constructor takes no parameters and simply invokes the superclass constructor with no arguments

Còn cái đọan khởi tạo ngầm giá trị mà tác giả cuốn Core Java đưa vào cái gọi là default constructor kia thực ra đã được thực hiện trước khi gọi constructor này rồi.

Manning's Ajax in action is delayed

Some days ago I saw that Manning's Ajax in action will be released in Sep. 27, 2005. But today, Manning will delay it to Oct. 3, 2005.


Waiting for this book...

Bug in IDEA IntelliJ 5.0.1 Build #3496???

Maybe it's a bug in IDEA IntelliJ 5.0.1 Build #3496 when I use while and try/catch together.

If I surround while statement in a try/catch statement (see the picture), I've got an warning "while statment cannot complete without throwing an exception".


But if I try to put try/catch statement into while statement's block, I meet the same warning.


Update at 3:16 PM: Reply from JetBrains: "It's not a bug." IDEA IntelliJ inspected that I used a while(true) loop so it can be infinite but it's my intent. So maybe I should change this post's title to "A bug? No, it is an intelligence" ;-)

Monday, September 26, 2005

Update time

'Cause now I live in Seoul while Blogger maybe use US time so I've just updated all posts' time to my current time zone!

Some stupid things

Today, it's first time I try to use Corel's Paint Shop Pro X (PSP) (after uninstall Jasc Software's Paint Shop Pro 9.0.1) and it's first time I know that Jasc Software was acquired by Corel from 10/2004.

I'm not a fan of Adobe's Photoshop and I use PSP instead 'cause it's easier to use and I used it from v4.0.

I don't know why Corel put a digital camera on PSP's splash. It looks stupid. But it has a new showy UI, same as ACDSee 7.0 - 8.0, Photoshop CS - CS2.


And maybe Blogger only accept to upload an image per post to their server. And editor's toolbar hasn't got a properly appearance in Firefox (my version is 1.5 beta 1).

Using POI to create Excel file in Java

I try to use Apache's POI to create an Excel file. It works well and really simple code.

Here is step by step to create an Excel file by POI:

- Create a output stream to generate Excel file: FileOutputStream outStream = new FileOutputStream("test.xls");
- Create a workbook: HSSFWorkbook workbook = new HSSFWorkbook();
- Create a worksheet: HSSFSheet sheet = workbook.createSheet("Result sheet");
- Create a row: HSSFRow row = sheet.createRow(index);
- Create a cell and set its value on a row: row.createCell(index).setCellValue(value);
- Generate Excel file: workbook.write(outStream);
- And clean up: outStream.close();

Note: index of cell must be in short type.

And I also found another API to create Excel file in Java, JExcelApi. It's also free (it is issued on under the GNU Lesser General Public License) as Apache's POI.

Bug in IDEA IntelliJ 5.0.1 Build #3461

This is a bug I've just found in IDEA IntelliJ v5.0.1 Build #3461 and I reported it to JetBrains's IDEA forum today. This is a problem when I try to declare an enum in IDEA IntelliJ.

When I try to declare an enum which have its own constructor or something else I got the problem (see below)


When I remove the semicolon after RFID_C(860), I got an error (see below)


But if I try to declare an enum like this enum Test {A, B, C}, I don't meet this problem.

Update at 12:37 AM: This problem was resolved in #Build 3496.

Waiting for IDEA IntelliJ 5.0.2 ...

Cấp báo, cấp báo...

Sau một thời gian nghỉ ngơi, ngơi nghỉ, quán chó chúng tôi quyết định khai trương chở lại để đáp ứng sự mong đợi ngậm ngùi của quý khách hàng xa gần, gần xa, thân bằng thân hữu! Trong lúc xxx có gì sai sót, mong quý vị bỏ quá cho!