I'm tired now, yes, very tired. But I had a lot of fun, yes, a lot. KOIVA organized an workshop for foreign high-tech professionals at Kuk Ki Won and I attended it.
I played Taekwondo, it's the first time. I enjoyed it very much although my actions are very basic. I met Martin - an Irish guy, Dung - a Vietnamese guy I knew before, Tien - a Vietnamese girl she live in Hochiminh City and has worked here for 3 years, and many people. I listened a Chinese girl sang "Big big girl" (actually she's a small girl, not big ;-). I watched a Yoga show which was performed by an Indian Yoga instructor and he made me say "WOW" and clapped many times. I took some pictures (I will post them later if possible). I had a new Romanson watch. And over of all I had a lot of fun :-)
The workshop was very interesting and I will attend it next time (this workshop is organized every year)
Work hard and play much when you can. Enjoy your life!
Thursday, June 28, 2007
Monday, June 25, 2007
Are there any places to use contructors of an abstract class with public or default access modifier?
As we already knew, we cannot create instances of an abstract class. So there are only 2 places to access constructors of an abstract class:
+ From the internal of that class (we can use private access modifier for this situation, it's enough), and
+ From its subclasses (we can use protected access modifier for this situation and it also satisfies the above situation)
And for other reasons, if we need to use instances of an abstract class, we will provide factory method(s) to create them (actually, at this time, we will return an instance of a "DEFAULT" subclass). So I don't see any reasons to declare constructors of an abstract class with public or default access modifiers.
Can you give me the reasons why I "need" to do it? Thank you.
+ From the internal of that class (we can use private access modifier for this situation, it's enough), and
+ From its subclasses (we can use protected access modifier for this situation and it also satisfies the above situation)
And for other reasons, if we need to use instances of an abstract class, we will provide factory method(s) to create them (actually, at this time, we will return an instance of a "DEFAULT" subclass). So I don't see any reasons to declare constructors of an abstract class with public or default access modifiers.
Can you give me the reasons why I "need" to do it? Thank you.
Sunday, June 24, 2007
Sorry Firefox, you don't understand "polymorphism"
While I was typing for my previous post, I found that Firefox displayed a red-dot-underline line under "polymorphism". It means Firefox doesn't recognize "polymorphism" as a valid word in English. Or it means Firefox doesn't understand "polymorphism".
Hey Firefox, you should learn more. And please start from here.
Hey Firefox, you should learn more. And please start from here.
Interface - Where and When?
I understand that if I use interface, my application can a high flexible construction. I can easily extend class to add more function, and also make use of strong point of polymorphism and dynamic binding. But I'm wondering that where and when I should use interface.
At this time I'm developing a small application it contains a Tourist class and I can't imagine that when I need to create some more specific kinds of Tourist. Even I need to extend Tourist, I can re-factor Tourist to be a abstract class (or keep it unchanged) and then create subclasses of Tourist. Where is the place I need to consider to use interface here?
As I told you, I'm developing a small application and I know it still keep in small level, hardly to become bigger. So what is the matter I need to use interface here? That is WHEN question.
What do you think about the WHERE and WHEN?
At this time I'm developing a small application it contains a Tourist class and I can't imagine that when I need to create some more specific kinds of Tourist. Even I need to extend Tourist, I can re-factor Tourist to be a abstract class (or keep it unchanged) and then create subclasses of Tourist. Where is the place I need to consider to use interface here?
As I told you, I'm developing a small application and I know it still keep in small level, hardly to become bigger. So what is the matter I need to use interface here? That is WHEN question.
What do you think about the WHERE and WHEN?
Saturday, June 23, 2007
Lack of something
I spent a little of time to think about my work, my knowledge and my experience. And I found that I'm lack of knowledge, MUCH.
I'm a techno guy. I love new technologies, really love. And I always try to catch the trend of new technologies by collecting every little amount of information about them. I cannot remember how many times I said "WOW" when I found something interesting. But when I knew about it (a little, again, sadly) I threw it away to catch a new one.
Till now, about 6 years from the time I graduated university. I knew Spring, I knew Hibernate, I knew JSF, Struts, Wicket... and many things but I'd just knew, NOT UNDERSTAND. Even I can use them but I don't know how they works, how they make this or that interesting.
Of course, you cannot UNDERSTAND everything, but you should understand SOMETHING, something that can make you love, are interested in, something can make you fun and of course, it can help you to earn money. And here is my list, something I want to understand:
+ Algorithms
+ OOP (and how to apply it CORRECTLY)
+ Design Patterns
+ Software Development Process (I choose ICONIX to start)
+ Swing
+ Servlet
+ Spring
+ Hibernate
+ Struts
+ Wicket
(the list will be continued...)
I'm a techno guy. I love new technologies, really love. And I always try to catch the trend of new technologies by collecting every little amount of information about them. I cannot remember how many times I said "WOW" when I found something interesting. But when I knew about it (a little, again, sadly) I threw it away to catch a new one.
Till now, about 6 years from the time I graduated university. I knew Spring, I knew Hibernate, I knew JSF, Struts, Wicket... and many things but I'd just knew, NOT UNDERSTAND. Even I can use them but I don't know how they works, how they make this or that interesting.
Of course, you cannot UNDERSTAND everything, but you should understand SOMETHING, something that can make you love, are interested in, something can make you fun and of course, it can help you to earn money. And here is my list, something I want to understand:
+ Algorithms
+ OOP (and how to apply it CORRECTLY)
+ Design Patterns
+ Software Development Process (I choose ICONIX to start)
+ Swing
+ Servlet
+ Spring
+ Hibernate
+ Struts
+ Wicket
(the list will be continued...)
Thursday, June 21, 2007
JetGroovy - Groovy plugin for IntelliJ IDEA
Michal already figured out how to build JetGroovy from source. (Thanks Michal!) But if you're lazy, you can get JetGroovy here.
Installation: Download groovy.zip and extract it to IDEA_HOME/plugins, then start IDEA to fight ;-)
Note: This JetGroovy build ONLY works with IDEA 7 EAP build 7020. I'm not sure that it will work with other EAP builds (and of course it doesn't work with IDEA 6 or earlier)
If you have problem in downloading groovy.zip, please replace "us.share" in "http://us.share.geocities.com/t800t8/2007-06-21/groovy.zip" by "www". Sorry for inconvenience. (Yahoo suck!)
Update: I've just updated to IDEA build 7027 and JetGroovy doesn't work anymore. IDEA hangs while loading JetGroovy and there is no exception in log file.
Installation: Download groovy.zip and extract it to IDEA_HOME/plugins, then start IDEA to fight ;-)
Note: This JetGroovy build ONLY works with IDEA 7 EAP build 7020. I'm not sure that it will work with other EAP builds (and of course it doesn't work with IDEA 6 or earlier)
If you have problem in downloading groovy.zip, please replace "us.share" in "http://us.share.geocities.com/t800t8/2007-06-21/groovy.zip" by "www". Sorry for inconvenience. (Yahoo suck!)
Update: I've just updated to IDEA build 7027 and JetGroovy doesn't work anymore. IDEA hangs while loading JetGroovy and there is no exception in log file.
Monday, May 14, 2007
Keep your wallet tight
Last weekend, after came back company from camp with my colleagues, I suddenly found that I lost my wallet. I asked my colleagues to help me to contact the driver who drived the car we used to go 'cause I think I dropped it on the car. A few hours later, I had the answer that he could not found it. This afternoon he contacted us and informed that he found the wallet(!). And now I have it here. "Thanks the driver!"
But I still lost 20.000 wons and 5 dollars while I'm sure that my wallet contains at least 40.000 wons and 5 dollars. Luckily, I moved all money from my check card to another bank account. I don't want to imagine what will happen then if somebody will use it and I will loose all money. And actually, I have something more than the money inside the wallet.
Loosing 20.000 wons (about 20 dollars) and 5 dollars is very cheap. A lesson I should keep in my mind: Keep my wallet tight.
But I still lost 20.000 wons and 5 dollars while I'm sure that my wallet contains at least 40.000 wons and 5 dollars. Luckily, I moved all money from my check card to another bank account. I don't want to imagine what will happen then if somebody will use it and I will loose all money. And actually, I have something more than the money inside the wallet.
Loosing 20.000 wons (about 20 dollars) and 5 dollars is very cheap. A lesson I should keep in my mind: Keep my wallet tight.
Wednesday, May 02, 2007
Cái chết
Vừa rồi Tr thông báo anh N mới mất. Bần thần cả người. Mới vừa hôm nọ anh em còn nhậu...
Cuộc sống chẳng thể lường trước điều gì sẽ xảy ra. Hôm nay còn mà mai đã thành cát bụi. Nhìn lại bản thân thấy mình chưa làm được gì, cũng chẳng có gì. Buồn thật. Để rồi đến lúc mình thành cát bụi, phỏng mình có chi đây?
Xin chia buồn với gia đình anh N :-(
Cuộc sống chẳng thể lường trước điều gì sẽ xảy ra. Hôm nay còn mà mai đã thành cát bụi. Nhìn lại bản thân thấy mình chưa làm được gì, cũng chẳng có gì. Buồn thật. Để rồi đến lúc mình thành cát bụi, phỏng mình có chi đây?
Xin chia buồn với gia đình anh N :-(
Friday, April 06, 2007
Something I hate in Netbeans
Everybody usually complains about missing this feature or that feature in Netbeans, but not me. I only work in "tic toe" programs so Spring, Hibernate, blah blah... they're not my concern.
+ Loading at startup is more slow: These days Netbeans 6 needs to spend more time to load. I only installed Ruby and Maven plugins but 45 seconds for loading is not acceptable (JDK, libraries and project are already cached, my laptop is 1.66Ghz and has 1GB RAM).
+ Expanding node is very very slow: When I expand Source Packages node in Project pane, it takes 3-4 seconds to display all packages. God, I only have 6 packages and only 2 of them contain over 20 classes.
+ Expanding code templates uses inappropriate shortcut key: Netbeans 5.x uses Space by default and Netbeans 6 uses Tab. I think it is stupid 'cause if I enter "psvn" then delete "n" and enter "m", at that time press Space/Tab and expanding doesn't work. ("psvm" + expand code template shortcut key should generate main()). But Netbeans supports to change shortcut key for expanding code template and I need to change to Shift + Space.
+ Popup intellisense list is slow too: If you press Ctrl + Shift + Space inside the editor, Netbeans will show a "Please wait..." list and you need to wait a little before the intellisense list appears. While in IntelliJ IDEA, the intellisense list appears immediately. This problem also happens even you entered some characters and the intellisense list is very short (only a few elements).
+ Missing inspections: Using Netbeans, I really miss the inspections in IntelliJ IDEA. AFAIK, at this time Netbeans 6 only has inspection to generate javadoc and remove unused import.
+ Templates are stored in Netbeans folder: If I uninstall Netbeans, I will lost my templates. It should be kept in user's folder.
+ Doesn't show error description in status bar: Netbeans can parse the source code and highlight the errors but I cannot see error description until I move the mouse over the error indicator.
Update: If I enter "nout" then move the cursor back, delete "n", add "s", move the cursor to the end of "sout" and press Shift + Space (I configured to use Shift + Space to expand code template), expanding code template doesn't work too.
Generating javadoc comment should generate closed comment: When I enter "/**" and press Enter, Netbeans should generate "*/" for me.
Update: Do not force me to use quick search: When I want to generate a constructor with several fields, I press Space to select a field then Netbeans display quick seach text box so I need to press Esc to hide that text box.
Formatting for switch statement is not correct: When I enter "case 1:" then press Enter (or Ctrl + Shift + F to format code), Netbeans does auto un-indent "case 1:" so it has same indent level with "switch (n)"
Update: Should detect JDK home automatically: You can see description here: http://www.netbeans.org/issues/show_bug.cgi?id=99745. And if they bundle up the JDK, Netbeans will have same size with IntelliJ IDEA.
Note: All the problems here I met in Netbeans 6 (latest test daily build)
+ Loading at startup is more slow: These days Netbeans 6 needs to spend more time to load. I only installed Ruby and Maven plugins but 45 seconds for loading is not acceptable (JDK, libraries and project are already cached, my laptop is 1.66Ghz and has 1GB RAM).
+ Expanding node is very very slow: When I expand Source Packages node in Project pane, it takes 3-4 seconds to display all packages. God, I only have 6 packages and only 2 of them contain over 20 classes.
+ Expanding code templates uses inappropriate shortcut key: Netbeans 5.x uses Space by default and Netbeans 6 uses Tab. I think it is stupid 'cause if I enter "psvn" then delete "n" and enter "m", at that time press Space/Tab and expanding doesn't work. ("psvm" + expand code template shortcut key should generate main()). But Netbeans supports to change shortcut key for expanding code template and I need to change to Shift + Space.
+ Popup intellisense list is slow too: If you press Ctrl + Shift + Space inside the editor, Netbeans will show a "Please wait..." list and you need to wait a little before the intellisense list appears. While in IntelliJ IDEA, the intellisense list appears immediately. This problem also happens even you entered some characters and the intellisense list is very short (only a few elements).
+ Missing inspections: Using Netbeans, I really miss the inspections in IntelliJ IDEA. AFAIK, at this time Netbeans 6 only has inspection to generate javadoc and remove unused import.
+ Templates are stored in Netbeans folder: If I uninstall Netbeans, I will lost my templates. It should be kept in user's folder.
+ Doesn't show error description in status bar: Netbeans can parse the source code and highlight the errors but I cannot see error description until I move the mouse over the error indicator.
Update: If I enter "nout" then move the cursor back, delete "n", add "s", move the cursor to the end of "sout" and press Shift + Space (I configured to use Shift + Space to expand code template), expanding code template doesn't work too.
Generating javadoc comment should generate closed comment: When I enter "/**" and press Enter, Netbeans should generate "*/" for me.
Update: Do not force me to use quick search: When I want to generate a constructor with several fields, I press Space to select a field then Netbeans display quick seach text box so I need to press Esc to hide that text box.
Formatting for switch statement is not correct: When I enter "case 1:" then press Enter (or Ctrl + Shift + F to format code), Netbeans does auto un-indent "case 1:" so it has same indent level with "switch (n)"
Update: Should detect JDK home automatically: You can see description here: http://www.netbeans.org/issues/show_bug.cgi?id=99745. And if they bundle up the JDK, Netbeans will have same size with IntelliJ IDEA.
Note: All the problems here I met in Netbeans 6 (latest test daily build)
Coming home
Left Vietnam about 2 years ago, now it is the time I need to come back. Even I will only come back Vietnam in a few weeks but I think it's a good time to see what is happening in my country. These days I heard that there are many investors they're investing in Vietnam, I heard about stock market,... Vietnam is changing.
But more important, I want to spend my time with my family. I want to meet my friends. I want to ride my motorbike and graze on the roads. And if possible, I will spend my time to go across my country. Also I want to have time to live and think for myself.
I'm really enthusiastic for coming back Vietnam. I will meet you, Vietnam, tomorrow.
But more important, I want to spend my time with my family. I want to meet my friends. I want to ride my motorbike and graze on the roads. And if possible, I will spend my time to go across my country. Also I want to have time to live and think for myself.
I'm really enthusiastic for coming back Vietnam. I will meet you, Vietnam, tomorrow.
Monday, February 26, 2007
Came back from Taiwan
Yesterday night, I came back Seoul from Taiwan. After a hard working year, I had an interesting vacation for Lunar New Year.
People who know about Taiwan knew that it named "Formosa", means "a beautiful island". Actually Taiwan is nice island, there are a lot of trees and the air is very fresh.
In Taiwan, I went to Allishan, a mountain in the middle of Taiwan, it's a popular visited area. I visited Taipei Zoo, the largest animal zoo in the world. I visited Chiang Kai-shek Memorial Hall. I went around Quanghoa computer market. I went out with my friends and had some parties...
Taipei is a little more modern than Hanoi (my home town) but in Taoyuan where I stayed it looks like Hanoi but without animation and traffic jam. I really like it. The weather is good, it's not too cold like Seoul these days, sometimes it has rain but not heavy.
Taiwanese government still accepts people can play craker while this one does not accept in Vietnam about 10 years. When hearing cracker, sometimes I remember about my childhood and my home...
Some tips for you if you have plan to visit Taiwan:
+ Do not try to bring fruit to Taiwan, it does not accept
+ Have a friend who can speak Chinese or a map (it's hard to find a person who understands English when you lost the way)
+ Prepare enough coins to go by bus (you cannot get returned money from drivers, actually they cannot return you even they want to do it)
+ When go by bus inside the city, keep your ticket and return it to driver when you take out. Otherwise, you need to pay money for ticket one more time.

Sun's rising on Allishan

Allishan's jungle

Chiang Kai-shek Memorial Hall
People who know about Taiwan knew that it named "Formosa", means "a beautiful island". Actually Taiwan is nice island, there are a lot of trees and the air is very fresh.
In Taiwan, I went to Allishan, a mountain in the middle of Taiwan, it's a popular visited area. I visited Taipei Zoo, the largest animal zoo in the world. I visited Chiang Kai-shek Memorial Hall. I went around Quanghoa computer market. I went out with my friends and had some parties...
Taipei is a little more modern than Hanoi (my home town) but in Taoyuan where I stayed it looks like Hanoi but without animation and traffic jam. I really like it. The weather is good, it's not too cold like Seoul these days, sometimes it has rain but not heavy.
Taiwanese government still accepts people can play craker while this one does not accept in Vietnam about 10 years. When hearing cracker, sometimes I remember about my childhood and my home...
Some tips for you if you have plan to visit Taiwan:
+ Do not try to bring fruit to Taiwan, it does not accept
+ Have a friend who can speak Chinese or a map (it's hard to find a person who understands English when you lost the way)
+ Prepare enough coins to go by bus (you cannot get returned money from drivers, actually they cannot return you even they want to do it)
+ When go by bus inside the city, keep your ticket and return it to driver when you take out. Otherwise, you need to pay money for ticket one more time.



Thursday, February 15, 2007
How can I remove value "2"?
In Groovy, you can remove an object from a list by using remove(int index) or remove(object obj). But if I have a list of ints, how can I remove an object by "value" rather than the index?
def list = [2, 1, 3]
list.remove(2)
assert list == [1, 3] // throws AssertionError, 'cause list = [2, 1]
Sunday, January 28, 2007
Sự phá sản của một ý tưởng
Cách đây vài tháng tôi đã có một ý tưởng về việc phát triển một hệ thống gọi là SSRSS (Synchronized System for RSS). Hệ thống này nhằm cung cấp một server cho phép người dùng sử dụng đồng thời nhiều máy tính có thể đồng bộ hóa newsfeed của họ một cách dễ dàng. Ví dụ, tôi có 2 máy tính, một ở nhà và một ở công ty. Tôi có thể sử dụng 2 feed reader khác nhau ở 2 máy nhưng đều được đăng ký các feed như nhau. Chẳng hạn tôi đã đọc tin A ở công ty, nó đã được đánh dấu đã đọc. Nhưng khi về nhà, feed reader ở máy tính tại nhà lại không thể biết rằng tôi đã đọc tin A và nó hiển thị tin A như là một tin mới. Việc đồng bộ hóa sẽ cho phép tôi khi về nhà, bật feed reader lên và tin A sẽ được đánh dấu đã đọc.
Để có thể giải quyết được vấn đề này, điều quan trọng nhất, theo tôi, đó là làm thế nào để blog server biết được rằng người dùng đã đọc tin. Khi đó server có thể đánh dấu các tin (đã được cache). Nhưng điều này chỉ có thể thực hiện được nếu feed reader implement API riêng biệt nào đó có nhiệm vụ tương tác với blog server (điều mà trước đây tôi đã ảo tưởng có cách vượt qua), giải pháp này đã được Bloglines sử dụng. Nhìn vào đó chắc hẳn các bạn đã thấy được hạn chế của nó: Nếu feed reader không sử dụng API của tôi nghĩa là không thể synchronize (thông qua server của tôi).
Cũng có một giải pháp khác, đó là feed reader hỗ trợ cache. Nghĩa là feed reader sẽ lưu trữ thông tin về các tin và upload lên một server mà các máy tính của người dùng có thể truy cập đến. Dựa trên các thông tin này, feed reader sẽ đồng bộ hóa các tin để xác định nó được đọc hay chưa. Giải pháp này đã được một số feed reader sử dụng (ví dụ RssBandit).
Trong khi đó thị trường feed reader, theo tôi, đã bão hòa với quá nhiều sản phẩm có các tính năng hấp dẫn. Việc tôi phát triển một feed reader để phục vụ cho SSRSS là hoàn toàn không thực tế.
Chính vì các lý do trên, tôi quyết định dừng việc phát triển SSRSS. Hy vọng rằng trong tương lai gần tôi sẽ có một ý tưởng mới hay ho, hấp dẫn và thực tế hơn.
Để có thể giải quyết được vấn đề này, điều quan trọng nhất, theo tôi, đó là làm thế nào để blog server biết được rằng người dùng đã đọc tin. Khi đó server có thể đánh dấu các tin (đã được cache). Nhưng điều này chỉ có thể thực hiện được nếu feed reader implement API riêng biệt nào đó có nhiệm vụ tương tác với blog server (điều mà trước đây tôi đã ảo tưởng có cách vượt qua), giải pháp này đã được Bloglines sử dụng. Nhìn vào đó chắc hẳn các bạn đã thấy được hạn chế của nó: Nếu feed reader không sử dụng API của tôi nghĩa là không thể synchronize (thông qua server của tôi).
Cũng có một giải pháp khác, đó là feed reader hỗ trợ cache. Nghĩa là feed reader sẽ lưu trữ thông tin về các tin và upload lên một server mà các máy tính của người dùng có thể truy cập đến. Dựa trên các thông tin này, feed reader sẽ đồng bộ hóa các tin để xác định nó được đọc hay chưa. Giải pháp này đã được một số feed reader sử dụng (ví dụ RssBandit).
Trong khi đó thị trường feed reader, theo tôi, đã bão hòa với quá nhiều sản phẩm có các tính năng hấp dẫn. Việc tôi phát triển một feed reader để phục vụ cho SSRSS là hoàn toàn không thực tế.
Chính vì các lý do trên, tôi quyết định dừng việc phát triển SSRSS. Hy vọng rằng trong tương lai gần tôi sẽ có một ý tưởng mới hay ho, hấp dẫn và thực tế hơn.
Groovy syntax file for EmEditor
Yesterday, while waiting for the football match between Manchester United and Portsmouth in round 4 of FA Cup, I created a Groovy syntax file for EmEditor. This syntax file can help to highlight Groovy's keywords, class name in Groovy library and functions name.
You can get it here then import it into EmEditor.
Cheers to develop with Groovy!
You can get it here then import it into EmEditor.
Cheers to develop with Groovy!
Friday, January 26, 2007
t800t8.net is back
Hey blog buddies,
Now you can visit my blog via http://www.t800t8.net. And of course via http://t800t8.blogspot.com if you want.
Cheers,
t800t8
Now you can visit my blog via http://www.t800t8.net. And of course via http://t800t8.blogspot.com if you want.
Cheers,
t800t8
Wednesday, January 10, 2007
2 questions for iBATIS developers
I've just started to play with iBATIS in Action and I have 2 questions for iBATIS developers about configuration files.
- Why doesn't have <property> inside of <properties>?
My concern: Sometimes user wants to keep these properties inside of SqlMapConfig.xml rather than outside
- Why doesn't have 'file' or 'resource' attribute in <select>, <update>, <delete>,... which points to a .SQL file?
My concern: If it exists, DBA only needs to distribute SQL script files to developer and developer just needs to change a little of content rather than copy&paste
- Why doesn't have <property> inside of <properties>?
My concern: Sometimes user wants to keep these properties inside of SqlMapConfig.xml rather than outside
- Why doesn't have 'file' or 'resource' attribute in <select>, <update>, <delete>,... which points to a .SQL file?
My concern: If it exists, DBA only needs to distribute SQL script files to developer and developer just needs to change a little of content rather than copy&paste
Tuesday, December 26, 2006
Wednesday, December 20, 2006
Windows Vista and Daemon Tools
Yesterday, I installed latest version of Daemon Tools (v4.08). After finishing installation I had no problem, Daemon Tools can create virtual drive and it worked well. But this morning, when I turn on my laptop, I've got a black screen, Windows Vista cannot display logon screen as normal.
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).
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
These days I'm working in a project using .NET and Firebird and also I decided to use UML to support modeling. So I need to find some tools to have me can do my work better. And here are them.
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.
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?
These days I'm very busy with my works. But I found a problem and it can take me about 3 minutes to have a break and I use it to write this post.
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 ;-)
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 ;-)
Subscribe to:
Posts (Atom)


