<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-12173377</id><updated>2009-07-22T21:09:17.215+07:00</updated><title type='text'>I learn Java</title><subtitle type='html'>How a n00b learns Java, drinks Java and feels Java? That would be an interesting experience. 
&lt;br /&gt;
Please use &lt;a href="http://www.mozilla.org"&gt;&lt;strong&gt;Firefox&lt;/strong&gt;&lt;/a&gt; to view our blog if Microsoft Internet Exlorer doesn't display UTF-8 character correctly.&lt;br /&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default?start-index=26&amp;max-results=25'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>41</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-12173377.post-111613745913243005</id><published>2005-05-15T13:09:00.000+07:00</published><updated>2005-05-15T13:10:59.136+07:00</updated><title type='text'>New NetBeans Resources</title><content type='html'>Tập hợp khá nhiều tài nguyên về NetBeans 4.1. &lt;a href="http://cld.blog-city.com/read/1280404.htm"&gt;Check here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111613745913243005?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111613745913243005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111613745913243005' title='52 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111613745913243005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111613745913243005'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/new-netbeans-resources.html' title='New NetBeans Resources'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>52</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111591093791022090</id><published>2005-05-12T22:05:00.000+07:00</published><updated>2005-05-12T23:10:36.616+07:00</updated><title type='text'>My First Java Swing Application</title><content type='html'>Ứng dụng là một cái từ thật là to mặc dù tôi cũng chẳng biết dùng từ gì để chỉ nó nữa. Tôi tạo ra một cái Swing Interface, bắt đầu từ cái JFrame có bố là Frame và ông nội là thằng Window. Nhớ là Frame là một window có thể định lại cỡ, có title bar và có nút tắt, thu nhỏ/phóng to. Tôi sẽ đặt thẳng vào Frame này một nhãn JLabel và một nút JButton theo Layout Manager là Bố cục dòng chảy Flow.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;import javax.swing.*;&lt;br /&gt;import java.awt.*;&lt;br /&gt;&lt;br /&gt;public class MyFirstSwingApp {&lt;br /&gt; &lt;br /&gt;   /**&lt;br /&gt;    * Creates a new instance of MyFirstSwingApp&lt;br /&gt;    */&lt;br /&gt;   public MyFirstSwingApp() {&lt;br /&gt;       createFrame();&lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;   /**&lt;br /&gt;    * @param args the command line arguments&lt;br /&gt;    */&lt;br /&gt;   public static void main(String[] args) {       &lt;br /&gt;       MyFirstSwingApp Frame = new MyFirstSwingApp();&lt;br /&gt;   }&lt;br /&gt; &lt;br /&gt;   public void createFrame() {&lt;br /&gt;       //Create and set up the window.&lt;br /&gt;       JFrame frame = new JFrame("HelloWorldSwing Frame");&lt;br /&gt;       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;       frame.getContentPane().setLayout(new FlowLayout());&lt;br /&gt;&lt;br /&gt;       JButton button = new JButton("It is a Button");&lt;br /&gt;       frame.getContentPane().add(button);&lt;br /&gt;     &lt;br /&gt;       JLabel label = new JLabel("This is a Label");&lt;br /&gt;       frame.getContentPane().add(label); &lt;br /&gt;     &lt;br /&gt;       frame.pack();&lt;br /&gt;       frame.setVisible(true);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Bây giờ nhiệm vụ của tôi là giở qua một loạt các trang, tìm đến trang nói về sự kiện để thử mở rộng ứng dụng. Tôi muốn khi nút được bấm thì Label sẽ thay đổi.&lt;br /&gt;&lt;br /&gt;Sun nói rằng để theo dõi một sự kiện trên một Component như Jbutton thì lớp chứa Component phải thực hiện giao diện ActionListener. Như vậy tôi sẽ phải thay khai báo tên lớp thành:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;public class MyFirstSwingApp implements ActionListener {&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Thêm nữa, do cái thằng giao diện ActionListener này nằm trong gói java.awt.event.ActionListener nên tớ cần phải nhập thêm một chú import cho phải đạo.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;import java.awt.event.*;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Trong giao diện ActionListener có phương thức &lt;pre&gt;addActionListener&lt;/pre&gt; mà ta sẽ buộc phải định nghĩa lại (override) trong lớp thực thi giao diện đó không thì trình biên dịch sẽ la lối om sòm là lớp của chú đâu phải là lớp abstract, mà không phải thế thì sao ko định nghĩa lại &lt;pre&gt;addActionListener&lt;/pre&gt; cho vui làng xóm. Thế là tớ phải thêm một phương thức nữa cho đẹp cả 2 họ.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;public void actionPerformed(ActionEvent e) {&lt;br /&gt;      &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Sun bảo là muốn theo dõi sự kiện trên đối tượng/mẫu của Component nào thì cần phải sử dụng phương thức &lt;pre&gt;addActionListener(this)(this)&lt;/pre&gt; trên đối tượng của Component đó. Nghĩa là tớ muốn khi người ta bấm nút thì sự kiện đó sẽ được gửi đi ra cho phương thức xử lý &lt;pre&gt;actionPerformed&lt;/pre&gt; thì tớ cần dùng &lt;pre&gt;addActionListener(this)&lt;/pre&gt; trên đối tượng cụ thể cần theo dõi đó. May quá tớ chỉ có tạo một nút nên tớ chỉ việc thêm  dòng:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;button.addActionListener(this);&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Vậy là khi xuất hiện sự kiện ấn nút thì &lt;pre&gt;actionPerformed&lt;/pre&gt; được thực thi liền.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111591093791022090?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111591093791022090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111591093791022090' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111591093791022090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111591093791022090'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/my-first-java-swing-application.html' title='My First Java Swing Application'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111588279362118241</id><published>2005-05-12T14:15:00.000+07:00</published><updated>2005-05-12T15:21:35.890+07:00</updated><title type='text'>Swing continued</title><content type='html'>Lần trước mới ngửi qua một chút Swing, lần này có thời gian để nghía lại một tí. Đặc biệt đáng chú ý là cây phân cấp lớp của Swing. Containment hierarchy/Class Hierarchy trong Swing là một khái niệm cần nhớ:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;img src="http://www.particle.kth.se/%7Elindsey/JavaCourse/Book/Images/Part1/Java/Chapter06/AWT_JT_Fig-6-2-550x573.jpg" height="480" width="420" /&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;Có lẽ không dễ dàng để nhớ. Nhưng bắt buộc phải nhớ để còn biết cái nào kế thừa từ cái nào và ta có thể dùng những phương thức hay trường nào từ siêu lớp nào.&lt;br /&gt;&lt;br /&gt;A Definition on Frame:&lt;br /&gt;&lt;blockquote&gt;A resizable, movable window with title bar and close button. Usually it contains &lt;span style="font-weight: bold;"&gt;Panel&lt;/span&gt;s.&lt;/blockquote&gt;Đó chính là lý do mà JFrame kế thừa từ lớp Window trong khi các component khác lại chỉ kế thừa từ siêu lớp của Window là Container.&lt;br /&gt;&lt;br /&gt;A definition on Window:&lt;br /&gt;&lt;blockquote&gt;A &lt;span style="font-weight: bold;"&gt;window &lt;/span&gt;&lt;span style="font-style: italic;"&gt;without a title bar or move controls&lt;/span&gt;. The program can move and resize it, but the user cannot. Free standing Window, not inside any other Window. &lt;span style="font-style: italic;"&gt;It must have a parent &lt;/span&gt;&lt;span style="font-style: italic;" class="jclass"&gt;Frame&lt;/span&gt;&lt;span style="font-style: italic;"&gt; mentioned in the constructor&lt;/span&gt;.&lt;br /&gt;&lt;/blockquote&gt;A definition on JPanel:&lt;br /&gt;&lt;blockquote&gt;A region internal to a &lt;span style="font-weight: bold;" class="jclass"&gt;JFrame&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;or another &lt;span style="font-weight: bold;" class="jclass"&gt;JPanel&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;.   &lt;/span&gt;&lt;span style="font-style: italic;"&gt;Used for grouping components together&lt;/span&gt;. Optionally bounded by a visible border.   &lt;span style="font-style: italic;"&gt;Lives inside some enclosing &lt;/span&gt;&lt;span style="font-style: italic;" class="jclass"&gt;Container&lt;/span&gt;.&lt;/blockquote&gt;A definition on Container:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;These are the basis on which all the other windows are built&lt;/span&gt;. They manage the child &lt;span class="jclass"&gt;Component&lt;/span&gt;s and &lt;span class="jclass"&gt;LayoutManager&lt;/span&gt;. They are missing an &lt;span class="jmethod"&gt;addNotify&lt;/span&gt; method to create the peer object, so can't appear on screen. You don't normally instantiate Containers directly, but some subclass of them.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111588279362118241?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111588279362118241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111588279362118241' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111588279362118241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111588279362118241'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/swing-continued.html' title='Swing continued'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111586570625438927</id><published>2005-05-12T09:19:00.000+07:00</published><updated>2005-05-12T09:41:46.283+07:00</updated><title type='text'>NetBeans 4.1 Final released</title><content type='html'>Hôm nay, &lt;a href="http://www.netbeans.org/community/news/index.html#631"&gt;NetBeans 4.1&lt;/a&gt; đã ra xuất xưởng. Với khả năng hỗ trợ Java 5.0 và J2EE mạnh mẽ, NetBeans sẽ là một trong những winner trên thị trường IDE hiện nay. Mặc dù Eclipse phổ biến hơn nhưng Linux sẽ là mảnh đất đầu tiên mà NetBeans đánh bại Eclipse. Tôi thích Eclipse cho PHP nhưng với Java thì tôi thú NetBeans 4.1 hơn. Hi vọng NetBeans 4.2 sẽ hỗ trợ nhiều ngôn ngữ hơn trong đó có PHP, Groovy. Ngoài ra tôi cũng mong NetBeans 4.2 sẽ hỗ trợ xây dựng UML như của JBuilder 2005.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111586570625438927?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111586570625438927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111586570625438927' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111586570625438927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111586570625438927'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/netbeans-41-final-released.html' title='NetBeans 4.1 Final released'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111583020173850239</id><published>2005-05-11T23:40:00.000+07:00</published><updated>2005-05-11T23:50:01.786+07:00</updated><title type='text'>How to use Javadoc in Netbeans 4.1RC2</title><content type='html'>Javadoc là một tài liệu tham khảo vô giá. Nhiều khi bạn sao chép mã từ đâu đó về để đọc và bất thình lình có một API quái quỷ nào đó xuất hiện mà bạn chẳng hiểu chúng làm cái gì. Nếu đó là các API của J2SDK thì bạn có thể tra cứu trong Java Documentation. NetBeans 4.1 cho bạn sét chúng ngay trong IDE và tìm kiếm API đó bằng việc bôi đen và ấn Shift+F1 (hay thủ công hơn là vào menu Tools -&gt; Javadoc Index Search). Để set:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Vào Tools -&gt; Java Platform Manager&lt;/li&gt;   &lt;li&gt;Nhìn bên phải, vào tab Javadoc và chọn đường dẫn đến nó&lt;/li&gt; &lt;/ul&gt; Thế còn nếu API đó là của thư viện nào nằm ngoài;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Vào Tools -&gt; Library Manager&lt;/li&gt;   &lt;li&gt;Chọn tab Javadoc như trên&lt;/li&gt; &lt;/ul&gt; Javadoc Index Search sẽ hiện ra như là một tab bên cạnh tab code mã của bạn.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111583020173850239?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111583020173850239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111583020173850239' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111583020173850239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111583020173850239'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/how-to-use-javadoc-in-netbeans-41rc2.html' title='How to use Javadoc in Netbeans 4.1RC2'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111564005036961057</id><published>2005-05-09T18:51:00.000+07:00</published><updated>2005-05-09T19:00:50.396+07:00</updated><title type='text'>What dya know on casting</title><content type='html'>Casting hay chuyển kiểu là một kĩ thuật thường gặp nhưng cần có 2 điểm cần chú ý:&lt;br /&gt;&lt;blockquote&gt;+ Bạn có thể thực hiện chuyển kiểu giữa các primitives types&lt;br /&gt;+ Bạn có thể thực hiện chuyển kiểu giữa các đối tượng dựa trên quan hệ kế thừa&lt;br /&gt;&lt;/blockquote&gt;Nếu bây giờ tôi có một kiểu Int là i = 1. Tôi muốn chuyển nó sang kiểu String để thực hiện việc gán nó vào một chuỗi. Bạn không thể làm:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;int i=10;&lt;br /&gt;String st= new String();&lt;br /&gt;st=(String)i;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;Bạn có thể dùng lớp bao Wrapper class để thực hiện việc chuyển đổi:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;String st = Integer.toString(i);&lt;br /&gt;string = String.valueOf(i);&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;hoặc một tiểu xảo tận dụng khả năng tự chuyển đổi khi kết hợp 1 chuỗi với một số là&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;st = ""+i;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111564005036961057?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111564005036961057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111564005036961057' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111564005036961057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111564005036961057'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/what-dya-know-on-casting.html' title='What dya know on casting'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111562005321458949</id><published>2005-05-09T13:23:00.000+07:00</published><updated>2005-05-09T18:50:28.936+07:00</updated><title type='text'>Multi MySQL servers on the same PC: It is a snap</title><content type='html'>MySQL thật dễ chịu. Hôm nay tôi thử cài MySQL 4.0 và MySQL 5.0.4 trên Windows Server 2003 mà không có khó khăn gì. Chỉ cần chọn khác cổng TCP/IP là ngon: 3306/3307. Trên SysTray, MySQL báo là có 2 instances đang chạy.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://img201.echo.cx/img201/9206/mysqlmultiserver9rm.png" border="0" width="239" alt="MySQL 4 and MySQL 5 in the same PC. Image Hosted by ImageShack.us" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111562005321458949?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111562005321458949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111562005321458949' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111562005321458949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111562005321458949'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/multi-mysql-servers-on-same-pc-it-is.html' title='Multi MySQL servers on the same PC: It is a snap'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07279795659358648435'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111555979766010902</id><published>2005-05-08T20:29:00.000+07:00</published><updated>2005-05-08T20:43:17.770+07:00</updated><title type='text'>Swing at a glance</title><content type='html'>Mấy hôm nay lười, lướt qua mấy chương về Thread, Inheritance, Array để nhảy bổ vào Swing cho nó có tí không khí.&lt;br /&gt;&lt;br /&gt;Swing quả là không dễ dàng gì. Ngay cả cái mô hình phân cấp của nó cũng là một vấn đề.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt; Each program that uses Swing components has at least &lt;span style="font-weight: bold;"&gt;one top-level container&lt;/span&gt;. This top-level container &lt;span style="font-weight: bold;"&gt;is the root of&lt;/span&gt; a containment hierarchy — the hierarchy that contains all of the Swing components that appear inside the top-level container. &lt;p&gt;  As a rule, a standalone application with a Swing-based GUI   &lt;span style="font-weight: bold;"&gt;has at least one containment hierarchy with a &lt;/span&gt;&lt;code style="font-weight: bold;"&gt;JFrame&lt;/code&gt;&lt;span style="font-weight: bold;"&gt; as its root&lt;/span&gt;. For example, if an application has one main window and two dialogs, then the application has three containment hierarchies, and thus three top-level containers. One containment hierarchy has a &lt;code&gt;JFrame&lt;/code&gt; as its root, and each of the other two has a &lt;code&gt;JDialog&lt;/code&gt; object as its root.&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;  &lt;/p&gt; Nếu chỉ đơn giản thế thì còn đỡ, việc bổ sung các thành phần vào một JFrame lại cần chú ý là trên Frame đó còn có content pane và việc bổ sung các thành phần thực ra là đặt trên content pane đó.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;center&gt;&lt;img src="http://java.sun.com/docs/books/tutorial/figures/uiswing/components/1layers.gif" align="bottom" height="127" width="370" /&gt;&lt;/center&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Root pane không phải là sở hữu của JFrame mà&lt;br /&gt;&lt;blockquote&gt; Each top-level container relies on a reclusive intermediate container called the &lt;em&gt;root pane&lt;/em&gt;. The root pane manages the content pane and the menu bar, along with a couple of other containers.&lt;/blockquote&gt;May quá, Sun nói:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-style: italic;"&gt;You generally don't need to know about root panes to use Swing components&lt;/span&gt;. However, if you ever need to intercept mouse clicks or paint over multiple components, you should get acquainted with root panes.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111555979766010902?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111555979766010902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111555979766010902' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111555979766010902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111555979766010902'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/swing-at-glance.html' title='Swing at a glance'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111511926799595386</id><published>2005-05-03T18:18:00.000+07:00</published><updated>2005-05-04T09:29:01.526+07:00</updated><title type='text'>Java.sun.com thay đổi giao diện (Java.sun.com redesigned)</title><content type='html'>6h15 phút tối theo giờ HN, trang chủ của &lt;a href="http://java.sun.com/"&gt;Java.sun.com&lt;/a&gt; thay đổi giao diện trong khá ấn tượng. Cảm xúc luôn tạo được sự hứng thú mới.&lt;br /&gt;&lt;br /&gt;Xem một số hình ảnh &lt;a href="http://blogs.sun.com/roller/page/MartinHardee/20050502#sun_com_and_now_for"&gt;ở đây&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111511926799595386?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111511926799595386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111511926799595386' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111511926799595386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111511926799595386'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/javasuncom-thay-i-giao-din-javasuncom.html' title='Java.sun.com thay đổi giao diện (Java.sun.com redesigned)'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07279795659358648435'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111509716041428092</id><published>2005-05-03T10:45:00.000+07:00</published><updated>2005-05-03T12:20:32.166+07:00</updated><title type='text'>Kế thừa (inheritance) và hàm tạo dựng (constructor)</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Kế thừa&lt;/span&gt;: (A subclass inherits all the member variables and methods from  its superclass - The Java Tutorial)&lt;br /&gt;&lt;br /&gt;Một lớp kế thừa chính nó&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;class LevelThree extends LevelThree {&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;thì bị báo lỗi biên dịch&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;cyclic inheritance involving ClassNameHere&lt;/blockquote&gt;Trường hợp tương tự cũng xảy ra khi cho lớp A -&gt; lớp B -&gt; lớp C -&gt; lớp A khi đó lớp A bị trình biên dịch báo lỗi nếu A là lớp xuất hiện đầu tiên trong file nguồn.&lt;br /&gt;&lt;br /&gt;Hàm tạo dựng: Constructor chỉ nhận các modifier/specifier là public, private, protected hoặc none (default access:package). Nó không trả lại giá trị được và đặc biệt vì nó không được xem là thành viên của lớp (class member) nên không kế thừa được. &lt;font&gt;Hiểu điều này ra sao??? Phải chăng nếu lớp con không khai báo constructor thì lớp con đó không dùng constructor của siêu lớp mà dùng constructor mặc định.&lt;br /&gt;&lt;br /&gt;Khi một lớp con không khai báo constructor của nó, compiler sẽ gọi phương thức tạo dựng không tham số mà điều này đến lượt nó sẽ gọi constructor không tham số của thằng siêu lớp trực tiếp. Nếu thằng siêu lớp trực tiếp không dùng constructor mặc định thì ... compiling error.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;public class &lt;span style="font-weight: bold;"&gt;DefaultConstructor &lt;/span&gt;{&lt;br /&gt;&lt;br /&gt;  public DefaultConstructor(int i) {&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public static void main(String[] args) {&lt;br /&gt;           &lt;br /&gt;      DefaultConstructor nondef = new NonDefault();&lt;br /&gt;      System.out.println("i is ");&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class &lt;span style="font-weight: bold;"&gt;NonDefault &lt;/span&gt;extends DefaultConstructor {&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;có lỗi biên dịch là &lt;span style="font-style: italic;"&gt;cannot find symbol constructor&lt;/span&gt;&lt;span style="font-style: italic;"&gt; DefaultConstructor&lt;/span&gt;. Lý do là NonDefault không định nghĩa constructor cho nên trình biên dịch sẽ dùng constructor không tham số mặc định NonDefault(). Phương thức này đến lượt nó lại gọi phương thức constructor không tham số của siêu lớp. Híc nhưng ở đây, siêu lớp DefaultConstructor không có constructor mặc định nên lỗi xuất hiện.&lt;br /&gt;&lt;br /&gt;Sửa mã trên chút đỉnh để xem các constructor không tham số có kế thừa được không&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;public class DefaultConstructor {&lt;br /&gt; &lt;br /&gt; public int i;&lt;br /&gt; &lt;br /&gt; public DefaultConstructor() {&lt;br /&gt;  &lt;br /&gt;  this.i = 6;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; public static void main(String[] args) {&lt;br /&gt;    &lt;br /&gt;  DefaultConstructor nondef = new NonDefault();&lt;br /&gt;  System.out.println("i is " + &lt;span style="font-weight: bold;"&gt;nondef&lt;/span&gt;.i);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class NonDefault extends DefaultConstructor {&lt;br /&gt; &lt;br /&gt; public NonDefault() { &lt;br /&gt;  &lt;br /&gt; }   &lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Ở đây, phương thức tạo dựng không tham số mặc định NonDefault() gọi đến phương thức tạo dựng không tham số của siêu lớp là DefaultConstructor(), phương thức này thực hiện việc gán giá trị 6 vào i. Vì lớp con NonDefault kế thừa i của siêu lớp và kế thừa i = 6 cho nên kết quả biên dịch được và chạy sẽ trả lại i is 6.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111509716041428092?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111509716041428092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111509716041428092' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111509716041428092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111509716041428092'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/k-tha-inheritance-v-hm-to-dng.html' title='Kế thừa (inheritance) và hàm tạo dựng (constructor)'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111491883175189389</id><published>2005-05-01T10:35:00.000+07:00</published><updated>2005-05-01T11:03:53.323+07:00</updated><title type='text'>JDiff - An HTML Report of API Differences</title><content type='html'>Cái tên này đã nói lên rằng nó là phần mềm đi tìm sự khác biệt. Tôi vừa tìm thấy nó trong bài &lt;a href="http://weblogs.java.net/blog/vbrabant/archive/2005/04/i_am_now_a_sun.html"&gt;I am now a Sun Certified Programmer for the J2SE 5.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Kinh nghiệm thi của anh ta thật tuyệt và đáng được những người đi sau lắng nghe. Anh ta có giới thiệu công cụ  &lt;a href="http://javadiff.sourceforge.net/"&gt;JDiff&lt;/a&gt;  này để tìm ra sự khác biệt về API giữa Java 1.4 và Java 1.5. Công cụ khá hữu ích. Các bạn thử dùng xem.&lt;br /&gt;&lt;br /&gt;Một công cụ khác cũng rất đáng xem là &lt;a href="http://homepage.mac.com/martin.auer/umlet/"&gt;UMLet&lt;/a&gt;, dùng để vẽ các biểu đồ UML. Nó viết bằng Java. Một công cụ Java tương tự khác là &lt;a href="http://argouml.tigris.org/"&gt;ArgoUML&lt;/a&gt; đang ở giai đoạn phát triển.&lt;br /&gt;&lt;br /&gt;Tiện thể, bạn cũng nên ghé qua &lt;a href="http://java.sys-con.com/"&gt;cổng thông tin Java&lt;/a&gt; mới của JDJ.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111491883175189389?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111491883175189389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111491883175189389' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111491883175189389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111491883175189389'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/jdiff-html-report-of-api-differences.html' title='JDiff - An HTML Report of API Differences'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07279795659358648435'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111488343610706269</id><published>2005-05-01T00:42:00.000+07:00</published><updated>2005-05-01T00:50:36.113+07:00</updated><title type='text'>Escape character trong Java</title><content type='html'>Có một câu hỏi thi thử như thế này:&lt;br /&gt;&lt;blockquote&gt;   &lt;pre&gt;class EscapeCharacter {&lt;br /&gt;public static void main (String[] args) {&lt;br /&gt; char a = '\c';  // 1&lt;br /&gt; char b = '\r';  // 2&lt;br /&gt; char c = '\"';  // 3&lt;br /&gt; char d = '\b';  // 4&lt;br /&gt; char e = '\'';  // 5&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt; &lt;/blockquote&gt; &lt;p id="question"&gt; A compile-time error is generated at which line? &lt;/p&gt;    &lt;table border="0"&gt; &lt;tbody&gt;&lt;tr valign="top"&gt; &lt;td&gt;a. &lt;/td&gt;&lt;td&gt;1&lt;/td&gt; &lt;/tr&gt; &lt;tr valign="top"&gt; &lt;td&gt;b. &lt;/td&gt;&lt;td&gt;2&lt;/td&gt; &lt;/tr&gt; &lt;tr valign="top"&gt; &lt;td&gt;c. &lt;/td&gt;&lt;td&gt;3&lt;/td&gt; &lt;/tr&gt; &lt;tr valign="top"&gt; &lt;td&gt;d. &lt;/td&gt;&lt;td&gt;4&lt;/td&gt; &lt;/tr&gt; &lt;tr valign="top"&gt; &lt;td&gt;e. &lt;/td&gt;&lt;td&gt;5&lt;/td&gt; &lt;/tr&gt; &lt;tr valign="top"&gt; &lt;td&gt;f. &lt;/td&gt;&lt;td&gt;None of the above&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;br /&gt;Dấu backslash dùng để chỉ kí tự thoát cho một số character đặc biệt mà thôi. Dùng cho kí tự khác nó sẽ báo lỗi ngay.&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;illegal escape character&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;Ặc ặc, ở đây họ chơi mẹo. Câu trả lời là a vì c không phải là kí tự để có thể dùng escape character được.&lt;br /&gt;&lt;br /&gt;&lt;span id="remark"&gt;&lt;blockquote&gt; The escape sequences are as follows: '\b' (backspace), '\f' (formfeed), '\n' (newline), '\r' (carriage return), '\t' (horizontal tab), '\\' (backslash), '\"' (double quote), '\'' (single quote). Yes, you must memorize the escape sequences! Just remember "&lt;span style="font-weight: bold;" id="bold"&gt;b&lt;/span&gt;ig &lt;span style="font-weight: bold;" id="bold"&gt;f&lt;/span&gt;arms &lt;span style="font-weight: bold;" id="bold"&gt;n&lt;/span&gt;eed &lt;span style="font-weight: bold;" id="bold"&gt;r&lt;/span&gt;ed&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;" id="bold"&gt;t&lt;/span&gt;ractors". &lt;/blockquote&gt;&lt;/span&gt;Hôm nay được một bài học.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111488343610706269?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111488343610706269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111488343610706269' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111488343610706269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111488343610706269'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/05/escape-character-trong-java.html' title='Escape character trong Java'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111488011609426905</id><published>2005-04-30T23:20:00.000+07:00</published><updated>2005-04-30T23:55:53.646+07:00</updated><title type='text'>Các câu hỏi mà bạn có thể gặp trong phỏng vấn tuyển dụng lập trình viên</title><content type='html'>Hôm qua, pcdinh có nảy ra ý định hài hước là thử lập ra các câu hỏi phỏng vấn mà người tuyển dụng có thể hỏi khi tuyển lập trình viên. Sau đây là một số câu trích nguyên văn trong đề xuất của thằng cha này.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Câu hỏi 1: Bạn quen dùng ngôn ngữ gì?&lt;/span&gt;&lt;br /&gt;Trả lời: Tất cả các ngôn ngữ trừ Java&lt;br /&gt;Người phỏng vấn nghĩ: Trừ hết điểm và cho out luôn&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Câu hỏi 2: Bạn đã làm được những gì với ngôn ngữ mà bạn quen dùng?&lt;/span&gt;&lt;br /&gt;Trả lời: Làm được tất cả mọi thứ trừ những thứ tầm thường.&lt;br /&gt;Người phỏng vấn nghĩ: Chán quá, công ty mình lại không tuyển giám đốc.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Câu hỏi 3: Ý nghĩ làm một phần mềm đến với bạn như thế nào và bạn thường làm gì để thực hiện?&lt;/span&gt;&lt;br /&gt;Trả lời: Chọn một hệ thống phần mềm thật lớn như ERP, CRM và bắt đầu mơ mộng về nó. Trong lúc mơ mộng, tôi thường suy nghĩ làm cách nào để mỗi một nút trên màn hình giao diện này sẽ được viết bằng một thứ ngôn ngữ khác nhau.&lt;br /&gt;Người phỏng vấn nghĩ: Tài thật, sao mình lại không nghĩ đến việc lập riêng cho hắn một phòng để hắn chuyên nghiên cứu và báo cáo về cách triển khai các hệ thống phần mềm lớn, đa ngôn ngữ lập trình và chạy trên MƠ MỘNG FRAMEWORK nhỉ?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Câu hỏi 4: Nếu được chọn thì anh thích lập trình về loại ứng dụng gì: web, desktop, database....?&lt;/span&gt;&lt;br /&gt;Trả lời: Loại ứng dụng mà khách hàng chưa từng yêu cầu. Hi vọng là họ cũng không bao giờ yêu cầu luôn.&lt;br /&gt;Người phỏng vấn nghĩ: Tay này chắc thích hợp với phòng hỗ trợ khách hàng khắc phục sự cố.&lt;br /&gt;&lt;br /&gt;Các bạn còn câu hỏi nào nữa không, gửi lên đây ta làm một bộ sưu tập nào?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111488011609426905?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111488011609426905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111488011609426905' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111488011609426905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111488011609426905'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/cc-cu-hi-m-bn-c-th-gp-trong-phng-vn.html' title='Các câu hỏi mà bạn có thể gặp trong phỏng vấn tuyển dụng lập trình viên'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111480603066821886</id><published>2005-04-30T03:15:00.000+07:00</published><updated>2005-04-30T03:35:05.350+07:00</updated><title type='text'>JavaTM 2 Platform Standard Edition Development Kit 5.0 Update 3</title><content type='html'>Bản Tiger 1.5 cập nhật lần 3 đã được &lt;a href="http://java.sun.com/j2se/1.5.0/ReleaseNotes.html#150_03"&gt;công bố với trên 70 lỗi đã được sửa&lt;/a&gt;. Mời các bạn tải về để thử nghiệm.&lt;br /&gt;&lt;br /&gt;Trong bản này, ông Graham đã xác nhận:&lt;br /&gt;&lt;blockquote&gt;So there are no API changes and the release teams are very conservative in which bug fixes they accept&lt;/blockquote&gt;Để tránh việc người dùng có thể chờ đến bản 5.1, ông cũng &lt;a href="http://weblogs.java.net/blog/kgh/archive/2005/04/j2se_50_update.html"&gt;nói là sẽ không có bản 5.1&lt;/a&gt; mà thay vào đó:&lt;br /&gt;&lt;blockquote&gt; We will be going straight from Tiger to Mustang, with only small update releases in between&lt;/blockquote&gt;Cũng nhân chuyện này, tôi xin có nhắc chút đến việc &lt;a href="http://java.sun.com/docs/books/tutorial/index.html"&gt;The Java Tutorial&lt;/a&gt; của Sun vừa cập nhật thêm. Ngày cập nhật là ngày 15/4/2005. Tôi nghĩ là nhiều bạn sẽ muốn xem cuốn này vì nó là tài liệu căn bản nhất cho người mới học Java.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111480603066821886?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111480603066821886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111480603066821886' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111480603066821886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111480603066821886'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/javatm-2-platform-standard-edition.html' title='JavaTM 2 Platform Standard Edition Development Kit 5.0 Update 3'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07279795659358648435'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111451200360590188</id><published>2005-04-26T17:25:00.000+07:00</published><updated>2005-04-26T17:41:39.060+07:00</updated><title type='text'>Hiện tượng weblog ở Mỹ</title><content type='html'>Cập nhật nhanh, ngắn gọn, &lt;b&gt;viết&lt;/b&gt; bằng nhiệt huyết, những thông tin đăng tải trên các weblog đang thu hút mạnh những độc giả thích lang thang trên mạng để tìm những thông tin nóng nhất, kèm theo những lời bình luận sắc bén.&lt;br /&gt;&lt;br /&gt;Không phải ngẫu nhiên mà tuần báo Mỹ Time bỗng quan tâm đến tác giả các weblog (đọc we-&lt;b&gt;blog&lt;/b&gt;) ở Mỹ hoàn toàn vô danh đối với công chúng báo chí truyền thống (báo&lt;br /&gt;&lt;b&gt;viết&lt;/b&gt;, báo ảnh) nhưng lại nổi tiếng trên mạng Internet.&lt;br /&gt;&lt;br /&gt;Time định nghĩa weblog là “những website nghiệp dư đăng tải tin tức, thông tin và nhất là dư luận quần chúng, nhằm phục vụ những đối tượng quan tâm đến một hoặc hai vấn đề gì đó hoặc đơn giản bị chính tác giả weblog mê hoặc”. Nhân tiện, tờ Time nêu tên 3 tác giả weblog (thường gọi là blogger) nổi tiếng ở Mỹ. Đó là Mathew Gross, 32 tuổi, nguyên là nhà văn tự do; Rob Malda, 28 tuổi, cựu sinh viên và Denis Dutton, 60 tuổi, cựu giáo sư triết học.&lt;br /&gt;&lt;br /&gt;Hiện tượng weblog - một dạng thời luận trực tuyến - bùng nổ từ cuối thập niên 1990. Xuất hiện dưới dạng website, các blogger chủ yếu cung cấp thông tin đề cập tới những chủ đề chọn lọc, không giống như các báo truyền thống. Trên thực tế, các blogger là những nhà quan sát nhạy&lt;br /&gt;bén và chuyên gia trong một lĩnh vực nào đó. Được các phần mềm hỗ trợ dễ sử dụng, các weblog phổ biến rất nhanh. Ai cũng có thể dễ dàng tạo ra một weblog cho mình.&lt;br /&gt;&lt;br /&gt;Tuy vậy, làm cho một weblog sống thọ không dễ chút nào. Thậm chí đã có người thân bại, danh liệt vì nó. Đó là trường hợp của một thống đốc Mỹ có tên Trent Lott. Ông này dùng weblog của mình tung lên mạng những nhận xét mang tính chất hoài cổ luyến tiếc thời vàng son của chủ&lt;br /&gt;nghĩa kỳ thị chủng tộc. Đây là đề tài mà báo chí truyền thông Mỹ bỏ qua từ lâu. Kết quả, Trent Lott phải trả giá cho thái độ chính trị “không đúng đắn” của mình là mất ghế thống đốc. Theo Time, Trent Lott là nạn nhân đầu tiên ở Mỹ vì cái weblog của mình.&lt;p&gt;&lt;br /&gt;&lt;/p&gt;Vì bất cứ ai cũng có thể trở thành nhà báo nghiệp dư nhờ weblog, hiện tượng phát triển ồ ạt các weblog trên mạng đang gây sự chú ý lẫn nỗi lo âu của một số người ở Mỹ. Nó tạo ra một phong cách mới của cư dân Internet. Theo Blogcount, một cơ quan chuyên về weblog, tính đến tháng&lt;br /&gt;&lt;p&gt;6-2003, thế giới có từ 2,4 triệu đến 2,9 triệu weblog còn hoạt động, chiếm 1/3 số weblog được tạo ra trên khắp thế giới; 2/3 còn lại, vì lý do này nọ, không còn hoạt động nữa. Tiếng Anh là ngôn ngữ thường dùng của các blogger, chiếm trên 50% weblog thế giới.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ai đọc weblog? Theo Blogads, một website chuyên nghiên cứu hiện tượng weblog, phần lớn độc giả của weblog (61%) trên 30 tuổi và có thu nhập khá cao (75%). Tại Mỹ 40% độc giả của weblog có thu nhập trên 90.000 USD/năm. Hầu hết đều là dân Internet chính hiệu, thường mua sắm qua&lt;br /&gt;mạng (sách, vé máy bay v.v...). Đa số độc giả weblog là dân ghiền thời sự trên net, 54% lượng thông tin mà họ biết nhờ đọc weblog và các báo điện tử, chỉ có 16,5% nhờ đọc báo &lt;b&gt;viết&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Weblog trở thành kẻ cạnh tranh đáng gờm với báo chí truyền thống vì nó hoạt động như kính lúp. Mỗi weblog đào sâu một vấn đề, lôi kéo độc giả cùng tham gia phân tích, bình phẩm vấn đề đó đến nơi đến chốn. Sức chiến đấu mạnh mẽ của blogger cũng là một đặc trưng của weblog.&lt;br /&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="left"&gt;&lt;img id="StoryAvatar" src="http://images6.us.tintucvietnam.com/Uploaded/huongnt/matviec2304.jpg" alt="" border="0" height="283" width="200" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Một công nhân Mỹ đã bị sa thải vì công bố hình ảnh này trên báo chí&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;Ở Mỹ gần đây là trường hợp của Russ Kick.&lt;br /&gt;&lt;p&gt;Qua weblog của mình, ngày 21-4-2004,&lt;br /&gt;Kick đã tung lên mạng hình ảnh những quan tài xác lính Mỹ chết trận ở Iraq. Chỉ 2 ngày sau, 4 triệu trang weblog của Kick đã được độc giả tải xuống chỉ trong một ngày. Thông tin của Kick đã làm Chính phủ Mỹ lúng túng bởi những tấm ảnh này đã được kiểm duyệt rất kỹ, báo chí truyền thống không biết hoặc không dám đưa.&lt;br /&gt;&lt;br /&gt;Theo &lt;i&gt;Người lao động&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111451200360590188?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111451200360590188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111451200360590188' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111451200360590188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111451200360590188'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/hin-tng-weblog-m.html' title='Hiện tượng weblog ở Mỹ'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111450502513672444</id><published>2005-04-26T15:17:00.000+07:00</published><updated>2005-04-26T15:43:45.136+07:00</updated><title type='text'>Người Việt viết blog</title><content type='html'>Người Việt Nam yêu chuộng thơ văn và cũng có khả năng viết lách tốt. Đó là điều kiện để xu hướng viết blog trong cộng đồng người Việt phát triển. Người Việt ở nước ngoài có điều kiện sống tốt hơn và dân trí cũng cao hơn cho nên họ đã đi trước người trong nước đến cả 3-4 năm. Những blog có thời gian lâu nhất mà tôi tìm thấy được viết bởi người Việt có từ năm 2001. Ở trong nước, gần như blog không phát triển. Anh bạn viết blog cùng tôi là pcdinh viết blog từ năm 2003 trên &lt;a href="http://www.jroller.com/page/pcdinh"&gt;JRoller&lt;/a&gt; và đến 6/2004 mới chính thức viết blog trên site của anh ta ở PHPVietnam.net. Bây giờ thì cái site đó tạm ngừng hoạt động.&lt;br /&gt;&lt;br /&gt;Trong nước, một số bạn cũng viết blog từ đầu năm 2004 nhưng chỉ một hay hai blog là biết cách viết. Hôm nay, pcdinh gửi cho tôi một loạt các blog mà anh ta tìm được và xem là blog thực sự. Tôi thấy khá hay và đã lập mục Vietnamese blogs riêng. Tôi cũng như pcdinh mong muốn lập ra một blog roll các site blog viết bằng tiếng Việt để có thể chia sẻ suy nghĩ, tri thức và giải pháp.&lt;br /&gt;&lt;br /&gt;Đây có phải là ý tưởng tốt không, hỡi những người đi tiên phong?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111450502513672444?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111450502513672444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111450502513672444' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111450502513672444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111450502513672444'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/ngi-vit-vit-blog.html' title='Người Việt viết blog'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111450326977779680</id><published>2005-04-26T15:08:00.000+07:00</published><updated>2005-04-26T15:30:52.453+07:00</updated><title type='text'>Người Hàn Quốc khám phá ra một thế giới hết sức mới mẻ, 'blog'</title><content type='html'>&lt;blockquote&gt;Bạn lao vào một ai đó tại sân ga điện ngầm trong khi chờ đợi chuyến tàu. Đôi khi, thật lạ lùng, bạn cảm thấy người đó trông rất quen như thể bạn đã từng gặp ở đâu đó bao giờ rôi. Chỉ sau vài giây, bạn mới phát hiện ra đó chỉ là cảm giác ngờ ngợ, một kết quả kỳ lạ của thói quen tìm kiếm các trang thông tin cá nhân, có thể gọi là 'blogging'&lt;br /&gt;Khi bạn tìm kiếm trên internet, bạn sẽ cảm thấy thật dễ dàng để đột nhập vào cuộc sống thường ngày của một ai đó, từ món ăn họ vừa ăn ngày hôm qua cho đến công việc mà họ đang đảm trách. Chỉ sử dụng một con chuột, bạn có thể biến thành người vô hình, lướt qua những thông tin cá nhân của họ chỉ.&lt;br /&gt;&lt;br /&gt;Theo yahoo.com. "blog" - hay "Web log" - là những trang internet không phục vụ mục đích thương mại và chỉ bao gồm nhật ky cá nhân, ảnh cá nhân và link đến địa chỉ các site khác. Những chủ trang web này coi đây là một phương tiện rất dễ dàng và thuận tiện để tạo ra một trang web cá nhân mà không cần những kỹ thuật thiết kế web.&lt;br /&gt;&lt;br /&gt;Cyworld.com, là một website cổng truy cập thuộc SK, đóng một vai trò hết sức quan trọng trong việc giới thiệu văn hóa "blog" tại Hàn Quốc. Công ty này cung cấp dịch vụ 'blog' miễn phí và không có giới hạn.&lt;br /&gt;Trưởng phòng marketing KIm Ki-duk cho biết "Chúng tôi không chí giới thiệu dịch vụ này mà còn thành công trong việc làm cho nó thích nghi với thế hệ trẻ của Hàn Quốc". "Theo con số thống kê gần đây, lứa tuổi từ 15 đến 32 là lứa tuổi chủ yếu sử dụng dịch vụ của chúng tôi, cùng với 90% phụ nữ là ở độ tuổi từ 19 đến 24".&lt;br /&gt;Vậy đâu là thế hệ trẻ tuổi nhất sử dụng dịch vụ này?&lt;br /&gt;&lt;br /&gt;Cô sinh viên Kim Sung Soo, 22 tuổi là chủ nhân của trang (www.cyworld.com/erickim) với ảnh của bản thân và các bài tiểu luận ngắn dưới dạng ký sự, cho biết "Tôi cho rằng qua việc post lên những bài viết của bản thân và những suy nghĩ hiện tại của tôi, tôi không chỉ có cơ hội tốt hơn để nhìn lại chính bản thân mình, mà còn thu hút được rất nhiều người, và càng ngày càng có nhiều người mới truy cập vào trang của tôi. Tôi đã vận hành trang này được 10 tháng rôi va tôi tin tưởng rằng tôi đã thu lợi từ trang web này. Qua trang web này tôi có cơ hội để liên lạc được với các bạn học cũ đã mất liên lạc từ lâu"&lt;br /&gt;&lt;br /&gt;Vậy, có thể nói, 'Blog' còn là cách để duy trì các mối quan hệ&lt;br /&gt;&lt;br /&gt;Sung Min-ji, 23 tuổi , cho biết "Đặc biệt là khi tôi đang học tập ở Mỹ xa cách quê hương thì các chức năng của trang web này giúp tôi liên lạc được với gia đình và bạn bè trong nước". "Qua trang web này họ biết được cuộc sống hàng ngày của tôi và thậm chí còn xem được tâm trạng của tôi đơn giản chỉ bằng cách vào những album ảnh và trang thông báo của tôi".&lt;br /&gt;Mặc dù 'blog' có rất nhiều tiện ích, song cũng không phải có nhiều vấn đề này sinh. Theo Click, một cơ quan đánh giá độc lập của Hàn Quốc, số truy câp trung bình vào trang Cyworld.com blog kéo dài đến 221 phút.&lt;br /&gt;&lt;br /&gt;Một nhân viên trong văn phòng cho biết "Một khi bạn vào những trang này, rất khó có thể dừng lại được, và chỉ một thời gian ngắn bạn sẽ nhận ra rằng bạn đã quá lãng phí thời gian trên mạng, khám phá các trang thông tin cá nhân của người khác, để lại những lời bình, trang trí lại trang web của chính bạn và còn vô vàn những việc khác nữa. Đôi khi tôi làm việc này ngay tại văn phòng trong khi tôi dự định làm việc. Chính vì vây, giờ đây tôi đang cố gắng rèn giũa kỷ luật cho bản thân bằng viện hạn chế thời gian vào những công việc này".&lt;br /&gt;Văn hoa 'Blog' đang làm ảnh hưởng đến những thông tin cá nhân, vì vậy Cyworld.com đang cho phép chủ các trang web hạn chế việc truy cập vào các thông tin cá nhân của họ.&lt;br /&gt;Noh Jin-na, thư ký, 27 tuổi cho biết, "Đôi khi tôi thấy không tự nhiên và sợ tiết lộ đời tư của mình đối với người mà mình không quen biết. "Tôi đã được chứng kiến rất nhiều cô gái lâm vào hoàn cảnh khó xử khi bạn trai cũ của cô tìm được những trang web này".&lt;br /&gt;Song một nhân viên của Cyworld.com cho biết có thể giúp cho mọi người tiết lộ một số thông tin mà họ muốn.&lt;br /&gt;"Xu thế thường thấy ở những người mở trang web thông tin cá nhân của chúng tôi là mong muốn nổi tiếng, thông qua việc giãi bày bản thân, người ta tìm được cách để bày tỏ ý tưởng riêng của họ tại một thế giới mới mẻ này".&lt;br /&gt;"Có thể nói rằng Cyworld có đóng góp lớn trong việc tạo ra hội chứng 'eoljjang' và 'momjjang', quá tập trung vào vẻ ngoại hình. Đó chính là hai từ "khuôn mặt đẹp nhất" và 'hình thể đẹp nhất".&lt;br /&gt;"Song xu hướng về kỹ thuật thì vẫn theo dòng chảy tự nhiên, từ analog cho đến kỹ thuật số, từ giao tiếp bằng văn bản tiến tới giao tiếp bằng thị giác". Kim cho biết "về cơ bản chúng ta chỉ cho khách hàng những gì mà chúng ta cung cấp được. Còn sự lựa chọn để tạo nên không gian riêng cho bản thân với những công cụ có sẵn thì hoàn toàn phụ thuộc vào họ".&lt;br /&gt;&lt;br /&gt;Ha Jee-hyun, một nhà tâm thần học của Bệnh viên thần kinh Yongin đã giải thích cho cái mốt nhất thời trong giới trẻ như sau:.&lt;br /&gt;"Chủ nghĩa phô trương và mong muốn về sự riêng tư là hai mặt của một đồng xu", cơ cấu hai mặt trong thần kinh của mỗi con người. Có lúc chúng ta muốn thoát khỏi sự chú ý cũng như không phải trở thành chủ đề cho những câu chuyện tầm phào của mọi người, đôi khi chúng ta lại muốn chia sẻ những cảm xúc riêng tư với cả thế giới này. Các bạn hãy nhớ lại những cuốn băng video chụp trong nhà mà người ta gửi đến một buổi chiếu phim mà xem. Các trang web cá nhân cũng không có gì khác biệt là mấy".&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;(Chép từ: &lt;a href="http://www.korea.net/News/news/LangView.asp?serial_no=4105&amp;lang_no=7&amp;amp;part=105&amp;amp;SearchDay="&gt;korea.net&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tiếc là nhà báo Hàn Quốc viết bài này đã không nhận thức được đầy đủ ý nghĩa của Blog cho nên gọi blog là cái mốt nhất thời. Trong thế giới Blog, tiếng Hàn vẫn có vẻ như là một ngôn ngữ xa lạ. Tuy nhiên, bài viết này cho chúng ta thêm một cách nhìn về thế giới blog ở một đất nước nằm ở Châu Á.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111450326977779680?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111450326977779680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111450326977779680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111450326977779680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111450326977779680'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/ngi-hn-quc-khm-ph-ra-mt-th-gii-ht-sc.html' title='Người Hàn Quốc khám phá ra một thế giới hết sức mới mẻ, &apos;blog&apos;'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07279795659358648435'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111444861013472637</id><published>2005-04-25T23:28:00.000+07:00</published><updated>2005-04-26T00:03:30.140+07:00</updated><title type='text'>Khai báo constructor</title><content type='html'>Phương thức tạo dựng constructor có ký dạng (signature) như sau:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;modifiers ClassName(arguments) throwsClause {&lt;br /&gt;// Constructor body&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;Vì a constructor cannot have a return type nên có thể dễ dàng phân biệt constructor trong số các phương thức có cùng tên với tên lớp.&lt;br /&gt;&lt;blockquote&gt;&lt;pre class="code"&gt;public &lt;span style="font-weight: bold;"&gt;void &lt;/span&gt;MyClassName() {}    // not a constructor&lt;br /&gt;public MyClassName() {}         // constructor&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;Nhưng phần thân constructor body có thể có một câu lệnh return với điều kiện là không trả lại giá trị nào.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Một constructor &lt;b&gt;có thể dùng&lt;/b&gt; các access modifiers &lt;b&gt;public, protected&lt;/b&gt; hay &lt;b&gt; private&lt;/b&gt; hoặc no access modifier (package access)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Một constructor &lt;b&gt;không thể dùng&lt;/b&gt; các modifiers &lt;b&gt;abstract, static, final, native, synchronized&lt;/b&gt; hay &lt;b&gt;strictfp&lt;/b&gt; &lt;span class="ref"&gt;(JLS §8.8.3)&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Các constructor không thể được xem như là &lt;i&gt;class members&lt;/i&gt;, chúng không thể được kế thừa&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Nếu một constructor của lớp không được khai báo thì một default constructor được compiler cung c&lt;br /&gt;&lt;pre class="code"&gt;        &lt;i&gt;modifiers&lt;/i&gt; ClassName() {&lt;br /&gt;           super();               &lt;br /&gt;       }&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Một default constructor có cùng access modifier như chính lớp đó, hoặc là: public, protected, private hay package (no modifier)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Để không cho một lớp bị tạo mẫu từ khai báo lớp bên ngoài bạn có thể tạo ra một &lt;b&gt;private&lt;/b&gt; constructor.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Cạm bẫy trong thi cử&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;Một lớp con có constructor mặc định trong khi siêu lớp lại không có constructor mặc định (no-args constructor) hoặc no-arg constructor của nó có mệnh đề throws&lt;/li&gt;   &lt;li&gt;constructor được khai báo có kiểu trả lại.&lt;/li&gt; &lt;/ul&gt; &lt;strong&gt;Default Constructors hay phương thức tạo dựng không đối số&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Giả sử bạn có một siêu lớp và một lớp con như sau:&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt;class A {&lt;br /&gt;   A() {/* ... */}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class B extends A {/* ... */}&lt;/blockquote&gt;và bạn tạo một mẫu của B:&lt;br /&gt;&lt;br /&gt;B bref = new B();&lt;br /&gt;&lt;/pre&gt;B không định nghĩa constructors, nhưng B mở rộng từ A, và A có một constructor cần dùng để gọi cho mẫu của B.&lt;br /&gt;&lt;br /&gt;Điều xảy ra ở đây là một default constructor đuwocj sinh ra tự động, và constructor đó gọi constructor không đối số của siêu lớp. Do vậy "new B()" sẽ dẫn đến việc default constructor được sinh ra cho B được gọi, và đến lượt nó lại gọi phương thức tạo dựng không đối số của A.&lt;br /&gt;&lt;p&gt;Phương thức tạo dựng được sinh ra có từ khóa điều khiển truy cập (access modifier) là "public" nếu class đó là public, hoặc constructor đó có điều khiển default access khi không chỉ định modifier.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Thực sự thì bạn có thể quan sát được cách default constructor tạo ra trong mã. Ví dụ với mã&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;pre&gt;class A {}&lt;/pre&gt;&lt;/blockquote&gt;kết quả của "javap -c"&lt;br /&gt;&lt;pre&gt;   Method A()&lt;br /&gt; 0 aload_0&lt;br /&gt; 1 invokespecial #3 &amp;lt;Method java.lang.Object()&amp;gt;&lt;br /&gt; 4 return&lt;br /&gt;&lt;/pre&gt;Nói cách khác, một constructor dùng cho A được sinh ra, và nó đơn thuần chỉ gọi phương thức ạo dựng của siêu lớp (ở đây là java.lang.Object).&lt;br /&gt;&lt;p&gt;Kinh nghiệm viết mã cho thấy nói chung là không nên dựa dẫm vào default constructor. Trong trường hợp đó, bạn nên có lời chú thích. Bạn có thể kiểm soát được việc tạo mẫu cho lớp (class instantiation) bằng cách dùng phương thức tạo dựng protected hay private. Ví dụ, một lớp được dùng như là phương tiện đóng gói cho các phương thức và biến của lớp có thể định nghĩa một private constructor, khiến cho nó không thể tạo mẫu được.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111444861013472637?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111444861013472637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111444861013472637' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111444861013472637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111444861013472637'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/khai-bo-constructor.html' title='Khai báo constructor'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111436199851443252</id><published>2005-04-24T23:13:00.000+07:00</published><updated>2005-04-24T23:59:58.516+07:00</updated><title type='text'>Overriding in Java 5.0</title><content type='html'>"Override" - hay cài đặt lại - thuật ngữ dùng để chỉ khả năng lớp con định nghĩa lại một phương thức đã được định nghĩa trong siêu lớp. Ở Java 1.4, điều này chỉ có thể thực hiện được nếu lớp con sử dụng lại method signature (ký dạng) của siêu lớp bao gồm tên và danh sách tham số. Nhưng ở Java 5.0, bạn sẽ thấy một ngạc nhiên nho nhỏ:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;p&gt;/*&lt;br /&gt;This program demostrates overriding in Java 5.0&lt;br /&gt;*/       &lt;/p&gt;&lt;p&gt;public class &lt;span style="font-weight: bold;"&gt;OverRiding &lt;/span&gt;{&lt;br /&gt;  public static void main (String s[]) {&lt;/p&gt;&lt;p&gt;        SuperClass superClass = null;&lt;br /&gt;      SubClass subClass = new SubClass();&lt;/p&gt;&lt;p&gt;        /* assigning subclass instance to superclass referance*/&lt;/p&gt;&lt;p&gt;        superClass = subClass;&lt;br /&gt;      superClass.testMethod();&lt;/p&gt;&lt;p&gt;    }       &lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 51, 51);"&gt;/* Definition for super class */&lt;/span&gt;&lt;br /&gt;class &lt;span style="font-weight: bold;"&gt;SuperClass &lt;/span&gt;{&lt;/p&gt;&lt;p&gt;    public SuperClass() {&lt;br /&gt;  &lt;br /&gt;   }&lt;/p&gt;&lt;p&gt;    public SuperClass(String str) {&lt;br /&gt;      System.out.println(str);&lt;br /&gt;  }       &lt;/p&gt;&lt;p&gt;    public &lt;span style="color: rgb(51, 51, 255);"&gt;SuperClass&lt;/span&gt; &lt;span style="font-style: italic;"&gt;testMethod&lt;/span&gt;() {&lt;/p&gt;&lt;p&gt;       return new SuperClass(“SuperClass“);&lt;br /&gt;  }      &lt;/p&gt;&lt;p&gt;}&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;/* Definition for sub class */&lt;/span&gt;&lt;br /&gt;class &lt;span style="font-weight: bold;"&gt;SubClass &lt;/span&gt;extends &lt;span style="font-weight: bold;"&gt;SuperClass &lt;/span&gt;{&lt;br /&gt;  public SubClass() {&lt;br /&gt;&lt;/p&gt;&lt;p&gt;   }&lt;/p&gt;&lt;p&gt;   public SubClass(String str) {&lt;br /&gt;      System.out.println(str);&lt;br /&gt;  }       &lt;/p&gt;&lt;p&gt;   /* overriding &lt;span style="color: rgb(0, 0, 0);"&gt;testMethod&lt;/span&gt;() with subclass‘s return type */&lt;br /&gt;  public &lt;span style="color: rgb(51, 51, 255);"&gt;SubClass&lt;/span&gt; &lt;span style="font-style: italic; color: rgb(255, 0, 0);"&gt;testMethod&lt;/span&gt;(){&lt;br /&gt;      return new SubClass(“SubClass”);&lt;br /&gt;  }       &lt;/p&gt;&lt;p&gt;}&lt;br /&gt;&lt;/p&gt;&lt;/pre&gt;&lt;/blockquote&gt;Như vậy là chúng ta có thể có &lt;span style="font-style: italic; font-weight: bold;"&gt;kiểu trả lại là kiểu khác&lt;/span&gt; miễn sao là kiểu này là lớp con của kiểu trả lại của phương thức siêu lớp.  Ở đây, testMethod của lớp con trả lại kiểu SubClass còn testMethod của siêu lớp trả lại kiểu SuperClass.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111436199851443252?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111436199851443252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111436199851443252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111436199851443252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111436199851443252'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/overriding-in-java-50.html' title='Overriding in Java 5.0'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07279795659358648435'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111435853275822122</id><published>2005-04-24T22:46:00.000+07:00</published><updated>2005-04-25T00:02:04.190+07:00</updated><title type='text'>SCJP Tiger Study Guide</title><content type='html'>Tìm được cái link này khá hay: &lt;a href="http://java.boot.by/scjp-tiger/"&gt;SCJP Tiger Study Guide&lt;/a&gt;. Mặc dù chưa hoàn thiện nhưng nó cho cũng cho mình hướng học.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111435853275822122?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111435853275822122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111435853275822122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111435853275822122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111435853275822122'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/scjp-tiger-study-guide.html' title='SCJP Tiger Study Guide'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111428702131155860</id><published>2005-04-24T02:56:00.000+07:00</published><updated>2005-04-24T03:10:21.313+07:00</updated><title type='text'>Hà Nội đào tạo chứng chỉ Java của Sun</title><content type='html'>Alliant là Trung tâm đào tạo đầu tiên ở Hà Nội triển khai các khóa học về Java của Sun. Tin tức này sẽ có thể gây sự hào hứng mới đối với các đối tượng muốn đi sâu về công nghệ này.&lt;br /&gt;&lt;br /&gt;Giờ học về Java thì thực chất chỉ có khoảng 40 giờ (tương đương với 20 buổi, mỗi buổi 2 tiếng, nếu một tuần có 2 buổi thì bạn sẽ học trong 10 tuần, nghĩa là vào khoảng 2 tháng rưỡi), một khoảng thời gian khá ngắn ngủi để có thể nắm được ngôn ngữ này.&lt;br /&gt;&lt;br /&gt;Thông tin thêm xem ở &lt;a href="http://www.goldenkey.edu.vn/vi/index.php?option=com_content&amp;task=view&amp;amp;id=253&amp;amp;Itemid=39"&gt;đây&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111428702131155860?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111428702131155860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111428702131155860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111428702131155860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111428702131155860'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/h-ni-o-to-chng-ch-java-ca-sun.html' title='Hà Nội đào tạo chứng chỉ Java của Sun'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111427797165567622</id><published>2005-04-24T00:33:00.000+07:00</published><updated>2005-04-24T01:27:54.873+07:00</updated><title type='text'>Right tool for right purpose: Netbeans and Eclipse</title><content type='html'>Eclipse đã thắng thế trước NetBeans được một thời gian. Nhưng &lt;a href="http://netbeans.org/"&gt;NetBeans 4.1&lt;/a&gt; đang có những bước đột phá lớn khi khiến người lập trình muốn đặt lại câu hỏi thực sự: phải chăng là lúc &lt;a href="http://api.blogs.com/the_catch_blog/2005/04/eclipse_or_netb.html"&gt;nên quay lại với NetBeans&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111427797165567622?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111427797165567622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111427797165567622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111427797165567622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111427797165567622'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/right-tool-for-right-purpose-netbeans.html' title='Right tool for right purpose: Netbeans and Eclipse'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111418630476338443</id><published>2005-04-22T23:03:00.000+07:00</published><updated>2005-04-22T23:13:57.186+07:00</updated><title type='text'>Tin về Java, NetBeans và ArrgoUML ngày 21/4</title><content type='html'>ArrgoUML bản mới đã ra mắt cách đây ít ngày. Bản stable hiện tại là bản &lt;a href="http://argouml.tigris.org/download/release018.html"&gt;0.18.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Các thông tin về các bản phát triển hằng ngày: &lt;a href="http://www.lysator.liu.se/xenofarm/argouml/result.html"&gt;http://www.lysator.liu.se/xenofarm/argouml/result.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;NetBeans 4.1 đã có bản &lt;a href="http://www.netbeans.org/community/news/index.html#621"&gt;Realease Candidate&lt;/a&gt;. Đây là bản tiếp theo của bản Beta ra mắt cách đây hơn 1 tháng. Có thể xem thêm &lt;a href="http://blogs.sun.com/roller/page/roumen/20050421#netbeans_quality_in_numbers"&gt;bài này&lt;/a&gt; để biết về tình hình fix lỗi của NetBeans.&lt;br /&gt;&lt;br /&gt;Cùng với NetBeans 4.1, bạn có thể tải về bộ Netbeans 4.0 &lt;a href="http://java.sun.com/j2se/1.4.2/download.html"&gt;phân phối kèm&lt;/a&gt; với J2SE 1.4.2_08 mới nhất&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111418630476338443?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111418630476338443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111418630476338443' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111418630476338443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111418630476338443'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/tin-v-java-netbeans-v-arrgouml-ngy-214.html' title='Tin về Java, NetBeans và ArrgoUML ngày 21/4'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07279795659358648435'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111415737241391689</id><published>2005-04-22T15:02:00.000+07:00</published><updated>2005-04-22T15:09:32.413+07:00</updated><title type='text'>Những tin mới về MySQL, PostgreSQL trong tháng 4</title><content type='html'>&lt;a href="http://mysql.new21.com/Downloads/MySQL-5.0/mysql-5.0.4-beta-win32.zip"&gt;MySQL 5.0.4&lt;/a&gt; đã có để tải về.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.postgresql.org/about/news.306"&gt;PL/Java 1.1.0&lt;/a&gt; đã được công bố trên site của PostgreSQL. Java trở thành một ngôn ngữ được hỗ trợ đầy đủ để thực hiện các hàm, các thủ tục thường trú trên PostgreSQL 8.0.&lt;br /&gt;&lt;br /&gt;Dự án &lt;a href="http://www.postgresql.org/about/news.308"&gt;Bizgre&lt;/a&gt; được công bố nhằm đưa PostgreSQL trở thành một phần mềm cơ sở dữ liệu mã nguồn mở đủ mạnh để triển khai cho các ứng dụng business intelligence. Việc phát triển sẽ dự định đưa vào các tính năng:&lt;br /&gt;&lt;ul&gt; &lt;li&gt;full table partitioning&lt;/li&gt;&lt;br /&gt;&lt;li&gt;high-speed java-based bulk loader&lt;/li&gt;&lt;br /&gt;&lt;li&gt;interactive configuration script&lt;/li&gt;&lt;br /&gt;&lt;li&gt;performance knowledge base&lt;/li&gt;&lt;br /&gt;&lt;li&gt;solaris binaries&lt;/li&gt;&lt;br /&gt;&lt;li&gt;improvements to PostgreSQL I/O&lt;/li&gt;&lt;br /&gt;&lt;li&gt;configurations for popular DSS software&lt;/li&gt; &lt;/ul&gt;  Dự án Bizgres có trang chủ đặt tạo &lt;a href="http://www.bizgres.org/"&gt;www.bizgres.org&lt;/a&gt; và việc phát triển sẽ diễn ra trên pgFoundry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111415737241391689?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111415737241391689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111415737241391689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111415737241391689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111415737241391689'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/nhng-tin-mi-v-mysql-postgresql-trong.html' title='Những tin mới về MySQL, PostgreSQL trong tháng 4'/><author><name>pcdinh</name><uri>http://www.blogger.com/profile/10255612130263517126</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07279795659358648435'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12173377.post-111414954039587362</id><published>2005-04-22T12:39:00.001+07:00</published><updated>2005-04-22T13:07:39.196+07:00</updated><title type='text'>Ternary operator: toán tử 3 ngôi</title><content type='html'>Cấu trúc của toán tử 3 ngôi:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;(biểu thức điều kiện) ? (giá trị trả lại nếu true) : (giá trị trả lại nếu false)&lt;/code&gt;&lt;/blockquote&gt;Áp dụng:&lt;br /&gt;&lt;br /&gt;Trong phép gán:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;code&gt;// code to assign the minimum value&lt;br /&gt;minVal = a &lt; b ? a : b;&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;hoặc:&lt;tt&gt;&lt;blockquote&gt;// xác định xem có bị phạt do đi xe quá tốc độ không&lt;br /&gt;&lt;br /&gt;giveTicket = speed &gt; speedLimit ? true : false;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/tt&gt;hay khi so sánh nhiều điều kiện dài hơi:&lt;br /&gt;&lt;blockquote&gt;&lt;tt&gt;&lt;tt&gt;// xác định nên có nên dừng xe lại không&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;stopCar = lightIsRed || trafficIsStopped ||&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;    outOfGas || wallInFront ? true : false;&lt;/tt&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/blockquote&gt;&lt;tt&gt;Dùng trong điểu khiển dòng chương trình (control flow):&lt;br /&gt;&lt;tt&gt;&lt;blockquote&gt;if (speed &gt; speedLimit ? true : false;)&lt;br /&gt;&lt;/blockquote&gt;&lt;/tt&gt;Nhưng mà dùng cái này làm giảm readability và maintainability.&lt;/tt&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12173377-111414954039587362?l=javanoob.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://javanoob.blogspot.com/feeds/111414954039587362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=12173377&amp;postID=111414954039587362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111414954039587362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12173377/posts/default/111414954039587362'/><link rel='alternate' type='text/html' href='http://javanoob.blogspot.com/2005/04/ternary-operator-ton-t-3-ngi_22.html' title='Ternary operator: toán tử 3 ngôi'/><author><name>A Java n00b</name><uri>http://www.blogger.com/profile/05567162031193738899</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='17414924222793241904'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>