BigCo của năm 2007: Facebook


BigCo là một bình chọn thường niên do Read/WriteWeb khởi xướng, năm nay là năm thứ 4। Bình chọn cho một công ty web có ảnh hưởng nhất trong năm. Trong các năm vừa qua thì Google được bình chọn trong 2 năm là 2006 và 2004, năm 2005 là Yahoo. Năm nay cũng là một năm thành công của Google, vì vậy hứa hẹn sẽ là một BigCo trong năm nay? Hay cũng có thể là Yahoo, Microsoft, Amazon, eBay, Facebook hay một BigCo nào khác?

Cân nhắc
Có một sự cân nhắc giữa Google với Facebook, vì họ đã có một năm phát triển tốt với Googleplex. Nhìn lại công nghệ Web năm 2007, ta sẽ thấy rằng mỗi tuần đều có một thông tin về Google. Nhưng chiến thắng thuộc về Facebook, một công ty ra đời trong năm nay; và đã có những đóng góp quan trọng vào xu hướng Web.

Đôi điều về Facebook!
Điều được người ta quan tâm ở Facebook là trong tháng 5 năm nay, khi họ loan tin một hệ thống mở – cho phép công ty thứ 3 tích hợp dịch vụ của họ vào trang của người dùng Facebook. Hệ thống này cho phép gởi những dịch vụ bên ngoài vào Facebook và trở thành một Facebook API (read only API). Với dịch vụ này, những công ty bên ngoài có thể triển khai những chức năng mở rộng vào trong hệ thống Facebook. Nó cũng mở ra một lối đi mới trong các mạng xã hội (MySpace, Facebook, ...). Đơn giản và có thể mở rộng sau này.

Và Google
Tôi đề cập về sự bận rộn của Google trong năm qua. Một gã khổng lồ có những ảnh hưởng đến các công ty Internet trong kỷ nguyên 'web 2.0' – và có thể bạn cho rằng Google còn có nhiều ảnh hưởng hơn Facebook.
Trong năm 2007, Google chuyển sang phát triển Web Office, mua một số công ty (như Feedburner và DoubleClick), cho ra đời OpenSocial, phát triển hệ điều hành trên thiết bị di động Android, xây dựng Gadget ecosystem, cho ra đời voice search, Google Gears, Street View Maps, Universal Search – và khởi xướng nhiều sản phẩm trên nền Web.
Tuy nhiên, Google vẫn không có được sự ảnh hưởng như Facebook. Ví dụ, kiểm tra sản phẩm OpenSocial không như những gì mà nhiều bloggers và các nhà bình luận tô điểm.

Đáng lưu ý
Apple tiếp tục với dòng iPod/iTunes, được đánh giá là các sản phẩm thành công nhất trong năm. Và đương nhiên không thể quên iPhone, đã thổi một luồng gió mới vào phát triển Web cho Mobile. Một năm tuyệt vời với Apple và có thể cho rằng họ khơi nguồn cho một sự dổi mới cho các Web bigco (mặc dù Web không phải là một sản phẩm của họ).
Amazon vẩn tiếp tục đổi mới. Cuối năm ngoái có tung ra một số WebOS, bao gồm EC2 và S3. Họ tiếp tục xây dựng các hệ thống đó trong năm 2007 và một số sản phẩm nổi bật.
Adobe cũng có một năm tốt - RIA (Rich Internet Apps) bắt đầu sinh lợi nhuận với Apollo trong tháng 3 (trước đó là AIR). Dựa trên chuẩn 'Adobe Integrated Runtime', AIR như một bộ xử lý được phát triển bở Adobe cho phép phát triển ứng dụng Rich Internet Applications trên máy desktop. 2007 là một năm trở lại của các ứng dụng trên máy desktop, nhưng trên nền Web. Ví dụ Adobe Media Player, ra đời tháng 4, là một ứng dụng trên desktop cho phép người dùng xem video chất lượng cao dù họ online hay offline.

Đáng buồn
Yahoo, Microsoft, eBay, AOL có lẽ đã có một năm thất bại. Ít nhất là trên lĩnh vực Web.
Một ngôi sao Internet những năm 90 là Yahoo có một năm để quên – trên đà đi xuống, mua không được Facebook, cổ phiếu xuống giá, sa thải CEO. Hi vọng chúng ta sẽ nhìn thấy sự thay đổi từng phía Yahoo trong năm 2008.

Mong đợi
Và chúng ta cùng mong đợi trong năm 2008. Sẽ là sự lên ngôi của Web Browsers với Mozilla's Firefox, hay tiếp tục một mạng xã hội khác ngoài Facebook. Ngoài ra còn một lĩnh vực khá mới mẽ là Mobiles Web, OpenAds(hứa hẹn thay thế Google Adsense), thế hệ OpenID 2.0...

Đọc tiếp >>

Cao Trong Hien

Web Office: 2007 một năm nhìn lại


Dự kiến trong một số tuần sau, tôi xin giới thiệu một số sản phẩm ấn tượng trong năm qua – và xu hướng trong năm 2008, lấy thông tin từ nhiều nguồn trên mạng để các bạn cùng tham khảo, và cho ý kiến. Xin đầu tiên bằng Web Office, sản phẩm đã trải qua nhiều thay đổi trong năm nay.

Web Office là một sản phẩm kết hợp của một số sản phẩm, được công bố với nhiều chức năng. Nó bao gồm các chức năng như một bộ office bình thường (như Microsoft Office) được hiện thực trên nền web động.

Đương nhiên, sự thay đổi lớn nhất là Google Apps, bắt đầu với việc ra bản Google Apps Premier trong tháng hai. Và tiếp tục giành được thì phần, bắt đầu trong năm 2006 với một số sản phẩm như WritelyJotSpot. Trong năm 2007 Yahoo mua Zimbra và Google mua một số công ty nhỏ – bao gồm GrandCentral (dịch vụ điện thoại online) và Zenter (phần mềm trình diễn, như powerpoint).



Điều đáng thất vọng nhất trong năm nay? Có lẽ do Microsoft không hấp dẫn về một sản phẩm web-based. Có thể không ngạc nhiên, vì Microsoft vẩn đang giữ một thị phần lớn về phần mềm Office trên máy bàn.


Google Apps – dẫn đầu Web Office



2007 là một năm bận rộn của Google trong sản phẩm Web Office. Họ đã đạt được một số thành tựu, và quan trọng là họ đang mở rộng sản phẩm Google Apps.

Trong thánh hai, Google cho ra đời phiên bản đầu tiên của gói Google Apps (trước đây là Google Apps cho Domain). Họ thống nhất các ứng dụng cho sản phẩm, và bao gồm thiết kế lại control panel.

Cho đến sản phẩm này, Google Apps chỉ bao gồm Gmail, Google Talk, Google Calendar, Page Creator và Start Page. Tuy nhiên sản phẩm premier được thêm Google Docs & Spreadsheets, đáng kể trong phiên bản này là xử lý word và spreadsheets tương tự Microsoft Office. Tuy nhiên, không có một số ứng dụng như trình diễn (presentations), quản lý quan hệ khách hàng (CRM), hay một số sản phẩm khác có trong bộ JotSpot mà hãng mua lại.

Sự thay đổi khác trong năm của Google Apps: trong tháng 6/2007, Google công bố hỗ trợ giao thức giao thức IMAP vào dịch vụ gmail. Trong tháng 7, Google mua GrandCentral và sau đó một tuần là Postini – một công ty cung cấp dịch vụ bảo mật thư điện tử, đã cung cấp dịch vụ cho hơn 35,000 công ty và 10 triệu người dùng trên mạng. Sau Postini là tích hợp vào Google Apps Premier Edition. Tháng 9, Google ra bản Presently, là một đối thủ của powerpoint. Tháng 10, Google loan tin rằng e-mail lưu trữ đang lớn dần cho các accounts Premier (tăng từ 10GB lên 25GB), trong khi bản Standard và Education tăng từng bước nhỏ (từ 2GB, lên 3.77GB 19/10/2007).

Tháng 9, Google loan tin liên kết đầu tiên cho Apps, với một công ty chuyên ngành cố vấn IT và outsourcing CapGemini. Thoả thuận với CapGemini về việc bán tài khoản Google Apps cho hãng. CapGemini, là một đối tác của Microsoft và IBM, với thù lao $50 cho một người dùng Google Apps Premier Edition (lấy tiền dịch vụ). Google muốn Google Apps trở thành một Microsoft Office trên web.

Microsoft đang làm gì?



Hầu như không có thông tin gì. Microsoft dường như chỉ quan tâm đến các phần mềm office trên máy bàn, Trong năm 2007, sản phẩm Office Live bao gồm nhiều dịch vụ với các sản phẩm như email và tạo webpage.

Tuy nhiên có một dấu hiệu trong tháng 10, khi Microsoft loan tin một dịch vụ office online gọi là Office Live Workspace, thêm một số chức năng từ dịch vụ Office Live vào Office Live Small Business. Những động thái thử để bổ sung cho Microsoft Office, sản phẩm thống trị nền office trên desktop. Cũng trong tháng 10, khi Microsoft loan tin về thoả thuận hợp tác với Atlassian và Newsgator, đang dẫn đầu trong lĩnh vực Web Office.


Tháng 9: Yahoo mua Zimbra



Hơi ngạc nhiên trong lĩnh vực Web Office là việc Yahoo's mua Zimbra Web Office với $350 triệu, trong tháng 9. Zimbra đã sớm đưa AJAX vào sản phẩm và làm theo một mô hình RIA trong tháng 3, bao gồm cả online và offline. Câu hỏi đặt ra là tại sao Yahoo làm vậy? Có lẽ Yahoo đang nhắm đến tạo một open platform, dùng APIs và biến Yahoo thành một công ty đa lĩnh vực. Giám đốc điều hành Yahoo Brad Garlinghouse viết "đây thời cơ tốt để kết hợp họ (Zimbra ) với các tính năng tốt (Tôi thích calendaring của họ) và Yahoo với các dịch vụ dẫn đầu." Và tôi cũng kết luận rằng Yahoo sẽ hầu như không bao giờ bằng lòng với những gì đang có, và luôn là một đối thủ đáng gờm của Google.


Zoho & ThinkFree vững vàng



Chắc chắn rằng hay thành viên dẫn đầu trong Web Office là ZohoThinkFree – và cả 2 cũng đang tiếp tục mở rộng sản phẩm trong năm.

ThinkFree đang phát triển vững vàng và thêm một số tính năng. Với thị phần như một Microsoft Office. Xây dựng trên giải pháp của Java, đúng hơn là Ajax mà Zoho và Google dùng chủ yếu. ThinkFree Online bao gồm 3 ứng dụng – ThinkFree Write xử lý word, ThinkFree Calc quản lý tính toán và ThinkFree Show cho trình diễn.

Tháng 2 ThinkFree loan tin họ đã có hơn 250,000 người dùng. Chủ yếu là các công ty nhỏ và trung bình, trường đại học, giáo viên, doanh nhân, cha mẹ, bloggers và sinh viên. Người dùng ThinkFree đến từ hơn 200 quốc gia, đến từ 5 châu lục bao gồm: United States, South Korea, Brazil, United Kingdom và Canada. Tháng 8 ThinkFree loan tin đã có hơn 335,000 người dùng. Cùng thời gian thì Zoho có 310,000 người dùng.


Mobile Office



Một số sản phẩm như Blackberry đã được dùng trong các văn phòng IT từ rất lâu. Nhưng từ sau khi iPhone ra đời trong tháng 6, thì không thể tránh khỏi việc nhà cung cấp Web Office sẽ làm các ứng dụng cho iPhone.

Lấy một ví dụ nhà cung cấp CRM Etelos – đã sẵn sàng đi theo Google Apps, Netvibes, Pageflakes và Windows Live – khi loan tin cho ra đời một bộ CRM dùng trên iPhone. Sẵn sàng làm việc trên Blackberry, nhưng Etelos' Eric Berto nói rằng "browser cho iPhone tốt hơn trên BlackBerry".


Kết luận


Năm2007 là một năm bận rộn của Web Office. Bỏ phiếu trong tháng 6 của readwriteweb.com, với câu hỏi which online collaboration platform do you use? Với hơn 1,500 bầu chọn, Google Apps về đầu với hơn 47% bầu chọn. Basecamp tiếp theo với 18%, Zoho trên 10% và ThinkFree 8%. Hai sự lựa chọn của Microsoft là, Office Groove và Office Live, mỗi cái giữ 2%.

Trong năm 2008 chúng tôi cùng chờ đợi Google Apps hoàn thiện và đầy đủ chức năng, nhưng dĩ nhiên vẩn cần Microsoft Office. Giờ không phải là một phiên bản hoàn chỉnh, bao gồm chức năng, bảo mật và tính hợp lý – có thể sẽ tốt hơn cả Microsoft Office.

Chúng ta cùng chờ đợi trong năm 2008, một sản phẩm nào đó sẽ cùng chia sẽ thị phần trong phần mềm này – có thể hay hơn và sẽ có một sự thôn tín của Google hay một công ty lớn nào đó.

Sự phát triển ngày càng cao của Web Office có thể sẽ làm Microsoft chạnh lòng. Họ đã yên lặng trong năm 2007, vì vậy có thể trong năm 2008 sẽ có một cuộc đua giữa Google Apps và Microsoft.


Đọc tiếp >>

Cao Trong Hien

,

NetBeans – Đã chính thức ra bản 6.0


NetBeans IDE miễn phí hoàn toàn, là một open-source IDE cho developers. Bạn có thể lấy toàn bộ những tools mà bạn cần để làm một ứng dụng desktop, enterprise, web và các ứng dụng cho mobile, bằng Java, C/C++ và cả Ruby. Nó có thể chạy trên nhiều HDH bao gồm Windows, Linux, Mac OS X và Solaris; dễ dàng cài đặt và sử dụng.
Ra mắt bản 6.0 bao gồm cả sự thay nâng cấp các tính năng sẵn có và thêm các tính năng mới, bao gồm một trình soạn thảo thay đổi một số thành phần, hỗ trợ thêm một số ngôn ngữ, một số tính năng
mới, và xử lý cài đặt và cấu hình dễ dàng hơn. Một số tính năng nổi bật:
Java GUI Builder dễ dùng
Tạo một giao diện chuyên nghiệp bằng cách sắp đặt và chỉnh các thành phần trên canvas.

Visual Web và phát triển Java EE
Xây dựng chuẩn ứng dụng web dùng Ajax, CSS, và JSF. Đẩy đủ các tools cho việc phát triển EJB.

Visual Mobile Development
Tạo, test và debug các ứng dụng GUI chạy trên các thiết bị cầm tay, set-top boxes, và PDAs.

Visual UML Modeling
Hỗ trợ 8 mô hình thiết kế: Activity diagram, Class diagram, Collaboration diagram, Component diagram, Deployment diagram, Sequence diagram, State diagram, và Use Case diagram. Phân tích và thiết kế UML, sau đó phát sinh code.

Hỗ trợ Ruby và Rails
Một trình soạn thảo Ruby mạnh(với code completion), debug, và hỗ trợ đầy đủ cho Rails. Bao gồm JRuby runtime.

C and C++ Development
Đầy đủ tính năng cho phát triển C/C++, gồm trình soạn thảo, bugg, project mẫu, và hỗ trợ cấu hình multiple project.

Đọc tiếp >>

Cao Trong Hien

,

Tại sao Facebook không được xây dựng bằng Java?


Nhân đọc bài “Facebook đang "hot" hơn cả Mash và MySpace”, và một bài viết của Coach Wei. Đặt ra câu hỏi: Tại sao những website nhỏ lại chọn xây dựng bằng Ruby hay PHP thay cho Java?

Tôi quan tâm vì đơn giản, tôi là một Java developer. Như tất cả Java developers, Tôi tin rằng Java tốt. Không chỉ ngôn ngữ, mà cả môi trường phát triển (Eclipse hay Netbeans), giúp ta từng bước kiểm lỗi, có sẵn nhiều thư viện code, và thông tin về phần lớn các vấn đề về kỹ thuật được tìm thấy qua Google.


Lý do khác mà tôi cân nhắc là Java mạnh và hoàn toàn đáp ứng tốt cho các website cần nhiều hơn là chỉ code html hay scripting, như một middleware logic. PHP và Ruby đang thu hút khá nhiều người xây dựng, nhưng nó không thể xây dựng middleware logic.


Có phải là ngôn ngữ Java khó dùng so với các ngôn ngữ scripting? Vâng, cũng có thể là một lý do. Nhưng có hơn 5 triệu LTV java, và hàng triệu người đang sống bằng nghề viết code java. Nhiều website xây dựng bằng các LTV này, và vì một số lý do họ có thể chọn dùng PHP hay Ruby thay cho Java. Vì sao? Khó khăn hơn nhiều khi dùng java (đặc biệt là khi họ quyết định xây dựng một website 2.0), họ chỉ đến với PHP thông qua viêc học, và kinh nghiệm thì không nhiều.

Thiếu công cụ phát triển(tools)? Tôi nghĩ là java có nhiều tools hơn Ruby.

Thiếu frameworks? Tôi nghĩ là không vì Framework Java nhiều hơn cả số dân Trung Quốc.

OK, nhiều websites đơn giản, chủ yếu dùng html, scripts và một vài phép toán nhỏ trên server, PHP và Ruby là những sự lựa chọn tốt. Java có thể quá “búa rìu” với các websites này. Nhưng có nhiều websites có những xử lý rất phức tạp trên server. Ví dụ, FaceBook là điển hình, nhưng giờ với FaceBook API và Platform, các xử lý ngày càng phức tạp. Vậy vì sao không dùng java?

Vậy cái gì thiếu trong cộng đồng Java? Công nghệ nào dùng để xây dựng một website bằng Java?

  • Lựa chọn 1: JSP/Servlet với bộ Java Servlet ở tầng trên (hay một application server): Đây là công nghệ chính cho ứng dụng web Enterprise. Nhưng nó không dễ dùng để xây dựng websites so với PHP hay Ruby;

  • Lựa chọn 2: JavaServer Faces: JSF là một đứa con mới trong gia đình java web. Nhưng nó không làm cho bạn dễ dàng hơn trong việc xây dựng một websites. Nó được thiết kế để việc xây dựng ứng dụng đơn giản hơn.

  • Lựa chọn 3: Dùng Java dựa trên hệ thống quản lý nội dung (CMS)? Tôi có dùng qua một số hệ thống CMS, và không thấy có gì nổi bật.

Cá nhân tôi nghĩ rằng Java có khả năng xây dựng một ứng dụng có thể nâng cấp, có các xử lý phức tạp (và ngày càng phức tạp), dễ dùng và chỉnh sửa. Vậy tại sao không dùng Java? Tôi mong ý kiến các bạn trong nhận xét.

Đọc tiếp >>

Cao Trong Hien

iPod Touch và iPhone sẽ hỗ trợ java


Phiên bản hiện giờ của iPod Touch và iPhone không hỗ trợ ngôn ngữ java, nhưng sắp tới sẽ có. Theo một viên chức từ Sun Microsystems cho rằng anh ta tin chắc rằng trong tương lai Java sẽ được hỗ trợ trong các thiết bị này.

Anh ta cũng nói Apple đang lên kế hoạch cho ra một sản phẩm có hỗ trợ cho người phát triển( SDK) trong năm 2008 (Khoảng tháng 2), bằng cách mở rộng Java ME .
Bắt đầu một làn sóng phần mềm, và các sản thiết bị di động ra đời khi chính thức dùng SDK. Ta sẽ giải quyết được một số vấn đề như có thể chạy flash trên safari. Tất cả updates sẽ làm cho iPod Touch và iPhone tốt hơn và nhiều tính năng hơn.

Theo(computerworld)

Đọc tiếp >>

Cao Trong Hien

,

10 lý do Android sẽ thành công


Tôi đã hoài nghi về Gphone. Một công ty chuyên cung cấp dịch vụ tìm kiếm và quảng cáo trên mạng, lại chuyển sang sản xuất phần cứng. Vì vậy hiển nhiên là sẽ có sự so sánh với iPhone, và người dùng sẽ nghiêng về phía nào? Một Iphone đắt đỏ, hay một Gphone mới lạ.
Vài tuần gần đây khi Google ra mắt HDH Android, đây có lẽ là một sự kiện lớn, một sự thay đổi lớn trên lĩnh vực di động. Xem video giới thiệu về SDK, bạn sẽ thấy rằng đây chính là đây chính là ngôn ngữ lập trình cho DTDD trong tương lai. Tại sao? Có thể các hãng sản xuất và nhà cung cấp sẽ không chọn Android. nhưng với những người phát triển hiểu rằng: Google đã làm được một việc rất hấp dẫn:

1.Miễn phí: Các nhà cung cấp và cty có thể nâng cấp và cài đặt miễn phí. Vì vậy, sẽ rẻ hơn khi xây dựng so với Windows Mobile, UIQ hay
Symbian. Tuy nhiên, Google/OHA có ý muốn cung cấp đủ cho tất cả các hãng sản xuất miễn phí hay rẻ hơn.

2.Hứa hẹn với JavaME: giống như phát triển JavaME trên eclipse, vì vậy những nhà phát triển trên JavaME sẽ không mấy khó khăn khi chuyển qua Android.

3.Giao diện tốt: giống Layouts, AdapterViews và dùng XML để thiết kế.

4.Ứng dụng tốt: bạn có thể dùng các tiện ích của Google như MAPS, GMAIL, ... và WebKit (không phải một sản phẩm của Google), bạn không cần làm những thứ đã có sẵn. Vùng thông báo là một tính năng lý thú cho người phát triển. Giống như bạn đang phát triển hệ thống Symbian bằng ngôn ngữ Java.

5.Nền Linux: Không mới. Motorola là một trong số hãng phát triển DTDD Linux. Nó không đáng kể vì HDH Linux phát sinh một số lỗi khi dùng trên DTDD. Nhưng đã được Google phát triển, và đầy hứa hẹn, ta hãy cùng chờ xem.

6.Yêu cầu phần cứng: Tôi cũng không thấy một tài liệu nào nói về phần này. Nhưng họ có nói rằng sẽ tương thích với phần lớn. Nhưng chúng ta hãy cùng chờ đợi ý kiến của các nhà phát triển. Có thể sẽ yêu cầu đối với các ứng dụng về Media hay 3D.

7.Tools: Các tools của Google luôn làm hài lòng người dùng, bao gồm người phát triển, GWT, hay Google Grears là ví dụ. Tool cho SDK là Eclipse có lẽ cũng thế.

8. Hỗ trợ: Với các cty phần mềm, thêm một sự lựa chọn là phát triển trên Android và có thêm khách hàng mới.

9.Giải thưởng: Một phần của việc giới thiệu Android là treo giải thưởng cho người phát triển ứng dụng trên Android. Bạn muốn giàu có và nổi tiếng ư? Google sẽ giúp bạn.

10.Quảng cáo: Quảng cáo là nói quá mà. Nhìn vào iPhone bạn sẽ thấy ngay rằng quảng cáo chỉ để họ bán nhiều sản phẩm. Và khi Android/Gphones ra đời, bạn cũng sẽ thấy một trường hợp tương tự?...

Đọc tiếp >>

Cao Trong Hien

Gphone và hệ điều hành Android


Đầu tháng 11, Google giới thiệu Open Handset Alliance (OHA)— một tổ chức đa quốc gia bao gồm 34 nước. Liên minh này sẽ tập trung xây dựng một chiếc điện thoại di động tốt hơn. Một thành phần của nó là phát triển hệ điều hành Android, giải thích là "hệ điều hành nguồn mở dùng cho gồm tất cả các thiết bị cầm tay" phần mềm bao gồm có một hệ đều hành, middleware, và một giao diện người dùng thân thiện." Mục đích là mang đến một cải tiến cho người dùng web trên thiết bị cầm tay, giống như trên một máy tính bình thường, không giống với sự hạn chế của nó hiện nay. Họ đã "và sẽ hoàn thành trong giữa năm 2008." Như đã hứa về Android SDK trong tháng 11. Bài viết này giới thiệu về những điểm mới trong hệ điều hành Android và SDK.
OHA được xây dựng từ những tổ chức phát triển trên dtdd, bao gồm các cty cung cấp dịch vụ DTDD, sản xuất thiết bị cầm tay, sản xuất phần mềm, dụng cụ bán dẫn, và các cty kinh doanh. OHA hiện giờ bao gồm các cty lớn trên lĩnh vực di động trên toàn thế giới, là một đối thủ mới, cũng như đang đổi mới trong công nghệ mua bán. Quan trọng nhất, tổ chức này đang mở cửa cho tất cả các cty khác.
Người dùng có thể chọn một nhà cung cấp dịch vụ tốt hơn thông qua OHA và tính năng sẵn có của HDH Android.


Giới thiệu Android và Open Handset Alliance
Lời đồn đại xoáy quanh vấn đề là có phải Google đang tấn công vào lĩnh vực viễn thông. Mà DTDD là một bước đầu tiên tạo tiền đề cho Google (người nói rằng nhiệm vụ của họ là "thiết lập thế giới thông tin") hoàn thành mục tiêu chinh phục, và mở ra một thế giới mới trong các thiết bị cầm tay.
Một số cty đã có các bức thay đổi, nhưng phần lớn thì im hơi, nghĩa vụ trong hệ thống DD được đưa lên hàng đầu. Một ví dụ, HTC đang chuẩn bị tung ra sản phẩm mới có hỗ trợ trong năm 2008. Có thể bạn chưa nghe gì về HTC vì họ là một nhãn hàng mang tên của các nhà cung cấp dịch vụ. (HTC sản xuất T-Mobile Wing, một sản phẩm lạ mắt như một máy tính nhỏ mà bạn có thể nói chuyện , nhưng không thể lập trình. Trong tương lai, sản phẩm này và Android sẽ có thể lập trình, và xa hơn là sẽ có rất nhiều chức năng trong tương lai.)
Tất cả các bài báo lớn đều đưa ra các thông tin về Android, nhưng có một sự vắng mặt: Nokia, Microsoft, Apple, và BlackBerry. Verizon và AT&T cũng không có bình luận gì. Và HDH lớn nhất hiện nay, Symbian, cũng đang đi theo cách này. Phá vỡ công nghệ thường chứng minh cho một sự đe doạ cho các hãng độc quyền và đem đến cho người dùng một lợi ích lớn.
Vài nhà phân tích cho rằng việc xây dựng lại một HDH là thất bại. Có nhiều "HDH mở" đan xen tồn tại—OpenMoko, Qtopia, hay môi trường Apple's iPhone. Thêm vào đó, còn có Ubuntu Mobile và xu hướng lập trình nhúng của Moblin(mobile internet). Tại sao không dùng Maemo, MontaVista, hay dựa vào những gì đã làm trong Linux Phone Standards Forum?

Một đối thủ (Symbian và Windows Mobile) đã không “mất hồn” khi ca tụng sự cố gắng của OHA. Trong khi một số từ chối OHA.
Với chúng ta, thật lý tưởng khi một HDH miễn phí và mã mở dĩ nhiên là rẻ hơn bao gồm thiết bị và ứng dụng chạy trên nó.

Đọc tiếp >>

Cao Trong Hien

Dùng Dojo và JSON xây dựng Ajax Applications


"Ajax" đã là một từ khá thông dụng và ngày càng hữu dụng. GmailGoogle Suggest là các trang viết và giới thiệu thật hoành tráng cho JavaScript bất đồng bộ (asynchronous). Lợi ích của người dùng và những yêu cầu càng tăng của họ.

Trong bài viết này, Tôi sẽ chỉ cách xây dựng một ứng dụng dùng DojoJSON—là 2 phần khác nhau nhưng bổ xung cho nhau thành một ứng dụng hoàn chỉnh। Chúng ta sẽ hiểu hơn về Dojo và JSON và xây dựng một Ajax applications. Bài viết này cũng sẽ cho bạn biết cách tạo một Dojo widgets bằng cách hiện thực tình năng "autocomplete" cho một text boxes. download



Đặt vấn đề


Ajax hiểu theo một cách ngắn gọn là xử lý trao đổi dữ liệu giữa web server và web browser dùng JavaScript khi trang đã được load. Trên thực tế, nó có nghĩa là chuyển đổi request trên browser, xử lý bất đồng bộ JavaScript, vậy xử lý request/response một cách trực tiếp đến user. Để hoàn thành nó, chúng ta có thể viết các đoạn code JavaScript hay dùng một libraries như Dojo.

Dojo

Dojo bao gồm nhiều chức năng đã được viết sẵn bằng JavaScript. Một trong những tính năng đó là tạo gởi HTTP requests và nhận responses. Và đây cũng là tính năng chính mà ta sẽ dùng. Về chức năng nó cung cấp về Ajax, Dojo cung cấp gói cho thao tác trên string, thao tác trên DOM, hỗ trợ kéo thả, và một số cấu trúc quen thuôc như lists, queues, và stacks.

JSON

JSON là một thư viện(library) Java giúp ta chuyển một đối tượng(object) Java sang biểu diễn dạng chuổi(string). Chuổi này khi eval()gọi trên JavaScript, nó sẽ tạo thành một mảng (array) chứa các thông tin về Java object. JSON là một kiểu đối tượng ghi chú, phù hợp cho mã hoá nhiều cấu trúc của đối tượng. Theo cách này ta sẽ tạo ra được một cấu trúc nhỏ hơn một file XML về thành phần, tiện lợi hơn khi dùng tính năng eval(), là một sự lựa chọn cho việc chuyển dữ liệu giữa browser và server.

JSON được xây dựng dùng cùng với JavaScript để tạo requests. Code ở server, có thể viết trên nhiều ngôn ngữ khác nhau, như C#, Python, PHP, và đương nhiên, Java!


Một HTTP Request đơn giản


Trong ví dụ đầu tiên, tôi cùng Dojo để cung cấp dòng chào mừng khi người dùng click lên trên một button. Minh hoạ cho việc tạo và gọi một Ajax dùng Dojo. Vào http://localhost:8080/dojo_json/example1.jsp và nhập tên, Submit. Một JavaScript thông báo hiển thị dòng chào mừng được tạo trên server. Bạn có thể xem source trên cho example1.jsp


<html>

<body onLoad="onLoad();">
<head>
<title>Example 1</title>
<script language="javascript" src="js/dojo.js"></script>
<script language="javascript">
dojo.require("dojo.io.*");
dojo.require("dojo.event.*");

function onLoad() {
var buttonObj = document.getElementById("myButton");
dojo.event.connect(buttonObj, "onclick",
this, "onclick_myButton");
}

function onclick_myButton() {
var bindArgs = {
url: "welcome.jsp",
error: function(type, data, evt){
alert("An error occurred.");
},
load: function(type, data, evt){
alert(data);
},
mimetype: "text/plain",
formNode: document.getElementById("myForm")
};
dojo.io.bind(bindArgs);
}
</script>
</head>
<body>
<form id="myForm">
<input type="text" name="name"/>
<input type="button" id="myButton" value="Submit"/>
</form>
</body>
</html>

Đầu tiên là import Dojo libraries, tên là dojo.js. Chứa tất cả class của Dojo cần cho phần lớn tính năng của nó. Dojo libraries được đóng gói như một Java code. Ví dụ, tôi cần import 2 gói. Gói dojo.io chứa các class cho phép tạo một HTTP requests dùng các giao thức như XMLHTTPTransport. Gói dojo.event cung cấp tập lệnh thao tác trên DOM và gán sự kiện.

Tiếp theo, tôi gán onclick cho button. Điều mà trước đây ta phải làm như sau:

<input type="submit" onclick="someFunc();"/>

nhưng với đoạn này thì ta chỉ gán cho sự kiện onclick một sử lý nhất định. Phương thức dojo.event.connect() cho phép chúng ta liên kết một xử lý cho nhiều HTML elements. Ở đây, tôi gán onclick_myButton là một xử lý cho myButton.

Khi onclick_myButton executes, tôi gọi đến welcome.jsp và nhận lại response. Dùng phương thức dojo.io.bind(). trong đó có đối số bindArgs, là một mảng name/value. Trong ví dụ trên tôi dùng 5 cặp:

  1. url: URL để gởi request đến.

  2. mimetype: Kiểu của response.

  3. load: Code gọi khi hoàn tất.

  4. error: Code gọi khi lỗi.

  5. formNode: ID của form nơi mà fields truyền tham số đến URL.

Tất cả các tham số bạn có thể tìm thấy ở đây.

Khi gọi dojo.io.bind(bindArgs), là bắt đầu quá trình xử lý, nó phụ thuộc vào request mà ta có thể nhận về errors,load hay error được gọi. Cả loaderror đều có 3 tham số:

  1. type: kiểu chức năng; luôn luôn cho loadload()errorerror().

  2. data: response nhận về. nếu mimetype thì khai báo như text/plain. Nếu text/json được dùng, dữ liệu sẽ có dạng eval('(' + dữ liệu nhận về + ')').

  3. evt: Sự kiện của đối tượng.

Tiếp theo, tôi có thể khai báo một sự kiện dùng dojo.event.connect() bằng cách tạo một chức năng handleResponse(type,data,evt) và kết hợp với request:

var req = dojo.io.bind(bindArgs); dojo.event.connect(req, "load", this, "handleResponse");

Trường hợp này, tôi không cần khai báo thuộc tính load trong bindArgs.

Chú ý: Vì lý do bảo mật, Firefox không cho phép giá trị cho url trong bindArgs liên kết đến một URL trên một domain khác. Internet Explorer thì cho phép.


Dùng JSON chuyển đối tượng Java


Như đã nói ở trên, JSON giúp chuyển Java objects thành chuổi eval()của JavaScript. Trong ví dụ này, người dùng sẽ nhìn thấy danh sách các quayển sách. Khi người dùng rê chuột qua tên sách, chúng ta sẽ tìm và hiển thị tất cả những thông tin về quyển sách đó dùng Ajax. Ví dụ 2, http://localhost:8080/dojo_json/example2.jsp, minh họa cho điều này.

Tạo và Cung cấp Java Objects

Class Book có 4 trường, BookManager có phương thức trả về một object Book object tuỳ thuộc vào bookId và một phương thức trả về tất cả sách có. Trong ví dụ này, tôi đã code cứng 5 quyển sách trong BookManager.

Phương thức Book.toJSONString() chịu trách nhiệm chuyển object Book thành JavaScript eval()thành String dùng trong JSON API.

public String toJSONString() throws JSONException {

JSONObject jsonObj = new JSONObject();
jsonObj.put("bookId", new Integer(this.bookId));
jsonObj.put("title", this.title);
jsonObj.put("isbn", this.isbn);
jsonObj.put("author", this.author);
return jsonObj.toString();
}

Class JSONObject chuyển object Book thành string bên trong dấu ngoặc, với dấu 2 chấm giữ tên và giá trị, và dấu ngoặc kép giựã giá trị và tên của trường khác, phù hợp String với eval()JavaScript. Còn class JSONArray có thể chuyển một danh sách Java objects sang JavaScript arrays.

Chuyển và điều hướng JSON-Encoded Data

Phụ thuộc vào bookId, book.jsp trả về một Book object trên form của JSON. Trang JSP tìm kiếm bookId dùng phương thức BookManager.getBook(bookId) và in ra kết quả qua phương thức Book.toJSONString(). Vì vậy http://localhost:8080/dojo_json/book.jsp?bookId=1 sẽ in ra JSON string cho Book với giá trị bookId1.

Trở lại tầng client, thông tin book được hiển thị trên list. Mổi thành phần trên danh sách có mouseover (trMouseOver) và mouseout (trMouseOut) sự kiện được truyền vào . Mỗi lần sự kiên mouseover, ta gọi book.jsp và truyền vào bookId. Kết quả trả về là một JSON String của quyển sách này Book. Tôi khai báo mime-type như một text/json vì vậy, giá trị trả về sẽ được tự động gọi eval(). Nhìn vào đoạn code JavaScript chịu trách nhiệm gởi request và xử lý response:

function trMouseOver(bookId) {

getBookInfo(bookId);
}

function trMouseOut(evt) {
var bookDiv = document.getElementById("bookInfo");
bookDiv.style.display = "none";
}

function getBookInfo(bookId) {
var params = new Array();
params['bookId'] = bookId;
var bindArgs = {
url: "book.jsp",
error: function(type, data, evt){
alert("error");
},
mimetype: "text/json",
content: params
};
var req = dojo.io.bind(bindArgs);
dojo.event.connect(req, "load", this, "populateDiv");
}

function populateDiv(type, data, evt) {
var bookDiv = document.getElementById("bookInfo");
if (!data) {
bookDiv.style.display = "none";
} else {
bookDiv.innerHTML = "ISBN: " + data.isbn +
"
Author: " + data.author;
bookDiv.style.display = "";
}
}

Trong một số ví dụ khác dùng thuộc tính content của bindArgs thay cho formNode. Thuộc tính content là một key/value liên kết đến thuộc tính được khai báo mapping of properties to be constructed into parameters passed with the data request.

Khi dữ liệu truyền vào JavaScript object, tôi có thể dể dàng truy cập đến các thuộc tính của Book và hiển thị đến người dùng trong

element, như bạn thấy.

Mở rộng Dojo: Tạo Autocompletion Widget


Trong 2 ví dụ trên, ta đã tìm hiểu các thành phần chính của một ứng dụng Ajax: chuyển đổi dữ liệu với web server dùng JavaScript. Một cách hiểu đơn giản, nó mang đến cho developer sử dụng một cách hiệu quả UIs dùng Ajax tools như Dojo. Dojo là một framework có thể mở rộng cho widget và phát triển module sẽ dễ dàng hơn. Trong sự lựa chọn này, tôi sẽ tạo một widget cho phép người dùng tạo một autocompletion cho một trường trên form.

Dojo Widget

Nói theo cách đơn giản, widget là tên của UI element như button, text box, scroll bar, v.v.v... Khi tạo Dojo widget, ngoài những thẻ HTML chúng ta còn có thể tạo một widgets bao gồm nhiều thành phần input, với của ta styles, và nhiều thứ khác. Bạn cần định nghĩa một trình điều khiển sự kiện cho widgets, tạo hành vi, và có thể dùng lại khi tạo một widget khác. Trong ví dụ này, tôi sẽ tạo một widget cung cấp tính năng autocompletion cho text box của HTML form.

Thành phần của Widget

Khi phát triển widgets, chúng ta cần quyết định UI elements nào và làm như thế nào. Khi dùng Dojo, có nghĩa là dùng HTML elements và viết code JavaScript để định nghĩa ứng sử. Ví dụ autocomplete dùng 4 files:

  • dojo.js: Tất cả Dojo libraries.

  • js/dojo/utils/templates/AutoComplete.html: Chứa UI elements, bao gồm HTML tags như

    <input>. File này có thể chứa nhiều đoạn HTML và giới hạn bởi một root element. Nếu nhiều hơn một element tìm thấy trên cùng, thì element đầu tiên sẽ là root.

  • js/dojo/utils/AutoComplete.js: JavaScript code cho widget. Thường là class mở rộng của một trong các Dojo Widget classes.

  • example3.jsp: File mà widget được dùng. Thường là thẻ được định nghĩa trong widget.

Học và hiểu làm sao mà UI elements có thể quản lý và thao tác bằng JavaScript là điều quan trọng trong tạo widgets.

Quản lý UI Elements

Như đã nói trên, chỉ định element gốc. Trong ví dụ autocomplete, element gốc là một

. Element này có thể quản lý torng class AutoComplete dùng this.domNode. Biến this.domNode lưu một liên kết đấn đối tượng HTML, xem ví dụ sau:

this.domNode.style.display = "none";

Để quán lý các element của UI từ JavaScript, bạn có thể dùng this.domNode cho đến khi bạn tìm ra , hay bạn có thể dùng thuộc tính dojoAttachPoint.

<input type="text" name="someTextField" dojoAttachPoint="myTextField"/>

Nếu bạn đã định nghĩa trong file HTML, nó có thể dễ dàng quản lý dùng this.myTextField trong JavaScript. Giống như this.domNode, this.myTextField cũng liên kết đến một đối tượng HTML.

Với Dojo, bạn có thể dễ dàng gắn nhiều sự kiện cho UI elements, kể cả dùng JavaScript và trường của element. Như đã minh hoạ, thật dễ dàng gắn sự kiên cho element, tôi dùng dojo.event.connect():

dojo.event.connect(this.domNode, "onclick", this, "myFunction")

Đoạn trên sẽ gắn onclick sự kiện myFunction() từ class này đến element gốc của UI. Tiếp theo, tôi có thể chỉ định HTML code cho thẻ

<div>:

<div dojoAttachEvent="onclick: myFunction">

<div dojoAttachEvent="onclick, onmouseover: myFunction">

Lập trình Widget

Giờ đã có cách quản lý và điểu khiển UI và các kiểu hành động của người dùng, và sau đó viết code JavaScript để tạo một hành vi ứng sử như ta mong muốn. Mỗi widget tương ứng với một class để quản lý UI elements và chịu trách nhiệm phản ứng với actions người dùng. Đoạn code Javascript sau được trích ra từ class AutoComplete sẽ minh hoạ cho một bộ widget.

dojo.provide("utils.AutoComplete");  dojo.require("dojo.dom"); dojo.provide("utils.AutoComplete");


dojo.require("dojo.dom");
...

dojo.widget.tags.addParseTreeHandler("dojo:AutoComplete");

utils.AutoComplete = function() {

// call super constructor
dojo.widget.HtmlWidget.call(this);

// load template
this.templatePath =
dojo.uri.dojoUri("utils/templates/AutoComplete.html");

this.widgetType = "AutoComplete";

// Instance variables
this.action = "";
this.formId = "";
this.form = {};
...

this.postCreate = function() {
this.form = document.getElementById(this.formId);
this.textbox = document.getElementById(this.textboxId);
dojo.event.connect(this.textbox, "onkeyup",
this, "textboxOnKeyUp");
...
}

this.textboxOnKeyUp = function(evt) {
if (this.isKey(evt.keyCode, 38, 40)) {
this.checkUpDownArrows(evt.keyCode);
} else {
bindArgs = {
url: this.action,
mimetype: "text/javascript",
formNode: this.form
};
var req = dojo.io.bind(bindArgs);
dojo.event.connect(req, "load", this, "populateChoices");
}
}

// Handler for "load" action of dojo.io.bind() call.
this.populateChoices = function(type, data, evt) {
...
}
}

// define inheritance
dj.inherits(utils.AutoComplete, dojo.widget.HtmlWidget);

Tôi đã định nghĩa một class JavaScript, AutoComplete, đoạn code ứng sử cho widget. Khi định nghĩa một widget, Dojo yêu cầu người phát triển khai báo một class dùng chức năng dojo.provide(). Đoạn inheritance này cho biết dùng chức năng dj.inherits(), và thực hiện thông qua việc gọi dojo.widget.HtmlWidget.call(this). File mẫu cho widget được load bằng cách gán giá trị cho biến this.templatePath cho class cha.

Dojo widgets dùng trang HTML dùng custom tags. Tags có thể định nghĩa khi viết một class liên kết. Trong ví dụ trên, bộ thể xuất ra là dojo:AutoComplete, được dùng trong file HTML trong đoạn code sau:

  action="getBooks.jsp"  textboxId="bookName"  formId="bookForm"/>

Đoạn output chứa đoạn template AutoComplete.html trên browser. Khai báo thuộc tính trong thẻ có thể quản lý dùng this. trong class JavaScript.

Khi người dùng nhập, nó sẽ tự động tìm ra danh sách những giá trị hợp lệ. Trong khi nhập, textboxOnKeyUp được gọi, và truyền đến web server cùng với giá trị nhập. Web server trả về một danh sách giá trị để hiển thị cho người dùng chọn. Tôi hiển thị nó trên thẻ <div>

.

Các đoạn code được tôi lược bớt là các đoạn thao tác trên thẻ <div>

, choices. Tìm ra phím tác động của người dùng, như Tab để chuyển sang trường khác để thao tác.

Kết luận


Dojo là một lựa chọn tốt khi phát triển Ajax trên một ứng dụng đòi hỏi JavaScript-intensive। Tuy nhiên, còn một số sản phẩm, như Scriptaculous và AjaxAnywhere, đem đến nhiều chức năng tuỳ theo yêu cầu của ứng dụng.

Hiendt (Java.net)



Đọc tiếp >>

Cao Trong Hien

,

Ubuntu 7.10 (Gutsy Gibbon)



Ubuntu 7.10 (Gutsy Gibbon) đã ra bản chính thức, và phải nói rằng tôi đã rất vui khi giới thiệu với các các một số chức năng mới trong Ubuntu (dựa trên môi trường của GNOME) và một số tính năng trong Kubuntu (giống Ubuntu, nhưng lại viết dựa trên môi trường KDE).



Bản mới nhất của GNOME 2.20 là bản nâng cấp của nhiều tính năng.
Compiz Fusion kích hoạt một cách tự động, ngay sau khi bạn cài video drivers cho card màn hình.
Ngay lập tức tìm những video cần thiết và audio khi bạn muốn view một file với Totem; ngày nay, bạn chỉ cần một click chuột để lấy tất cả về. Với Ubuntu, những gói thêm sẽ có hết trong Add/Remove Programs application.

Trong gia đình Ubuntu Desktop đếu đã có bản update lên 7.10, và danh sách bao gồm Edubuntu, Kubuntu, Xubuntu và Gobuntu. Trong khi 3 bản đầu tiên đã có bản updates từ 7.04, Gobuntu là một thành viên mới trong gia đình, nên còn hạn chế. Trong bản đầu tiên, chưa có một đánh giá cụ thể , vì vậy nếu bạn không muốn thử nghiệm, thì đừng nên dùng.

Dễ dàng cài Adobe Flash Player 9 với một click!
Thêm một tính năng mới là nhanh chóng chuyển user, chỉ có trong Ubuntu 7.10, bạn không cấn mất thời gian đánh username và password.


Tự động dò tìm màn hình mới, thay đổi kích thước, quay màn hình đều có trong bản beta.
Tool cấu hình đồ hoạ cho phép chạy 2 màn hình, thay đổi cấu hình khi thay đổi user, thay đổi độ quét màn hình không cần phải chuyển qua dòng lệnh.

Một công cụ search mới như Desktop Search, là Tracker. Cho phép thi hành nhanh những lệnh đơn giản, bao gồm mở đánh dấu tìm kiếm, gỏi thông điệp, ...

một thành viên hạng nặng là Ubuntu Server với sự nâng cấp bảo mật, cải tiến trong nhân với các tính năng mạnh mẽ và tối ưu hoá sử dụng torng môi trường ảo, updated những modules cho mail và print servers, và cũng không quên thêm Python release và hỗ trợ OpenMP trong gcc 4.2. Những thông tin thêm về Ubuntu bạn có thể thấy trên đây.

Đọc tiếp >>

Cao Trong Hien

,

Đàn ông - phiên bản lỗi của Thượng đế!


Thượng đế trong lúc rảnh rỗi nghĩ ra việc viết phần mềm… Đại khái đây là một phần mềm nằm trong nhóm giải trí - hành động - có tính chất đối kháng và khó bị bẻ khóa. Sau nhiều ngày ăn ngủ cùng máy tính thì Thượng đế cũng cho ra mắt phiên bản D'or version 1.07 với giao diện cân đối, cực đẹp và rất hoành tráng.

Buổi sáng, Thượng đế loan tin sẽ trình diễn phần mềm tại cổng Thiên đàng. Các vị thánh ngày cuối quan tâm đến IT đều háo hức đón chờ một sản phẩm hoàn hảo nhất từ trước tới nay được viết bởi chính tay Thượng đế chí tôn.

Dàn nhạc thiên đình tấu lên bản nhạc chào mừng vui vẻ, các vị thánh mang laptop xì xào bàn tán, các bà tiên xịt nước hoa thơm nức rất tò mò về cái gọi là giao diện manly trong sản phẩm của Người.

Một tiếng chuông reo vang: “Tưng, tưng...”, Thượng đế bước xuống trong trang phục chói lòa của ánh sáng mặt trời. Cỗ xe tam mã sắc trắng như tuyết, thùng vàng chở một khối hộp cao khoảng 1,75m phủ tấm vải nhung đỏ huyền bí.

Thượng đế mỉm cười vui vẻ với các quần thần. Người búng tay, bước đi thong thả và kiêu hãnh...

“Hôm nay, ta xin giới thiệu với các ngươi một sản phẩm mà ta nung nấu từ bấy lâu nay. Sản phẩm của tài năng, trí tuệ, của sự đam mê và lòng kiêu hãnh. Xin giới thiệu D'or version 1.07...”.

Tiếng vỗ tay rào rào, tiếng xuýt xoa trầm trồ khi người ta gỡ bỏ cái khối hộp hình vuông, để lộ một hình người đàn ông 3 chiều đứng trên bàn phím.

Đẹp, công nhận là đẹp! Chàng trai có dáng dấp của thần Hercules, có mái tóc quăn quăn như thần Apollo, có sắc mặt oai nghiêm của thần Chiến tranh và có đôi chân của Người - Thượng đế chí tôn! Thượng đế nhấn phím Enter, cyberman làm một động tác cúi chào thật điệu nghệ.

Các bà tiên nhìn như dán mắt vào bộ ngực nở nang của chàng, các vị thánh thì thấy bộ áo chùng khoác trên người thật là lố bịch so với bộ cánh mà chàng trai đang mặc.

Nó có nét gì đó phảng phất vẻ u hoài mà tinh nghịch, rất đỗi thông minh mà oai nghiêm và hùng dũng. Nó vừa có vẻ ăn chơi, lại rất đỗi tử tế, hiền lành và vô hại...

Thượng đế nhướn mày mỉm cười mãn nguyện nhấn phím Enter lần nữa. Chàng rút trong túi áo ra cây đàn hạc và bắt đầu tấu lên khúc nhạc dìu dặt, khúc nhạc khiến trái tim các tiên nữ trên thiên đàng như muốn vỡ tung ra vì hạnh phúc.

Có lúc nó giống như làn gió thoảng, có lúc trào dâng như dòng nước lũ, tiếng đàn trải ra vươn tới các vì sao và khiến chim chóc trong vườn địa đàng thôi hót. Tiếng vỗ tay vang dội khi tiếng đàn vừa dứt...

Chàng trai lại cúi mình làm một điệu bộ rất khiêm nhường và một vài bà tiên còn khẳng định, động tác ấy hàm chứa tín hiệu rất sexy!

Thượng đế lại nhấn phím Enter, chàng trai bỗng dưng phút chốc biến thành một dũng sĩ, vai đeo cung vàng tên bạc, tay cầm gươm và đoản đao giắt bên hông.

Trông chàng oai phong chẳng kém Hercules là mấy, mà có khi còn đẹp hơn bởi Thượng đế đã rất trau chuốt khi design đôi chân cho chàng, ít lông vừa phải chứ không rậm rì như của Hercules. Chàng vung gươm, ánh sáng chói lòa như tia chớp... khiến các vị tiên phải vội che mặt lại vì chói.

Thượng đế lại nhấn Enter, chàng trai thu gươm về và lại mỉm cười cúi chào duyên dáng.

“... Ta xin bổ sung thêm một chút thông tin về D'or: đây là sản phẩm của trí tuệ và lòng đam mê cho nên ai muốn có được nó thì phải mua bản quyền. Ta đã rất quan tâm đến việc có thể nó sẽ bị “crack” ngay sau khi ra mắt cho nên đã mất khá nhiều công sức xây dựng “module” bảo mật và người nào muốn sở hữu chắc chắn là phải có được “key” mà ta cung cấp. Bản trial dùng thử chỉ có thể tối đa là 30 phút...”
Thượng đế nhìn quần thần đầy vẻ chắc lép.

Ai mà chẳng muốn sở hữu cho mình một D'or như thế! Các vị thánh ngày cuối thì cho rằng mình có thể học được anh ta bí quyết giữ gìn cơ thể cân đối, học cách đấu gươm và có thể là cả những “chiêu” khiến các bà, các cô phải say đắm.

Các bà tiên thì lại cho rằng anh chàng có thể là người tin tưởng để tâm sự những điều thầm kín, còn các tiên nữ không giấu diếm cảm giác tò mò nếu được hẹn hò cùng một người như thế!

Màn trình diễn kết thúc và bây giờ là đến lượt các vị thánh và các bà tiên được ngắm nhìn chàng ở một cự ly rất gần và có thể chạm tay vào người chàng, nếu muốn!

Các vị thánh thích nhất cái bụng của chàng vì nó có vẻ rất rắn chắc và ít mỡ, các tiên nữ thích đôi mắt của chàng vì trông nó thông minh, lấp lánh.

Các bà tiên thì khẳng định, đôi chân chàng đẹp nhất, không quá to và không quá nhỏ, chứng tỏ chàng có thể đi đến tận cùng của những lần vui vẻ.

Ai cũng thừa nhận, đây là một sản phẩm hoàn hảo nhất từ trước tới nay nhưng giá của nó thì không phải ai cũng có thể mua được, có lẽ phải bằng cả dinh cơ của một vị thánh ngày cuối.

Các nàng tiên cười khúc khích chạm vào đôi chân chàng cho thỏa lòng ao ước; các bà tiên liếc mắt nhìn chàng đầy ẩn ý...

Bỗng dưng, chàng trai cúi mình và cho tay vào túi, chàng rút từ đó ra tấm da dê có viết hàng chữ và số bí mật rồi tranh thủ lúc Thượng đế quay đi, chàng nhét luôn vào tay nàng tiên xinh đẹp đứng gần nhất.

Chỉ trong nháy mắt, hơn chục “key” đã được phát miễn phí... Thượng đế chí tôn, người cứ nghĩ rằng D'or là một sản phẩm hoàn hảo và dày công nhất của người nhưng người đâu có biết, D'or còn là... một tay háo sắc!

theo ĐẸP

Đọc tiếp >>

Cao Trong Hien

Mừng ngày phụ nữ Việt Nam


Ngày 20/10 hàng năm được chọn là Ngày Phụ Nữ Việt Nam, đó là sự ghi nhận của đất nước với những con người được Bác Hồ tặng 8 chữ vàng: "Cần cù, Bất khuất, Trung hậu, Đảm đang".

Cách đây 75 năm (20/10/1930), Hội Phụ Nữ phản đế Việt Nam đã được thành lập. Đó là tổ chức tiền thân của Hội Liên hiệp phụ nữ Việt Nam.

Từ khi ra đời, Hội liên hiệp Phụ nữ Việt Nam đã tập hợp rộng rãi các tầng lớp phụ nữ, đấu tranh giải phóng dân tộc, giải phóng giai cấp và giải phóng phụ nữ theo đường lối của Đảng.

Đảng chỉ rõ: "Nếu giải phóng dân tộc, giải phóng giai cấp mà chưa giải phóng phụ nữ thì Cách mạng mới chỉ là một nửa".

Chủ tịch Hồ Chí Minh đã từng nói: "Giang sơn gấm vóc Việt Nam là do phụ nữ Việt Nam, trẻ cũng như già dệt thêu mà thêm tốt đẹp, rực rỡ".

Phụ nữ đã là một phần không thể thiếu góp vào thành công của cách mạng Việt Nam, trong hai cuộc kháng chiến chống Pháp và chống Mỹ. Trong công cuộc xây dựng đất nước, phụ nữ đã có những đóng góp quan trọng thúc đẩy sự phát triển của xã hội.

Theo VTV

Đọc tiếp >>

Cao Trong Hien

10 tool không thể sống thiếu

Sau bao ngày làm việc mệt nhọc, chợt nhận ra ngày nào mình cũng dùng bấy nhiêu tools(có s vì số nhiều). Thử nghĩ một ngày nào đó thiếu mất một cái... chúa ơi! Không thể.

1.FireFox. Ổn định, có nhiều tools mở rộng, tốc độ duyệt web nhanh. Một chức năng mà tôi thích nhất là phân chia tab, giờ thì hầu như trình duyệt nào cũng có, nhưng nó vẫn dễ dùng hơn nhiều.

2.Firebug. Tìm lỗi javascript, hãy thử debug với nó, bạn sẽ tiết kiệm rất nhiều thời gian với javascript.

3.ScribeFire. public với blog. Không thể thiếu với những bloggers, trong trường hợp bạn muốn public một bài viết trên nhiều blog. Thử dùng xem

4.Skype. Gọi điện giá rẻ, gởi file với tốc độ cực nhanh. Và thật dễ dàng cho việc thảo luận nhóm. Đây là một đối thủ đáng nói của YM.

5.Gaim Internet Messenger. Ngoài YM, bạn còn có thể dùng cho nhiều dịch vụ chat khác như: AIM, Gadu-Gadu, ICQ, ... Có một điều đặc biệt là tôi dùng Ubuntu nên chỉ dùng được nó. Hehe

6.Google. Công cụ tìm kiếm quá mạnh mà không có nó tôi không thể làm gì được.

7.iGoogle. Thông tin rss, tôi cũng không có đủ thời gian mà duyệt hết các trang web xem có gì mới, chỉ cần iGoogle, tôi có thể xem được hết.

8.flickr. Tiện ích hình ảnh trên blog, quá dể để thực hiện một liveshow ảnh. Một sản phẩm của yahoo.

9.Netbeans. Ngày nay thì nó đang giữ vị trí độc tôn trong giới LTV Java, mạnh mẽ, và rất dễ dùng.

10.Eclipse. Nó cũng không thể thiếu với tôi, giúp tôi hiểu rỏ hơn vấn đề mà netbeans hỗ trợ hết.

Bạn thì sao nhỉ? Hãy bình chọn cho mình, và đừng quên share cho tôi trong comment.

Đọc tiếp >>

Cao Trong Hien

Frameworks nào sẽ thay thế Struts

Apache Struts là một Java web application framework được đánh giá là dùng nhiều nhất( cho đến nay). Tuy nhiên, sự phát triển đến hôm nay thì nó đã quá lỗi thời. Có một vài lựa chọn cho sự thay đổi, nhưng cuộc tranh chấp này vẫn chưa ngả ngũ! Bạn thì cho rằng cái nào xứng đáng? Bạn sẽ dùng framework nào nếu bạn làm một Java web application?

Rich interfaces, AJAX hay RIA, cái nào sẽ chiến thắng và trở thành công nghệ web được dùng nhiều nhất. Dĩ nhiên, Java là sự lựa chọn ở mặt server. Một số kết hợp giữa AJAX với Java Server Faces (JSF), một generation web framework mới của Java. Một số thì dùng thư viện Java remoting, nguồn mở và thương mại, để gọi JavaScript và ActionScript từ server xuống.



Ta có thể dùng một trong các frameworks như Apache Shale kết hợp với JSF. Hay ta sẽ dùng JavaScript gọi đến Servlets ở tầng web application. Hay dùng một framework cho tất cả - như JBoss Seam.



Về phía Sun thì có giới thiệu 3 công nghệ, và họ cũng chẳng có một lời khuyên nào cho ta. . Hãy xem với tôi nhé:

1. JSF - server side component dựa trên Servlets và JSF model

2. Swing – Dựa trên giải pháp VM trên web. Đã được dùng hơn 10 năm và giờ thì đã lạc hậu. Như Swing Application Framework được dùng như một vị cứu tinh cho Swing, tôi cũng không nghĩ rằng nó sẽ bị bỏ rơi.

3. JavaFX – Đây là một sự lựa chọn mới. Và có thể là một câu trả lời cho rich web frameworks dùng cho mobile, web hay những interface khác. Thời gian sẽ cho ta biết cái nào sẽ thích hợp với nó. Theo tôi thì Sun thích developers phải làm nhiều điều hơn.

Chúng ta đã có những thông tin cần thiết hay những quan điểm khó hiều từ phía Sun, web application nào sẽ được lựa chọn. Theo tôi thì Swing là cái đầu tiên bị loại (công nghệ có thể tốt, nhưng có quá nhiều đều phải làm khi có sự thay đổi) và JavaFX mới chỉ là một lời hứa về kịch bản và có thể chỉ hiện thực sau một khoảng thời gian dài. Vì vậy, chỉ còn lại JSF. JSF cũng có một số vấn đề, nhưng hữu dụng khi dùng cho với các frameworks như Seam và kể cả các AJAX components như ICEfaces có thể là một sự lựa chọn tốt. Xa hơn, với các frameworks giống như Seam, bạn sẽ không cực khổ khi dùng JSF với các JavaScript applications (như DojoToolkit) hay Adobe Flex cho tầng server side.



Trước khi giải thích vì sao tôi dùng Seam, còn có 2 lựa chọn – là web framework của Spring và Google Web Toolkit. Spring là một sự lựa chọn tốt nếu bạn đã từng dùng, và mọi người trong team của bạn đã biết về spring framework. Tuy nhiên, Spring lệnh so với chuẩn JavaEE và tôi cũng đề nghị là nên gắn thành chuẩn. Tuyệt vời khi Seam có thể làm việc với Spring và Spring beans có thể dùng với Seam components. Google Web Toolkit dịch code sang JavaScript, và phù hợp với sự lựa chọn. Tuy nhiên, nó chưa phải là một web framework hoàn chỉnh, ta cũng có thể kết hợp với Seam. Đó cũng là lý do mà Seam là một framework tốt.

Nhưng đó chỉ là một ý của riêng tôi, còn bạn thì sao? hãy cho tôi biết trong comment.

Đọc tiếp >>

Cao Trong Hien

,

Java EE 5 app – quá dễ

Tôi thường đặt ra câu hỏi, làm thế nào cài đặt môt ứng dụng với Java EE 5 một cách nhanh nhất. Có nhiều cách, tuy nhiên với tôi thì đây là cách làm nhanh nhất:

+ Mua một con chuột thật tốt, mà quan trọng nhất là... chuột phải.

+ Cài Java 6 SE.

+ Download Netbeans 6.0b1, chọn "all" (172 MB)
Với cách chọn đó bạn sẽ downloads bộ netbeans hỗ trợ Java EE, và cả Sun server (Glassfish v2).

+ Download hay lựa chọn vài ví dụ từ Java EE 5 tutorial ( Bước này không quan trọng).

+ Trong netbeans: Chọn Tab "Projects", chuột phải, chọn Enterprise Projects -> Enterprise Application. Đặt tên Helloworld (Bạn có thể đặt tuỳ ý), Finish

+ Vào "Bean Project" (EJB Module). chuột phải, chọn "Session Bean". Sau đó hiện thực phương thức sayHello() với giá trị trả về là "Hello World".

+ Vào "Globe Project" (War). chuột phải, chọn "Servlet". chuột phải -> Enterprise Resources -> Call Enterprise Bean, gọi đến Session Bean bạn vừa làm. Và gọi sayHello() bên trong phương thức "processRequest"(Cần một chút kiến thức về Servlet đó).

+ Chuột phải lên "Triangle Project" (EAR) -> run. Mất vài phút để chạy đó. Netbeans sẽ starts application server, deploys ứng dụng và mở browser. Và đừng quên gọi đến Servlet của bạn.
Đóng IDE, Tắt máy -> Nghĩ ngơi đi là vừa.

Thế đấy -> điều quan trọng nhất khi phát triển Java EE 5 là... chuột phải.

Đọc tiếp >>

Cao Trong Hien

,

5 quan niệm sai về Linux

1. Linux luôn đi sau
Bạn có cho rằng “Linux đi sau XP 5 năm, và sau Vista 10 năm!”, tôi xin khẳng định là không và sau đây tôi xin liệt kê một số lý do:
- Window bắt đầu tách rời một user thường và user administrator trong Vista, Linux đã làm trước đó 15 năm.

- Window có bức tường lửa năm 2001, trong khi ta nhìn thấy trong Linux trước đó 7 năm trong Linux's 1994 đã có ipchains.
- Linux là hệ điều hành đầu tiên hỗ trợ x86_64, hơn Windows XP Pro x64 2 năm.
- Windows thêm vào sự quyến rũ của giao diện 3D trong Vista, đã có trong Linux's XGL.
- Linux's quản trị hệ thống có thể cài đạt, gỡ bỏ, và cập nhật phần mềm từ một giao diện. Mọi thứ đã được cài từ Apache đến OpenOffice và Quake 4 đều có thể cập nhật với một nút nhấn. Windows thì không.

2. Linux khó dùng
Qua một vòng các dòng Linux, xem qua Ubuntu. Ubuntu có một giao diện dễ dùng, hơi giống như OS X của Macintosh. Bạn có thể tuỳ chọn giao diện từ giống Windows XP đến một giao diện có nhiều hiệu ứng.

Tuỳ vào người dùng. Novell's Yast cung cấp một giao diện dễ dùng, từ cài đặt đến update software cho quản lý DNS, email, và web servers, rất đơn giản, không cần dùng dòng lệnh hay trên file cấu hình, trừ khi bạn muốn.

3. Linux không có tính tương thích
Bên cạnh những ứng dụng miễn phí gọi là WINE, còn có những hỗ trợ có phí như CrossOverVMWare, cho phép chạy các ứng dụng MS Office và Photoshop trên máy ảo iTunes, 5USD một tháng cho Cedega để chơi hàng trăm game trên chỉ chạy trên Windows, từ Battlefield 2042 đến World of Warcraft.
Về mặt thích hợp với phần cứng thì Linux hỗ trợ phần cứng nhiều hơn tất cả những hệ điều hành khác.

4. Linux chưa tốt và chưa ai dùng

Amazon và Google sẽ không đồng ý xây dựng trên công nghệ bỏ Linux. PSA Peugeot Citroen, nhà sản xuất xe thứ 2 châu âu, tuyên bố trong năm nay, họ sẽ chuyển không chỉ 2,500 servers sang Linux, mà còn 20,000 desktops. Những công ty khác như IBM và Novell đã dùng Linux, và chính phủ Brazil và India đến China và một số nước khác hứa sẽ có thêm mười triệu người dùng mới.
Đó là chưa nói đến những tổ chức nhỏ như thành phố Munich, hệ thống trường Indiana.
Đương nhiên Linux làm việc tốt bên ngoài xí nghiệp. Dù nó duyệt qua một website, chat trên cellphone, check email, thanh toán từ ATM.

5. Linux phát triển không chuyên nghiệp

Đúng là linux bắt nguồn từ một sinh viên, nhưng đến hôm này thì không phải. Linux giờ đây là một công nghệ triệu đô trên toàn cầu. Phần lớn code được đóng góp bởi những lập trình viên chuyên nghiệp. Và chỉnh sửa cuối cùng là những tổ chức lớn như IBM, Intel, Novell, VMware, và rất nhiều những đại gia công nghệ hàng đầu. Bên cạnh đó còn có sự năng động của Dell, đã bắt đầu thành công trong việc phát triển phần mềm chất lượng cho Linux. Nó đã được các trường đại học và tổ chức phát triển, như vá lỗi bảo mật của U.S. National Security Agency dùng cho nội bộ, mọi người có thể dùng , SELinux.

Đọc tiếp >>

Cao Trong Hien

Code quality’s singular metric

There are some excellent articles and posts around the internet recently related to a question asked on LinkedIn about metrics and code quality. Specifically, the question asked was:

What are the useful Metrics for Code Quality?

The user goes on to state that

The quality of any software application will depend mostly on its code base and it’s important to know what might be the key metrics that help us to evaluate the stability and quality of the code base.

Many of the answers bring up excellent points, including different ways of viewing the question, such as taking the time to understand what attributes of code are related back to quality. For example, Michael Bolton aptly suggests you ask if the code is:

* testable
* supportable
* maintainable
* portable
* localizable

What’s more, further answers suggest coverage, code size, and other metrics as discrete measurements that can help gauge quality. These are all excellent answers; however, the answer turns out to be quite simple.

We have found time and time again that there is one metric that most appropriately relates to code quality: Cyclomatic complexity. If your code base has highly localized pockets (i.e. methods) of Cyclomatic complexity (or CC) your code will have issues (undoubtedly affecting quality how ever you define it) eventually.

In fact, CC affects arguably every attribute listed above (testable through localizable). Think about it for a minute: a method that has 27 different paths is next to impossible to adequately test, which means you’re going to have a doozy of time supporting it because it isn’t easy to maintain. Code that is littered with high CC is a blast to port as well (hopefully you’ve got deep pockets and customers that absolutely love you). Good luck localizing it too.


It turns out that the other metrics mentioned (such as code size) tend to correlate to each other– in fact, it seems that all complexity-like metrics point back to CC. Classes that have a lot of dependencies are usually big and big classes usually have big methods and big methods usually have lots of conditionals. Lots of conditionals mean a high CC value (CC measures paths through a method, such as from an if/else chain).

Code coverage is an excellent metric for ascertaining what code isn’t touched by tests and it happens to relate directly to CC because in order to reach 100% branch coverage you’d have to have a one to one relationship with CC (i.e. if a method has 27 different paths, you’d need 27 tests to reach full coverage). Plus, coverage can be unfortunately misleading and can provide a false sense of security.

The beauty of CC is that it’s one metric. One number is all you need to understand risk. You can then apply it in many ways. For example, we provide development teams with ratios related to CC (because CC precisely delineates complex methods it’s often helpful to relate it to other normalized metrics) that enable them to gauge quickly the overall health of a code base. When the ratios grow, things are getting worse and when they decrease, happiness ensues.

The definition of quality (and its associated attributes) as it relates to software has traditionally been quite hard to nail down (regardless if you are a customer or a developer); however, one thing is factual– complex code is a house of cards that will eventually collapse (via attrition, bankruptcy, ossification, etc). Finding complexity and proactively reducing it will lead to software that is more testable, maintainable, and supportable. And by the way, that happens to be the kind of software customers like.

Hiendt(theo testearly.com)

Đọc tiếp >>

Cao Trong Hien

Dự án Eclipse Open Source (OS) IDE sẽ chết


Bản chính thức của Netbeans 6 xắp ra mắt, và sự xuất hiện của nó có thể làm cho những lập trình viên đang dùng Eclispe phải suy nghĩ.

Một năm rưỡi sau phiên bản chính thức cuối cùng của Netbeans, cho ta một cách nhìn mới về OS IDE.

Theo kế hoạch thì tháng 11 này, bản chính thức Netbeans 6 sẽ ra đời. Mặc dù là bản beta nhưng Netbeans đã có hàng trăm add-on, những module này đã hỗ trợ bởi Netbeans trong bản chính thức, và dễ dàng cấu hình. So với những add-on chồng chéo của Eclipse thì Netbeans là một sự lựa chọn tốt.

Trong bản chính thức của Netbeans 5.5, ngoài phần core, nó còn có thêm một số add-on(trong đó có Visual Web Pack), mà theo một số người là không một OS IDE nào sánh được. Với Netbeans 6, người phát triển có thể phát triển core, có thể cung cấp thêm một số chức năng.

Netbeans đã update thêm một số chức năng mới trong Java SE 6, với JSR 199(Java compiler API) và JSR 269(plugable annotation processing API).

Giải thưởng Bossie Award cho OS IDE tốt nhất.
Tôi xin liệt kê một số tính năng nổi bật:

1.Cấu trúc cây thân thiện
2.Refactoring code
3.Tìm kiếm nâng cao
4.Quản lý chất lượng
5.Ant 1.7.0
6.Junit 4
7.Mở và hiểu được project Maven 2
8.CVS
9.Debugger
10.Plug-in manager(Thay cho Update Manager trong bản 5.5)

Bạn có thể tham khảo thêm trên netbeans plugins

Tài liệu tham khảo
www.mc-showcase.com
www.infoworld.com

Đọc tiếp >>

Cao Trong Hien

Mày râu lý sự


Cuộc hôn nhân của đôi bạn trẻ đang rơi vào khủng hoảng. Nguy cơ đổ vỡ rất lớn. Nàng đưa ra cả chục lý do được xem là nguyên nhân gây cản trở hạnh phúc của hai người. Anh cũng có ngần ấy lời biện hộ cho lý do vợ mình đưa ra. Bạn có muốn làm quan tòa giúp họ?

1. Khi yêu, anh ấy không mua hoa tặng tôi.

2. Khi cưới, anh ấy không có nhà, chúng tôi phải thuê nhà cả năm trời.

3. Có nhà rồi nhưng lại không có lò sưởi làm tôi phải đốt lò suốt mùa đông.

4. Trước mặt tôi và bạn bè, anh ấy nói tình yêu và hôn nhân là hai chuyện khác nhau, chứng tỏ anh ấy không còn yêu tôi.

5. Khi tôi mới mang thai, anh ấy đi công tác, làm tôi đói hai ngày.

6. Khi tôi sinh rồi, gặp tôi anh hỏi con trai hay con gái trước, chứng tỏ anh ấy chẳng quan tâm gì đến tôi.

7. Anh ấy không quan tâm đến bố mẹ tôi bằng bố mẹ anh. Sinh nhật bố anh, anh xuống bếp làm món ăn cụ ưa thích còn sinh nhật bố tôi anh ấy không làm vậy.

8. Sau khi mua xe, anh ấy suốt ngày đưa đón bạn bè, bỏ tôi và con ở nhà.

9. Anh uống rượu còn lái xe làm tôi lo lắng đến suy nhược thần kinh.

10. Anh kết bạn với nhiều phụ nữ trong khi tôi lấy anh rồi không còn có bạn trai nữa. Thật không công bằng.

Lời biện hộ



1. Anh không mua hoa vì muốn dành dụm tiền mua nhà.

2. Không có nhà là để anh chăm sóc em chu đáo hơn trong khi chồng người khác lại dán mắt vào tivi hay tờ báo. Hai ta có thời gian đi dạo phố, để lại biết bao kỷ niệm êm dịu đúng không em?


3. Nhà không có lò sưởi, anh lại không biết đốt lò. Tối tối anh ôm em, dùng thân nhiệt của mình để sưởi ấm cho em. Anh muốn sưởi ấm cho em suốt cả cuộc đời.


4. Tình yêu và hôn nhân quả là hai chuyện khác nhau: tình yêu thì cần đến hoa tươi, còn hôn nhân thì cần đến nhà ở. Chẳng phải anh đã sớm tiết kiệm tiền mua hoa để dành dụm mua nhà cho em đấy sao?


5. Anh đi công tác để em không có cơm ăn không phải là muốn em đói mà muốn để cho con chúng ta nếm trải mùi vị của đói, đó là sự rèn luyện ban đầu đấy thôi.


6. Khi em sinh con, anh vội hỏi em con trai hay con gái là vì anh rất muốn có con trai. Như thế, trong nhà ta sẽ có thêm một người đàn ông nữa để bảo vệ em.


7. Sinh nhật bố, anh tự mình xuống bếp là muốn luyện "tay nghề", đợi sinh nhật ông nhạc anh sẽ trổ tài. Kết quả không thành công, vì thế ta mới đi ăn tiệm. Đó đâu phải là vì anh không tôn trọng cụ.


8. Anh luôn cho rằng ngồi trên xe không an toàn bằng ở nhà, vì vậy anh muốn để em và các con "an toàn" ở nhà.


9. Dù biết là không nên lái xe khi uống rượu, nhưng vì muốn nhanh chóng về nhà với em nên không kịp đợi đến khi tỉnh rượu, anh mới lái xe về nhà.


10. Anh rất tán thành phụ nữ sau khi kết hôn nên về nhà và yên tâm với thiên chức làm vợ, làm mẹ. Điều đó làm cho người đàn ông mà em gọi là "say sưa công việc" như anh sẽ không tiếp xúc được với phụ nữ trong công việc, nhưng vấn đề là liệu những người khác có tán thành hay không?


Theo Thế Giới Tiêu Dùng

Đọc tiếp >>

Cao Trong Hien

Send mail dùng SMTP

class MailAuthenticator.java
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**
*
* @author tronghiencao
*/
public class MailAuthenticator extends Authenticator {

private final String user;

private final String password;

public MailAuthenticator(String user, String password) {
this.user = user;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(this.user, this.password);
}
}

class SendMailExample.java
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
*
* @author tronghiencao
*/
public class SendMailExample {
public void sendMail(String smtpHost,String username,
String password,String senderAddress,
String recipientsAddress,String subject,String text ) {
MailAuthenticator auth = new MailAuthenticator(username, password);
Properties properties = new Properties();

properties.put("mail.smtp.host", smtpHost);
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.port", "25");
properties.put("mail.smtp.starttls.enable", "true");//fix error: 530 5.7.0 Must issue a STARTTLS command first
Session session = Session.getDefaultInstance(properties, auth);
try {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(senderAddress));
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(recipientsAddress, false));
msg.setSubject(subject);
msg.setText(text);
msg.setHeader("Test", "Test");
msg.setSentDate(new Date( ));
Transport.send(msg);
} catch (Exception e) {
e.printStackTrace( );
}
}

public static void main(String[] args) {
String username = "nick";//nick no @yahoo.com or @gmail.com
String password = "password";//password
String senderAddress ="tronghiencao@gmail.com";//someone@web.com
String recipientsAddress = "caotronghien@yahoo.com"; //somereceiver@yahoo.de
String subject = "Test";
String text = "text";
String smtpHost = "smtp.gmail.com";
new SendMailExample().sendMail(smtpHost, username, password, senderAddress, recipientsAddress, subject, text);
}
}

Đọc tiếp >>

Cao Trong Hien

Tôi học JAAS

Kỳ 1: THẤT BẠI LÀ MẸ THÀNH CÔNG

Bước đầu đối với ai cũng thật sự tệ, và tôi cũng không ngoại lệ. Đầu tiên cũng như bao lần học những công nghệ khác, tôi vào Google. Kết quả: tôi tìm ra một tài liệu Security for JavaSE6. Tôi mày mò trong mục tutorial, tìm cách run. Kết quả: Thất bại, vì lý do tôi không biết cách run. Trước giờ tôi chỉ sài eclipse, chạy command line đối với tôi thật khó khăn, và cũng vì ngày sưa tôi quá coi thường nó (thời nay ai mà còn dùng command line).
Tài liệu thứ 2 mà tôi tìm thây là bài JAAS Security in Action trên devx.com. Cũng chỉ nói về hệ tư tửng, những định nghĩ, vv... Mà không chạy được làm sao mà hiểu được định nghĩa. Và tất nhiên kết quả không gì khác ngoài: THẤT BẠI.
Tôi bắt đầu mày mò một số bài viết tiếng Việt, và dĩ nhiên là trên javavietnam.org. Qua đó tôi được biết có một bài viết của bác Thắng trên tincntt.com. Mừng hết lớn, đọc lấy đọc để... Kết quá cũng thất bại, vì đơn giản đó chỉ là một bài dịch trên DevArticles, chẳng có một ứng dụng, và còn tệ hơn khi tác giả chẳng mảy may chú ý đến sự tiếp thu của người đọc. Lên nguồn tiếng anh thì thấy họ viết còn dễ hiểu hơn, có lẽ đó cũng là lý do người ta nói: các bài viết tiếng Việt thường “chuối”. (Có gì không phải vui lòng bỏ qua cho)

Kỳ 2: MỘT CHÚT KHẢ QUAN

Đúng là cái gì cũng phải kiên nhẫn, và cuối cùng cũng được kết qủa như mong muốn. Quyển đầu tiên đã giúp tôi thu nhập được nhiều thứ nhất chính là JAAS in action. Giới thiệu một cách khái quát về jaas, từ căn bản, đến những webapp dùng jaas. Những web application mà cuốn sách này tôi vẫn chưa chạy được, nhưng cũng giúp tôi bước đầu trên con đường chinh phục JAAS.
Để chạy được các ví dụ trong quyển sách này máy bạn cần có eclipse, và bạn cũng nên học một chút về ant trên eclipse.
Tôi lại tiếp tục trên con đường tiềm kiếm một app hoàn chỉnh, và đã thấy trên JEE5 tutorial, và tôi đã run được ứng dụng web đầu tiên.

Kỳ 3: KẾT QUẢ ĐẠT ĐƯỢC

Trên con đường đi tìm, tôi đã gặp và nằm lòng những khái niệm
User: Người dùng, và trong jaas nó không được biểu diễn bằng một Object
Subject: là một thực thể đại diện cho user trên ứng dụng.
Principal: Đại diện cho một (Administrator) hoặc nhiều (Group manager) Subject.
Resource: Tất cả mọi thứ trong hệ thống của chúng ta.
Permission: Quản lý Resource, Một permission class đại diện cho 3 thứ: resource, action và name. Nó có thể được gán cho một Principal.
Authentication: Hành động kiểm tra một user, gán cho subject của user này một principal; bạn là ai
Authorization: Hành động kiểm tra một user, và cấp phép truy cập resource; bạn có thể làm gì.
Authentication module: Phương thức xác nhận user.
Authentication scheme: Bao gồm nhiều Authentication module.

Kỳ 4: CẤU HÌNH SUN APPLICATION SERVER

Để Application Server xác định quyền users, ta làm theo các bước sau
1.Start server
2.Vào admin console( mặc định là http://localhost:4848/asadmin)
3.Gõi username và password (thường là admin và adminadmin)
4.Mở cây bên trái chọn Configuration\ Security\ Realms\. Ta có thể có 3 lựa chọn:
file: tạo user cho phép truy cập vô ứng dụng
admin-realm: tạo user cho phép tác động vào server admin
certificate
5.Chọn manage users, ở đó bạn có thể thêm, xoá, và sửa thông tin user.
6.OK
7.Logout

Kỳ 5: EJB+JAAS HelloWorld APPLICATION

Bạn nên dùng Netbeans 5.5.1 + Sun Application Server 9
Bước 1: Tạo một Enterprise Application
Proejct name: HelloWorld
Bỏ check Create Web application module
Check vào mục create application client module
Sửa tên main class thành com.bds.test.Client
Bước 2: Tạo session Bean
EJB Name: HelloWorld
Package: com.bds.ejb
Check remote, bỏ check local

HelloWorldBean.java
@DeclareRoles("admin")
@Stateless
public class WorldHelloBean implements WorldHelloRemote {
/** Creates a new instance of WorldHelloBean */
public WorldHelloBean() {
}
@RolesAllowed("admin")
public void sayHello(String name) {
System.out.println("Hello "+name);
}
}

HelloWorldRemote.java
@Remote
public interface WorldHelloRemote {
void sayHello(String name);
}

Bước 3: Test
Ta chỉ cần remote đến WorldHelloBean để dùng:

public class Client {

@EJB
private static WorldHelloRemote worldHelloBean;

/** Creates a new instance of Client */
public Client(String[] args) {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Client c = new Client(args);
c.doTest();
// TODO code application logic here
}
public void doTest(){
worldHelloBean.sayHello("Hien");
}
}

Bước 4: Khai báo <security-role-mapping>
Trong helloworld project: sửa file sun-application.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-application PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Java EE Application 5.0//EN" "http://www.sun.com/software/appserver/dtds/sun-application_5_0-0.dtd">
<sun-application>
<security-role-mapping>
<role-name>admin</role-name>
<group-name>admin</group-name>
</security-role-mapping>
</sun-application>

Bước 5: Run
Để chạy được project này bạn cần có một user có ID:admin, password: admin, group: admin.
Sau đó ta chỉ run project helloworld

Kỳ 6: JAAS-WEB APPLICATION
Writing...
TÀI LIỆU THAM KHẢO
http://java.sun.com/products/jaas/overview.html
http://www.mooreds.com/jaas.html
http://www.tincntt.com/tincntt/cms/vi/tutorials/java_tutorials/jaas_1.html
http://java.sun.com/javaee/5/docs/tutorial/doc/Overview9.html

Đọc tiếp >>

Cao Trong Hien

,