Tuesday, December 26, 2006
Wednesday, December 20, 2006
Windows Vista and Daemon Tools
If you have this problem, don't worry. Restart in Safe mode and uninstall Daemon Tools, and now your Vista will back.
I think the big problem now with Windows Vista is compatibility with other applications (while they work with Windows XP). You saw my problem with Daemon Tools, and you must know that I cannot make a phone call via Globe7 'cause if I try, Globe7 will crash.
Actually I had a BSD (blue screen death) with Vista but seems it is problem of Kaspersky Anti-Virus's driver (it still beta).
Sunday, December 10, 2006
My daily tools
UML modeling tool: Actually I don't like UML tools are made by Java, they look ugly (application and symbols for modeling). So I want to find a UML tool it has a native look (in Windows). On my way, I found UMLStudio, it's really very small, only 3MB. But it's not free. Do more searching, I found StarUML. It has a native look, runs fast, free and open source. Even though it has some bugs but it's good enough to use to model.
Developer and DBA tool for Firebird: As I found, I have 2 options. One is EMS SQL Manager for InterBase/Firebird and another choice is IBExpert. After a try, I really fall in love with IBExpert. If you are familiar with TOAD (actually TOAD does not support for Firebird right now), IBExpert can do better than that. And IBExpert has a personal version, it's free.
And one more thing I cannot forget, it's SmartSVN. Visual Studio has AnkhSVN but I don't like it very much, it's really heavy. Another choice is VisualSVN but it has less features than AnkhSVN and it is underlying on TortoiseSVN. So I decided to use a SVN client rather than a Visual Studio add-in and SmartSVN is my choice.
Friday, December 08, 2006
What the hell is going on with my combo box?
The problem I found relates with ComboBox control in .NET Framework 2.0. A ComboBox control has a DataSource property which accepts a List<T> as value. And then you can specify value of ValueMember and DisplayMember for it to use as value and text in combo box.
I have a Tag(int id, string name) and ofcourse a List<Tag> (it is not empty). I filled the list to a combo box, use "id" as ValueMember and "name" as DisplayMember then set SelectedIndex is 0 to make sure that I always select at least one item on the list. When I click the arrow of combo box, the drop down list appears but I don't select any item from list. Then I've got SelectedIndex is -1 while my expected value is 0. At this time I want to crazy 'cause don't understand why it happened.
But later I found that, the problem is the DisplayMember's data. If the first item of the list has a "name" is an empty string, you will have this problem. Seems M$ implemeted to select text value to get the index. But if it's an empty string, the returned index will be -1.
Thanks M$ to make me crazy ;-)
Thursday, November 23, 2006
<script> and XHTML
When you use <script> to add JavaScript code to your page, in familiar way, it will look like that
<script type="text/javascript" language="javascript">
// code here
</script>
And if you want to include a external JavaScript file, you can use (in XHTML way)
<script type="text/javascript" language="javascript" src="blah.js" />
But it doesn't work (in IE and Firefox). If you want to make it works, you must use
<script type="text/javascript" language="javascript" src="blah.js">
</script>
It makes me want to be crazy 'cause I don't understand what happens to my application when the script went mad with JavaScript errors.
FYI: Script and Style elements
Update: Can you find some other tags which do not following the "empty tag" rule in XHTML for me? ;-)
Wednesday, November 22, 2006
Which Java web framework you should learn next?
For me, the choice is Struts. Struts, again Struts, a Gorilla of MVC web framework. But, not Struts, more exactly, it's Struts2 (former name is WebWork)
Why? Just see the new features of Struts2 2.0.2. You can see: code behind, zero configuration, and many more... All of them (new features in Struts2 2.0.x) are really brilliant.
In the past, WebWork is a good framework but IMO it has the lack of documentation (and also marketing). But now it became under the umbrella of ASF, I bet that it will have the success as its ancestor, Struts.
At this time, I'm working with v2.0.1 beta and I will upgrade to v2.0.2 immediately when it comes out.
Sunday, November 12, 2006
What is it, NetBeans?
Update: Latest NetBeans 6
+ ints is an array of integer
+ Format code with label problem
The text is inside the red border rectangle should be indented.
+ Members View will look annoying if a JAVA file contains several classes
+ When I create new project, if I change the project name after entering main class name, main class name will change to [package_name].Main automatically. Please keep it as I entered (for class name only).
I tried to report to NetBeans team but seems their reporting site does not support to report by images. Sorry NetBeans, I'm a lazy man.
Friday, November 10, 2006
Điều kỳ diệu của thiết bị điện tử
Nếu tôi rút adaptor ra, khi đó máy thực sự chạy bằng pin vì thấy % lượng điện giảm. Nhưng khi cắm adaptor vào thì dường như pin không chịu sạc , % lượng điện vẫn giữ nguyên, không tăng mà cũng chẳng giảm.
Không hiểu làm sao, tôi bắt đầu thử các trò:
+ Giật pin ra khỏi máy khi máy đang chạy (vẫn cắm adaptor) --> máy tắt
+ Thử bật máy khi cắm adaptor nhưng pin không được lắp --> máy không bật được
+ Chạy update BIOS của Dell --> nó báo "Mày phải cắm cả pin và adaptor vào"
Tôi chắc mẩm: "Teo rồi, chuẩn bị toi hơn 100$ để mua cục pin mới rồi"
Chợt tôi phát hiện một điều lạ. Con Dell Inspiron của tôi khi vào setup BIOS có mục thông báo có adaptor hay không. Tôi thấy nó báo "Không" trong khi vẫn cắm adaptor và máy vẫn đang chạy bằng nguồn điện bình thường (trong BIOS cũng có hiển thị mức pin, nó giữ nguyên và kèm theo "Discharging").
Chuyện kỳ lạ thật phải không các bạn? Nhưng tôi phải giải quyết vấn đề của mình thế nào bây giờ?
Trong lúc loay hoay, tôi để ý thấy khi tôi "lung lay" cái adaptor, BIOS báo "Có" rồi lại "Không", rồi có lúc lại "Có", rồi lại "Không". Eureka, vấn đề đây rồi! Hóa ra kẻ có vấn đề là chiếc adaptor. Ngay chiều hôm đó tôi gửi nó cho công ty sản xuất và ngay chiều hôm sau tôi nhận được một cái khác hoàn toàn mới (điều khó có thể xảy ra ở Việt Nam).
Tuy giờ là một cái adaptor hoàn toàn khác (loại 75W) so với cái cũ (loại 90W) nhưng với tôi thế vẫn OK. Cấu tạo phần dây nối của chiếc adaptor này sẽ khó có thể lặp lại vẫn đề tôi vừa đã gặp phải. Hơn nữa, cái adaptor 90W vừa to vừa nặng. Hạnh phúc!
Thiết bị điện tử vốn mang tiếng chính xác nhưng cũng có khi xảy ra chuyện thần thoại :-D
Sunday, October 29, 2006
Cái gì đây kỳ này?
Nhưng giờ là chuyện nghiêm túc đây, có cười gì thì cười đi rồi nghiêm chỉnh nào.
Hôm nay tớ làm bún đậu phụ mắm tôm.
Đêm qua ngủ tít mù đến gần 1h trưa mới thèm mò dậy. Bắt tay vào thực hiện kế hoạch nào (tớ định làm từ tuần trước nhưng vướng công việc nên đành lui lại). Bún có rồi, bún khô thôi, hôm trước đã nhờ anh H. mua hộ. Mắm tôm nữa chứ. Công đoạn phức tạp nhất là mua đậu về rán :-D
Kì cục đến gần 2h mới xong nhưng còn làm một số thứ việc nữa nên giờ mới chuẩn bị măm.
Hãy cùng chiêm ngưỡng tác phẩm của tớ nào.
Giờ tớ măm đây, mọi người chúc tớ ngon miệng nào. Cuộc đời đẹp làm sao ;-)
PS: Honey, khi em đọc được bài này thì anh đã măm xong rồi. Đừng trách anh ko mời nhé, ăn mảnh đấy :-P
Saturday, October 28, 2006
IoC pattern
To explain inversion of control, we see active and passive actions. In active actions, I say "I'm going to get object X". And in passive actions, I say "Give me object X when I need it". Please see this example, here I implement an action in WebWork, it needs to retrieve a request object to set an attribute.
Active way
public class SetBlahAction implements Action {
public String execute() {
HttpServletRequest request =
ServletActionContext.getHttpServletRequest();
request.setAttribute("blah", "blah");
return SUCCESS;
}
}
Passive way (applied IoC pattern)
public class SetBlahAction implements Action, ServletRequestAware {
private ServletRequest request;
public void setServletRequest(ServletRequest request) {
this.request = request;
}
public String execute() {
request.setAttribute("blah", "blah");
return SUCCESS;
}
}
Here ServletRequestAware interface only defines setServletRequest(ServletRequest).
When using IoC pattern, you can reduce the works you need to do in a class by moving some implementation outside. Also it makes your class more clearly.
Friday, October 27, 2006
Integrate Tomcat 6 to Apache 2 with mod_jk
+ JDK 1.5 or later (http://java.sun.com/javase/downloads/index.jsp - Tomcat 6 cannot run with JDK before 1.5)
+ Apache 2 (http://ftp.apache-kr.org/httpd/binaries/win32/ - already setup and run)
+ mod_jk (http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/)
+ and of course, Tomcat 6 (http://tomcat.apache.org/download-60.cgi)
Our Configuration
+ Java JDK path : C:\jdk1.5.0_09
+ Apache path : C:\www\Apache2
+ Tomcat path : C:\www\Tomcat6
+ Apache's webroot : C:\www\webroot
+ JSP/Servlet webroot (via Apache2/mod_jk) : C:\www\Tomcat6\webapps
+ JSP/Servlet webroot (via native Tomcat server, port 8080) : C:\www\Tomcat6\webapps
+ Access JSP/Servlet pages via Apache2/mod_jk : http://localhost/[jkmount-mapped url of your webapp]
+ Access native Tomcat server : http://localhost:8080/
Install JDK
+ Run file jdk-1_5_0_09-windows-i586-p.exe to install under your %SystemDrive% (C:\), forming C:\jdk1.5.0_09
Unpack and place Tomcat6 and mod_jk
+ Unpack file apache-tomcat-6.0.0.zip under directory C:\www
+ Rename directory C:\www\apache-tomcat-6.0.0 to C:\www\Tomcat6
+ Rename file mod_jk-apache-2.x.xx.so to mod_jk.so, and place under directory C:\www\Apache2\modules
Configuration and Setup
+ Set Environmental Variables : JAVA_HOME=C:\jdk1.5.0_09 and CATALINA_HOME=C:\www\Tomcat6
+ Create empty file C:\www\Apache2\conf\workers.properties, insert code...
workers.tomcat_home=C:/www/Tomcat6
workers.java_home=C:/jdk1.5.0_09
ps=\
# Define worker 'example'
worker.list=example
# Set properties for worker 'example' (ajp13)
worker.example.type=ajp13
worker.example.host=localhost
worker.example.port=8009
worker.example.cachesize=10
worker.example.cache_timeout=600
worker.example.socket_keepalive=1
worker.example.reclycle_timeout=300
+ Edit file C:\www\Apache2\conf\httpd.conf, insert code...
LoadModule jk_module modules/mod_jk.so
<IfModule mod_jk.c>
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel error
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
Alias /examples "C:/www/Tomcat6/webapps/examples/"
<Directory "C:/www/Tomcat6/webapps/examples/">
Options Indexes +FollowSymLinks
AllowOverride None
Allow from all
</Directory>
<Location /*/WEB-INF/*>
AllowOverride None
deny from all
</Location>
JkMount /examples/jsp/*.jsp example
JkMount /examples/servlets/* example
</IfModule>
+ Edit file C:\www\Tomcat6\conf\tomcat-users.xml, insert lines...
<role rolename="manager"/>
<user username="manager" password="manager" roles="manager"/>
Install and Start Tomcat
Tomcat can be installed as a Service or started as a Standalone Console application. Note to make sure that Apache has been started at this point.
As a service
+ Open the command-line prompt (Start » Run... cmd.exe)
C:\www\Tomcat6\bin> service.bat install
...> NET START Tomcat6
+ To shutdown the Tomcat Service : ...> NET STOP Tomcat6
+ To remove/uninstall the Tomcat Service : C:\www\Tomcat6\bin> service.bat remove
As a standalone console application
+ Open the Command-Shell (Start » Run: cmd.exe), change to dir C:\www\Tomcat6\bin...
Run file startup.bat to start Tomcat
Run file shutdown to shutdown Tomcat
Testing
+ Test the native Tomcat server...
http://localhost:8080/
http://localhost:8080/manager/status -- User:manager, Password:manager
+ Test Apache/mod_jk...
http://localhost/examples/jsp/
http://localhost/examples/servlets/
Saturday, October 14, 2006
Welcome to t800t8.net
Friday, October 13, 2006
Google Code Search 1.1.0 is released
Tuesday, October 10, 2006
Google Code Search updates to v1.0.1
You can find out more here.
I'm considering new feature for v1.1. Google Code Search should support to find source code at caret for specified language (depends on type of file which is opening in editor) when user presses a shortcut key (example: Ctrl + Alt + G). Seems I need to create another action for this feature.
What do you think about this? Any suggestion and feedback are welcome :-)
Update: I'm not familiar with Ruby and Python. Seems Ruby source code only has RB extension, and for Python is PY. Are there any more extensions for these languages? Thanks
Sunday, October 08, 2006
Rockstar
Nickelback
I'm through with standing in line
to the clubs i'll never get in
It's like the bottom of the ninth
and I'm never gonna win
This life hasn't turned out
quite the way I want it to be
(Tell me what you want)
I want a brand new house
on an episode of Cribs
And a bathroom I can play baseball in
And a king size tub big enough
for ten plus me
(so what you need)
I'll need a, a credit card that's got no limit
And a big black jet with a bedroom in it
Gonna join the mile high club
At thirty-seven thousand feet
(Been there done that)
I want a new tour bus full of old guitars
And my own star on Hollywood Boulevard
Somewhere between Cher and
James Dean is fine for me
(So how ya gonna do it?)
I'm gonna trade this life for fortune and fame
I'd even cut my hair and change my name
[CHORUS]
'Cause we all just wanna be big rockstars
Living in hilltop houses driving fifteen cars
The girls come easy and the drugs come cheap
We'll all stay skinny 'as we just won't eat
And we'll hang out in the coolest bars
In the VIP with the movie stars
Every good gold digger's
Gonna wind up there
Every Playboy bunny
With the bleach blond hair
and well..
Hey hey I wanna be a rockstar
Hey hey I wanna be a rockstar
I wanna be great like Elvis without the tassels
Hire eight body guards that love to beat up assholes
Sign a couple autographs
So I can eat my meals for free
(I'll have a quesadilla haha)
I'm gonna dress my ass
with the latest fashion
Get a front door key to the Playboy mansion
Gonna date a centerfold that loves to
blow my money for me
(So how ya gonna do it?)
I'm gonna trade this life
For fortune and fame
I'd even cut my hair
And change my name
'Cause we all just wanna be big rockstars
Living in hilltop houses driving fifteen cars
The girls come easy and the drugs come cheap
We'll all stay skinny 'as we just won't eat
And we'll hang out in the coolest bars
In the VIP with the movie stars
Every good gold digger's
Gonna wind up there
Every Playboy bunny
With the bleach blond hair
And we'll hide out in the private rooms
With the latest dictionary and
TV's who's who
We'll get you anything
with that evil smile
Everybody's got a
drug dealer on speed dial
well..
Hey hey I wanna be a rockstar
I'm gonna sing those songs
that offend the censors
Gonna pop my pills
from a pez dispenser
Get washed-up singers writing all my songs
Lip sync 'em every night so I don't get 'em wrong
Well we all just wanna be big rockstars
Living in hilltop houses driving fifteen cars
The girls come easy and the drugs come cheap
We'll all stay skinny 'as we just won't eat
And we'll hang out in the coolest bars
In the VIP with the movie stars
Every good gold digger's
Gonna wind up there
Every Playboy bunny
With the bleach blond hair
And we'll hide out in the private rooms
With the latest dictionary and
TV's who's who
We'll get you anything
with that evil smile
Everybody's got a
drug dealer on speed dial well..
Hey hey I wanna be a rockstar
Hey hey I wanna be a rockstar
Saturday, October 07, 2006
Google Code Search 1.0 is released
For more information, you can see here.
Update: Batch Generator is downloaded over 200 times :-)
Monday, October 02, 2006
IntelliJ IDEA 6 is released
I followed the road JetBrains created IDEA 6 from the first EAP. I knew that JetBrains met many problems during that journey with many users' blames and complains. And the lesson I learned from it is "Listen to the users but under pressure you must always follow your own way".
Congratulation, JetBrains! Congratulation, developers! Development with pleasure is here!
Update: At the same time, JetBrains released version 1.0 of Team City, an integrated team environment.
Saturday, September 30, 2006
Which Java web framework you should choice?
For this presentation, you can download it here.
And here you can find a series of interviews web framework authors did by Matt. Interesting interviews!
IntelliJ IDEA 6.0 Release Candidate 3 (build 5755) is available
Wednesday, September 27, 2006
IntelliJ IDEA 6.0 Release Candidate 2 (build 5745) is available
I guess that IDEA 6 final will be released about October 15.
Batch Generator 1.1 is released
New feature: Supports to generate hardcode arguments
Fixed bug: Need to reset return value of dialog if user click Cancel
Fixed bug: Some minor bugs
Batch Generator 1.1: plug-in, source code, license, user's guide, contest
Monday, September 25, 2006
And now is new feature for 1.2
At this time, it's only the idea because I need to research IDEA's OpenAPI also it will depend on my time. But I will try my best before the contest reaches to the end.
Plan for Batch Generator 1.1
I will start the next release, v1.1, today and hope that it can be finished this weekend.
Update: At this time (September 26, 2006 12:18 AM), after about 3 days, Batch Generator is already downloaded 31 times (of course, I didn't download it 30 times ;-). I encouraged because I didn't think the download times of my plug-in is over 20. Maybe somebody will remove it after a try, but users can know about my plug-in's features via the user's guide. It's very simple plug-in but if it's not useful, nobody will give it a try.
Congratulation me ;-)
Sunday, September 24, 2006
How Can I Not Love You
Joy Enriquez
Cannot touch, cannot hold, cannot be together
Cannot love, cannot kiss, cannot love each other
Must be strong and we must let go
Cannot say what our hearts must know
Chorus:
How can I not love you
What do I tell my heart
When do I not want you here in my arms
How does one walks away
From all of the memories
How do I not miss you when you are gone
Cannot dream, cannot share sweet and tender moments
Cannot feel how we feel, must pretend its over
Must be brave and we must go on, must not say
What weve known all along
Chorus:
How can I not love you
What do I tell my heart
When do I not want you here in my arms
How does one walks away
From all of the memories
How do I not miss you when you are gone
How can I not love you
Bridge:
Must be brave and we must be strong
Cannot say what weve known all along
Chorus:
How can I not love you
What do I tell my heart
When do I not want you here in my arms
How does one walks away
From all of the memories
How do I not miss you when you are gone
How can I not love you
When you are gone
What's next?
At this time, it's only the idea and you can only know it with the name "SSRSS".
Saturday, September 23, 2006
Batch Generator 1.0
Batch Generator 1.0: plug-in, source code, license, user's guide
For the idea to create this plug-in, you can see here.
Thursday, September 21, 2006
IntelliJ IDEA 6.0 Release Candidate 1 (build 5734) was released
* Plugins. Included sources of GWT Studio, JBoss, Geronimo
and GlassFish plugins in the Plugin Development Package.
* Bugfixes and minor improvements.
Complete list of changes here
Update: New splash of IDEA 6. I like it than the old one in IDEA 5, it looks more professional
Bài học tiết kiệm của người Hàn
Mẹ kiếp, cơm gì mà lèo tà lèo tèo toàn thứ vớ vẩn. Tí thịt, tí trứng còn toàn là rau linh tinh. Những thứ được nhồi vào bụng nhiều nhất là một hộp mì ăn liền và một hộp cơm (cơm hộp bên này có loại giống như nấu sẵn vậy, hâm nóng lên là ăn luôn, mà là cơm không thôi nhé).
Hỏi Park xem hôm nay có phải ngày gì đặc biệt không (tại sắp tới là Chusok - trung thu, mà trung thu của người Hàn thì to như Tết, nghỉ tận 3 ngày liền). Park bảo không phải. Hỏi tại sao lại tự nhiên cả lũ lại ăn như vậy, Park bảo, "Tao đếch biết". Hỏi Nam, Nam bảo chẳng phải ngày đếch gì đặc biệt cả, "bọn tao đang thử nghiệm để saving money".
Ăn thì đói mờ mắt ra, thế mà còn học đòi saving money. Đã muốn saving money mà còn không dám nhận. Thay vào đấy chúng nó bớt hút thuốc lá đi, rồi nhồi cơm, nhồi thịt vào có phải saving được tốt hơn không. Nhưng nhìn bọn nó cũng ngãm lại ở VN mình. Quan trên thì phè phỡn, dân cũng phung phí tơi bời. Riêng điều này đáng để học tập dân Hàn đấy ;-)
Tuesday, September 19, 2006
Getting file extension
Usually you will get the position of the dot then use it to extract the extension. But it is not a correct way. Why? Because it depends. Depends on what? Depends on you and the OS you target.
If you use Windows, it's OK. Files in Windows can have extension. But in *nix, it's a different story. So you target to run your application both in Windows and *nix, you should consider this problem.
If your application target to run on Windows only, it's fine if you use the position of the dot to extract the extension (but remember, you must use lastIndexOf("."), not indexOf(".") because in Windows, extension will be determine by the position of the dot and from right to left of filename, not from left to right).
The below code fragment runs well in Windows and Linux.
public String getExtension(File file) {
String osName = System.getProperty("os.name");
if (osName.startsWith("Windows")) {
String filename = file.getName();
int index = filename.lastIndexOf(".");
if (index > 0 && index < filename.length() - 1) {
// extesion in Windows doesn't include the dot
// so we must use (index + 1) to substring
return filename.substring(index + 1).toLowerCase();
} else if (index == filename.length() - 1) {
// the dot is the last character in filename
// so extension is blank
return "";
}
// otherwise, this file doesn't have extension
// so we should return null
}
return null;
}
Update: Correct the source code
1-to-0..* and 1-to-1..*
First, I should describe what are 1-to-0..* and 1-to-1..*. 1-to-0..* means 1 object of this class can have relationship with 0 or more objects of another class. And 1-to-1..* means 1 object of this class can have relationship with 1 or more objects of another class.
A tourist guide can guide zero or more tours. But an order, it must contains at least one order item. In contrary, a tour and an order item cannot exist without tourist guide and order.
Of course, in TouristGuide class and Order class should contains a collection to keep the tours and order items. But how to represent the 1-to-0..* and 1-to-1..* relationships? User can call getTours() or getOrderItems() any time he wants.
I think in 1-to-0..* relationships, when user invokes getTours() on a TouristGuide, he can have a collection contains no element if that TouristGuide doesn't have any Tour to guide. But in 1-to-1..* relationthips, when user invokes getOrderItems() on an Order, he can have a null value if that Order didn't contain any OrderItem yet.
class TouristGuide {
private ArrayList<Tour> tours = new ArrayList<Tour>();
public ArrayList<Tour> getTours() {
return tours;
}
public void addTour(Tour tour) {
tours.add(tour);
}
...
}
class Order {
private ArrayList<OrderItem> orderItems;
public ArrayList<OrderItem> getOrderItems() {
return orderItems;
}
public void addOrderItem(OrderItem orderItem) {
if (orderItems == null) {
orderItems = new ArrayList<OrderItem>();
}
orderItems.add(orderItem);
}
...
}
IntelliJ IDEA 6 build 5706 was released
JetBrains will focus on fix Critical and Blocker priority bugs rather than implement new features. Also, lower priority bugs will be fixed after releasing IDEA 6.
IDEA 6 RC1 will come soon...
Other news relate with SVN and TestNG:
+ TortoiseSVN 1.4 was released last Friday
+ JavaSVN will support SVN 1.4 in next release
+ TestNG 5.2 was released 2 days ago also with an update for TestNG-J.
Preparing to release
What're next steps? Hmmm, I need to choose the license and write some documents. Hope that I can release it this weekend :-)
Go to sleep now...
Saturday, September 16, 2006
An old opportunity
4 years ago, I graduated the university and started to work at Hobo Hanoi. It's a small company with about 15 members. There was a place I will keep it in my memory for a long time where I had the first job, where I improved my little knowledge and my experience.
Most of jobs I did in Hobo Hanoi at that time relate with NorthShore project (more extractly, some projects). It's a real state management system for NorthShore Inc. and we deveploped a client/server version (with Visual Basic) and 3 web versions (2 with ASP, 1 with Java). The Java version started but never finish. The most interesting things are in 2 ASP versions: The client required us to develop a "grid style" form to support they enter data.
We did it. It's not perfect solution but it's good enough to satisfy client's requirement. Our "grid" can enter text, number, date (with validation and format), calculate total for "number" column (result will be showed in footer). It can has combo box columns, also radio button and checkbox. It supports dependency between columns (example: when you change this combo box, values of the depended combo box will be changed). It only update the rows you changed. You can delete some rows at one time. Also you can add a new row on the "grid" (don't need to use another form). But it's very hard to reuse because we didn't implement it as a component. And now you can guess what was my opportunity.
At that time, as I searched, there was only one grid component for ASP, ASPGrid. But they only supports in basic level (enter text, number, date with validation and format, combo box column). They created a ActiveX component and use an XML configuration file. All the things developer need to do is creating an XML configuration file and do Server.CreateObject() in ASP pages. Developers don't need to use Response.Write() to write the grid out 'cause ActiveX component did it.
I implemented a very simple ActiveX component, it supported to enter text only (no validation, no combo box, no format,...) But I threw it away, at that time .NET Framework is released in beta. I decided to move to Java 'cause at that time in Java field, there wasn't any "grid" component. (display:tag can show data only with sorting). I read JSTL, JSP tag libraries. But... Now I must regret.
Some days ago I have an opportunity to move to another company, they work in RIA (Rich Internet Applications - more detail: Java/Flash/Flex). But I decided to stay. I'm having a challenge (at current company) and I want to win it. If I win, it will open a big opportunity for me. But if I fail, no problem, I will have a good lesson and I will find another one.
Friday, September 15, 2006
How to read a specification?
Here is an article can help you to read a spec easier. Even though it focuses on W3C specs, but it still provides some useful information. And another one for functional spec.
Thursday, September 14, 2006
Blogger added label
I think they should provide supporting to add label for old blog items. At this time you need to edit each item to set its label.
IntelliJ IDEA 6 build 5692 is released
* JavaScript. Bundled Inspection-JS plugin.
* Java EE. Bundled JBoss, Geronimo and GlassFish plugins.
* Bugfixes and minor improvements.
More details, see here.
Wednesday, September 13, 2006
Subversion 1.4.0 was released
Here is Subversion 1.4.0 release notes.
Tuesday, September 12, 2006
StringEx 0.2.2 and t800t8.net
And a new news, t800t8.net will come soon. I hope it will not late like StringEx 0.2.2 ;-)
Saturday, September 09, 2006
Hamburg song - a very sad song
Kean
I don't wanna be adored
Don't wanna be first in line
Or make myself hurt
I'd like to bring a little light
To shine a light on your life
To make you feel loved
No, don't wanna be the only one you know
I wanna be the place you call home
I lay myself down
To make it so, but you don't want to know
I give much more
Than I'd ever ask for
Will you see me in the end
Or is it just a waste of time
Trying to be your friend
Just shine, shine, shine
Shine a little light
Shine a light on my life
Warm me up again
Fool, I wonder if you know yourself at all
You know that it could be so simple
I lay myself down
To make it so, but you don't want to know
You take much more
Than I'd ever ask for
Say a word or two to brighten my day
Do you think that you could see your way
To lay yourself down
And make it so, but you don't want to know
You take much more
Than I'd ever ask for
Friday, September 08, 2006
Thursday, September 07, 2006
IntelliJ IDEA 6 build 5661 was released
Here are changes in build 5661 from 5650:
* CVS. Offline mode support.
* Intention to create enum constant.
* Bugfixes and minor improvements.
More details you can see here.
You can download it here (required registration)
Wednesday, September 06, 2006
IntelliJ IDEA plug-in contest's T-shirt
Check required arguments for batch files
Of course, it cannot replace logical to check required arguments inside your Java application ('cause user can run your Java application without the batch file). But it can provide a more flexible way to run Java application.
And here is your solution:
HelloKitty class requires to pass 2 arguments, they're presented by %1 and %2 and assume that you store this code segment into hello.bat
@echo off
if "%2"=="" goto error
java HelloKitty %1 %2
goto end
:error
echo Usage: hello arg1 arg2
:end
Tuesday, September 05, 2006
H2 1.0 is out
Performance
(source: http://www.h2database.com)
Saturday, September 02, 2006
IntelliJ IDEA 6 build 5650 was released
* GUI Designer. Better GridBagLayout support (all properties of
GridBagConstraints are now editable).
* JUnit. Intenion to add junit.jar to classpath.
* Bugfixes and minor improvements.
For more detail, you can see here.
Now, after waking up with a heavy head (I drank a lot of beer and whisky), I have something to play with :-)
Friday, September 01, 2006
Thursday, August 31, 2006
Mysaifu JVM 0.2.9
You can find out more about Mysaifu JVM here.
IDEA Plugins contest
Update: An article about writing IDEA plug-in. Don't wait anymore, earn prizes now ;-)
Wednesday, August 30, 2006
IntelliJ IDEA 6 build 5646 is released
Changes in build 5646 from 5622:
* Possibility to suppress Unused Property inspection in .properties files.
* VCS. Update and commit are performed in background.
* VCS. Actions to move files between changelists and to select files
in Changes view.
* IDETalk. SSL support.
* Permute arguments quickfix on method calls which have reversed order
of arguments - for example, (int,String) instead of (String,int).
* VCS. New search scope "Changed files".
* OpenAPI. Possibility to plug custom FormattingModel.
* OpenAPI. Custom suppression actions for inspections.
* Bugfixes and minor improvements.
Complete list of changes here
Update: A bug
Tuesday, August 29, 2006
Manifest drives me crazy
Manifest-Version: 1.0
Main-Class: kr.co.xxx.rfReader2SerialPort.RFReader2SerialPort
I create a BAT file to run my application. Here is its content:
java -cp ./lib/converter.jar;./lib/comm.jar
-jar ./RFReader2SerialPort.jar
When I run it, command prompt shows me ConnectionException. It means my application cannot connect to reader (via socket connection). It's not correct, my reader still working. I tried some times and got another error, NoClassDefFoundError, seems it cannot find comm.jar
But if I change the BAT file to
java -cp ./RFReader2SerialPort.jar;./lib/converter.jar;./lib/comm.jar
kr.co.xxx.rfReader2SerialPort.RFReader2SerialPort
It works well.
What happens with my manifest? Or do I miss something?
JavaTech: An Introduction to Scientific and Technical Computing with Java
Another resource for Java beginners: http://javaworkshop.sourceforge.net
What is a small ISV?
+ An ISV is not a consulting shop but sometimes it does consulting
+ An ISV is not a value-added reseller but sometimes it resell something from other stuff
+ An ISV makes, markets and sells software by itselt. This means it accepts the risky from its products and maybe its customers will go away and take it alone
+ A small ISV is not big. A small ISV has 5 developers, 25 developers, 50 developers but if over 100 developers, you should consider it still small or not
Monday, August 28, 2006
You're gone
You're gone
Diamond Rio
I said hello I think I'm broken
And though I was only jokin'
It took me by surprise when you agreed
I was tryin' to be clever
For the life of me I never
Would have guessed how far the simple truth would lead
You knew all my lines
You knew all my tricks
You knew how to heal that pain
No medicine can fix
And I bless the day I met you
And I thank God that He let you
Lay beside me for a moment that lives on
And the good news is I'm better
For the time we spent together
And the bad news is you're gone
Lookin' back it's still surprisin'
I was sinking you were rising
With a look you caught me in mid-air
Now I know God has His reasons
But sometimes it's hard to see them
When I lie awake and find that you're not there
You found hope in hopeless
You made crazy sane
You became the missing link
That helped me break my chains
And I bless the day I met you
And I thank God that He let you
Lay beside me for a moment that lives on
And the good news is I'm better
For the time we spent together
And the bad news is you're gone
The bad news is you're gone
Saturday, August 26, 2006
Rafting
Most of time we stayed in the boat on quiet surface of water. It's OK 'cause we are not professionals also this is the first time I play rafting. But sometimes we met bumpy area and the team need to work together to win. I had a lot of joy and fun.
But the most interesting thing is I have an opportunity to analyze what I read in "Practices of an Agile Developer: Working in the Real World": Developing software like surfing (at this time, rafting), the way to get success is adapting to the waves which come non-stop to dominate them.
This journey is a good memory for me when I were working in Korea. In the future, I want to have more opportunities to play rafting and other danger games. And of course, I hope that my girlfriend will join with me.
Friday, August 25, 2006
Be careful before install IE 7 RC 1
After searching around on Internet, I found the solution (God blesses me, I have a Linux notebook :-D).
If you want to install IE 7 (seem this problem relates with all IE7 versions, included Beta 2, Beta 3 and RC1, which maybe happen when you install or uninstall IE7), please backup Normaliz.dll first. After install IE 7, don't be crazy if you meet this problem. Here is the solution:
+ Press Ctrl + Alt + Del then click Task Manager
+ In tab Applications, click New Task...
+ In Create New Task dialog, click Browse...
+ In Browse dialog, copy Normaliz.dll you already backed up to Windows\System32
+ Now run explorer.exe (in Windows folder) and smile with a large mouth
Buildix - The Agile Development Platform
Thursday, August 24, 2006
Spam
Công việc đã vượt được qua phần khó khăn nhất rồi. Giờ mình đã có thể làm việc với cổng serial được cả bằng .NET lẫn Java. Còn ngày mai với tuần sau nữa để hoàn thành công việc. Vẫn còn nhiều thứ để làm...
Firefox 2 Beta 2 and FlashGot
How can I open it when you only provide Save and Cancel option?
My short answer for Java closures
Some acronyms
+ KISS: Keep It Simple Stupid
+ WYSIWYG: What You See Is What You Get
+ DRY: Don't Repeat Yourself
+ LOL: Laughing Out Loud
+ AFAIK: As Far As I Know
+ IMO: In My Opinion
and there are many more.
You can found more here, here and here.
Mysaifu JVM
As you can see the Mysaifu's objective, the author of Mysaifu wants to make a JVM which conforms to J2SE. It means that you can write an application for PC and then run on Pocket PC without limitation. I think it's a nice project.
If you have some experience with other JVMs for handle devices (except the one from Sun) you seems don't like them very much. An example is Ewe VM. When you write an application to run on Ewe VM, your source code will look like Visual J++, not pure Java.
If you have time, and of course, a Pocket PC, please try to play with Mysaifu you will have something fun.
FYI: A ported library of Java Communications API for Windows CE/Pocket PC --> http://www.teilo.net/software/CEJavaComm/
Wednesday, August 23, 2006
New method in Java SE 6 makes IDEs more difficult
Tuesday, August 22, 2006
How to mount a flash drive manually
With my very little experience, I don't know how to get the content of xorg.conf. Suddenly, I remember my flash drive. EUREKA!!!
I tried to find a solution to mount my flash drive and found here and here. The first post is very good one but when I try
sudo mount -t vfat -o uid=t800t8,gid=users /dev/sda /media/flash
it doesn't work.
OK, try with
sudo mount -t vfat -o uid=t800t8,gid=users /dev/sda1 /media/flash
Now everything is fine. I can copy xorg.conf and Xorg.0.log to my flash drive.
With the second post, I know how to unmount a device.
sudo umount /media/flash
Friday, August 18, 2006
TestNG 5.1 is released
Now waiting for Mark (and Hani?) update their TestNG-J...
IntelliJ IDEA's trend
If it's correct, IDEA should support for Czech's language and Chinese, not Japanese.
Just for fun :-D
Gyach-E - Yahoo! Messenger for Linux
+ Gyach-E can log on with invisible mode (Gaim can't do)
+ Gyach-E can voice chat others (Kopete and Gaim can't do)
+ Gyach-E supports web cam (Gaim can't do)
+ Gyach-E can show popup when someone logs on and logs off (Kopete and Gaim, again Gaim, can't do)
+ Gyach-E can show popup when receives a new mail (with a voice message) (Gaim can't do)
+ Gyach-E supports to open your Yahoo! Mail directly from Gyach-E (Kopete and Gaim can't do)
+ Gyach-E can detect an user is invisible if he's online then change status to invisible (nice feature, huh?)
+ Gyach-E can keep connection really well (Try to log on to your account by another computer, it will be out immediately)
If you only need to chat with other YM users, Gyach-E is for you.
(I will provide more when I found any nice features Gyach-E can do)
How to install Gyach-E? (Thanks endersshadow)
1. Download http://www.politicalcrossfire.com/temp/enderavsig/gyach-install.tar.bz2, and save it to your home directory (important!).
2. Run these commands in the terminal, in sequential order:
tar -xjf gyach-install.tar.bz2
cd gyach
sudo ./install
Now try to run Gyach-E by "gyach" at terminal console.
Note: Maybe you need to install libtldl package to run Gyach-E.
Thursday, August 17, 2006
Black belt
It's a good site which has many volunteers they participate to guide you the basic of J2SE, Servlet, JSP, Spring, Hibernate and many more. It's really good for you if you want to get Java certificates.
Learn and contribute!
No Dolphin anymore, get the first build of JDK 7 now
Wednesday, August 16, 2006
IntelliJ IDEA 6 build 5622 is released
* HTML Preview plugin for previewing Web pages in an embedded Mozilla
browser.
* Bugfixes and minor improvements.
For more details, see here.
Tuesday, August 15, 2006
Sun and open source Java
Monday, August 14, 2006
My desk
One thing I don't like in Ubuntu Dapper Drake
Another problem in SuSE 10.1 relates with wireless network: I saved my wireless network's properties but every time I reconnect, I need to re-enter my network key.
I don't have these problems with a very little experience with Fedora Core 5.
Thursday, August 10, 2006
Decided to move
After my Samsung Sens X10 is fixed, I will install Ubuntu in my Dell Inspiron 8600.
And beyond this, I decided to move a big bigger thing... ;-)
Tuesday, August 08, 2006
A song for Vietnamese men who are lovelorn
Lệ Đêm (by Linh Kent)
(Thanks my young cousin, a jolly guy)
Friday, August 04, 2006
IntelliJ IDEA Demetra build 5594 is released
HOWTO setup xvnkb to type Vietnamese in Ubuntu
$sudo apt-get install gcc xlibs-dev libxft-dev make cvs
1. Get xvnkb source code from CVS (When it prompts password, please press Enter)
$ cvs -d ':pserver:anonymous@xvnkb.cvs.sf.net:/cvsroot/xvnkb' login
$ cvs -z3 -d ':pserver:anonymous@xvnkb.cvs.sf.net:/cvsroot/xvnkb'
checkout xvnkb
2. Make the source code
$ cd xvnkb
$ ./autogen.sh
$ ./configure
$ make
3. Install xvnkb
$sudo make install
Now you can start to type Vietnamese by using "xvnkb" at terminal console.
Update: After install xnvnkb, you can type Vietnamese in Word or gedit but cannot in Firefox. To type Vietnamese in Firefox, you need to install CHIM extension for Firefox from this address: http://xvnkb.sourceforge.net/chim/chim.xpi
Get free domain name now
Ngày nhiều việc
+ Reconstruct cái cấu trúc của dự án
+ Đánh vật với cái Ant build dài 488 dòng
+ Download được 3 album nhạc: Queen - Greatest Hits 2, Lifetime Of Romance - Be My Love và Lifetime Of Romance - Heartbreakers
+ Download được 2 cuốn sách
+ Cài cái IETab extension cho Firefox + viết hướng dẫn cho cái H nhà mình
+ Cơm ăn no
+ Rửa mặt 2 lần
+ Ngáp nhiều cái
+ Giờ thì đang mỏi mắt, buồn ngủ và chuẩn bị report một lỗi của IDEA
Ha ha, mình làm được khối việc đấy chứ.
Giờ này cô ấy đang làm gì nhỉ? Mấy hôm nay ở nhà đang bão nên giờ này chắc cô ấy đang ngủ khì. Hôm trước nói chuyện với cô ấy thấy cô ấy thật vui vẻ với nụ cười có lẽ lâu lắm mình mới thấy ở cô ấy.
"Em cứ yên tâm nghỉ ngơi ở nhà, không phải lo lắng gì cho anh đâu. Mọi việc của anh tốt cả. Báo cáo em, đêm qua anh tiêu diệt được 4 con muỗi."
Thursday, August 03, 2006
How do you construct your projects?
In my opinion, I construct my projects like this
[project-root]
|
|------- \Module1
| |
| |------- \src
| |------- \test
| |------- \javadoc
| |------- \lib
| |------- build.properties
| |------- build.xml
|
|------- \Module2
| |
| |------- \src
| |------- \test
| |------- \javadoc
| |------- \lib
| |------- build.properties
| |------- build.xml
|
|------- \build
| |
| |------- \production
| | |
| | |-------- \Module1
| | |-------- \Module2
| |
| |------- \test
| |
| |-------- \Module1
| |-------- \Module2
|
|------- \dist
| |
| |------- \Module1
| |------- \Module2
How about your opinion?
A bug in IntelliJ IDEA build 5581
Sometimes the icon of files in tab bar will disapear. If I close IDEA then reopen, they will appear.
Wednesday, August 02, 2006
Subversion + Apache2 + SSL on Ubuntu in 10 steps
sudo apt-get install subversion libapache2-svn
libapache-mod-dav apache2
2. Enable SSL support in Apache
sudo a2enmod ssl
3. Stop Apache
sudo /etc/init.d/apache2 stop
4. Let Apache2 listen on port 443
sudo gedit /etc/apache2/ports.conf
Add to the end of file
Listen 443
5. Create SSL certificate
sudo apache2-ssl-certificate
Provide some information following the prompt
Country Name: <country_code> (example: VN)
State or Province Name: <state_name>
Locality Name: <city_name>
Organization Name: <organization_name>
Organization Unit Name: <organization_unit_name>
Server Name: <server_name>
Email Address: <email_address>
6. Configure site
sudo cp /etc/apache2/sites-available/default
/etc/apache2/sites-available/<sitename>
then edit
sudo gedit /etc/apache2/sites-available/<sitename>
- Change NameVirtualHost to NameVirtualHost *:443
- Change <VirtualHost> to <VirtualHost *:443>
- Append before </VirtualHost> the following
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM
Then create a symbol link to your site configuration in sites-enabled
sudo ln -s /etc/apache2/sites-available/<sitename>
/etc/apache2/sites-enabled/<sitename>
Note: <sitename> should be same as your hostname
7. Create a Subversion Repository
sudo svnadmin create /var/lib/svn
sudo chown -R www-data:www-data /var/lib/svn
sudo chmod -R g+ws /var/lib/svn
8. Use Apache for Authentication
sudo htpasswd -c -m /var/lib/svn/conf/htpasswds <username>
9. Configure mod_dav
edit dav_svn.conf
sudo gedit /etc/apache2/mods-available/dav_svn.conf
DAV svn
SVNPath /var/lib/svn
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile /var/lib/svn/conf/htpasswds
Require valid-user
SSLRequireSSL
Disable anonymous browsing by commenting out the following:
#<LimitExcept GET PROPFIND OPTIONS REPORT>
# Require valid-user
#</LimitExcept>
10. Start Apache
sudo /etc/init.d/apache2 start
Now try to browse https://<sitename>/svn and import something
Tuesday, August 01, 2006
New blog's address
KIẾM TIỀN
"Em cũng muốn thế lắm nhưng khốn một nỗi em chưa tìm được cái công việc em thích làm mà tiền lại ít hơn một chút. Giữa lựa chọn hiện giờ, tháng hơn 1000$ ở đây và tháng cùng lắm 300 - 400$ ở VN, thì cái khoảng chênh lệch kia là cả một vấn đề lớn rồi." (Tất nhiên là mình nhìn nhận trên thực tế khả năng của mình và cả môi trường xung quanh nữa.)
Cũng vì cuộc sống, vì tiền mà phải làm ở một công ty thế này. Có những thằng tốt như Park, Nam, Lee nhưng cũng có những thằng củ chuối như Kang. Chúng nó nhìn nhận mình làm việc thế nào dựa vào việc trên màn hình của mình hiển thị gì. Nếu mình vào Internet, đọc sách, mẹ khỉ, "thằng này có vẻ lười". Thiếu điều mình mở cửa sổ code quay bốn phía và mộng mơ.
Cuộc sống chó thế đấy. Mà mục đích của mình sang đây là để làm gì? Phải rồi, KIẾM TIỀN. Mẹ kiếp, mình đang KIẾM TIỀN đấy chứ...
Thursday, July 27, 2006
IntelliJ IDEA 6 Beta is released
Detail change list in this build, here.
I don't know which build this exists but in this build, when I want to revert a file from Subversion, IDEA will show me a dialog to choose the files I want to revert. It didn't revert only the current file silently.
Keep going with "Deveplop with pleasure" slogan, JetBrains! :-)
Update: IDEA's TestNG plugin still works fine with TestNG 5.0
Tuesday, July 25, 2006
Saturday, July 22, 2006
C# enumeration problem
public enum Orientation
{
East = 1,
West = East,
South = 2,
North = 3
}
At this time, East and West has same underlying value (1) and I cannot write a switch like this
switch (orientation)
{
case Orientation.East:
Console.WriteLine("East");
break;
case Orientation.North:
Console.WriteLine("North");
break;
case Orientation.South:
Console.WriteLine("South");
break;
case Orientation.West:
Console.WriteLine("West");
break;
}
Because when I compile, I will have an error: "The label 'case 1:' already occurs in this switch statement"
I don't understand why C# supports to declare enumeration like that. If East and West has same meaning, I will not waste my time to create both of them.
Can anybody has experience with C# help me?
Friday, July 21, 2006
Thursday, July 20, 2006
TestNG 5.0 is released
* The configuration annotations are now called @BeforeTest,
@BeforeSuite, etc...
* The reports are now created in their own directory (one per suite)
and a main index file shows a list of all the suites that were
just run. They have also received a series of improvements in
appearance and content.
* It is now possible to specify the suite and test names directly in
the @Test annotations, which allows you to do without a testng.xml.
* expectedExceptions has moved inside @Test.
* TestNG shows you friendly stack traces.
For more information, go here.
Waiting for upgrade IDEA's TestNG plugin...
Wednesday, July 19, 2006
Finished Pragmatic Version Control: Using Subversion 2nd
This book will show you
+ The advantages of Subversion
+ How to create repository
+ What you should import to your repository and how to do
+ Why you need to create tags and branches and how to do
+ How to organize your repository also project
+ And many things...
I prefer this book than Version Control with Subversion 'cause I'm a developer, I don't need to focus in administration.
Next step: Practices of an Agile Developer - Working in the Real World
Tuesday, July 18, 2006
Small is great
Two articles about building great team:
+ How to build a great team
+ Is your team too big? Too small? What's the right number?
Monday, July 17, 2006
IntelliJ IDEA 6 UI designer demo
I never try to use IDEA to design UI. I have a little experience with NetBeans's Matisse, it's nice. But I will give IDEA's UI designer a try :-)
You can see the demo here.
A video about Team Server / Ajax Development with IntelliJ IDEA I found at Google.
Came back from Deajon
I visited my cousin's house. It's a boring weekend 'cause it's raining during days. But I met my cousin's son. A nice and obedient boy. He's just 6 months old.
Now I need to prepare for Wednesday's lecture. This week will a busy week.
Friday, July 14, 2006
IntelliJ IDEA build 5383 is released
This build fixed 2 bugs I reported long time ago:
+ http://www.jetbrains.net/jira/browse/IDEADEV-7011
+ http://www.jetbrains.net/jira/browse/IDEADEV-7012
Update: Found a bug.
Update: Another bug.
Thursday, July 13, 2006
Buồn ngủ qúa
Hôm nay làm việc rõ chăm, trưa đếch ngủ gì cả. Cái dự án mình "vẽ" ra đã thực hiện xong phần 1 rồi. Mai test thêm một chút nữa rồi chuyển sang phần 2.
Giờ chuẩn bị lecture nào...
Buy 5.1 now, get 6.0 early autumn
Buy IntelliJ IDEA 5.1 now, you will get 6.0 for free, plus TeamCity.
Stupid Firefox bug
+ Open Firefox
+ Now connect to your external drive (HDD or flash drive)
+ Try to upload from Firefox, you will not find new drive (in
Browse dialog)
+ Restart Fifefox then try to upload again, now you can find new drive
This bug exists long time ago.
Wednesday, July 12, 2006
Just received Ubuntu 6.06 LTS CDs
JLicense, a bad license library
As I guess, JLicense will encrypt the information you gave into a signature which also is stored in license.lic. When program runs, JLicense will decrypt the signature and compare it with the information. If they match, program will run. Ofcourse, you can do more validating by using "feature"s.
But when I try to generate new DSA key (seems JLicense uses symmetric algorithm to encrypt data) then create new license, it will invalid (when you download JLicense, it already contained a DSA key, with this one you can create valid licenses). Another problem is I don't understand why JLicense need license.lic in classpath before it creates a new license.
In JLicense web site, they advertise "You can also write your own class, such as a Servlet, to create the license file more dynamically based on user input data." but the example demonstrates how to create license awfully, I still don't know how to create a valid license (from my source code).
These things I found in JLicense v2.7
Tuesday, July 11, 2006
IntelliJ IDEA build 5380 is released
* JSP. Major performance improvements.
* Perforce. Synchronization of changelists between IDEA and Perforce.
* New scope configuration UI.
* CSS. Intention to extract inline style.
* Improved detection of invalid @Nullable/@NotNull annotations.
* Other improvements and bugfixes.
More details here.
Two bugs I reported are fixed (http://www.jetbrains.net/jira/browse/IDEADEV-6870?rc=1 and http://www.jetbrains.net/jira/browse/IDEADEV-6861?rc=1). I will check the big bug later.
Update: They fixed big bug in a clever way: Removes capability to detach library directly from module's root :-D
Update: This build has a better performance but it has some terrible errors, they relate with Ant build and Perforce plugin.
Update: In this build, Unused symbol inspection doesn't work. Resolved: They changed from unused symbol inspection to UnusedDeclaration inspection.
Update: A request for new feature - http://www.jetbrains.net/jira/browse/IDEA-8213
Wednesday, July 05, 2006
IntelliJ IDEA build 5368 is released
* EJB. Support for EJB 2.1 spec.
* Subversion. New repository browser.
* GWT Studio. Major functionality improvements.
* Updated project roots configuration UI.
* Intentions. Create enum from usage.
* Intentions. When creating method from usage in inner class,
possibility to place created method in outer class.
* GUI Designer. Support for binding button groups to class fields.
* Other improvements and bugfixes.
More details here.
Here is new project roots configuration UI
New Output tab
Default template project settings
This build fixed one bug I reported in build 5250 and this bug seems not happen any more.
Update: A bug that I found in this build.
Update: another bug. (But it's my bug :-D)
Update: Two more bugs (http://www.jetbrains.net/jira/browse/IDEA-8148
and http://www.jetbrains.net/jira/browse/IDEA-8149)
Update: A big bug.
Tuesday, July 04, 2006
TestNG test class template for IDEA
#parse("File Header.java")
package ${PACKAGE_NAME};
import static org.testng.Assert.*;
import org.testng.annotations.*;
public class ${NAME} {
@Configuration(beforeTestClass = true)
public void setUp() {
// Code to set up the test class comes here
}
@Configuration(afterTestClass = true)
public void tearDown() {
// Code to clean up the test class comes here
}
@Test
public void testSomething() {
// Code to test comes here
}
}
What is mixed revision working copies in Subversion?
Why? 'Cause Subversion treats directories as first class objects, it remembers the revision number for each directory in your working copy.
I guess Subversion works this way: When I commit Day.txt to repository, Subversion client will update Day.txt (its content, history and revision number) to repository, also in working directory and sesame directory to repository. It doesn't update sesame directory and Number.txt in working directory. That's why if I run "svn log sesame", the command's output only returns revision 1. Only after I do "svn update", sesame's revision number will change, it comes from repository.
One sentence is from Version Control with Subversion is "'push' action does not cause a 'pull'"
Monday, July 03, 2006
Foxit Reader
Try it and like it!
Friday, June 30, 2006
BootDisk2USBStick
See it here (in German) :-D
Monday, June 26, 2006
Java News Brief
See them here: http://www.ociweb.com/articles/publications/jnb.html
Sunday, June 25, 2006
Vài người vớ vẩn
Với mình những người biết rõ mình đang ở đâu, khả năng của mình ở mức độ nào, biết mình muốn gì, có chí tiến thủ, có đầu tư thời gian để nâng cao kiến thức phù hợp với khả năng và định hướng của mình, người đó mới có thể nên người được.
Okie, chơi game, giải trí cũng tốt nhưng nên có hạn định về thời gian thôi chứ. Chứ cứ chơi game suốt ngày thì khi nào có với tới được cái ước mơ kinh doanh, công việc nhàn nhã nhưng lại kiếm được nhiều tiền kia?
Vớ vẩn và hoàn toàn vớ vẩn.
Saturday, June 24, 2006
I'm running V400
For more information about V400, you can see here.
Friday, June 23, 2006
IntelliJ IDEA Demetra build 5350 is released
2 nice changes that I want to see are supporting to import into SVN and new Ant itegration plugin.
Changes in build 5350 from 5321
* Ant. New Ant integration plugin included in the distribution.
* GWT Studio plugin included in the distribution.
* New project roots configuration UI.
* Subversion. Import into SVN action.
* Possibility to exclude certain packages from class name completion
and auto-import prompts.
* Emacs like expand word completion (Alt-slash).
* Other improvements and bugfixes.
Complete list of changes: here.
Tonight I will sleep late. :-)
Update: After installing IDEA Demetra 5350, I've found a bug. See it here.
Update: Another bug.
Update: UI changes
Update: SVN - "Browse changes" seems change. I don't know which build it changed but I see it the first time in this build (5350)
Update: One more bug.
Thursday, June 22, 2006
Phượng hoàng tung cánh
Annihilator
Day by day, watching you disappear
Wishing that you were still here beside me
On my own, swimming against the tide
Theres nobody on my side but your memory
Then you'll rise right before my eyes
On wings that fill the sky
Like a phoenix rising
Like a phoenix rising
Wings on fire, tearing into the night
Screaming into the light of another day
Carry me out the hurricane
Into the smoke and flame and well fly away
And well rise right before their eyes
On wings that fill the sky
Like a phoenix rising
Like a phoenix rising
Higher, higher, hear the thunder roar from above
Fire, fire, fire makes me whole
Into the smoke and flame and well fly away
And well rise right before their eyes
On wings that fill the sky
Like a phoenix rising
Like a phoenix rising
Wings on fire, tearing in to the night
And well fly away
HOWTO: Pick an open source license
Tuesday, June 20, 2006
StringEx v0.2.2 - first public release
A free Java library supports to extract values from text based on a regex. StringEx also supports to get sub regex constructs from initialized regex.
Why StringEx?
'Cause somtimes I need it for my works and I do it for fun.
How to use?
Assume that you create a StringEx instance with regex "((\\w+)(\\(\\d{2}\\)))(\\w+)", at that time
+ matchesWithRegex("Super(99)Java") will return true, while
matchesWithRegex("Super(99Java") will return false.
+ extractAll("Super(99)Java") will return an array {"Super(99)", "Super", "(99)", "Java"}
+ extractAt("Super(99)Java", 0) will return "Super(99)"
extractAt("Super(99)Java", 1) will return "Super"
extractAt("Super(99)Java", 2) will return "(99)"
extractAt("Super(99)Java", 3) will return "Java"
extractAt("Super(99)Java", 4) will throw IndexOutOfBoundsException
+ getAllRegexConstructs() will return an array {"(\w+)(\(\d{2}\))", "\w+",
"\(\d{2}\)", "\w+"}
+ getRegexConstructAt(0) will return "(\w+)(\(\d{2}\))"
getRegexConstructAt(1) will return "\w+"
getRegexConstructAt(2) will return "\(\d{2}\)"
getRegexConstructAt(3) will return "\w+"
getRegexConstructAt(4) will throw IndexOutOfBoundsException
License: LGPL
You can see the source code here. I will upload the binary, also the source code as soon as possible.
If you want to discuss about StringEx or report error, just leave a comment here.
Update: Change license policy.
Update: Change How to use