Tuesday, February 28, 2006

Import annotations problem

See it here: http://www.jetbrains.net/jira/browse/IDEA-6934

Update: This bug is fixed in version 5.1.1 and next EAP http://www.jetbrains.net/jira/browse/IDEADEV-4883

TestNG 4.6.1 is released

A small problem had been found in version 4.6 is fixed in version 4.6.1. Go to get it.

Cập nhật: Cedric quả là chịu khó lắng nghe user. Chỉ sau khi có request về before/afterGroups có 5 ngày, trong phiên bản 4.6.1 của TestNG đã xuất hiện before/afterGroups cho annotation Configuration mặc dù tại thời điểm này, before/afterGroups chưa làm gì cả. Có lẽ chỉ trong phiên bản 4.6.2 hoặc cùng lắm là 4.6.3 sẽ xuất hiện before/afterGroups đầy đủ với tính năng.

Về điều này thì Beck & Gamma phải học hỏi Cedric nhiều. http://www.junit.org đến thời điểm này cũng chưa thấy cập nhật bất cứ thông tin gì liên quan đến JUnit 4.0.

"Move initializer to constructor" should not work with static final variables

See it here: http://www.jetbrains.net/jira/browse/IDEA-6928

Update: It will be fixed in Demetra final

Paint.NET 2.6 Final is released


Được release hôm 24/02, sớm hơn so với dự kiến đến 5 hôm (theo kế hoạch là 01/03), Paint.NET là một ứng dụng xử lý ảnh nhỏ gọn (chỉ có 3,41 MB) với khá đầy đủ các tính năng chuyên nghiệp. Điều quan trọng hơn là miễn phí và open source.

Bạn có thể download ở đây.

Xem thêm thông tin tại đây: http://www.eecs.wsu.edu/paint.net/index.html

Các tính năng: http://www.eecs.wsu.edu/paint.net/features.html

Cái mới trong phiên bản 2.6: http://www.eecs.wsu.edu/paint.net/roadmap.html#v2_6

Chú ý: Để chạy được Paint.NET 2.6, bạn cần cài đặt .NET Framework 2.0. Trên site của Paint.NET có sẵn phiên bản đóng gói cả .NET Framework 2.0 (49,1 MB, vẫn còn nhỏ hơn Photoshop, Paint Shop Pro nhiều)

Một article hay cho việc bắt đầu phát triển plugin cho IntelliJ IDEA

Xem tại đây.

Thêm vài demo cho các tính năng của IDEA: I18N, AJAX

Và cuối cùng The top 10 Things i Love the most about IntelliJ IDEA (5.1)

Let's "Develop with pleasure"! ;-)

Monday, February 27, 2006

TestNG 4.6 is released

Hôm nay mò vào net đã thấy có bản 4.6 của TestNG cùng một cập nhật của TestNG plugin cho IntelliJ IDEA. Có điều bản cập nhật plugin này vẫn có lỗi khi chạy trên Demetra. :-(

Bạn có thể download TestNG 4.6 ở đây.

Cập nhật: Announcing TestNG 4.6 của Cedric

Còn mình thì đang đợi before/afterGroup đây. ;-)

Friday, February 24, 2006

M$ không dùng boxing/unboxing để cài đặt ref và out

Trong post ref và out, tôi đã hiểu sai về cơ chế cài đặt ref và out của M$. Điều này đã được chỉ ra bởi anh thiennguyen.

Còn sau đây là quote của bài Copying, Cloning, and Marshalling in .NET, đoạn quote này đã nêu lên cơ chế cài đặt của ref và out của M$.

In those cases (*), for value-type parameters, a pointer to the object
is passed to the method (thus allowing the method body to alter the
value of the original object). This technique is known as passing a
parameter "by reference."

Chú thích: (*) == ref và out

Thursday, February 23, 2006

TestNG 4.6 beta

TestNG 4.6 beta hỗ trợ một số tính năng như test random() function, test thread safe. Đây là những tính năng thực sự hấp dẫn.

Với sự "lười biếng" của Erich Gamma và Kent Beck cùng một số hạn chế của JUnit 4, TestNG chắc chắn sẽ trở thành standardized unit testing framework cho Java.

IntelliJ IDEA Demetra build 5162 preview

Đây là build thứ 2 nằm trong EAP (Early Access Program) mà JetBrains đưa ra sau build 5131.

Một số thay đổi về giao diện:

+ Gộp 2 tab Classpath và Dependencies trong dialog Modules thành một tab Classpath



+ Thiết kế lại giao diện Plugin Manager



+ Cái này được gọi là "Searchable options dialog (MacOS X like)"



+ Thay vì có một Scope View pane như trong build 5131 thì nay ta có thể chọn View option trong Project pane



+ Inspection được nhóm lại với tiêu đề



Các thay đổi khác trong build này:

* Major changes in JSP internal implementation.
Note that there may be problems with JSP functionality in this build.
* JSF support was accidentaly disabled in previous version.
Turned it on.
* JSP cache building fixes
* ER diagram for EJB
* Persistence unit generation with annotations by Hibernate model.
* Searchable options dialog (MacOS X like)
* Project View. Merged the Project View, Scope View and Favorites toolwindows.
* UI Designer. Column captions with resize support and context menu.
* UI Designer. Assorted usability improvements.
* JavaScript. Intention to create non-existing methods.
* JSP. Intention to create custom tag attribute from usage.
* Refactoring. Safe Delete for parameters.
* Plugin Manager. User interface redesigned.
* Compiler. Possibility to build JAR file on every make.
* Refactoring. Usability improvements for in-place rename.
* Support for filtering and highlighting in the log console.
* Other improvements and bugfixes.

Các thông tin khác:

+ Demetra roadmap: http://www.jetbrains.net/confluence/display/IDEADEV/Demetra+Roadmap

+ Các tính năng mới dự kiến sẽ xuất hiện trong Demetra: http://www.jetbrains.net/confluence/display/IDEADEV/Demetra+Roadmap

+ Download Demetra (phải đăng ký thành viên): http://www.intellij.net/eap/products/idea/download.jsp

Chú ý: Demetra có lỗi với plugin cho TestNG. Tuy test case vẫn chạy và hiện kết quả đúng nhưng có báo lỗi liên quan tới giao diện của TestNG.

Cập nhật: Trong phiên bản 5.1 trở về trước, khi ta muốn đổi tên của một biến local, IntelliJ IDEA sẽ hiện một hộp thoại để ta nhập tên mới. Nay trong build 5162, ta có thể đổi tên biến local mà không cần thông qua hộp thoại nữa.



Cập nhật: Plugin JIndent, bản 4.0.7, không chạy được với Demetra build 5162

Multi-Input touch screen

Thực sự hấp dẫn với multi-input touch screen

Wednesday, February 22, 2006

NetBeans IDE 5.5 với NetBeans Enterprise Pack 5.5

NetBeans IDE 5.5 với NetBeans Enterprise Pack 5.5 thực sự sẽ là bước tiến mạnh của NetBeans trong trận chiến IDE. Với sự nặng nề và chậm chạp của Eclipse, NetBeans + Enterprise Pack có thể sẽ chiếm nhiều giải thưởng của các tạp chí Tin học vào năm tới.

Release information: http://www.netbeans.org/community/releases/55/

Cũng theo roadmap thì nhiều khả năng NetBeans 5.5 sẽ ra đời trong mùa hè này, ngay sau khi JEE 5 ra và trước khi J2SE 6 xuất xưởng.

Tuesday, February 21, 2006

Giải pháp cho việc thực thi sự kiện Load khi đang design form

Bạn đã đọc post Thực thi sự kiện Load khi đang design form và bạn muốn tìm một giải pháp cho vấn đề này? Hãy sửa lại code của mình một chút như sau:

private void BaseForm_Load(object sender, System.EventArgs e){
if (!base.DesignMode){
MessageBox.Show("Hello, World!");
}
}

Have fun in programming! :-)

Monday, February 20, 2006

Cài đặt Apache 2.2.0

Chuẩn bị: Download Apache 2.2.0 từ site Apache Lounge tại địa chỉ http://www.apachelounge.com/download/.

Chú ý là nếu download từ site này phải đăng ký thành thành viên của nó.

Các bước thực hiện:

+ Giải nén file ZIP.
+ Tạo file apache_start.bat với nội dung sau để start Apache

@echo off

echo Starting Apache2
bin\httpd -k start
echo Apache2 is started :)

pause

+ Chạy file apache_start.bat vừa tạo

Một số file khác:

+ apache_stop.bat, dùng để stop Apache

@echo off

echo Stopping Apache2
bin\httpd -k stop
echo Apache2 is stopped :)

pause

+ apache_installservice.bat, dùng để cài đặt Apache chạy như một dịch vụ của Windows

@echo off

if "%OS%" == "Windows_NT" goto WinNT

:Win9X
echo Don't be stupid! Win9x don't know Services
echo Please use apache_start.bat instead
goto exit

:WinNT
echo Installing Apache2 as an Service
bin\httpd -k install
echo Now we start Apache2 :)
net start Apache2

:exit
pause

+ apache_uninstallservice.bat, dùng để gỡ dịch vụ đã được cài đặt

@echo off

if "%OS%" == "Windows_NT" goto WinNT

:Win9X
echo Don't be stupid! Win9x don't know Services
echo Please use apache_stop.bat instead
goto exit

:WinNT
echo Are you sure you wan't this?
echo now stopping Apache2 when it runs
net stop Apache2
echo Time to say good bye to Apache2 :(
bin\httpd -k uninstall

:exit
pause


Cập nhật: Apache 2.2.0 đếch chạy được với Subversion 1.3.1. Làm ông hì hục tốn thời gian.

Cài đặt TMate server trên Tomcat 5.5

Chuẩn bị: Download Tomcat 5.5TMate 2.0.

Chú ý: Khi download, chọn Tomcat 5.5 ở dạng file ZIP và TMate 2.0 chọn "TMate Server only"

Các bước tiến hành:

+ Giải nén file ZIP chứa Tomcat
+ Đổi port của Tomcat bằng cách mở file server.xml trong thư mục conf và sửa giá trị port ở thẻ Connector từ 8080 sàn giá trị mong muốn
+ Copy file tmate.war vào thư mục webapps
+ Start Tomcat và truy nhập vào địa chỉ http://localhost:[port]/tmate

Nếu muốn cài đặt thành service thì làm thêm các bước sau:

+ Mở file service.bat trong thư mục bin, sửa

rem Set default Service name
set SERVICE_NAME=Tomcat5
set PR_DISPLAYNAME=Apache Tomcat

thành

rem Set default Service name
set SERVICE_NAME="TMate Server"
set PR_DISPLAYNAME=TMate Server


set SERVICE_NAME=%2
set PR_DISPLAYNAME=Apache Tomcat %2

thành

set SERVICE_NAME=%2
set PR_DISPLAYNAME=TMate Server



set PR_DESCRIPTION=Apache Tomcat Server - http://jakarta.apache.org/tomcat

thành

set PR_DESCRIPTION=TMate Server


+ Chạy file service.bat vừa sửa

Vậy là cài đặt xong TMate server rồi. :-)

Saturday, February 18, 2006

J2SDK 6 Beta 2 ra lò

Mới chỉ sau khi tung ra J2SDK 6 Beta (phiên bản dựa trên build 59 có từ hồi tháng 11, hơi cổ) có 3 ngày, Sun đã âm thầm đưa ra phiên bản Beta 2 trên build mới nhất, 72, trên java.net. Phiên bản Beta 2 này được cập nhật đáng kể về documentation.

Về sơ bộ, J2SDK 6 không có nhiều sự bổ xung, thêm thắt về mặt cú pháp như version 5 mà hướng vào tập trung tăng cường tính bảo mật tích hợp chặt chẽ hơn với GSS/Keberos, LDAP, cùng với SmartCard API mới, tích hợp các dịch vụ Web. Điểm đặc biệt được nhấn mạnh ở đây là hiệu năng và sự tích hợp của hệ thống UI được cải thiện đáng kể. Thêm nữa là việc đưa vào trong J2SDK một scripting framework để hỗ trợ các ngôn ngữ scripting. Điều còn thiếu duy nhất mà đáng lẽ Sun nên làm ở J2SDK 6 là việc bổ xung GroupLayout.

Việc J2SDK 6 Beta ra mắt đã kéo theo một thread trên TSS tranh luận về nó với sự góp mặt của một số thành viên đòi hỏi một mớ hỗn độn các cú pháp mới (như trong C# 3.0 sẽ có). Về vấn đề này, mình cho rằng không nên phức tạp hóa ngôn ngữ quá mức bằng cách chắp nhặt, thêm thắt các cú pháp mới một cách qúa dồn dập, vội vàng và không cần thiết. Dù sao Java cũng hướng tới một ngôn ngữ dễ học, rõ ràng, mềm dẻo chứ không phải một thứ thập cẩm hỗn độn.

Friday, February 17, 2006

F11 == full screen

Các bạn từng sử dụng IE hay Firefox có thể chuyển sang chế độ full screen khi nhấn phím F11 và trở lại trạng thái cũ khi nhấn F11 lần nữa. Muốn thực hiện điều này cũng chẳng khó. Hãy xem đoạn code sau:

private bool _bFullScreenMode = false;

private void Form1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyData == Keys.F11)
{
if (_bFullScreenMode == false)
{
this.FormBorderStyle = FormBorderStyle.None;
this.Left = 0;
this.Top = 0;
this.Bounds = Screen.PrimaryScreen.Bounds;

_bFullScreenMode = true;
}
else
{
this.FormBorderStyle = FormBorderStyle.Sizable;
// Resize lại như cũ

_bFullScreenMode = false;
}
}
}

Vấn đề nảy sinh là vẫn còn taskbar. Làm thế nào bây giờ? Xem post này nhé: Ẩn/hiện taskbar trong C#. Và đương nhiên bạn hoàn toàn có thể thiết đặt phím hay tổ hợp phím khác cho việc này.

Thursday, February 16, 2006

Thực thi sự kiện Load khi đang design form

Bạn muốn thực thi sự kiện Load khi đang design form? Hãy làm như sau nhé:

+ Tạo một form cơ sở, ví dụ:

public partial class BaseForm : Form
{

public BaseForm()
{
InitializeComponent();
}

private void BaseForm_Load(object sender, System.EventArgs e)
{
MessageBox.Show("Hello, World!");
}

}

+ Tạo một form khác thừa kế lại form cơ sở vừa tạo

public partial class MyForm : BaseForm
{

public MyForm()
{
InitializeComponent();
}

}

+ Rebuild project

+ Mở MyForm để design, bạn sẽ thấy gì nào?

Đây là sự thông minh hay sự đần độn?

Chú ý: Đã được kiểm nghiệm trên VS 2005. Chưa được kiểm nghiệm trên VS 2002, 2003.

Update:

I try to write a class that extends Form like that:

public partial class BaseForm : Form
{

public BaseForm()
{
InitializeComponent();
}

private void BaseForm_Load(object sender, System.EventArgs e)
{
MessageBox.Show("Hello, World!");
}

}

And then I write a class that extends class BaseForm

public partial class MyForm : BaseForm
{

public MyForm()
{
InitializeComponent();
}

}

I rebuild project and open MyForm to design, it suddenly appears "Hello, World!" message box.

I think it is a stupid feature in VS 2005 (I didn't check it in VS 2002, 2003 yet).

Ẩn/hiện taskbar trong C#

Muốn ẩn hiện taskbar, bạn hãy copy đoạn code sau vào code của mình

using System;
using System.Runtime.InteropServices;


[DllImport("User32", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName,
string lpWindowName);

[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
static extern bool SetWindowPos(IntPtr hWnd, int hWndInsertAfter,
int X, int Y, int cx, int cy,
uint uFlags);

const int SWP_HIDEWINDOW = 0x80;
const int SWP_SHOWWINDOW = 0x40;

private IntPtr primo = FindWindow("Shell_traywnd", "");



public void HideTaskBar()
{
SetWindowPos(primo, 0, 0, 0, 0, 0, SWP_HIDEWINDOW);
}

public void ShowTaskBar()
{
SetWindowPos(primo, 0, 0, 0, 0, 0, SWP_SHOWWINDOW);
}


Có điều ẩn ở đây không theo kiểu auto hide của Windows nên nếu làm các bạn cần cẩn thận, không ẩn mà hết hiện nổi. :-D

Bắt một số tổ hợp phím đặc biệt

Đơn giản chỉ cần override method ProcessCmdKey cho form hay control mà bạn muốn.

Ví dụ sau bắt tổ hợp phím Alt + F4:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.Alt | Keys.F4)) {
MessageBox.Show ("Alt + F4 catched!");
return true; // The key is manually processed
} else
return base.ProcessCmdKey (ref msg, keyData);
}

Wednesday, February 15, 2006

Một số kỹ thuật với status bar trên .NET 2.0


+ Làm thế nào để tạo separator giữa các ToolStripStatusLabel?

Cách thực hiện:

- Thiết đặt thuộc tính BorderStyle của ToolStripStatusLabel là Etched
- Thiết đặt thuộc tính BorderSides của ToolStripStatusLabel là Right hoặc Left hoặc cả 2 tùy theo yêu cầu của bạn

+ Làm thế nào để các ToolStripStatusLabel tự co giãn khi thay đổi kích thước của form?

Cách thực hiện:

- Thiết lập thuộc tính Spring của nó là true

Chú ý là khi 1 thằng ToolStripStatusLabel đã được set Spring là true thì các thằng khác nếu muốn set size cố định thì phải đặt AutoSize là false

Saturday, February 11, 2006

Port IntelliJ IDEA sang Eclipse? KHÔNG!

Cedric, cha đẻ của TestNG, có một post về việc Borland bán dòng sản phẩm IDE, trong đó có nêu ý kiến về việc port IntelliJ IDEA (IDEA) sang Eclipse. Về vấn đề này, câu trả lời của mình là KHÔNG. Eclipse là một Java IDE tốt nhưng tiềm ẩn sau nó còn rất nhiều vấn đề (SWT/JFace đâu có hấp dẫn như người ta vẫn tưởng, cơ chế plugin của Eclipse tuy có thể coi là tốt nhất hiện giờ (thì từ gốc của Eclipse đã hướng tới việc sử dụng plugin mà), so với NetBeans và ngay cả bản thân IDEA, nhưng không phải là hoàn hảo và có khá nhiều lỗi ngớ ngẩn về tính tương thích. Thêm nữa nếu port IDEA sang Eclipse thì việc phát triển IDEA cũng như maintain nó sẽ phải thay đổi hoàn toàn, như trong reply của Dmitry cho post trên có nói. Đấy là chưa kể việc user sử dụng IDEA sẽ phải thay đổi cách làm việc hoàn toàn. Cái gì đang tốt, đang gần hoàn hảo thì hãy để nguyên nó đấy!

IDEA hướng tới một môi trường làm việc mềm dẻo và tốt nhất cho developer chứ không phải một plugin platform.

Borland đóng cửa nhà máy sản xuất IDE

Theo blog của "David I" và cũng theo tin chính thức của Borland, Borland đang tìm kiếm người mua dòng sản phẩm IDE (bao gồm: Delphi, C++Builder, C#Builder, JBuilder (và Peloton, phiên bản JBuilder được port sang Eclipse), InterBase, JDataStore, nDataStore, Kylix, ...). Đây là một tin buồn nhưng cũng đúng và đáng vì trong vòng 3, 4 năm qua, ngoài việc Borland đã không tạo được 1 sự đột phá mà cùng với sự nặng nề, cứng nhắc và qúa đắt đỏ của dòng sản phẩm này, đồng thời nữa là sự cạnh tranh khắc nghiệt của các IDE miễn phí như NetBeans, Eclipse cũng như một IDE thương mại xuất sắc khác, IntelliJ IDEA (IDE vừa nhận giải Java IDE xuất sắc nhất của năm do tạp chí Java Developer’s Journal bình chọn), và cũng không quên nhắc tới nữa là Visual Studio của M$, đương nhiên các sản phẩm của Borland sẽ không còn chỗ đứng vững chắc. Buồn cho Borland, đặc biệt là cho Delphi, 5 giây!

Câu hỏi quan trọng được đặt ra lúc này là ai sẽ mua dòng sản phẩm đó? M$ chắc chắn là không, IBM lại càng không nữa, Oracle chăng? Mình nghĩ là không. Vậy ai sẽ mua? Chắc cũng không phải là mình rồi. :-D

Friday, February 10, 2006

Java against .NET

Đoạn code sau được thực hiện trên VS 2005 Team Edition for Software Developers với .NET framework 2.0 cần hơn 40 giây để kết thúc.

int[,] maze = new int[650, 650];

for (int i = 0; i < maze.GetLength(0); i++)
{
for (int j = 0; j < maze.GetLength(1); j++)
{
Console.WriteLine(i);
}
}

Cũng một đoạn code tương tự trên Java chỉ cần có khoảng 10 giây để hoàn thành (thực hiện trên IntelliJ IDEA 5.1 với JDK 1.5 Update 6).

Ai hơn ai nhỉ? ;-)