tag:blogger.com,1999:blog-70973480452572704212024-02-12T21:36:23.659+07:00The world in a click_blogger linhdkl®
<br>C C++ Objective-C C# : Programmer
<br>Windows Ubuntu Mac-OS Web-Internet Android iOS BlackBerry Symbian : Development.Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.comBlogger44125tag:blogger.com,1999:blog-7097348045257270421.post-31925586770447831492012-04-14T02:40:00.003+07:002012-05-14T22:19:55.345+07:00Curriculum Vitae<div class="line_3">
</div>
<div id="content_cr">
<div class="box_corner">
<span class="xtop"><span class="xb1 blue_top"></span><span class="xb2 blue_curve blue_title"></span><span class="xb3 blue_curve blue_title"></span></span> <br />
<div class="blue_bg_title">
<h2>
1. iClickPro</h2>
<br />
iClickPro is a trading securities software applied on iPhone,iPad,Android and Blackberry, which is created with a full package of solutions from trading online to querrying all related stock information.<br />
iClickPro is an application software which is developed by Dinh Linh for Golden Bridge Viet Nam Securities company.<br />
iClickPro is a perfect trading solution based on Core system and application software system of Golden Bridge Viet Nam.<br />
<br />
<br />
Vietnamese<br />
Là một ứng dụng hỗ chợ tra cứu thông tin thị từ thị trường chứng khoán Việt Nam, hỗ trợ nhà đâu tư theo dõi những biến động từ thì trường ở bất kỳ đâu chỉ với một chiếc điện thoại kết nối internet (có thể là GPRS hay WIFI )<br />
<br />
Pictures:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://a1.mzstatic.com/us/r1000/108/Purple/v4/3d/2e/d4/3d2ed4df-8e11-529b-1841-27f6242c3bbe/mzl.llazkriz.320x480-75.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="http://a1.mzstatic.com/us/r1000/108/Purple/v4/3d/2e/d4/3d2ed4df-8e11-529b-1841-27f6242c3bbe/mzl.llazkriz.320x480-75.jpg" width="213" /></a><a href="http://a5.mzstatic.com/us/r1000/092/Purple/v4/81/90/d1/8190d1cf-db51-fb41-9fc4-e47d83f589c4/mzl.reknvhsx.320x480-75.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://a5.mzstatic.com/us/r1000/092/Purple/v4/81/90/d1/8190d1cf-db51-fb41-9fc4-e47d83f589c4/mzl.reknvhsx.320x480-75.jpg" width="213" /></a></div>
<br />
<br />
Link Down<br />
<br />
iPhone<br />
<a href="http://itunes.apple.com/vn/app/iclickpro-iphone-version/id508040830?mt=8">http://itunes.apple.com/vn/app/iclickpro-iphone-version/id508040830?mt=8</a><br />
<br />
iPad<br />
<a href="http://itunes.apple.com/vn/app/iclickpro-ipad-edition/id488506559?mt=8">http://itunes.apple.com/vn/app/iclickpro-ipad-edition/id488506559?mt=8</a><br />
<br />
Android<br />
<a href="https://play.google.com/store/apps/details?id=orixus.aclickpro">https://play.google.com/store/apps/details?id=orixus.aclickpro</a><br />
<br />
Blackberry<br />
<a href="http://www.gbvs.com.vn/uploads/software/blackberry/iClickPro_Blackbery.zip">http://www.gbvs.com.vn/uploads/software/blackberry/iClickPro_Blackbery.zip</a><br />
<br />
<br />
<br />
<h3>
2. onePass</h3>
<br />
OnePass Pro is a application offers to user a way to store their account and profile. Every user’s information is encrypted by AES and MD5 and user also need remember one password.<br />
Features:<br />
-Internet account information.<br />
-Bank account information.<br />
-User’s information (profile).<br />
<br />
<br />
Vietnamese:<br />
Ứng dụng là một tiện ích hỗ chợ người dùng hiện đại, sống trong môi trường nhiều internet có nhiều tài khoản cá nhân và quá nhiều thứ phải nhớ. Ứng dụng sẽ lưu tài khoản của bạn và mã hoá nó với giải thuật MD5, RSA ...<br />
Đảm bảo trong mọi tình huống những thông tin cá nhân và nhậy cảm của bạn không bị kẻ khác lấy căp.<br />
<br />
Pictures:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://a1.mzstatic.com/us/r1000/109/Purple/v4/67/99/95/679995a0-a340-e717-caa2-03869734f80f/mzl.qxttlwsx.320x480-75.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="http://a1.mzstatic.com/us/r1000/109/Purple/v4/67/99/95/679995a0-a340-e717-caa2-03869734f80f/mzl.qxttlwsx.320x480-75.jpg" width="213" /></a><a href="http://a4.mzstatic.com/us/r1000/099/Purple/v4/8c/93/8d/8c938d81-07e3-5f94-270c-16b9781befe8/mzl.meusrniz.320x480-75.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://a4.mzstatic.com/us/r1000/099/Purple/v4/8c/93/8d/8c938d81-07e3-5f94-270c-16b9781befe8/mzl.meusrniz.320x480-75.jpg" width="213" /></a></div>
<br />
<br />
Link Down<br />
<br />
iPhone:<br />
Free version:.<br />
<a href="http://itunes.apple.com/vn/app/onepass-pro/id473865142?mt=8">http://itunes.apple.com/vn/app/onepass-pro/id473865142?mt=8</a><br />
<br />
Price version:<br />
<a href="http://itunes.apple.com/vn/app/onepass-pro-lite/id473906215?mt=8">http://itunes.apple.com/vn/app/onepass-pro-lite/id473906215?mt=8</a><br />
<br />
<br />
<h3>
3. Lịch Việt</h3>
<br />
Lich Viet is a utility application about Viet Nam calendar.<br />
User can double tap on date cell to view date information.<br />
User can swipe left to right or right to left to go next day preview day.<br />
user can swipe left to right or right to left to go next month or preview month.<br />
<br />
<br />
Vietnamese:<br />
Một ứng dụng thuần Việt. Giúp bạn theo dõi ngày lịch ta. Đặt sự kiện cho các ngày quan trọng như giỗ, hay ngày cưới hỏi ngày lễ quan trọng theo phong tục cổ truyền. Đưa ra những thông tin luận giải ngày tốt xấu...<br />
<br />
Pictures:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://a4.mzstatic.com/us/r1000/078/Purple/v4/61/fa/ec/61faeca2-5047-6318-b9ed-1a6bc6fcfd5a/mkjOaOpnMwxn6CF5QBgSgg-temp-upload.hvpktobn.320x480-75.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="320" src="http://a4.mzstatic.com/us/r1000/078/Purple/v4/61/fa/ec/61faeca2-5047-6318-b9ed-1a6bc6fcfd5a/mkjOaOpnMwxn6CF5QBgSgg-temp-upload.hvpktobn.320x480-75.jpg" width="213" /></a><a href="http://a4.mzstatic.com/us/r1000/089/Purple/v4/97/00/ca/9700ca93-eaf1-a434-1eb6-bc320e28926a/mkjOaOpnMwxn6CF5QBgSgg-temp-upload.gdjqxmrj.320x480-75.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://a4.mzstatic.com/us/r1000/089/Purple/v4/97/00/ca/9700ca93-eaf1-a434-1eb6-bc320e28926a/mkjOaOpnMwxn6CF5QBgSgg-temp-upload.gdjqxmrj.320x480-75.jpg" width="213" /></a></div>
<br />
<br />
Link Down<br />
Free version:<br />
iPhone : <a href="http://itunes.apple.com/vn/app/lich-viet-iphone-edition/id522091449?mt=8">http://itunes.apple.com/vn/app/lich-viet-iphone-edition/id522091449?mt=8</a><br />
iPad: <a href="http://itunes.apple.com/vn/app/lich-viet/id519797297?mt=8">http://itunes.apple.com/vn/app/lich-viet/id519797297?mt=8</a><br />
<br />
<br />
Video: <a href="http://youtu.be/MW_xzAvcj7Y">http://youtu.be/MW_xzAvcj7Y</a><br />
<br />
<br /></div>
</div>
</div>Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com0tag:blogger.com,1999:blog-7097348045257270421.post-90040176563072085792011-02-17T13:27:00.003+07:002011-02-17T13:31:28.770+07:00Hướng dẫn lập trình cở bản Trên Google Android SDK.<span class="Apple-style-span" style="color: rgb(51, 51, 51); font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; "><table cellspacing="0" border="0" id="dnn_ctr862_SearchVideo_dgrMedia" style="width: 739px; border-collapse: collapse; "><tbody><tr><td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><br /><table cellspacing="5" cellpadding="5" width="100%" border="0"><tbody><tr><th scope="col" style="vertical-align: baseline; font-family: Tahoma, Arial, Helvetica; font-size: 12px; font-weight: bold; color: rgb(0, 51, 102); ">Năm mới chuyển sang iPhone làm rồi khoe ti chiến tích về Android chơi.<br /><br /></th></tr><tr><td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><table cellspacing="5" cellpadding="5" width="100%" border="0"><tbody><tr><td valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><div style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/bg_imageTeacher.gif); width: 158px; height: 129px; padding-top: 7px; padding-left: 4px; background-repeat: no-repeat no-repeat; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl02_HyperLink2" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/406/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><img src="http://storage01.truongcongnghe.vn/Videos/100910/8/files/photo.jpg" id="dnn_ctr862_SearchVideo_dgrMedia_ctl02_Img2" width="144" height="114" align="left" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; text-decoration: none; border-width: initial; border-color: initial; border-width: initial; border-color: initial; border-width: initial; border-color: initial; padding-left: 3px; " /></a></div></td><td width="100%" valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); height: 70px; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl02_HyperLink1" title="Xem bài giảng này" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/406/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><b>Lập trình Google Android - Bài 8 - Lập trình với Android SDK Phần III/System/Thread – Handler</b></a><div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Teacher/TeacherDetail/tabid/165/TeacherId/50/Default.aspx" title="Xem thông tin của giáo viên này" target="_blank" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Cử nhân: Đinh Khắc Linh </a><br />Lập trình viên cao cấp Cty phần mềm AOD Việt Nam<div style="padding-top: 5px; "></div>Phí xem: 5,000 - Thời lượng: 44.06 '<br />Số người xem: 508 - <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/ctl/Comment/mid/862/WebcastId/406/Default.aspx" title="Xem hỏi đáp và góp ý của bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">hỏi đáp và góp ý(0) </a>-Ngày: 04:29 09/09/10<div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/406/demo/True/Default.aspx" title="Xem demo bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem demo bài giảng này </a>| <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/auth/50/Default.aspx" title="Xem các bài giảng khác của giáo viên này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem các bài giảng khác của giáo viên này </a><br /></td></tr><tr style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/line2.gif); height: 8px; "><td colspan="2" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "></td></tr></tbody></table></td></tr><tr><td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><table cellspacing="5" cellpadding="5" width="100%" border="0"><tbody><tr><td valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><div style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/bg_imageTeacher.gif); width: 158px; height: 129px; padding-top: 7px; padding-left: 4px; background-repeat: no-repeat no-repeat; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl03_HyperLink2" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/405/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><img src="http://storage01.truongcongnghe.vn/Videos/100910/7/files/photo.jpg" id="dnn_ctr862_SearchVideo_dgrMedia_ctl03_Img2" width="144" height="114" align="left" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; text-decoration: none; border-width: initial; border-color: initial; border-width: initial; border-color: initial; border-width: initial; border-color: initial; padding-left: 3px; " /></a></div></td><td width="100%" valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); height: 70px; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl03_HyperLink1" title="Xem bài giảng này" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/405/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><b>Lập trình Google Android - Bài 7 - Android SDK Phần III/System/Service – Content provider</b></a><div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Teacher/TeacherDetail/tabid/165/TeacherId/50/Default.aspx" title="Xem thông tin của giáo viên này" target="_blank" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Cử nhân: Đinh Khắc Linh </a><br />Lập trình viên cao cấp Cty phần mềm AOD Việt Nam<div style="padding-top: 5px; "></div>Phí xem: 5,000 - Thời lượng: 57.43 '<br />Số người xem: 195 - <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/ctl/Comment/mid/862/WebcastId/405/Default.aspx" title="Xem hỏi đáp và góp ý của bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">hỏi đáp và góp ý(0) </a>-Ngày: 04:26 09/09/10<div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/405/demo/True/Default.aspx" title="Xem demo bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem demo bài giảng này </a>| <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/auth/50/Default.aspx" title="Xem các bài giảng khác của giáo viên này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem các bài giảng khác của giáo viên này </a><br /></td></tr><tr style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/line2.gif); height: 8px; "><td colspan="2" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "></td></tr></tbody></table></td></tr><tr><td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><table cellspacing="5" cellpadding="5" width="100%" border="0"><tbody><tr><td valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><div style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/bg_imageTeacher.gif); width: 158px; height: 129px; padding-top: 7px; padding-left: 4px; background-repeat: no-repeat no-repeat; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl04_HyperLink2" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/404/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><img src="http://storage01.truongcongnghe.vn/Videos/100910/6/files/photo.jpg" id="dnn_ctr862_SearchVideo_dgrMedia_ctl04_Img2" width="144" height="114" align="left" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; text-decoration: none; border-width: initial; border-color: initial; border-width: initial; border-color: initial; border-width: initial; border-color: initial; padding-left: 3px; " /></a></div></td><td width="100%" valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); height: 70px; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl04_HyperLink1" title="Xem bài giảng này" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/404/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><b>Lập trình Google Android - Bài 6 - Android SDK Phần III/Net/TCP-IP – http – https</b></a><div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Teacher/TeacherDetail/tabid/165/TeacherId/50/Default.aspx" title="Xem thông tin của giáo viên này" target="_blank" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Cử nhân: Đinh Khắc Linh </a><br />Lập trình viên cao cấp Cty phần mềm AOD Việt Nam<div style="padding-top: 5px; "></div>Phí xem: 5,000 - Thời lượng: 34.56 '<br />Số người xem: 130 - <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/ctl/Comment/mid/862/WebcastId/404/Default.aspx" title="Xem hỏi đáp và góp ý của bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">hỏi đáp và góp ý(0) </a>-Ngày: 04:16 09/09/10<div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/404/demo/True/Default.aspx" title="Xem demo bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem demo bài giảng này </a>| <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/auth/50/Default.aspx" title="Xem các bài giảng khác của giáo viên này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem các bài giảng khác của giáo viên này </a><br /></td></tr><tr style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/line2.gif); height: 8px; "><td colspan="2" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "></td></tr></tbody></table></td></tr><tr><td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><table cellspacing="5" cellpadding="5" width="100%" border="0"><tbody><tr><td valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><div style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/bg_imageTeacher.gif); width: 158px; height: 129px; padding-top: 7px; padding-left: 4px; background-repeat: no-repeat no-repeat; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl05_HyperLink2" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/403/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><img src="http://storage01.truongcongnghe.vn/Videos/100910/5/files/photo.jpg" id="dnn_ctr862_SearchVideo_dgrMedia_ctl05_Img2" width="144" height="114" align="left" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; text-decoration: none; border-width: initial; border-color: initial; border-width: initial; border-color: initial; border-width: initial; border-color: initial; padding-left: 3px; " /></a></div></td><td width="100%" valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); height: 70px; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl05_HyperLink1" title="Xem bài giảng này" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/403/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><b>Lập trình Google Android - Bài 5 - Android SDK Phần II/Data/File, SQLite, SharedPreference</b></a><div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Teacher/TeacherDetail/tabid/165/TeacherId/50/Default.aspx" title="Xem thông tin của giáo viên này" target="_blank" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Cử nhân: Đinh Khắc Linh </a><br />Lập trình viên cao cấp Cty phần mềm AOD Việt Nam<div style="padding-top: 5px; "></div>Phí xem: 5,000 - Thời lượng: 65.05 '<br />Số người xem: 237 - <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/ctl/Comment/mid/862/WebcastId/403/Default.aspx" title="Xem hỏi đáp và góp ý của bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">hỏi đáp và góp ý(0) </a>-Ngày: 04:14 09/09/10<div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/403/demo/True/Default.aspx" title="Xem demo bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem demo bài giảng này </a>| <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/auth/50/Default.aspx" title="Xem các bài giảng khác của giáo viên này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem các bài giảng khác của giáo viên này </a><br /></td></tr><tr style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/line2.gif); height: 8px; "><td colspan="2" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "></td></tr></tbody></table></td></tr><tr><td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><table cellspacing="5" cellpadding="5" width="100%" border="0"><tbody><tr><td valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><div style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/bg_imageTeacher.gif); width: 158px; height: 129px; padding-top: 7px; padding-left: 4px; background-repeat: no-repeat no-repeat; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl06_HyperLink2" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/402/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><img src="http://storage01.truongcongnghe.vn/Videos/100910/4/files/photo.jpg" id="dnn_ctr862_SearchVideo_dgrMedia_ctl06_Img2" width="144" height="114" align="left" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; text-decoration: none; border-width: initial; border-color: initial; border-width: initial; border-color: initial; border-width: initial; border-color: initial; padding-left: 3px; " /></a></div></td><td width="100%" valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); height: 70px; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl06_HyperLink1" title="Xem bài giảng này" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/402/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><b>Lập trình Google Android - Bài 4 - Lập trình với Android SDK Phần I/GUI/Graphic 2D – 3D</b></a><div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Teacher/TeacherDetail/tabid/165/TeacherId/50/Default.aspx" title="Xem thông tin của giáo viên này" target="_blank" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Cử nhân: Đinh Khắc Linh </a><br />Lập trình viên cao cấp Cty phần mềm AOD Việt Nam<div style="padding-top: 5px; "></div>Phí xem: 6,000 - Thời lượng: 76.58 '<br />Số người xem: 137 - <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/ctl/Comment/mid/862/WebcastId/402/Default.aspx" title="Xem hỏi đáp và góp ý của bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">hỏi đáp và góp ý(0) </a>-Ngày: 03:53 09/09/10<div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/402/demo/True/Default.aspx" title="Xem demo bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem demo bài giảng này </a>| <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/auth/50/Default.aspx" title="Xem các bài giảng khác của giáo viên này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem các bài giảng khác của giáo viên này </a><br /></td></tr><tr style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/line2.gif); height: 8px; "><td colspan="2" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "></td></tr></tbody></table></td></tr><tr><td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><table cellspacing="5" cellpadding="5" width="100%" border="0"><tbody><tr><td valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><div style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/bg_imageTeacher.gif); width: 158px; height: 129px; padding-top: 7px; padding-left: 4px; background-repeat: no-repeat no-repeat; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl07_HyperLink2" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/410/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><img src="http://storage01.truongcongnghe.vn/Videos/100914/3%20part%202/files/photo.jpg" id="dnn_ctr862_SearchVideo_dgrMedia_ctl07_Img2" width="144" height="114" align="left" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; text-decoration: none; border-width: initial; border-color: initial; border-width: initial; border-color: initial; border-width: initial; border-color: initial; padding-left: 3px; " /></a></div></td><td width="100%" valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); height: 70px; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl07_HyperLink1" title="Xem bài giảng này" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/410/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><b>Lập trình Google Android - Bài 3 - Lập trình với Android SDK Phần I/GUI/Layout – Views - Phần 2</b></a><div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Teacher/TeacherDetail/tabid/165/TeacherId/50/Default.aspx" title="Xem thông tin của giáo viên này" target="_blank" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Cử nhân: Đinh Khắc Linh </a><br />Lập trình viên cao cấp Cty phần mềm AOD Việt Nam<div style="padding-top: 5px; "></div>Phí xem: 5,000 - Thời lượng: 52.44 '<br />Số người xem: 419 - <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/ctl/Comment/mid/862/WebcastId/410/Default.aspx" title="Xem hỏi đáp và góp ý của bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">hỏi đáp và góp ý(0) </a>-Ngày: 09:44 15/09/10<div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/410/demo/True/Default.aspx" title="Xem demo bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem demo bài giảng này </a>| <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/auth/50/Default.aspx" title="Xem các bài giảng khác của giáo viên này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem các bài giảng khác của giáo viên này </a><br /></td></tr><tr style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/line2.gif); height: 8px; "><td colspan="2" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "></td></tr></tbody></table></td></tr><tr><td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><table cellspacing="5" cellpadding="5" width="100%" border="0"><tbody><tr><td valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><div style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/bg_imageTeacher.gif); width: 158px; height: 129px; padding-top: 7px; padding-left: 4px; background-repeat: no-repeat no-repeat; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl08_HyperLink2" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/407/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><img src="http://storage01.truongcongnghe.vn/Videos/100914/2%20part%201/files/photo.jpg" id="dnn_ctr862_SearchVideo_dgrMedia_ctl08_Img2" width="144" height="114" align="left" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; text-decoration: none; border-width: initial; border-color: initial; border-width: initial; border-color: initial; border-width: initial; border-color: initial; padding-left: 3px; " /></a></div></td><td width="100%" valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); height: 70px; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl08_HyperLink1" title="Xem bài giảng này" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/407/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><b>Lập trình Google Android - Bài 2 - Lập trình với Android SDK Phần I/GUI/Activity – Intent - Phần 1</b></a><div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Teacher/TeacherDetail/tabid/165/TeacherId/50/Default.aspx" title="Xem thông tin của giáo viên này" target="_blank" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Cử nhân: Đinh Khắc Linh </a><br />Lập trình viên cao cấp Cty phần mềm AOD Việt Nam<div style="padding-top: 5px; "></div>Phí xem: 5,000 - Thời lượng: 61.17 '<br />Số người xem: 302 - <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/ctl/Comment/mid/862/WebcastId/407/Default.aspx" title="Xem hỏi đáp và góp ý của bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">hỏi đáp và góp ý(0) </a>-Ngày: 09:32 15/09/10<div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/407/demo/True/Default.aspx" title="Xem demo bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem demo bài giảng này </a>| <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/auth/50/Default.aspx" title="Xem các bài giảng khác của giáo viên này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem các bài giảng khác của giáo viên này </a><br /></td></tr><tr style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/line2.gif); height: 8px; "><td colspan="2" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "></td></tr></tbody></table></td></tr><tr><td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><table cellspacing="5" cellpadding="5" width="100%" border="0"><tbody><tr><td valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><div style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/bg_imageTeacher.gif); width: 158px; height: 129px; padding-top: 7px; padding-left: 4px; background-repeat: no-repeat no-repeat; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl09_HyperLink2" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/408/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><img src="http://storage01.truongcongnghe.vn/Videos/100914/2%20part%202/files/photo.jpg" id="dnn_ctr862_SearchVideo_dgrMedia_ctl09_Img2" width="144" height="114" align="left" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; text-decoration: none; border-width: initial; border-color: initial; border-width: initial; border-color: initial; border-width: initial; border-color: initial; padding-left: 3px; " /></a></div></td><td width="100%" valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); height: 70px; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl09_HyperLink1" title="Xem bài giảng này" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/408/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><b>Lập trình Google Android - Bài 2 - Lập trình với Android SDK Phần I/GUI/Activity – Intent - Phần 2</b></a><div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Teacher/TeacherDetail/tabid/165/TeacherId/50/Default.aspx" title="Xem thông tin của giáo viên này" target="_blank" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Cử nhân: Đinh Khắc Linh </a><br />Lập trình viên cao cấp Cty phần mềm AOD Việt Nam<div style="padding-top: 5px; "></div>Phí xem: 5,000 - Thời lượng: 51.04 '<br />Số người xem: 159 - <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/ctl/Comment/mid/862/WebcastId/408/Default.aspx" title="Xem hỏi đáp và góp ý của bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">hỏi đáp và góp ý(0) </a>-Ngày: 09:38 15/09/10<div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/408/demo/True/Default.aspx" title="Xem demo bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem demo bài giảng này </a>| <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/auth/50/Default.aspx" title="Xem các bài giảng khác của giáo viên này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem các bài giảng khác của giáo viên này </a><br /></td></tr><tr style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/line2.gif); height: 8px; "><td colspan="2" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "></td></tr></tbody></table></td></tr><tr><td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><table cellspacing="5" cellpadding="5" width="100%" border="0"><tbody><tr><td valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><div style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/bg_imageTeacher.gif); width: 158px; height: 129px; padding-top: 7px; padding-left: 4px; background-repeat: no-repeat no-repeat; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl10_HyperLink2" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/409/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><img src="http://storage01.truongcongnghe.vn/Videos/100914/3%20part%201/files/photo.jpg" id="dnn_ctr862_SearchVideo_dgrMedia_ctl10_Img2" width="144" height="114" align="left" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; text-decoration: none; border-width: initial; border-color: initial; border-width: initial; border-color: initial; border-width: initial; border-color: initial; padding-left: 3px; " /></a></div></td><td width="100%" valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); height: 70px; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl10_HyperLink1" title="Xem bài giảng này" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/409/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><b>Lập trình Google Android - Bài 3 - Lập trình với Android SDK Phần I/GUI/Layout – Views - Phần 1</b></a><div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Teacher/TeacherDetail/tabid/165/TeacherId/50/Default.aspx" title="Xem thông tin của giáo viên này" target="_blank" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Cử nhân: Đinh Khắc Linh </a><br />Lập trình viên cao cấp Cty phần mềm AOD Việt Nam<div style="padding-top: 5px; "></div>Phí xem: 5,000 - Thời lượng: 48.26 '<br />Số người xem: 145 - <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/ctl/Comment/mid/862/WebcastId/409/Default.aspx" title="Xem hỏi đáp và góp ý của bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">hỏi đáp và góp ý(0) </a>-Ngày: 09:43 15/09/10<div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/409/demo/True/Default.aspx" title="Xem demo bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem demo bài giảng này </a>| <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/auth/50/Default.aspx" title="Xem các bài giảng khác của giáo viên này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem các bài giảng khác của giáo viên này </a><br /></td></tr><tr style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/line2.gif); height: 8px; "><td colspan="2" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "></td></tr></tbody></table></td></tr><tr><td style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><table cellspacing="5" cellpadding="5" width="100%" border="0"><tbody><tr><td valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); "><div style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/bg_imageTeacher.gif); width: 158px; height: 129px; padding-top: 7px; padding-left: 4px; background-repeat: no-repeat no-repeat; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl11_HyperLink2" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/399/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><img src="http://storage01.truongcongnghe.vn/Videos/100910/1/files/photo.jpg" id="dnn_ctr862_SearchVideo_dgrMedia_ctl11_Img2" width="144" height="114" align="left" style="border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; text-decoration: none; border-width: initial; border-color: initial; border-width: initial; border-color: initial; border-width: initial; border-color: initial; padding-left: 3px; " /></a></div></td><td width="100%" valign="top" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Tahoma, Arial, Verdana, Helvetica; font-size: 12px; background-color: inherit; color: rgb(51, 51, 51); height: 70px; "><a id="dnn_ctr862_SearchVideo_dgrMedia_ctl11_HyperLink1" title="Xem bài giảng này" href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/399/Default.aspx" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; "><b>Lập trình Google Android - Bài 1 - Giới thiệu về lập trình trên mobile và Android – SDK</b></a><div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Teacher/TeacherDetail/tabid/165/TeacherId/50/Default.aspx" title="Xem thông tin của giáo viên này" target="_blank" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Cử nhân: Đinh Khắc Linh </a><br />Lập trình viên cao cấp Cty phần mềm AOD Việt Nam<div style="padding-top: 5px; "></div>Phí xem: 4,000 - Thời lượng: 41.51 '<br />Số người xem: 386 - <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/ctl/Comment/mid/862/WebcastId/399/Default.aspx" title="Xem hỏi đáp và góp ý của bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">hỏi đáp và góp ý(0) </a>-Ngày: 03:41 09/09/10<div style="padding-top: 5px; "></div><a href="http://truongcongnghe.vn/SchoolOnline/Communication/Offline/Webcast/tabid/152/WebcastId/399/demo/True/Default.aspx" title="Xem demo bài giảng này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem demo bài giảng này </a>| <a href="http://truongcongnghe.vn/SchoolOnline/Communication/SearchVideo/tabid/249/auth/50/Default.aspx" title="Xem các bài giảng khác của giáo viên này" style="text-decoration: none; color: rgb(102, 102, 102); font-size: 11px; font-weight: normal; ">Xem các bài giảng khác của giáo viên này </a><br /></td></tr><tr style="background-image: url(http://truongcongnghe.vn/images/home/congnghe/line2.gif); height: 8px; "></tr></tbody></table><br /></td></tr></tbody></table></td></tr></tbody></table></span>Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com8tag:blogger.com,1999:blog-7097348045257270421.post-21217098667241547462010-07-08T14:31:00.006+07:002010-07-08T14:59:46.242+07:00Điều gì mới ở C# 4.0<div>Vấn đề là mằn trong vấn đề... Lọ mọ trên mạng vớ dc bài viết giới thiệu về C# 4.0 nên copy về đây. Không rõ nguồn gốc xuất sứ bài này do ai viết nhưng mà tìm dc bên ddth.com</div><div><br /></div><div>Thấy cũng hay, bổ ích nhiều vấn đề mới ...</div><div><br /></div><div>Khi quyển sách này đang được viết, thì phiên bản mới nhất của Microsoft là Visual Studio 2010 Beta 2 và .NET Framework 4.0 Beta 2 đang được giới CNTT tải về để nghiên cứu. Bắt đầu từ ngày 11/02/2010 sắp tới, Microsoft tổ chức những hội nghị mở rộng tại nhiều thành phố lớn trên toàn thế giới để giới thiệu phiên bản mới nhất của Visual Studio và .NET Framework, sẽ được tung ra thị trường vào ngày 22/03/2010.</div><div><br /></div><div>Thứ nhất, vì phiên bản Visual Studio-2010 chưa được tung ra thị trường, cho nên những chức năng mới của Visual Studio-2010 được viết trong sách này, đều chưa được chính thức công nhận, và có thể có những thay đổi. Tuy nhiên, có thể nói rằng, sẽ không có bất cứ một thay đổi quan trọng nào có thể xảy ra.</div><div><br /></div><div>Thứ hai, mặc dầu phiên bản mới sắp được phát hành, tất cả những tư liệu dẫn chứng cho những mã nguồn, cũng như những mã nguồn mẫu trong quyển sách này, vẫn là những gì nồng cốt nhất cho một lập trình C#, ngày hôm nay, cũng như sau khi Visual Studio-2010 được phát hành, và chắc chắn rằng vẫn còn là những nồng cốt của một chương trình C# cho tới phiên bản kế tiếp sau phiên bản Visual Studio-2010.</div><div><br /></div><div><b>Những chủ đề (themes) của phiên bản C# mới.</b></div><div><br /></div><div>Với phiên bản Visual Studio-2010, để có thể thống nhất về con số của những phiên bản, C# 2010 được gọi là C# 4.0, cùng một hệ số với phiên bản .NET Framework 4.0. Do đó, các bạn nên bắt đầu làm quen với cách gọi này: C# 4.0, thay vì C#-2010.</div><div><br /></div><div>Chủ đề chính được Microsoft hoạch định cho phiên bản C# 4.0 là “Năng Động (Dynamic)”. Tất cả những chức năng mới của phiên bản C# 4.0 đều được phát triển chung quanh hai chữ “năng động”. Và như các bạn đã được biết, lớp đối tượng nền của tất cả các lớp đối tượng trong một lập trình C# là System.Object. Do đó, System.Object bắt buộc phải trở thành một lớp đối tượng có tính năng động. Nói một cách khác, mục tiêu của Microsoft cho phiên bản .NET Framework 4.0 nói chung, và C# nói riêng, là C# phải trở thành một ngôn ngữ có những lớp đối tượng năng động</div><div><br /></div><div>Nhưng thế nào là lớp đối tượng năng động? Một lớp đối tượng năng động là một lớp đối tượng mà cấu trúc(structure) và trạng thái (behavior) của nó không bị bó buộc hoặc lệ thuộc vào những trạng thái tĩnh (static). Nói một cách khác, một đối tượng lớp không cần phải định nghĩa trước khi khởi tạo, mà có thể được định nghĩa khi bắt đầu khởi tạo trong lúc phần mềm đang vận hành. Và nói một cách khác nữa, một lớp đối tượng năng động là một lớp đối tượng mà biên trình (csc.exe) không biết một tí gì về đối tượng đó khi biên lập.</div><div><br /></div><div>Những đối tượng (objects) dưới đây là những điển hình của một đối tượng năng động</div><div><br /></div><div>•<span class="Apple-tab-span" style="white-space:pre"> </span>Đối tượng của những ngôn ngữ lập trình năng động, như Pyphon hoặc Ruby.</div><div>•<span class="Apple-tab-span" style="white-space:pre"> </span>Những đối tượng COM được truy cập qua giao ước IDispatch.</div><div>•<span class="Apple-tab-span" style="white-space:pre"> </span>Những dạng đối tượng nguyên thuỷ của .NET có thể truy cập qua phép đối xứng (reflection).</div><div>•<span class="Apple-tab-span" style="white-space:pre"> </span>Những đối tượng có cấu trúc thay đổi trong khi vận hành, như HTML DOM.</div><div><br /></div><div>Mặc dầu thế, C# vẫn là một ngôn ngữ nặng tích chất không thay đổi (static), nhưng có khả năng tạo lên được những lớp đối tượng năng động.</div><div><br /></div><div>Chủ đề thứ hai, hay mục tiêu thứ hai cho C#, là “cùng tiến hóa” với Visual Basic. Cùng tiến hóa, nhưng vẫn giữ những đặc tính riêng biệt. Nói một cách khác, 2 ngôn ngữ sẽ cùng có chung những chức năng và hiệu năng, nhưng vẫn là 2 ngôn ngữ riêng biệt với những cú pháp riêng biệt.</div><div><br /></div><div>Những chức năng mới của C# được chia ra làm 4 thành phần, như sau:</div><div><br /></div><div><b>1.</b><span class="Apple-tab-span" style="white-space:pre"><b> </b></span><b>Truy vấn năng động (dynamic lookup)</b></div><div><b>2.</b><span class="Apple-tab-span" style="white-space:pre"><b> </b></span><b>Tham số tên và tham số tuỳ chọn (Named and option parameters)</b></div><div><b>3.</b><span class="Apple-tab-span" style="white-space:pre"><b> </b></span><b>Chức năng giao tiếp với những COM đã được lựa chọn</b></div><div><b>4.</b><span class="Apple-tab-span" style="white-space:pre"><b> </b></span><b>Biến dạng (variance)</b></div><div><br /></div><div><br /></div><div><b>Truy vấn năng động (dynamic lookup)</b></div><div>Truy vấn năng động là những chức năng có thể tạo dựng được những hàm, những toán tử và chỉ mục, những thuộc tính và trường truy cập, và những đối tượng sự-tác có thể vượt qua những quy tắc đòi hỏi chỉ định dạng trước khi được khởi tạo.</div><div><br /></div><div>Truy vấn năng động cho phép một phần mềm có thể kích hoạt được những đối tượng trong lúc vận hành mà không phải lưu tâm đến việc những đối tượng đó thuộc về những dạng nào, và từ đâu tới( COM, HTML DOM, Python, hoặc đối xứng). Chỉ cần áp dụng những thao tác xử lý vào một đối tượng, và để cho bộ vận hành thẩm định những thao tác đó.</div><div><br /></div><div>Chức năng này cho các bạn sự uyển chuyển và giản dị hóa mã nguồn trong một thảo chương, nhưng đổi lại, dạng của một đối tượng không được thẩm định trong những thao tác truy vấn. Lớp đối tượng năng động không được thẩm tra khi biên lập, do đó, nếu có những lỗi lầm, những lỗi lầm đó chỉ xảy ra khi vận hành. Nói một cách khác, phần mềm của các bạn có nhiều hy vọng bị treo trong khi vận hành. Thông thường, khi phần mềm bị treo vì những lý do có liên quan đến việc xử lý của một đối tượng năng động, sẽ không có gì tổn hại đến hệ điều hành. Nhưng đôi khi, những lỗi lầm này có thể ảnh hưởng đến tính chất bảo vệ hệ thống phần mềm. Do đó, C# cho các bạn có sự tùy chọn giữa năng động và không năng động trước khi khởi tạo một đối tượng.</div><div><br /></div><div><b>Dạng năng động (dynamic type)</b></div><div><br /></div><div>Với C# 4.0, một dạng tĩnh có thể định dạng năng động. Với dạng tĩnh năng động, các bạn có thể tạo dựng những thao tác với những điều kiện chỉ có thể có trong lúc vận hành:</div><div><br /></div><div>Code:</div><div><i>Dynamic năngĐộng = GetDynamicObject(...); năngĐộng.M(7);</i></div><div><br /></div><div>Với 2 hàng mã nguồn mẫu trên, biên trình csc.exe không thể thẩm định tên và những tham số thuộc đối tượng năngĐộng trên. Do đó, các bạn có thể dùng bất cứ tên (cho thuộc hàm) gì, và bất cứ một tham số nào. Khi phần mềm được vận hành, bộ vận hành DLR mới có thể thẩm định năngĐộng thuộc đối tượng gì. năngĐộng có thuộc hàm M() không, và thuộc hàm năngĐộng.M() có phải là một thuộc hàm có một tham số thuộc dạng số không.</div><div><br /></div><div>Các bạn có thể gán bất cứ một giá trị nào cho một đối tượng năng động, và một đối tượng năng động cũng có thể gán cho bất cứ một dạng đối tượng nào, như sau:</div><div><br /></div><div>Code:</div><div><i>class Program { </i></div><div><span class="Apple-tab-span" style="white-space:pre"><i> </i></span><i>static void Main(string[] args) { </i></div><div><span class="Apple-tab-span" style="white-space:pre"><i> </i></span><i>dynamic d = 199; int i = d; string str = d; Form frm = d; </i></div><div><span class="Apple-tab-span" style="white-space:pre"><i> </i></span><i>}</i></div><div><i> }</i></div><div><br /></div><div><br /></div><div><b><br /></b></div><div><b>Vận hành năng động</b></div><div><br /></div><div>Không những chỉ có thuộc hàm có thể...năng động, mà tất cả những gì thuộc về truy cập đều có thể năng động, kể cả uỷ nhiệm:</div><div><br /></div><div>Code:</div><div><i>dynamic d = 199; d.f = d.P; // truy cap thuoc tinh d["Hai"] = d["Ba"]; // truy van / cap nhat voi chi muc </i></div><div><i>int i = d + 3; // dung toan tu string s = d(5,7); // Goi nhu mot uy nhiem</i></div><div><br /></div><div>Khi vận hành, thao tác xử lý năng động được kích hoạt tuỳ theo tính tự nhiên của những đối tượng năng động dưói đây:</div><div><b><br /></b></div><div><b>Đối tượng COM</b></div><div><br /></div><div>Nếu đối tượng năng động là một đối tượng được định nghĩa từ một linh kiện COM, những thao tác xử lý được gửi qua IDispatch của đối tượng COM đó. Điều này cho phép chương trình gọi những hàm của nhiều dạng COM không có PIA (Primary Interop Assembly), và lệ thuộc vào những chức năng của COM không có trong ngôn ngữ C#, chẳng hạn như thuộc tính chỉ mục, hoặc thuộc tính mặc định.</div><div><br /></div><div><b>Đối tượng năng động (dynamic objects)</b></div><div><br /></div><div>Nếu đối tượng năng động là một đối tượng năng động thuộc dạng IDynamicObject, thao tác xử lý sẽ được khởi động tại tầng đối tượng. Do đó, một đối tượng định dạng IDynamicObject có thể hoàn toàn thay đổi phương tiện của những thao tác vận hành. Điều này rất thông dụng trong những ngôn ngữ năng động như IronPython hoặc IronRuby. Đối tượng thuộc dạng IDynamicObject còn có thể được dùng bởi HTML DOM.</div><div><br /></div><div><b>Đối tượng lớp thuộc về .NET</b></div><div><br /></div><div>Nếu không thuộc 2 đối tượng trên, thì đó là một đối tượng lớp .NET thông thường, và những thao tác xử lý được vận hành bằng cách dùng đối xứng (reflection) trên dạng lớp của đối tượng (để tìm ra những dẫn chứng), thí dụ như:</div><div><br /></div><div>Code:</div><div><i>public void DoiTuongNangDongNET() { </i></div><div><span class="Apple-tab-span" style="white-space:pre"><i> </i></span><i>dynamic d1 = new TiepThiVien(“TT001”); </i></div><div><span class="Apple-tab-span" style="white-space:pre"><i> </i></span><i>dynamic d2 = new NhanCong(“NC001”); </i></div><div><span class="Apple-tab-span" style="white-space:pre"><i> </i></span><i>string s; </i></div><div><span class="Apple-tab-span" style="white-space:pre"><i> </i></span><i>d1.M(s, d2, 3, null); </i></div><div><i>}</i></div><div><br /></div><div>Vì hàm M() được gọi từ tầng đối tượng dynamic, biên trình sẽ không thẩm định ngữ nghĩa của hàm M(), mà chỉ lưu giữ thông tin M(2,d2,3,null) cho đến khi vận hành, nhường quyền thẩm định cho bộ vận hành DLR của .NET. Những thông tin này chủ yếu có những ý nghĩa như sau:</div><div><br /></div><div>“Khởi động hàm M() với những tham số”:</div><div>1.<span class="Apple-tab-span" style="white-space:pre"> </span>Chuỗi ký tự</div><div>2.<span class="Apple-tab-span" style="white-space:pre"> </span>đối tượng năng động (d2)</div><div>3.<span class="Apple-tab-span" style="white-space:pre"> </span>hằng số 3</div><div>4.<span class="Apple-tab-span" style="white-space:pre"> </span>null</div><div><br /></div><div>Khi vận hành, vì d1 không phải là một đối tượng COM, cũng không được định dạng IDynamicObject, nên bộ vận hành dùng phép đối xứng để truy vấn những dẫn chứng của đối tượng d1 như sau:</div><div><br /></div><div>•<span class="Apple-tab-span" style="white-space:pre"> </span>Phép đối xứng được dùng để lấy thông tin về 2 đối tượng d1 và d2 và biết được d1 thuộc dạng TiepThiVien, và d2 thuộc dạng NhanCong.</div><div>•<span class="Apple-tab-span" style="white-space:pre"> </span>Tìm thuộc hàm M() có dấu ký (string, NhanCong, int, object).</div><div>•<span class="Apple-tab-span" style="white-space:pre"> </span>Nếu tìm thấy thuộc hàm, M() sẽ được kích hoạt. Nếu không, lỗi sẽ được ném về hàm DoiTươngNangDongNET().</div><div><br /></div><div><b>Lý giải cho những tham số thuộc dạng dynamic (năng động)</b></div><div><br /></div><div>Ngay cả trường hợp đối tượng nhận được hàm gọi là một đối tượng thuộc dạng lớp đã được định nghĩa, thông tin về hàm được gọi vẫn được lý giải khi vận hành. Điều này xảy ra nếu hàm được gọi có một hay nhiều tham số thuộc dạng dynamic:</div><div><br /></div><div>Code:</div><div><i>public void DoiTuongNangDongNET() { </i></div><div><span class="Apple-tab-span" style="white-space:pre"><i> </i></span><i>TiepThiVien d1 = new TiepThiVien(“TT001”); </i></div><div><span class="Apple-tab-span" style="white-space:pre"><i> </i></span><i>dynamic d2 = new NhanCong(“NC001”); s</i></div><div><span class="Apple-tab-span" style="white-space:pre"><i> </i></span><i>tring s; </i></div><div><span class="Apple-tab-span" style="white-space:pre"><i> </i></span><i>d1.M(s, d2, 3, null); </i></div><div><i>}</i></div><div><i><br /></i></div><div>Trong hàm mẫu trên, tuy d1 là một đối tượng lớp thuộc dạng TiepThiVien, nhưng thuộc hàm M() của nó có một tham số được định với dạng dynamic. Do đó, kết quả vẫn là một dạng năng động, và sẽ được biên lập để được xử lý bởi bộ vận hành DLR theo mô hình năng động.</div><div>Những giới hạn của việc dùng đối tượng năng động</div><div>Bộ vận hành DLR có những giới hạn dưới đây:</div><div><br /></div><div>•<span class="Apple-tab-span" style="white-space:pre"> </span>Đối tượng năng động có thể được khởi tạo cho một dạng lớp, nhưng C# 4.0 vẫn chưa có những cú pháp hổ trợ cho việc này.</div><div>•<span class="Apple-tab-span" style="white-space:pre"> </span>Bộ vận hành DLR không có khả năng tìm thấy những hàm nới rộng. Do đó, chương trình sẽ gặp lỗi vận hành nếu gọi hàm nới rộng trên một tầng đối tượng năng động.</div><div>•<span class="Apple-tab-span" style="white-space:pre"> </span>Hàm vô danh không thể dùng như một tham số khi gọi một hàm trên tầng đối tượng năng động.</div><div><br /></div><div><b>Tham số tên và tham số tuỳ chọn</b></div><div><br /></div><div>Tham số tên và tham số tuỳ chọn là 2 chức năng khác nhau, nhưng thường được dùng với nhau. Tham số tùy chọn cho các bạn sự lựa chọn dùng hoặc không dùng tham số đó khi gọi một hàm có tham số tùy chọn, trong khi tham số tên là phương pháp để đưa một tham số qua một hàm bằng cách dùng tên của tham số thay vì dùng vị thế của tham số đó theo thứ tự từ trái qua phải.</div><div><br /></div><div>Có nhiều API, đặc biệt là những linh kiện COM như Microsoft Office API, đã được viết để cung cấp những hàm dùng tham số tên và tham số tùy chọn. Hiện tại (khi chưa có phiên bản C# 4.0), một lập trình C# gặp phải rất nhiều khó khăn khi muốn gọi những hàm có tham số tên và tham số tuỳ chọn. Đôi khi, phải gọi một hàm có hơn 30 tham số, và phải đưa qua hơn 30 tham số đó, thay vì chỉ đưa qua những tham số tuỳ chọn bằng cách dùng tên của tham số.</div><div><br /></div><div>Và ngay cả những hàm được định nghĩa trong những lớp đối tượng mà các bạn đã tạo lên, muốn gọi những hàm đó, phải đưa qua đầy đủ những tham số thích hợp đã được định nghĩa.</div><div><br /></div><div><b>Tham số tuỳ chọn (optional parameters)</b></div><div><br /></div><div>Muốn định nghĩa một hàm có những tham số tuỳ chọn, các bạn cần phải cho những tham số đó một giá trị mặc định, như sau:</div><div><br /></div><div><i>public void HamThamSoTuyChon(int I1, int I2 = 0, bool b1 = true){}</i></div><div><br /></div><div>Trong hàm mẫu trên, hai tham số I2 và B1 là những tham số tuỳ chọn, và không bắt buộc phải dùng khi gọi hàm HamThamSoTuyChon():</div><div><br /></div><div>Code:</div><div><i>HamThamSoTuyChon(5); // Gọi với 1 tham số HamThamSoTuyChon(5,10); <span class="Apple-tab-span" style="white-space:pre"> </span> // Gọi với 2 tham số </i></div><div><i>HamThamSoTuyChon(5,10, false); // Gọi với tất cả tham số</i></div><div><i><br /></i></div><div><b>Tham số tên (dùng với tham số tùy chọn)</b></div><div><br /></div><div>C# 4.0 không hổ trợ cú pháp không dùng tham số tùy chọn có vị thế ở chính giữa bằng cách dùng những dấu phảy như sau:</div><div><br /></div><div>Code:</div><div><i>HamThamSoTuyChon(5,, false); // Gọi với 2 tham số 1 và 3 (không được hổ trợ)</i></div><div><br /></div><div>Cú pháp như trên, nếu được hổ trợ, sẽ đưa đến hậu quả nhầm lẫn và khó đọc nếu có hàng chục dấu phảy khi gọi một hàm. Các bạn sẽ khó nhận ra tham số nào đã được dùng, và tham số nào đã không được dùng. Với tham số tên, các bạn có thể chỉ định tham số tuỳ chọn khi gọi một hàm có nhiều tham số tùy chọn, như sau:</div><div>Code:</div><div><i>HamThamSoTuyChon(5,B1: false); // Gọi với 2 tham số 1 và 3</i></div><div><i>HamThamSoTuyChon(5,B1:false,I2:10 ); // Gọi với 3 tham số, nhưng không theo thứ tự</i></div><div><br /></div><div>Với cú pháp được hổ trợ trên, khi gọi một hàm có nhiều tham số tùy chọn, các bạn có thể chỉ định tham số được dùng bằng cách dùng tên của tham số đó. Không cần phải lý giải thêm, chắc chắn các bạn đã thấy sự dễ dàng cho người viết, và sự dễ hiểu cho người đọc cho những cú pháp này.</div><div><br /></div><div><b>Lý giải vận hành trên những hàm nạp chồng</b></div><div><br /></div><div>Tham số tên và tham số tùy chọn, khi được dùng để gọi những hàm nạp chồng, dĩ nhiên, ảnh hưởng đến bộ vận hành .NET, nhưng thật ra rất giản dị khi bộ vận hành phải lý giải một hàm được gọi.</div><div><br /></div><div>Dấu ký sẽ được dùng nếu tất cả những tham số đã dùng đều là những tham số tuỳ chọn, hoặc tất cả đều có tên, hoặc tất cả đều nằm theo vị thế đã được định nghĩa.</div><div><br /></div><div>Luật “chính-xác-hơn” (betterness) sẽ được dùng cho những tham số được chỉ định (và bác bỏ những tham số tuỳ chọn).</div><div><br /></div><div>Nếu 2 dấu ký bằng nhau, dấu ký nào có tất cả tham số sẽ được chọn. Thí dụ như, nếu các bạn đã có 4 hàm nạp chồng M(...) được định nghĩa như sau:</div><div>Code:</div><div><i>M(string s, int i = 1) {</i></div><div><i><br /></i></div><div><i>} </i></div><div><i><br /></i></div><div><i>M(object o) {</i></div><div><i><br /></i></div><div><i>} </i></div><div><i><br /></i></div><div><i>M(int i, string s = “Chào”) {</i></div><div><i><br /></i></div><div><i>} </i></div><div><i><br /></i></div><div><i>M(int i) {</i></div><div><i><br /></i></div><div><i>}</i></div><div><br /></div><div>Và mã nguồn mẫu dưới đây gọi hàm M()</div><div>M(5);</div><div><br /></div><div>Trong đoạn mã mẫu trên, các bạn có thể nhận ra, M(string 2, int i=1) không được dùng, vì 5 là một hằng số không thể nào chuyển hóa (suy định) qua dạng string. M(int I, string s = “Chào”) có thể được dùng vì tham số thứ 2 là một tham số tùy chọn. M(int i) cũng có thể được dùng.</div><div><br /></div><div>Nhưng sau cùng, M(int I) sẽ được dùng để gọi, vì không có tham số tùy chọn.</div><div><br /></div><div><b>Chức năng cho COM interop</b></div><div><br /></div><div>Đây có lẽ là một chức năng sẽ được rất nhiều người ưa thích. Hãy nghĩ đến việc các bạn có thể dùng những gì sẵn có trong Exel để hiển thị những dữ liệu trong CSDL của bạn như một bảng Exel thường dùng ở các văn phòng, và có thể hiển thị những đồ họa (graphs) đẹp mắt được người xử dụng ưa chuộng.</div><div><br /></div><div><b>Nhập khẩu năng động (dynamic import)</b></div><div><b><br /></b></div><div>Các bạn có thể dùng từ khóa using để nhập khẩu một linh kiện COM (được hổ trợ), và sau đó khởi tạo một đối tượng Exel để dùng trực tiếp (thay vì những cách dùng kiểu ép dạng cũ):</div><div><br /></div><div>Code:</div><div><i>excel.Cells[1, 1].Value = "Chào" // Thay vì ((Excel.Range)excel.Cells[1, 1]).Value2 = "Chào";</i></div><div><i>Excel.Range range = excel.Cells[1, 1]; </i></div><div><i>// Thay vì Excel.Range range =(Excel.Range)excel.Cells[1, 1];</i></div><div><br /></div><div><b><br /></b></div><div><b>Vận hành không cần tới PIA (Program Interop Assemblies)</b></div><div><br /></div><div>PIA là những linh kiện .NET có kích thước lớn được tạo dựng từ những linh kiện COM để có thể khởi tạo những dạng vững mạnh (được định nghĩa trong linh kiện COM) khi dùng với một lập trình C#. PIA cung cấp những hổ trợ tốt đẹp khi các bạn thiết kế một phần mềm. Đổi lại, trong lúc vận hành, những linh kiện có kích thước lớn này, khi được đưa vào bộ nhớ, có những tác dụng không tốt đến phần mềm của các bạn. Không những thế, lại là nguyên nhân có thể làm cho phần mềm của các bạn không thể vận hành vì lý do không có phiên bản COM thích hợp.</div><div><br /></div><div>Chức năng no-PIA (không cần tói PIA) cho phép phần mềm của các bạn tiếp tục dùng PIA trong lúc thiết kế, nhưng không cần tới PIA khi vận hành. Thay vì đó, biên trình csc.exe đưa thẳng những phần đã được dùng từ PIA vào phần mềm của các bạn.</div><div><br /></div><div><b>Loại bỏ tham số dạng tham chiếu (ref)</b></div><div><br /></div><div>Nhiều linh kiện COM có những hàm nhận những tham số có dạng ref (tham chiếu). Không giống như tham số dạng tham chiếu của C#, dạng tham số tham chiếu của COM vẫn là những tham số có giá trị thực.</div><div>Do đó, C# 4.0 sẽ loại bỏ tất cả những dạng tham chiếu khi gọi một hàm của COM bằng cách tạo những biến từ tạm thời để lưu giữ giá trị của những tham số, và dùng những biến từ đó khi vận hành.</div><div><br /></div><div><b>Hổ trợ dạng khả biến (variance)</b></div><div><br /></div><div>Trong chương III - 10, các bạn đã được hướng dẫn về những dạng tập hợp chung mẫu (System.Collections.Generic). Các bạn có thể sẽ ngạc nhiên, khi biết, hàng mã nguồn thứ 2 dưới đây là một hàng mã nguồn có lỗi biên lập:</div><div><br /></div><div>Code:</div><div><i>IList mangChuoi= new List(); IList mangDoiTuong = mangChuoi; // Lỗi biên lập IEnumerable mangDoiTuong2 = mangChuoi; // Lỗi biên lập</i></div><div><br /></div><div>Hàng mã nguồn trên bị lỗi, vì biến từ mangChuoi đã không được định nghĩa đồng dạng với mảngDoiTuong. C# không hổ trợ sự chuyển dạng trên, vì có lý do rất chính đáng, vì hai biến từ mảng trên có thể được thao tác nhầm lẫn như sau:</div><div><br /></div><div>Code:</div><div><i>mangDoiTuong[0] = 5.15d; string strTest = mangChuoi[0];</i></div><div><br /></div><div>Một đối tượng dạng Object có thể lưu giữ một giá trị dạng double, nhưng một chuỗi ký tự thì không thể. Mặc dù một đối tượng dạng Object có thể lưu giữ một giá trị dạng chuỗi ký tự, nhưng khi có những gán ghép giá trị giống như những đoạn mẫu trên, chương trình sẽ bị lỗi vận hành.</div><div><br /></div><div>Tuy nhiên, nếu những mảng tập hợp trên được dùng với dạng khả biến (variance), mã nguồn sẽ không bị lỗi biên lập.</div><div><br /></div><div><b>Dạng đồng biến (covariance)</b></div><div><br /></div><div>Với C# 4.0, giao ước IEnumerable sẽ được định nghĩa với cú pháp và ngữ nghĩa như sau:</div><div><br /></div><div>Code:</div><div><i>public interface IEnumerable : IEnumerable { </i></div><div><i> IEnumerator GetEnumerator(); </i></div><div><i>} </i></div><div><i><br /></i></div><div><i>public interface IEnumerator : IEnumerator { </i></div><div><span class="Apple-tab-span" style="white-space:pre"><i> </i></span><i>bool MoveNext();</i></div><div><i> T Current { get; }</i></div><div><i> }</i></div><div><br /></div><div>Chỉnh từ out trong những định nghĩa trên chỉ định tham số dạng T chỉ có thể xảy ra trong điểm ra của giao ước, nếu không, sẽ nhận được lỗi biên lập. Đổi lại cho sự giới hạn này, giao ước IEnumerable trở thành một giao ước có tham số dạng đồng biến ở điểm giữ chỗ , có nghĩa là IEnumerable có thể coi là IEnumerable nếu X có định nghĩa dùng để chuyển hóa dạng.</div><div><br /></div><div>Chức năng này rất hữu dụng cho nhiều hàm của LINQ, sẽ được hướng dẫn trong chương kế tiếp.</div><div><br /></div><div><b>Dạng nghịch biến (contra-variance)</b></div><div><br /></div><div>Một giao ước tập hợp chung mẫu cũng có thể có tham số dạng thuộc dạng nghịch biến. Tham số dạng thuộc dạng nghịch biến được định nghĩa với chỉnh từ in, như sau:</div><div><br /></div><div>Code:</div><div><i>public interface IComparer { public int Compare(T trái, T phải); }</i></div><div><br /></div><div>Giao ước chung mẫu, hoặc uỷ nhiệm chung mẫu, còn có thể có những tham số dạng thuộc dạng đồng biến và nghịch biến, như sau:</div><div><br /></div><div>Code:</div><div><i>public delegate TResult Func(TArg arg);</i></div><div><br /></div><div><b>Giới hạn</b></div><div><br /></div><div>Tham số dạng khả biến chỉ có thể định nghĩa cho giao ước và uỷ nhiệm, và dạng khả biến chỉ có thể áp dụng cho những lớp đối tượng tham chiếu có hổ trợ chuyển hóa dạng. Chẳng hạn như chuyển hóa dạng giữa NhanVien và NhanCong, hoặc NhanCong qua Object. Từ int, hoặc double qua object chỉ là đóng gói, không phải là chuyển dạng, vì int và double không phải là những dạng tham chiếu, mà là những dạng có giá trị thực.</div><div><br /></div><div><b>Mã nguồn mẫu</b></div><div><br /></div><div>Dưới đây là nguyên văn bản mã nguồn mẫu, với Exel và Word được dùng để khởi tạo 2 đối tượng năng động. Sau đó, là những thao tác xử lý trên 2 đối tượng. Không có gì đặc biệt để phải lý giải, ngoài mục đích trình bày những chức năng mới của C# 4.0(dễ đọc, dễ hiểu hơn những cú pháp dùng COM trong những phiên bản trước).</div><div><br /></div><div>Code:</div><div><i>using System; using System.Diagnostics;</i></div><div><i>using System.Linq; </i></div><div><i>using Excel = Microsoft.Office.Interop.Excel; </i></div><div><i>using Word = Microsoft.Office.Interop.Word; </i></div><div><i><br /></i></div><div><i>class Program { </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>static void Main(string[] args) { </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>var excel = new Excel.Application(); </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>excel.Visible = true; </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>excel.Workbooks.Add(); // tham số tùy chọn không được đưa qua </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>excel.Cells[1, 1].Value = "Process Name"; // không cần ép dạng, vì Value là variance </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span> excel.Cells[1, 2].Value = "Memory Usage"; // </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>var processes = Process.GetProcesses() .OrderByDescending(p => p.WorkingSet) .Take(10); </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>int i = 2;</i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span> foreach (var p in processes) { </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>excel.Cells[i, 1].Value = p.ProcessName; // không cần ép dạng </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>excel.Cells[i, 2].Value = p.WorkingSet; // không cần ép dạng </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>i++; </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>} </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span></i></div><div><i><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"> </span>Excel.Range range = excel.Cells[1, 1]; // không cần ép dạng </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>Excel.Chart chart = excel.ActiveWorkbook.Charts. Add(After: excel.ActiveSheet); </i><i>// dùng tham số tên và tham số tuỳ chọn </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>chart.ChartWizard(Source: range.CurrentRegion, Title: "Memory Usage in " + Environment.MachineName); //tham số tên (Title) và tùy chọn </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>chart.ChartStyle = 45; </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>chart.CopyPicture(Excel.XlPictureAppearance.xlScreen, Excel.XlCopyPictureFormat.xlBitmap, Excel.XlPictureAppearance.xlScreen); </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>var word = new Word.Application(); </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>word.Visible = true; </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>word.Documents.Add(); </i></div><div><i><span class="Apple-tab-span" style="white-space:pre"> </span>word.Selection.Paste(); </i></div><div><i>} </i></div><div><br /></div>Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com1tag:blogger.com,1999:blog-7097348045257270421.post-40882526852552235342010-06-06T00:46:00.005+07:002011-03-31T13:41:38.589+07:00Những tích lũy thú vị về .NET<span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><h2 style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 22px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span class="Apple-style-span" style="font-weight: normal; font-size: 12px; ">Lang thang lướt web tìm đc bài viết khá hay bên trang ApTech đem về post lại ở đây, Trong này có nhiều điều đã biết rồi nhưng tôn trọng tác giả mình vẫn giữ nguyên theo bản gốc.</span></h2><h2 style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 22px; margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span class="Apple-style-span" style="font-weight: normal; font-size: 12px; ">Bài viết này trình bày một số kiến thức về .NET mà các lập trình viên cần nắm được để phục vụ cho công việc của mình được tốt hơn.</span></h2> 1. Sự khác nhau giữa các lớp Trace và Debug? - Trace dùng để theo dõi các hành động xảy ra. Nó hoạt động trong các đóng gói cả Debug lẫn Release. Trace là khả năng của chương trình tự đưa ra các thông tin về hành động của mình. - Debug dùng để tìm và sửa các lỗi trong chương trình. Nó chỉ hoạt động trong đóng gói Debug.</span><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >2. Sự khác nhau giữa static readonly và const? - Static readonly là hằng số được khởi tạo khi thực thi chương trình. - Const là hằng số được khởi tạo khi biên dịch chương trình. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " > 3. Sự khác nhau giữa String và StringBuilder? - String là lớp không thay đổi. Mọi phương thức sẽ tạo ra một biến String mới. - StringBuilder là lớp thay đổi. Các phương thức của biến sẽ ảnh hưởng đến đến biến StringBuilder hiện tại. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >4. Sự khác nhau giữa “” và String.Empty? - “” sẽ tạo thêm 1 đối tượng khi làm việc với nó (so sánh, copy…) - String.Empty không tạo đối tượng nào cả. String.Emtpy nằm trong mscorlib. Khi kiểm tra 1 String có rỗng hay không nên dùng String.Length == 0 để có tốc độ nhanh nhất. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " > 5. Có thể gán một struct bằng null hay không? - Có thể nếu bạn lập trình với C# 2.0. Ví dụ: int? var = 1; var = null; 6. Sự khác nhau giữa == và phương thức Equals? - == so sánh theo kiểu giá trị. - Equals so sánh theo kiểu tham chiếu. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >7. Sự khác nhau giữa throw và throw ex? - throw đế đưa lại toàn bộ các tầng theo dõi của lỗi ra. - throw ex bỏ bớt các tầng theo dõi bên dưới phương thức gọi throw ex. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " > 8. Connection Pooling dùng để làm gì? - Cho phép tăng tốc độ của các ứng dụng Web bằng cách dùng lại các kết nối thay vì tạo các kết nối mới với mỗi yêu cầu. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " > 9. .NET có hỗ trợ thừa kế từ nhiều lớp hay không (multiple inheritance)? Tại sao? - Không. Vì sẽ không hiểu được khi gọi 1 phương thức mà 2 lớp cha cùng override nó. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " > 10. Sự khác nhau giữa abstract class và interface? - Có thể thừa kế từ nhiều interface nhưng chỉ có thể thừa kế từ 1 abstract class. - Có thể viết sẵn các thực thi trong Abstract class, nhưng interface thì không. - Interface dùng để gom các hành động cần được hiện thực , các khả năng của một đối tượng (ví dụ con người và xe cộ cùng có khả năng đi lại, nhưng con người không cùng tính chất với xe cộ), còn abstract class cho các lớp thừa kế cùng 1 loại, tính chất hay trạng thái (ví dụ đàn ông, phụ nữ, trẻ con, người già đều là con người). - Abstract class có tốc độ thực thi nhanh hơn interface. - Thêm 1 tính năng mới vào interface sẽ phá vỡ toàn bộ các lớp hiện thực, còn abstract thì không. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >11. Hàm GetHasCode() trong System.Object dùng để làm gì? - Trả về giá trị của một đối tượng. Chú ý hàm này mặc định không trả về giá trị duy nhất hoặc không đổi. Hàm này có thể override. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >12. Sự khác nhau giữa DataSet và DataReader? - DataSet có thể đọc và ghi trong khi DataReader chỉ có thể đọc. - DataSet có thể chứa nhiều bảng còn DataReader chỉ có thể chứa 1 bảng. - DataSet làm việc ở chế độ không kết nối còn DataReader làm việc ở chế độ kết nối. - DataSet có thể di chuyển tới và trở lại còn DataReader thì chỉ có thể di chuyển tới. - DataSet truy cập chậm hơn DataReader. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >13. Sự khác nhau giữa các phuơng thức Copy và Clone? - Clone chỉ copy cấu trúc trong khi Copy copy cả cấu trúc lẫn dữ liệu. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >14. Sự khác nhau giữa Dispose, Destructor và Finalize? - Destructor sẽ được chuyển thành Finalize khi biên dịch. Hàm Finalize được gọi bởi .NET Runtime và chúng ta không thể đoàn được nó được gọi khi nào, nhưng nó chắc chắn sẽ được gọi. - Dispose sẽ giải phóng bộ nhớ ngay khi nó được gọi. Lưu ý nếu lớp nào override Dispose mà quên gọi thì các đối tượng sẽ không tự giải phóng bộ nhớ. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >15. Serialization là gì? - Là sự chuyển chuyển đối tượng thành 1 luồng các bytes. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >16. Sự khác nhau giữa XmlSerializer, BinaryFormatter và SoapFormatter? - XmlSerializer dùng cho dịch vụ Web. - BinaryFormatter/SoapFormatter dùng cho Remoting. - SoapFormatter dùng để tuần tự hóa 1 đối tượng thành SOAP. - BinaryFormatter dùng để tuần tự hóa 1 đối tượng thành dạng nhị phân. - XmlSerializer chỉ chuyển đổi các tính chất public còn BinaryFormatter/SoapFormatter chuyển đổi cả public lẫn private. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >17. Sự khác nhau giữa overriding và shadowing? - Overriding cung cấp sự hiện thực mới của 1 hàm ở lớp thừa kế nhưng không thay đổi số biến, kiểu trả về, mức truy cập còn shadowing thì có thể thay đổi (từ khóa new trong C#). </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >18. Sự khác nhau giữa class, object, struct và interface? - Class là cấu trúc dữ liệu định nghĩa bởi người dùng chứa các tính chất và phương thức. Object là một trường hợp cụ thể của class. Class không chiếm bộ nhớ, còn Object được tạo trong bộ nhớ. - Class là cấu trúc dữ liệu định nghĩa bởi người dùng chứa các tính chất và phương thức. Struct là kiểu giá trị được lưu trữ trong stack còn class là kiểu tham chiếu (các object) được lưu trữ trong heap. - Khi struct được khởi tạo không bằng hàm khởi tạo người dùng sẽ phải khởi tạo tất cả các Fields trước khi sử dụng nó. - Interface là một hợp đồng gồm một nhóm các phương thức cần được hiện thực. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >19. Sự khác nhau giữa Property và Field? - Property dùng để quản lý sự truy cập đến Field. Dùng Property để đảm bảo Field không bị gán các giá trị không hợp lệ. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >(linhdkl: còn nhớ vấn đề này có đồng chí bên congdongcviet có tranh luận với mình đồng chí ấy cho rằng 2 khái niệm là là một, nhưng thực chất đây là 2 vấn đề khác nhau giống như kiểu người thật và bí danh vậy ... )</span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >20. Sự khác nhau giữa static Method, static constructor với method và constructor thông thường? - Static method có thể gọi mà không cần khởi tạo biến. Static constructor chỉ được gọi đúng một lần khi object đầu tiên được khởi tạo. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >21. Các biến tĩnh và chỉ dẫn chương trình được lưu ở đâu? - Ở 1 vùng bộ nhớ đặc biệt gọi là Permanent Storage area. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >22. Sự khác nhau giữa stack và heap? - Stack và heap là các vùng bộ nhớ. Heap nằm giữa stack và Permanent Storage area, và độ lớn có thể thay đổi khi thực thi chương trình. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >23. Sự khác nhau giữa Boxing and Un-Boxing? - Boxing là chuyển đổi kiểu giá trị thành kiểu tham chiếu. Un-Boxing ngược lại. 24. Mục đích của thừa kế (inheritance)? - Để tái sử dụng. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >25. Mục đích của đa hình (poymophism)? - Một hành động có thể xảy ra theo nhiều cách khác nhau. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >26. Sự khác nhau giữa Compile Time Polymorphism và Run Time Polymorphism? - Compile Time Polymorphism - ví dụ Overloading, một hàm có thể có nhiều cách biểu diễn. - Run Time Polymorphism - ví dụ Overriding, một hàm có thể có nhiều cách xử lý. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >27. Sự khác nhau giữa delegate và event? - delegate là một lớp (class) đại diện cho hàm con trỏ kiểu an toàn hoặc hàm gọi (call backs) chỉ đến địa chỉ tham chiếu của một (hay nhiều) hàm. Con trỏ hàm chứa trong delegate được gắn vào một đối tượng đích (target) và khi delegate được kích hoạt phương thức sẽ được gọi ở đối tượng đích. Sự hữu ích của delegate không nằm ở chỗ giữ địa chỉ tham chiếu của các hàm mà để định nghĩa và dùng các tên hàm khi runtime thay vì compile time. - event cho phép xác định một delegate sẽ được gọi khi có sự xuất hiện của “sự kiện” nào đó. event là một modifier trong khi delegate là một lớp. event cho phép một delegate được khai báo trong interface. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >28. Mất đâu mất mục 28 rồi ta. ??? </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >29. AppDomain là gì? - Là một miền riêng biệt lưu trữ code và dữ liệu cho một application. Một process có thể chứa nhiều AppDomains. Khi bạn copy một DLL mới vào bin, ASP.NET runtime sẽ không thể đưa nó vào một AppDomain đang chạy.Nó sẽ dừng từ từ AppDomain cũ (dừng hẳn khi nó dừng tất cả các requests) và mở một AppDomain mới. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >30. Sự khác nhau giữa publish và published interfaces. - publish interface là interface mà bạn có thể sửa tất cả những code nào dùng nó còn published interface là interface mà bạn không thể sửa code dùng nó. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >31. Sự khác nhau giữa try{}catch{} và try{}catch{Exception ex}? - Chúng giống hệt nhau. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >32. Sự khác nhau giữa 1/0; và try{1/0;} catch {throw;} - Chúng giống hệt nhau. Vì vậy nếu không xử lý catch thì đừng catch.</span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " > 33. Sự khác nhau giữa Remoting và Web service? - Web service không có trạng thái, không cần biết đến client chỉ sử dụng trên HTTP, hỗ trợ không đồng nhất các môi trường, tốc độ chậm hơn Remoting. - Remoting có trạng thái kết nối, hỗ trợ nhiều giao thức hơn HTTP, TCP…, đòi hỏi môi trường đồng nhất, tốc độ nhanh đặc biệt khi dùng trên TCP. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >34. Sự khác nhau giữa error và exception? - Error là lỗi của chương trình còn exception là lỗi chương trình được phát hiện và có thể xử lý. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >35. Sự khác nhau giữa Procedure và OO? - Procedure gồm các hàm và các biến, tất cả các hàm đều có thể truy cập đến tất cả các biến. Không thể quản lý các biến. - OO gom hàm và biến vào các đơn vị object. Các hàm và biến được quản lý trong nội bộ object. Các object tương tác với nhau thông qua các interfaces. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >36. CLR, CTS, CLS, MSIL, JIT, PE, GAC là viết tắt của những gì? - Là Common Language Runtime: môi trường để chạy các ứng dụng .NET - Là Common Type System: mô tả các loại dữ liệu trong .NET. - Là Common Language Specification: mô tả các quy định và chuẩn cho các ngôn ngữ trong .NET - Là Microsoft Intermediate Language: ngôn ngữ thông dịch của .NET. - Là Just In Time: trình biên dịch MSIL thành mã máy. - Là Portable Executable: file chứa MSIL. - Là Global Assembly Cache: nơi lưu trữ các Asembly dùng chung. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >37. Các mâu thuẫn giữa OO và RDBMS? - Cấu trúc cấp bậc trong OO có thể là vô tận trong khi ở RDBMS chỉ có 4 loại table, row, column, cell. - Các đối tượng trong OO bản thân là phân biệt trong khi trong RDBMS cần phải có primary-key. - Các đối tượng trong OO có thể tham chiếu đến nhau rất đơn giản nhưng trong RDBMS thì phức tạp thông qua JOIN - Sự thừa kế trong OO là đơn giản trong khi trong RDBMS hầu như không có khái niệm đó. Một bảng cần chứa tất cả các tính chất, có khi là thừa. - Các đối tượng trong OO có thể có các hành động tác động đến tối tương khác.trong RDBMS thì phức tạp thông qua TRIGGER - Khả năng truy cập trong OO là hạn chế trong khi ở RDBMS là không giới hạn. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >38. Sự khác nhau giữa Response.Redirect và Server.Transfer. - Response.Redirect đơn thuần là chuyển bạn đến một trang mới giống như bạn gõ địa chỉ trang đó trên browser và request đến server. - Server.Transfer cũng chuyển bạn đến trang mới nhưng ở phía server, làm giảm request đến server, giữa nguyên URL của bạn và có thể chuyển cả các query string và biến trên form đên địa chỉ mới, chỉ thực hiện giữa các trang trên cùng 1 host. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >39. Vai trò của ASPX page và ASPX page code-behind trong MVC. - ASPX page là View còn ASPX page code-behind là Controller. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " > 40. Làm thế nào để try/catch trên toàn bộ 1 ASPX page. - Dùng Page_Error event. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >41. Sự khác nhau giữa Cohesion và Coupling - Cohesion là sự liên kết giữa các thành phần trong một module. Một thiết kế tốt nên có sự liên kết giữa các thành phần thật chặt chẽ. - Coupling là sự kết nối giữa các module với nhau. Một thiết kế tốt nên có sự kết nối thật lỏng lẽo giữa các module. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >42. Refractoring là gì? - Là sự thiết kế lại cấu trúc của code bằng cách thay đổi cấu trúc bên trong mà không ảnh hưởng đến các hành vi bên ngoài (interface) của đoạn code (module, system) đó. </span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " ><br /></span></div><div><span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, sans-serif; font-size: 12px; line-height: 18px; " >43. Phân biệt HttpApplication, Session, ViewSate và HttpContext? - Cả 4 thành phần trên đều dùng để lưu dữ liệu của một Web Application. - HttpApplication có tác dụng trong toàn bộ quá trình thực thi của Web Application. - Session có tác dụng trong 1 lần ghé thăm (visit) của người dùng. Nó kết thúc khi gặp timeout. - ViewState có tác dụng trong trong 1 trang web. - HttpContext có tác dụng trong 1 request.</span><div><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 12px; line-height: 18px;" ><br /></span></span></div><div style="text-align: right;"><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: 12px; line-height: 18px;" > _____ST_____</span></span></div></div>Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com0tag:blogger.com,1999:blog-7097348045257270421.post-70351511696722516552010-03-16T08:54:00.004+07:002010-03-16T09:06:27.808+07:00Sử lý đệ quy trong SQL Server<div>Hôm nay làm môt tut về đệ qui trong SQL server. Trong lập trình thông thường bạn sẽ phải sử lý nhiều tình huống đề quy, nhưng ít khi nó thể hiện rõ tính chất đệ quy bởi nó chỉ là vòng lặp dạng for hoặc while. Và thực ra việc thiết kế giải thuật người ta cũng cố gắng đề giải đệ quy hoặc khử đệ quy để bảo đảm cấu trúc bộ nhớ của trương trình cũng như là cho code dễ hiểu. </div><div>Nhưng không phải lúc nào như lý thuyết cũng là đúng, trong một số tình huống cụ thể cách đệ quy chở nên hiệu quả ngắn ngọn và tối ưu hơn cách viết thông thường. Vậy bài viết này hướng dẫn bạn đệ quy trong DB. </div><div><br /></div><div>Đệ quy để làm gì ? Với một business phức tạp và sử lý trên một cấu trúc cây đa cấp bạn sẽ mắc phải vấn đề rác rối về hiệu xuất của hệ thống khi quyết định sử lý tất cả trên tầng business. Chính vị vậy bạn cần sử lý một số các nghiệp vụ cụ thể trong DB nhằm tăng tốc cho hệ thống của mình. Đây chính là mảnh đất mà chúng ta khai thác...</div><div><br /></div><div>Giả sử bạn có một cây đa cấp chông nó như thế này.</div><div><br /></div><div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVrVxa9tbF02-3vxPE6ITIsZlEU-Xcel3JdqcO6d_4Z1dhfNk768wu983_ppuGpm1ozKEIFXhtuAo2V4W5h2_sxe9XyrQHeg0nTEI6w7Z-_HcEE6MIsKWX_fnCtGvj0En6sd9aKFskh0yv/s1600-h/1.png"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVrVxa9tbF02-3vxPE6ITIsZlEU-Xcel3JdqcO6d_4Z1dhfNk768wu983_ppuGpm1ozKEIFXhtuAo2V4W5h2_sxe9XyrQHeg0nTEI6w7Z-_HcEE6MIsKWX_fnCtGvj0En6sd9aKFskh0yv/s320/1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5449044745450775042" style="cursor: pointer; width: 177px; height: 320px; " /></a></div><div><br /></div><div>Khi đó trong DB bạn sẽ có một cấu trúc như thế này cho cái cây đó</div><div><br /></div><div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMtUKIinLoFEePSk8sDRoRC0cgDbTVmuHtgj0ycH4kYt0F6vOns1qxykw7FWHGuWEY-zYp3z39vnoOU1YtP9q1aq0oYCiFa7iQCGCQ7GKE1LA9VxvbLRtaxyqUxJhcJ2dHmQXIfvSCjTHW/s1600-h/2.png"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMtUKIinLoFEePSk8sDRoRC0cgDbTVmuHtgj0ycH4kYt0F6vOns1qxykw7FWHGuWEY-zYp3z39vnoOU1YtP9q1aq0oYCiFa7iQCGCQ7GKE1LA9VxvbLRtaxyqUxJhcJ2dHmQXIfvSCjTHW/s320/2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5449044963021976834" style="cursor: pointer; width: 313px; height: 320px; " /></a></div><div>và việc sử lý trên cây sẽ vô cùng rác rối với mỗi một node bạn phải kiểm tra xem nó là có con không ? cha nó là ai ? anh chị em nó là gì ? ....</div><div>ở đây tôi chỉ viết một hàm trong DB sql 2005, với mục đích nhận vào một node id và trả về môt bảng các node id con cháu nêu có.</div><div><br /></div><div>code here.</div><div><br /></div><div><div>IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[udfNodeChirent]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))</div><div>DROP FUNCTION [dbo].[udfNodeChirent]</div><div>GO</div><div><br /></div><div>CREATE FUNCTION [dbo].[udfNodeChirent]</div><div>--======================================</div><div>--created by :<span class="Apple-tab-span" style="white-space:pre"> </span>linhdkl</div><div>--created date :<span class="Apple-tab-span" style="white-space:pre"> </span>16/03/2010</div><div>--======================================</div><div><br /></div><div>(<span class="Apple-tab-span" style="white-space:pre"> </span></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>@parentID int</div><div>)</div><div>RETURNS @tbl TABLE (id int,valu int)</div><div>WITH EXECUTE AS CALLER</div><div>AS</div><div>begin</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if @parentID > 0</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>begin</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>declare @tempCount int</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>declare @count int </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>set @count = 0</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>select @count = count(id)from tree where parentNodeid = @parentID</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if(@count > 0)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>begin </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>insert @tbl(id,valu) select ROW_NUMBER() over( order by ID),id </div><div><span class="Apple-tab-span" style="white-space:pre"> </span> from tree </div><div><span class="Apple-tab-span" style="white-space:pre"> </span> where parentNodeid = @parentID</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>declare @row int</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>set @row = 1</div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>while @row <= @count</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>begin</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>select @tempCount = count(id) from @tbl</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>select @parentID = valu from @tbl where id = @row</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>insert @tbl(id,valu) select ROW_NUMBER() over( order by ID) + @tempCount,valu</div><div><span class="Apple-tab-span" style="white-space:pre"> </span> from dbo.udfNodeChirent(@parentID)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>set @row = @row +1</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>end</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>end</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>end</div><div>return</div><div>end</div><div>GO</div><div><br /></div><div><br /></div></div><div>Ok như vậy mình đã có cái func này và đây là kết quả.</div><div><br /></div><div>select * from dbo.udfNodeChirent(47)</div><div>nó sẽ có kết quả là :</div><div><br /></div><div><div>id valu</div><div>----------- -----------</div><div>1 72</div><div>2 99</div><div>3 100</div><div>4 73</div><div>5 74</div><div>6 95</div><div>7 105</div><div>8 106</div><div>9 75</div><div>10 76</div><div>11 102</div><div>12 103</div><div>13 104</div><div>14 107</div><div>15 101</div><div><br /></div><div>(15 row(s) affected)</div><div><br /></div><div>cái id chính là số thứ tự và valu là id của các con, cháu, chắt của thằng node 47.</div><div><br /></div><div>Tuy nhiên cũng xin nói thêm là đây chỉ là cách sử lý dựa trên hệ thống đã có sẵn, tức là việc này chỉ cải thiện tình trạng một cách miễn cưỡng. Nếu một hệ thống đc thiết kế tốt, việc sử lý này sẽ sử dụng một danh sách liên kết và sử lý phi tuyến tính sẽ nhanh hơn rất nhiều. Tuy nhiên giá trị của giải thuật đệ qui vẫn tồn tại trong bất kỳ trường hợp nào.</div><div><br /></div><div>../..</div><div><br /></div><div><br /></div></div>Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com3tag:blogger.com,1999:blog-7097348045257270421.post-77177040749908394922010-03-02T11:20:00.002+07:002010-03-02T11:23:56.376+07:00Cờ toán Việt Nam.<span class="Apple-style-span" style=" color: rgb(51, 51, 51); line-height: 17px; font-family:Arial, Verdana, Helvetica, sans-serif;font-size:12px;"><h3 style="font-family:Arial, Helvetica, sans-serif;"><span><span class="Apple-style-span" style="color:#FFFFFF;">Từ nay người VIỆT NAM chúng ta cũng đã có một môn cờ riêng của người VIỆT bên cạnh cờ tướng của Trung quốc và cờ vua ! Thật tự hào làm sao</span></span></h3><p align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://files.myopera.com/QAPOcVuetr/albums/655426/VN%20Mathematical%20Chess.jpg" border="0" alt="" width="300" height="399" style="padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial; " /></span></p><p><span class="Apple-style-span" style="color:#FFFFFF;"><span id="more-286"></span></span></p><p align="left"><span style="font-size:large;"><strong><span class="Apple-style-span" style="color:#FFFFFF;">“Đứa con” không được thừa nhận</span></strong></span></p><p align="left"><span class="Apple-style-span" style="color:#FFFFFF;">Họ nghi hoặc ông cũng có lý. Bởi vì theo tính toán, tổng số nước đi của cờ toán là lũy thừa của 87. Đó là một con số khổng lồ mà người chơi cờ không bao giờ có thể chơi hết những nước đi khác nhau như vậy. Ủy ban Khoa học nhà nước lúc ấy phải nhờ các chuyên gia của Liên Xô (cũ) tính toán, nhưng họ cũng không tính được kết quả lũy thừa của 87 là bao nhiêu. Do không tính được số nước cờ, người ta không công nhận sản phẩm của ông.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Lòng ông Bẩy nặng trĩu. Ông mang sản phẩm trí tuệ của mình đến một tờ báo dành cho trẻ em, đề nghị báo đăng để học sinh cả nước biết. Báo lên khuôn rồi, chẳng may giáo sư Trần Quốc Vượng (đã quá cố) tình cờ thấy được, liền hỏi biên tập viên là thứ cờ này đã đăng ký bản quyền chưa, nếu chưa thì đừng cho đăng. Bởi ông sợ nếu đăng thì chất xám của ông Bẩy sẽ bị đánh cắp ngay lập tức. Báo lại bóc ra.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Năm 1988, con trai ông Bẩy đi Liên Xô. Ông bảo anh ta mang sang đó dịch ra tiếng Nga để mọi người chơi cho khỏi phí. Nhưng khi đến Cục Xuất cảnh trình bày, anh công an bảo: “Nếu có vấn đề gì thì bác sẽ phạm tội bán tài sản trí tuệ quốc gia”. Ông hoảng quá, lại thôi. Đi bao nhiêu cơ quan, cơ quan nào cũng từ chối mà ông cũng không biết phải đem trình cơ quan nào.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Món cờ của ông đành phải cất vào ngăn tủ, cho đến khi nghe Nhà nước thành lập một cơ quan chịu trách nhiệm về bản quyền, ông Bẩy lại hớn hở đem cờ toán đi trình làng, định là lần cuối, không được thì thôi. Thật bất ngờ, tháng 5-2005, Cục Bản quyền tác giả văn học nghệ thuật (Bộ VH-TT) chính thức công nhận sản phẩm trí tuệ do ông nghĩ ra. Ông Bẩy vui như đào được vàng ròng, hóm hỉnh bảo: “Sau 20 năm, “con” tôi mới được “cấp giấy khai sinh”. Thế là cờ toán đã có bản quyền, không sợ bị ai đánh cắp”.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Ngay sau khi món cờ toán của ông được cấp bản quyền, một tờ báo ở Hà Nội đã đặt vấn đề bán đấu giá sở hữu trí tuệ với giá khởi điểm là 1 triệu USD. Biết tin này, một chuyên gia về cờ ở Trung Quốc đã thuê phiên dịch viên tìm đến tận nhà ông ở Bắc Ninh, đề nghị trả 1 triệu USD để mua lại bản quyền và nói rằng sẵn sàng trả hơn nếu có người khác trả nhiều hơn. Tuy nhiên, ông Bẩy không chấp nhận bởi điều kiện của chuyên gia người Trung Quốc đưa ra là phải thay các dấu chấm tròn trên mặt quân cờ bằng các chữ: nhất, nhị, tam, tứ, ngũ, lục, thất, cửu.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Đồng thời, phải thay tên “cờ toán VN” bằng cờ toán quốc tế. “Tôi không muốn để người ta thay tên gọi vì khi sáng tạo món cờ này, điều thôi thúc tôi là phải sáng tạo ra một thứ cờ của VN, mang nguồn gốc VN. Tôi cũng không bán bởi họ mua nó với ý định thương mại hóa. Nếu họ mua để phổ biến thì tốt, còn ngược lại tôi cũng chẳng cần. Bao năm nay tôi vẫn sống bằng nghề nặn tượng và vẫn đủ sống” – ông Bẩy bộc lộ quan điểm. Ông nói thêm: “Cái mà tôi cần bây giờ là bằng cách nào, phương tiện ra sao để phổ biến cho nhiều người chơi cờ toán một cách hiệu quả, để tôi khỏi tốn tiền photo các bài hướng dẫn”.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Chuyện là, từ khi món cờ toán của ông được công khai thì mỗi ngày có hàng chục, hàng trăm người ở quanh TP Bắc Ninh và khắp các tỉnh trong cả nước gửi thư, gọi điện cho ông xin được gửi bản photo hướng dẫn cách chơi, luật chơi cờ toán. Ông đã tốn cả bạc triệu để gửi các hướng dẫn cho người hâm mộ nhưng vẫn không xuể.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Mới đây, Sở GD-ĐT tỉnh Bắc Ninh có kế hoạch trình Bộ GD-ĐT đưa món cờ toán của ông vào thành môn học cho học sinh ở Bắc Ninh. Trong tháng bảy này, UBND tỉnh Bắc Ninh dự định mở một hội thảo về cờ toán của ông Vũ Bẩy. Các chuyên gia của Ủy ban Thể dục thế thao VN cũng đã gặp ông và hứa sẽ phát triển môn cờ toán ra cả nước.</span></p><p align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://files.myopera.com/QAPOcVuetr/albums/655426/Vu%20Bay.jpg" border="0" alt="" width="300" height="399" style="padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial; " /></span></p><p align="center"><em><span class="Apple-style-span" style="color:#FFFFFF;">Bàn cờ toán do Vũ Bẩy thiết kế, sáng tạo đã được cấp giấy chứng nhận bản quyền tác giả sau 20 năm chờ đợi</span></em></p><p align="left"><span style="font-size:large;"><strong><span class="Apple-style-span" style="color:#FFFFFF;"><br />Ván cờ trị giá 1 triệu đô la</span></strong></span></p><p align="left"><span class="Apple-style-span" style="color:#FFFFFF;">Cha đẻ của môn cờ thuần Việt này không phải một giáo sư, tiến sỹ mà là một người đàn ông chỉ học hết lớp bảy. Đó là ông Vũ Văn Bảy, trú tại phố Vũ Ninh, thành phố Bắc Ninh. Hiện ông đang sống bằng nghề làm tượng. Nhiều người bất ngờ vì nghe nói đã có người đặt vấn đề mua lại bản quyền của môn cờ này với giá một triệu đô la, nhưng ông Bảy nhất quyết không bán vì một lẽ rất đơn giản: nó phải là môn cờ của người Việt Nam!</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Lời đồn đại về bản quyền có giá một triệu đô dẫn chúng tôi đến ngôi nhà của ông Bảy tại thành phố Bắc Ninh. Cái ấn tượng đầu tiên với riêng tôi là tấm biển trưng ở cổng nhà: “</span><strong><span class="Apple-style-span" style="color:#FFFFFF;">3 THẾ HỆ HỌA SỸ- ĐIÊU KHĂC VŨ VĂN BẢY, sáng tác – thi công các công trình nghệ thuật</span></strong><span class="Apple-style-span" style="color:#FFFFFF;">”, la liệt ở ngoài sân là những bức tượng: Phật, lãnh tụ, quan họ, phù điêu… ngôi nhà cũng là xưởng làm việc, và kiêm luôn cửa hàng.</span></p><p align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://files.myopera.com/QAPOcVuetr/albums/655426/Vu%20Bay%202.jpg" alt="" width="450" height="338" style="padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial; " /></span></p><p align="center"><span><em><span class="Apple-style-span" style="color:#FFFFFF;">Nó phải là môn cờ của người Việt Nam !</span></em></span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Ông Bảy ra đón chúng tôi trong bộ quần áo “điêu khắc gia”, lấm lem bùn đất. Cách tiếp khách của ông cũng vô cùng đặc biệt, ông nói oang oang từ trong ra ngoài, chẳng cần biết quen hay sơ, cứ nắm tay thật chặt, rồi mời vào nhà như đã biết nhau từ lâu lắm.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Khi nghe chúng tôi muốn hỏi về chuyện cờ toán và lời đồn bản quyền giá một triệu đô, ông Bảy hào hứng hẳn, ông chém tay vào không khí nói rất to: có chứ, có cái thằng người Trung Quốc nó sang tận đây đặt vấn đề mua bản quyền để nó kinh doanh. Nhưng tôi không bán vì nó bảo phải đổi những con cờ mang số 1,2,3… thành nhất, nhị, tam, tứ… Tôi giải tán luôn. Tôi bảo: “…nếu thế thì mất tính Việt Nam à? Toi công tôi mấy chục năm nay à? Cờ của tôi là cờ thuần Việt, không thể để mất cái chất Việt ấy được…”.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Ông Bảy nói đến đây, nhổm cả người lên ghế, giọng căng thẳng: cái môn cờ này tôi không biết giá trị nó như thế nào, nhưng tôi đã nghiên cứu từ lâu lắm. Hồi xưa, nhìn cái trò Ru-bich gì đó của bọn Tây – cái trò hình vuông xanh xanh đỏ đỏ ấy, nó đơn giản thế mà cuốn hút cả hành tinh. Ai cũng thích chơi nó vì đơn giản nhưng lại phức tạp, tôi thấy người Việt mình thiệt quá! Trò chơi nào cũng phải “vay” người ta. Các ông cứ nhìn bọn trẻ bây giờ thì biết, suốt ngày cắm đầu vào vi tính chơi Games, chán thì quay sang đua xe, chơi bời, thác loạn… Còn những trò chơi dân gian lại không cuốn hút được chúng nó. Mà các ông lên miền núi xem, bọn trẻ ở đó thiệt như thế nào. Suốt ngày chỉ quanh quẩn chân núi, bờ sông, cõng nhau ngẩn ngơ nhìn trời đất… tội lắm! Cứ nghĩ đến cái trò ru bích, ru beo của bọn Tây lại thấy bực. Tôi nhất quyết phải nghĩ ra cái gì để chơi – mà trò chơi ấy phải một trăm phần trăm ma – de – in Việt Nam .</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Ông nói hào hứng, át cả tiếng khách khứa, rồi ông chỉ tay lên tường – nơi cái khung kính lồng bên trong là tấm bằng bản quyền do Cục bản quyền Việt Nam cấp. Ông tự hào nói: “Đây là bản quyền của tôi, đã được nhà nước cấp, yên tâm nhé, không thằng nào đụng vào được… tôi không bán, đố thằng nào dám sản xuất!”. Và ông giải thích: cái môn cờ này của tôi ngoài tính trí tuệ ra nó còn chứa đựng trong đó bao nhiêu triết lý. Tôi nói cho các ông biết, cờ của tôi không có tướng, cờ Tàu, cờ Tây đều có tướng – mất tướng coi như thua. Nhưng tôi lại nghĩ trong đời sống, mất thằng tướng này nó thay ngay thằng tướng khác thua sao được, nếu thua hẳn phải là mất dân… mà dân thì là ai? Trong cờ của tôi dân chính là số 0, nếu bắt được số 0 coi như lấy được lòng dân và chiến thắng…</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Nói đến đây ông Bảy ngả người thoải mái ra ghế cười mãn nguyện. Khi chúng tôi hỏi về giấy tờ hay một vật chứng cụ thể nào về việc người Trung Quốc kia hỏi mua về bản quyền, ông Bảy nói: “Có chứ, chúng nó thảo hợp đồng toàn tiếng Tây, mà tôi có biết tiếng Tây đâu, nhưng chỉ nghe nó đòi đổi tên cờ thì tôi giải tán ngay, không thèm nói chuyện… bán biếc cái gì. Tôi đâu có dại, ngần này tuổi tôi đâu có dại… Tiền ai chẳng thích, nhưng tôi sợ tiền lắm, nói dại mồm đại họa lúc nào không biết!”. Và ông bảo: nói cho các nhà báo trẻ biết, tôi sống bằng nghề làm tượng, mỗi tháng bán vài pho là sống, con cái đã trưởng thành, hai vợ chồng già của tôi ăn được mấy. Bây giờ sống êm đềm, thỉnh thoảng bạn bè đến vác cờ ra chơi với nhau cho sướng. Tự nhiên một đống tiền rơi vào nhà – đại họa đấy các bạn trẻ ạ! Nói có vẻ vô lý nhưng thật đấy, không tưởng tượng được đâu!</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Bây giờ ông lại nhổm hẳn lên ghế, mặt đỏ lự, cái kính lão lệch hẳn một bên. Ông nhoài người sang phía chúng tôi nói: “Một triệu đô là à, mười mấy tỉ tiền ta à, to lắm! Nghe to lắm đấy, nhưng nếu bây giờ tôi phổ biến được nó rộng rãi ra toàn quốc, rồi thì toàn thế giới. Khi chúng nó say cờ này rồi thì… nói cho các ông biết, tôi chỉ việc mua một chút máy móc, sản xuất bàn cờ và bán… quanh năm bán thì thử hỏi thu bao nhiêu tiền? Ấy là nói đến kinh doanh, nhưng không phải thế, cái quan trọng không phải thế, tôi nghĩ ra bàn cờ này đâu phải vì mục đích tiền…”.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Nói đến đây đột ngột ông Bảy quay sang bảo vợ: “Bà nấu cơm nhé, bọn tôi nhậu đấy…”. Rồi ông quay sang chúng tôi cười rất tươi: “Nhậu với tao nhé, trưa rồi còn gì.”</span></p><p align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://files.myopera.com/QAPOcVuetr/albums/655426/Vu%20Bay%203.jpg" alt="" width="450" height="338" style="padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial; " /></span></p><p align="center"><span><em><span class="Apple-style-span" style="color:#FFFFFF;">“Triệu phú cờ toán” vẫn sống tằn tiện bằng nghề nặn tượng.</span></em></span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Trong bữa cơm, ông Bảy vẫn nói rất nhiều, ông uống rất khá, mỗi lần nâng chén lên đều bảo cạn nhé. Ông ta có dáng người to lớn, khuôn mặt thuộc kiểu “ngũ trường tướng”, cái gì cũng dài: măt, mũi, tai, miệng… Và ông chỉ vào góc nhà – nơi đang bày những bức tượng dang dở, nói: “Ngày nào, tôi cũng làm tượng, đêm đến muỗi đốt nhiều mệt lắm… cứ nghĩ đến tiền lại muốn bỏ, nhưng lại sợ và tiếc cái môn cờ này.”. Bọn trẻ hàng xóm, từ ngày chúng nó biết chơi thích lắm, mà chúng nó chơi siêu các ông ạ. Tôi đây lắm lúc thua chỏng vó…”. Rồi ông lại giục chúng tôi uống, thỉnh thoảng lại sai khiến bà vợ, giọng rất gia trưởng.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Nhưng tôi hỏi đến điều mong muốn nhất của ông về môn cờ toán này, khuôn mặt đỏ lự của ông trùng xuống, rồi trầm tư: nói thực với các nhà báo trẻ, tôi chỉ mơ cái môn này được phổ biến rộng rãi. Chẳng hạn như hội khỏe phù đổng của tỉnh Bắc Ninh này chẳng hạn, rồi thì trong các nhà trường. Tôi tin với môn cờ toán, bọn trẻ sẽ học được cách từ duy toán học. Mà đã có tư duy của toán học thì sức tưởng tượng nâng cao, nói cách khác tâm hồn chúng sẽ trong sáng, biết làm người… Ai chẳng muốn mình được nổi tiếng, có nhiều tiền, nhưng cái đó với tôi không còn quan trọng nữa, tôi đã hơn bảy mươi rồi: danh vọng, tiền bạc chẳng nghĩa lý gì. Chỉ mong cái môn cờ này được phổ biến rộng rãi và bọn trẻ say nó là được.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Rồi đột nhiên ông Bẩy lại nhổm dậy như cái lò xo, mắt sáng rực à lên: “Tôi có thằng cháu đang làm phần mềm máy tính về môn cờ này đấy. Nó đang rủ tôi đem đi thi trí tuệ Việt Nam , nó bảo ăn giải là cái chắc… Nhưng tôi bảo nó, thi thố quan trọng gì, cứ đưa lên mạng cho chúng nó chơi là tao sướng rồi.”. Ông lại giục chúng tôi uống, mỗi ngụm rượu ông khà lên một tiếng rất khoan khoái, rồi lại trầm ngâm nghĩ về những đứa trẻ miền núi. Tội lắm các nhà báo trẻ ạ! Cả ngày chúng nó chỉ biết cõng nhau ngẩn ngơ nhìn núi đồi, không biết thế nào là chơi…</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Câu nói vô tình của ông Bảy làm tôi – kẻ chép lại những dòng này cũng buồn lây. Quả đúng như vậy, ngày bé tôi và đám bạn ở bản làng chẳng biết chơi gì ngoài núi đồi, sông suối. Tôi nhớ rất rõ những buổi chiều chợ phiên. Tôi đã ngồi mãi ở mỏm đá đầu bản, ngẩn ngơ chờ mé đi chợ về. Hồi ấy, trong cái đầu ngờ nghệch của tôi vẫn nghĩ rằng, từ chợ về mé sẽ mua cho tôi một cái gì đó không phải cái bánh, viên kẹo… mà phải là cái gì vui hơn thế. Có thể hồi ấy tôi mong có một món đồ chơi – tôi nghĩ thế.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Và bây giờ, sự nghi hoặc về lời đồn một triệu đô bản quyền cờ toán của ông Bảy, không còn là mục đích tìm hiểu của chúng tôi nữa. Chẳng quan trọng gì, có trả đến trăm triệu đô la cũng thế. Sự thật giả của một triệu đô có lẽ cuốn hút rất nhiều người hiếu kỳ, nhưng có một sự thật – sự thật là bàn cờ toán đã có mặt trên đời, với tổng số nước đi là lũy thừa của 87, ai có thể đi hết ngần ấy nước cờ? Nhưng cũng chẳng cần đi ngần ấy nước, chỉ cần ngồi xuống và say sưa với nó đã thú vị rồi, đấy là một sự thật!</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Ông Vũ Bảy – người đang ngồi trước mặt chúng tôi mới quan trọng – sự quan trọng thể hiện ở chỗ ông ta đã nghĩ ra một trò chơi – một niềm vui cho mọi người và do người Việt chính hiệu nghĩ ra. Cái đó quan trọng hơn tất cả. Còn câu chuyện về số tiền một triệu đô có lẽ nên quên đi được rồi.</span></p><p><span style="font-size:large;"><strong><span class="Apple-style-span" style="color:#FFFFFF;"><br />Ván cờ và triết lý xã hội</span></strong></span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">“Người Việt từ xưa đến nay vẫn chơi cờ tướng. Nhưng cờ tướng là của người Trung Quốc. Rồi người ta chơi cờ vua. Cờ vua cũng là môn cờ du nhập. Chẳng lẽ chúng ta không có một loại cờ của riêng ta? Lúc đó tôi nghĩ có thể dùng các con số để tính toán cho một ván cờ được không? Thế là tôi bắt đầu bỏ thời gian để nghiên cứu về một thứ cờ gọi là cờ toán, để làm sao khi chơi cờ, người chơi phải vận dụng các kiến thức về toán học, đồng thời nó còn giúp khả năng toán học của người chơi được tốt lên” – ông Bẩy tâm sự.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Nung nấu từ những năm 1970, đến tận những năm 1980 ông mới hoàn thành được luật chơi cờ toán. Từ vị trí xếp quân cho tới giá trị mỗi quân hay cách bắt quân… ông đều phải sửa đi sửa lại hàng chục lần.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Theo ông, để đi một nước cờ toán thì phải vận dụng một trong bốn phép tính: cộng, trừ, nhân, chia. Do phải sử dụng cách chơi phối hợp cả bốn phép tính, nên tổng số nước đi của một ván cờ toán là lũy thừa của 87 (8787). Trong khi đó, tổng số nước đi của cờ tướng chỉ là lũy thừa của 32, còn cờ vua là lũy thừa của 16). Lũy thừa của 87 là một con số mà “không biết bao nhiêu đời người mới có thể đi hết từng ấy nước đi” – ông khẳng định. Cờ toán vừa dân dã, vừa bác học là vì thế.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Ông Bẩy còn gửi vào cờ toán một triết lý nhân sinh: “Khi chơi cờ toán, nó không chỉ giúp người ta tính toán mà còn dạy cho người ta phải biết lẽ sống. Tính cách từng người sẽ được thể hiện qua ván cờ toán. Người tham lam thì chỉ thích cộng, thích nhân. Nhưng cứ nhân, cứ cộng mãi cũng thất bại (thua). Cái đó cũng giống như ở đời: lá lành phải biết đùm lá rách, phải biết chia sẻ cho người khác”.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Đặc biệt, theo ông, cái này mới là độc đáo: quân số 0 (đứng yên một chỗ, không được di chuyển). Tất cả các quân còn lại 1-9 đều có nhiệm vụ công thủ ngang nhau và có một trách nhiệm chung là bảo vệ quân số 0. Trong cờ vua và cờ tướng, khi mất vua hoặc tướng là bị thua. Tuy nhiên, cờ toán lại khác cờ tướng, cờ vua ở chỗ: quân số 0 là dân chứ không phải tướng hay vua, và khi để dân bị đối phương bắt, người chơi sẽ bị thua tuyệt đối.</span></p><p><span style="font-size:large;"><strong><span class="Apple-style-span" style="color:#FFFFFF;"><br />Luật cờ toán Việt Nam</span></strong></span></p><p><span style="font-size:large;"><strong><span><span style="font-size:medium;"><span class="Apple-style-span" style="color:#FFFFFF;">A Mô tả hình thức bàn cờ và Quân Cờ</span></span></span></strong></span></p><p><span style="font-size:large;"><strong><span><span style="font-size:medium;"><span style="font-size:small;"><span class="Apple-style-span" style="color:#FFFFFF;">Bàn cờ</span></span></span></span></strong></span><span class="Apple-style-span" style="color:#FFFFFF;"><span></span></span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">·</span><span><span class="Apple-style-span" style="color:#FFFFFF;"> </span></span><span class="Apple-style-span" style="color:#FFFFFF;">Hình chữ nhật, kích thước: 475mm x 365mm.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">·</span><span><span class="Apple-style-span" style="color:#FFFFFF;"> </span></span><span class="Apple-style-span" style="color:#FFFFFF;">Ở hai đầu bàn cờ trong khung hình chữ nhật nằm ngang 315mm x 45mm, mỗi góc bên trái có một lôgô hình tròn, đường kính 35mm. Trong vòng tròn vẽ đồ họa hình khối óc (màu xám trắng), trái tim (màu đỏ tươi), bàn tay (màu vàng). Phần còn lại một đầu có chữ “ CỜ TOÁN VIỆT NAM ” dòng dưới chữ nhỏ hơn: “Tác giả: Vũ Văn Bảy – Thành phố Bắc Ninh”. Đầu đối diện có 6 chữ “ THÂN THIỆN – TRÍ TUỆ – SÁNG TẠO”.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">·</span><span><span class="Apple-style-span" style="color:#FFFFFF;"> </span></span><span class="Apple-style-span" style="color:#FFFFFF;">Phần còn lại của bàn cờ là 385mm x 315mm được chia đểu thành 99 ô vuông (ngang 9 ô, dọc 11 ô) mỗi cạnh 35mm. Ô thứ 5 từ cạnh vào ở hàng ngang thứ 2 từ dưới lên của mỗi bên có dấu chéo (X) giữa ô vuông. (H1)</span></p><p align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://files.myopera.com/QAPOcVuetr/albums/655426/Ban%20Co.jpg" alt="" width="450" style="padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial; " /></span></p><p align="center"><span class="Apple-style-span" style="color:#FFFFFF;">HÌNH 1 – BÀN CỜ TOÁN VIỆT NAM</span></p><p align="left"><span style="font-size:large;"><strong><span><span style="font-size:medium;"><span style="font-size:small;"><span class="Apple-style-span" style="color:#FFFFFF;">Quân cờ</span></span></span></span></strong></span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">·</span><span><span class="Apple-style-span" style="color:#FFFFFF;"> </span></span><span class="Apple-style-span" style="color:#FFFFFF;">Hình trụ tròn, đường kính 25mm, cao 10mm. Mỗi bên có 10 quân. Mầu sắc 2 bên khác nhau. Quân số O hình tròn đồng tâm với bề mặt quân cờ, đường kính 20mm.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">·</span><span><span class="Apple-style-span" style="color:#FFFFFF;"> </span></span><span class="Apple-style-span" style="color:#FFFFFF;">Những quân còn lại dùng dấu chấm tròn làm biểu trưng cho dãy số nguyên đơn từ số 1 đến số 9. Quân số 1=1 chấm, quân số 2=2 chấm…quân số 9 = 9 chấm.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">·</span><span><span class="Apple-style-span" style="color:#FFFFFF;"> </span></span><span class="Apple-style-span" style="color:#FFFFFF;">Tên của mỗi quân cờ gọi theo trị số riêng của từng con số (quân một, quân hai… quân chín)(H2)</span></p><p align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://files.myopera.com/QAPOcVuetr/albums/655426/Quan%20co.jpg" alt="" width="440" height="117" style="padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial; " /></span></p><p align="center"><span class="Apple-style-span" style="color:#FFFFFF;">H2 – QUÂN CỜ TOÁN VIỆT NAM</span></p><p align="left"><strong><span style="font-size:medium;"><span class="Apple-style-span" style="color:#FFFFFF;">B Luật chơi</span></span></strong></p><p align="left"><strong><span style="font-size:medium;"><span style="font-size:small;"><span class="Apple-style-span" style="color:#FFFFFF;">Xếp quân</span></span></span></strong></p><p><span class="Apple-style-span" style="color:#FFFFFF;">·</span><span><span class="Apple-style-span" style="color:#FFFFFF;"> </span></span><span class="Apple-style-span" style="color:#FFFFFF;">Hai bên cùng xếp quân vào hàng ngan dưới cùng, thứ tự từ 1 đến 9. Từ trái sang phải, quân số 0 xếp vào ô thứ 5 ở hàng ngang thứ 2 (có dấu chéo) phía trên ô số 5.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">·</span><span><span class="Apple-style-span" style="color:#FFFFFF;"> </span></span><span class="Apple-style-span" style="color:#FFFFFF;">Hai bên tự thỏa thuận (hoặc bốc thăm) để phân định vị trí ngồi chơi và người đi quân trước một nước, rồi lần lượt cho đến khi kết thúc cuộc chơi…(H3)</span></p><p align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://files.myopera.com/QAPOcVuetr/albums/655426/Xep%20quan%20co.jpg" alt="" width="450" style="padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial; " /></span></p><p align="center"><span class="Apple-style-span" style="color:#FFFFFF;">HÌNH 3 – CÁCH XẾP QUÂN</span></p><p align="left"><strong><span style="font-size:medium;"><span style="font-size:small;"><span class="Apple-style-span" style="color:#FFFFFF;">Cách đi quân</span></span></span></strong></p><p align="left"><span class="Apple-style-span" style="color:#FFFFFF;"><strong></strong>Quân số 0 không được di chuyển. Những quân còn lại đều được đi thẳng theo 4 hướng tiến, lùi, phải, trái và 4 phương chéo Đông, Tây, Nam, Bắc. Mỗi ô trống trên bàn cờ là một nước đi. Số bước đi được thực hiện theo trị số riêng của từng quân cờ. Những quân có trị số nhiều có thể thực hiện những bước đi ít hơn ( Ví dụ: Quân số 2 có thể đi từ 1 đến 2 ô.. quân số 9 có thể đi từ 1 đến 9 ô). Mỗi ô trống trên bàn cờ là một bước đi, không được vượt qua bất kỳ quân cờ nào cản đường…(H4)</span></p><p align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://files.myopera.com/QAPOcVuetr/albums/655426/Di%20quan%20co.jpg" alt="" width="300" height="297" style="padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial; " /></span></p><p align="center"><span class="Apple-style-span" style="color:#FFFFFF;">H4 – HƯỚNG ĐI CỦA MỌI QUÂN CỜ</span></p><p><span style="font-size:small;"><strong><span class="Apple-style-span" style="color:#FFFFFF;">Cách bắt quân</span></strong></span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">-</span><span><span class="Apple-style-span" style="color:#FFFFFF;"> </span></span><span class="Apple-style-span" style="color:#FFFFFF;">Muốn bắt quân đối phương phải có 2 quân bên mình đứng trong 2 ô liền kề nhau để lấy giá trị số của 2 quân cờ ấy tính nhẩm cộng, trừ, nhân, chia (+, _, x, ÷) với nhau. Đáp số của mỗi phép tính ấy là điểm được bắt quân đối phương.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">* Chỉ đánh số nguyên đơn từ 1 đến 9 (quá 10, 20, 30…thì trừ đi 10, 20, 30…)</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">* Tính chia được đánh cả số dư.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">* Hai số bất kỳ liền kề nhau sẽ có nhiều đáp số khi tính cộng, trừ, nhân, chia (+, _, x, ÷) với nhau nhưng khi bắt quân đối phương thì tự chọn lấy một đáp số:</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">- Thí dụ: 5 + 3 = 8</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">5 – 3 = 2</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">5 x 3 = 15(- 10) = 5</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">5 ÷ 3 = 1 dư 2</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">-</span><span><span class="Apple-style-span" style="color:#FFFFFF;"> </span></span><span class="Apple-style-span" style="color:#FFFFFF;">Như vậy các đáp số 8, 2,5,1,2 là ô cờ có quân đối phương bị bắt. Hướng bắt quân đối phương cũng thực hiện như hướng đi quân ( 4 hướng tiến, lùi, phải, trái và 4 phương chéo Đông, Bắc, Tây, Nam).</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">-</span><span><span class="Apple-style-span" style="color:#FFFFFF;"> </span></span><span class="Apple-style-span" style="color:#FFFFFF;">Khi bắt quân thì lấy quân đứng sau đặt vào vị trí quân đối phương bị bắt.(H5)</span></p><p align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://files.myopera.com/QAPOcVuetr/albums/655426/Bat%20quan%20co.jpg" alt="" width="450" style="padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial; " /></span></p><p align="center"><span class="Apple-style-span" style="color:#FFFFFF;">H5 – CÁCH BẮT QUÂN CỜ</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">* Bắt quân về hướng tay trái: * Bắt quân về hướng tay phải:</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">2 – 1 =1 1 x 2 = 2</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">2 x 1 = 2 1 + 2 = 3</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">2 + 1 = 3</span></p><p align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://files.myopera.com/QAPOcVuetr/albums/655426/Vi%20du.jpg" alt="" width="350" height="507" style="padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial; " /></span></p><p align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://files.myopera.com/QAPOcVuetr/albums/655426/Vi%20du%202.jpg" alt="" width="350" height="461" style="padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial; " /></span></p><p align="left"><span style="font-size:large;"><strong><span style="font-size:medium;"><span class="Apple-style-span" style="color:#FFFFFF;">D Kết thúc 1 ván cờ</span></span></strong></span></p><p align="left"><strong><span class="Apple-style-span" style="color:#FFFFFF;">Thắng tuyệt đối:</span></strong></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Bên nào bắt được quân cờ số O trước là thắng tuyệt đối.</span></p><p><strong><span class="Apple-style-span" style="color:#FFFFFF;">Thắng điểm:</span></strong></p><p><span class="Apple-style-span" style="color:#FFFFFF;">Mỗi dấu chấm tròn trên mặt quân cờ tương ứng với 1 điểm ( quân 1 chấm = 1 điểm, quân 2 = 2 điểm…)</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">-</span><span><span class="Apple-style-span" style="color:#FFFFFF;"> </span></span><span class="Apple-style-span" style="color:#FFFFFF;">Hai bên tự thỏa thuân thang điểm cho mỗi ván đấu là 10, 15, 20 điểm. Bên nào đát số điểm đã thỏa thuận trước là thắng điểm.</span></p><p><span class="Apple-style-span" style="color:#FFFFFF;">-</span><span><span class="Apple-style-span" style="color:#FFFFFF;"> </span></span><span class="Apple-style-span" style="color:#FFFFFF;">Trong trường hợp thi đấu để tranh giải thì phải tuân thủ moi qui định của Ban tổ chức giải.</span></p><p align="left"><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://files.myopera.com/QAPOcVuetr/albums/655426/Cach%20choi%20gian%20tiep.jpg" alt="" width="450" style="padding-top: 4px; padding-right: 4px; padding-bottom: 4px; padding-left: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: rgb(221, 221, 221); border-right-color: rgb(221, 221, 221); border-bottom-color: rgb(221, 221, 221); border-left-color: rgb(221, 221, 221); background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial; " /></span></p><p align="left"><span class="Apple-style-span" style="color:#FFFFFF;">sưu tầm tại </span><a href="http://sallneed.co.cc/?p=286&cpage=1#comment-1403"><span class="Apple-style-span" style="color:#FFFFFF;">nguồn</span></a></p></span>Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com3tag:blogger.com,1999:blog-7097348045257270421.post-43953944753852317332010-02-18T11:06:00.003+07:002010-02-18T11:13:27.279+07:00Tìm hiểu Objective - C phần 3<div>tiếp theo <a href="http://linhdkl.blogspot.com/2010/02/tim-hieu-objective-c-phan-2.html">phần 2</a></div><div><br /></div><div><b><span class="Apple-style-span" style="font-size:large;">Kiểu id</span></b></div><div>id trong ObC gần tương tự như void* trong C. bạn không cần phải biết rõ kiểu của object khi bạn gọi phương thức trong ObC điều này hoàn toàn khác với C++ bơi đơn giản khi gọi phương thức cũng giống như bạn truyền thông điệp trong ObC. Nếu đối tượng nó có phương thức thì sẽ đáp lại thông điệp mà bạn truyền (gọi phương thức) và phương thức đc gọi. Cũng nguy hiểm đây chứ .. :(</div><div><br /></div><div><br /></div><div><span class="Apple-style-span" style="font-size:large;"><b>Ép kiểu động.</b></span></div><div>những phương thức dưới đây dùng để kiểm tra kiểu.</div><div><br /></div><div>- (BOOL) isKindOfClass: classObj >> đối tượng là hậu duệ hoặc thể hiện của classObj</div><div>- (BOOL) isMemberOfClass: classObj >> là một thành phần của objClass</div><div>- (BOOL) respondsToSelector: selector >> đối tượng có phương thức bởi selector</div><div>+ (BOOL) instancesRespondToSelector: selector >> đối tượng đc tạo bởi lớp có đáp ứng selector</div><div>- (id) performSelector: selector >> triệu gọi chính sách selector trên đối tượng.</div><div><br /></div><div><br /></div><div><span class="Apple-style-span" style="font-size:large;"><b>Constructors - hàm khỏi tạo:</b></span></div><div>Vấn đề là với một lớp thì hàm khởi tạo dùng để sinh đối tượng và cũng là chỗ để tư duy về hàm hủy và cách thức lưu trong bộ nhớ của đối tượng. Về vấn đề hủy đối tượng ta sẽ có một phần riêng và nó hoàn toàn khác biệt với việc viết hàm hủy trong C++ và các ngôn ngữ khác. Tất nhiên không có gì là không thể viết khi bạn đã hiểu rõ và thông thạo ngôn ngữ. Và hẳn nhiên bạn có thể quên hết những luật về khởi tạo đối tượng hàm tạo và hàm hủy của C++ vơi ObC bạn hoàn toàn có thể tự mình chế biến những hàm đó theo ý thích và cũng không có quy luật gì về tên tuổi của hàm, tuy nhiên theo thoi quen truyền thông để giúp style - code chở nên sáng sủa nên dùng bằng các từ như init hoặc tương tự... để định nghĩa hàm khởi tạo</div><div><br /></div><div><br /></div><div>Fraction.h</div><div>...</div><div>-(Fraction*) initWithNumerator: (int) n denominator: (int) d;</div><div>...</div><div><br /></div><div><br /></div><div><br /></div><div>Fraction.m</div><div>...</div><div>-(Fraction*) initWithNumerator: (int) n denominator: (int) d {</div><div> self = [super init];</div><div><br /></div><div> if ( self ) {</div><div> [self setNumerator: n andDenominator: d];</div><div> }</div><div><br /></div><div> return self;</div><div>}</div><div>...</div><div><br /></div><div><br /></div><div><br /></div><div>main.m</div><div>#import <stdio.h></stdio.h></div><div>#import "Fraction.h"</div><div><br /></div><div>int main( int argc, const char *argv[] ) {</div><div> // create a new instance</div><div> Fraction *frac = [[Fraction alloc] init];</div><div> Fraction *frac2 = [[Fraction alloc] init];</div><div> Fraction *frac3 = [[Fraction alloc] initWithNumerator: 3 denominator: 10];</div><div><br /></div><div> // set the values</div><div> [frac setNumerator: 1];</div><div> [frac setDenominator: 3];</div><div><br /></div><div> // combined set</div><div> [frac2 setNumerator: 1 andDenominator: 5];</div><div><br /></div><div> // print it</div><div> printf( "The fraction is: " );</div><div> [frac print];</div><div> printf( "\n" );</div><div><br /></div><div> printf( "Fraction 2 is: " );</div><div> [frac2 print];</div><div> printf( "\n" );</div><div><br /></div><div> printf( "Fraction 3 is: " );</div><div> [frac3 print];</div><div> printf( "\n" );</div><div><br /></div><div> // free memory</div><div> [frac release];</div><div> [frac2 release];</div><div> [frac3 release];</div><div><br /></div><div> return 0;</div><div>}</div><div><br /></div><div>- Từ khóa supper để tham chiếu tới lớp cha.</div><div>- Từ khóa self tác dụng tương đương như this trong C++. (chính bản thân đang thể hiện của lớp - object hiện tại)</div><div>- Kết thúc hàm khởi tạo (init) sẽ trả về chính đối tượng dc tạo ra thông qua từ khóa self.</div><div>- Mặc định trong ObC hàm khỏi tạo là - (id) init;</div><div>- Trong ObC hàm khởi tạo chỉ có ý nghĩa về mặt tư duy, nó không đc đối sử đặc biết giống như C++.</div><div><br /></div><div><br /></div><div><span class="Apple-style-span" style="font-size:large;"><b>Đa hình.</b></span></div><div>có lẽ với những trình bày ở trên phần nào giúp bạn mường tượng ra dc cơ chế đa hình của ObC. phần này chỉ là viết thêm nhằm củng cố một số những điểm sau đây.</div><div>1. Trong ObC không có từ khóa virtual và thực sự là không cần thiết vì nó sẽ không tạo ra những thứ quá phức tạp giống như C++ vì việc phủ quyết hàm trong ObC là phủ quyết trắng chợn không liên quan gì tới sự kế thừa. nếu 2 hàm giống hệt nhau ở 2 lớp quan hệ cha con thì cũng chẳng sao cả. cũng cần nói thêm là ObC là đơn kế thừa.</div><div>2. Quá trình tạo mối liên hệ giữa thể hiện của ObC và phương thức sẽ đc gọi là thời điểm run-time. Điểu này hoàn toàn có ý nghĩa nếu bạn gọi một phương thức mà bản thân đối tượng không có cũng không có lỗi gì. Lỗi chỉ xảy ra khi lời gọi đó dc thực hiện. Tuy nhiên ban cũng dc cung cấp những cơ chế để kiểm soát việc này. đây cũng là một đặc tính Run-Time của ObC nếu bạn quan tâm có thể tìm kiếm thông tin từ việc chuyển tiếp thông điệp (forward) tới một đối tượng khác.</div><div><br /></div><div><br /></div><div><span class="Apple-style-span" style="font-size:large;"><b>Quản ly bộ nhớ.</b></span></div><div>ObC có 2 lựa chọn cho việc quản lý bộ nhớ. Thông thường bộ nhớ dc quản lý bởi lập trình viên, ObC có trình biên dịch chỉ thị nhứ "release", "retain", "autorelease" là những chỉ thị hỗ chợ lập trình viên mạnh mẽ trong việc quản lý bộ nhớ. </div><div>ObC sử dụng một tham chiếu đếm để dò tìm ra những thay đổi trên một đối tượng. Biến đếm này sẽ tăng lên một khi đối tượng dc cấp phát bộ nhớ bằng phương thức alloc, biến đếm này sẽ giảm đi một khi đối tượng dc giải phóng bằng phương thức dealloc. Như vậy nguyên lý cấp phát và duy trì bộ nhớ của đối tượng trong ObC dc sử dụng thông qua phương thức alloc và dealloc.</div><div><br /></div><div>Mặt khác tiện ích khác từ kiểu dữ liệu nil đã nói ở trên đó việc giải phóng bộ nhơ. Trong ngữ cảnh một đối tượng của bạn là bao gồm nhiều những đối tượng khác. những đối tượng khác đó có thể đã dc giải phóng hoặc chưa. như thế bạn sẽ thực hiện lời gọi dealloc trên tập đối tượng mà bạn có, nếu con thì nó sẽ thực hiện giải phóng trong trường hợp bằng nil cũng ok :D không vấn đề gì (no error) vì nil cũng có thể truyền thông điệp.</div><div>hãy xem ví dụ</div><div><br /></div><div># AddressCard.h</div><div><br /></div><div>#import <foundation/nsobject.h></foundation/nsobject.h></div><div>#import <foundation/nsstring.h></foundation/nsstring.h></div><div><br /></div><div>@interface AddressCard: NSObject {</div><div> NSString *first;</div><div> NSString *last;</div><div> NSString *email;</div><div>}</div><div><br /></div><div>-(AddressCard*) initWithFirst: (NSString*) f</div><div> last: (NSString*) l</div><div> email: (NSString*) e;</div><div>-(NSString*) first;</div><div>-(NSString*) last;</div><div>-(NSString*) email;</div><div>-(void) setFirst: (NSString*) f;</div><div>-(void) setLast: (NSString*) l;</div><div>-(void) setEmail: (NSString*) e;</div><div>-(void) setFirst: (NSString*) f</div><div> last: (NSString*) l</div><div> email: (NSString*) e;</div><div>-(void) setFirst: (NSString*) f last: (NSString*) l;</div><div>-(void) print;</div><div>@end</div><div><br /></div><div># AddressCard.m</div><div><br /></div><div>#import "AddressCard.h"</div><div>#import <stdio.h></stdio.h></div><div><br /></div><div>@implementation AddressCard</div><div>-(AddressCard*) initWithFirst: (NSString*) f</div><div> last: (NSString*) l</div><div> email: (NSString*) e {</div><div> self = [super init];</div><div><br /></div><div> if ( self ) {</div><div> [self setFirst: f last: l email: e];</div><div> }</div><div><br /></div><div> return self;</div><div>}</div><div><br /></div><div>-(NSString*) first {</div><div> return first;</div><div>}</div><div><br /></div><div>-(NSString*) last {</div><div> return last;</div><div>}</div><div><br /></div><div>-(NSString*) email {</div><div> return email;</div><div>}</div><div><br /></div><div>-(void) setFirst: (NSString*) f {</div><div> [f retain];</div><div> [first release];</div><div> first = f;</div><div>}</div><div><br /></div><div>-(void) setLast: (NSString*) l {</div><div> [l retain];</div><div> [last release];</div><div> last = l;</div><div>}</div><div><br /></div><div>-(void) setEmail: (NSString*) e {</div><div> [e retain];</div><div> [email release];</div><div> email = e;</div><div>}</div><div><br /></div><div>-(void) setFirst: (NSString*) f</div><div> last: (NSString*) l</div><div> email: (NSString*) e {</div><div> [self setFirst: f];</div><div> [self setLast: l];</div><div> [self setEmail: e];</div><div>}</div><div><br /></div><div>-(void) setFirst: (NSString*) f last: (NSString*) l {</div><div> [self setFirst: f];</div><div> [self setLast: l];</div><div>}</div><div><br /></div><div>-(void) print {</div><div> printf( "%s %s <%s>", [first cString],</div><div> [last cString],</div><div> [email cString] );</div><div>}</div><div><br /></div><div>-(void) dealloc {</div><div> [first release];</div><div> [last release];</div><div> [email release];</div><div><br /></div><div> [super dealloc];</div><div>}</div><div>@end</div><div><br /></div><div># main.m</div><div><br /></div><div>#import "AddressCard.h"</div><div>#import <foundation/nsstring.h></foundation/nsstring.h></div><div>#import <stdio.h></stdio.h></div><div><br /></div><div>int main( int argc, const char *argv[] ) {</div><div> NSString *first =[[NSString alloc] initWithCString: "Tom"];</div><div> NSString *last = [[NSString alloc] initWithCString: "Jones"];</div><div> NSString *email = [[NSString alloc] initWithCString: "tom@jones.com"];</div><div> AddressCard *tom = [[AddressCard alloc] initWithFirst: first</div><div> last: last</div><div> email: email];</div><div><br /></div><div> // we're done with the strings, so we must dealloc them</div><div> [first release];</div><div> [last release];</div><div> [email release];</div><div><br /></div><div> // print to show the retain count</div><div> printf( "Retain count: %i\n", [[tom first] retainCount] );</div><div> [tom print];</div><div> printf( "\n" );</div><div> </div><div> // free memory</div><div> [tom release];</div><div><br /></div><div> return 0;</div><div>}</div><div><br /></div><div># output</div><div><br /></div><div>Retain count: 1</div><div>Tom Jones <tom@jones.com></tom@jones.com></div><div><br /></div><div>Mặt khác ObC cũng cung cấp một cớ chế thông minh thường thường trong việc bạn gọi và sử dụng đối tượng mà không phải quan tâm lo lắng đến việc cấp phát và giải phóng bộ nhớ đó là cơ chế NSAutoreleasePool. Để dùng dc cơ chế này bạn chỉ việc nhớ 2 điều kẹp đoạn code mà bạn muốn kiểm soát vào trong giữa NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init] và [pool release]. Nguyên lý của đồng chí này cũng giống như lời gọi hàm vì thế bạn hoàn toàn có thể sử dụng lồng nhau và sự đóng mở hợp lý (giống như thẻ đóng và mở của XML đó) tự nhiên ObC sẽ đẩy các lời gọi pool sau xuống stack và đặt pool mới trên cùng sau đó nhét các object dc tạo ra trong lòng nó vào cái pool vừa mới tạo nếu song thì giải phóng rồi lại đẩy tiếp thằng pool ở dưới lên cứ thế... kinh chưa :).</div><div><br /></div><div><br /></div><div><br /></div><div><b><span class="Apple-style-span" style="font-size:large;">Tổng kết:</span></b></div><div><br /></div><div>Đây không phải là một ngôn ngữ compile và là ngôn ngữ run-time. Cho nên trong quá trình code yêu tố này ảnh hưởng rất lớn tới chương trình của bạn. Các đặc điểm như ép kiểu. Đa hình... sẽ rất mềm dẻo.</div><div><br /></div><div><br /></div><div>nội dung bài viết và vi dụ tham khảo tại:</div><div><a href="http://www.otierney.net/objective-c.html">nguồn 1</a></div><div><a href="http://www.atomicobject.com/pages/The+Objective+C+Language">nguồn 2</a></div><div><br /></div><div><br /></div><div>các phần trước.</div><div><a href="http://linhdkl.blogspot.com/2010/02/tim-hieu-objective-c.html">phần 1</a></div><div><a href="http://linhdkl.blogspot.com/2010/02/tim-hieu-objective-c-phan-2.html">phần 2</a></div><div><br /></div><div><br /></div><div>../..</div>Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com5tag:blogger.com,1999:blog-7097348045257270421.post-24273731703525282452010-02-17T21:44:00.003+07:002010-02-18T11:15:47.691+07:00Tìm hiểu Objective - C phần 2<div>tiếp theo <a href="http://linhdkl.blogspot.com/2010/02/tim-hieu-objective-c.html">phần 1</a></div><div><br /></div><div><span class="Apple-style-span" style="font-size:large;"><b>Exception và handler.</b></span></div><div>Ngôn ngữ cũng hỗ chợ các cấu trúc try - catch - throw - finally giống như ngôn C++ @try - @catch - @throw - @finally cách thức sử dụng cũng hoàn toàn tương tự.</div><div><br /></div><div><br /></div><div><b><span class="Apple-style-span" style="font-size:large;">Categories </span></b></div><div>Là đặc điểm nếu bạn muốn mở rộng lớp bằng cách thêm mới vào lớp một phương thức. Khi bạn làm việc quen với OOP thì bạn sẽ thấy đây là một trong những thuộc tính vô cùng hữu ích của Objective C, kể cả ngay khi bạn không có mã nguồn của lớp nhưng bạn vẫn hoàn toàn có thể thêm phương thức cho lớp như thường thông qua thuộc tính này. Đặc điểm này làm giảm đi đáng kể sự kế thừa phức tạp trong C++ khi việc kế thừa chỉ để phục vụ cho việc thêm mới một phương thức. Mặt khăc việc chia mã nguồn trên nhiều files cũng giúp ích đáng kể trong việc phát triên.</div><div><br /></div><div>#import "Fraction.h"</div><div><br /></div><div>@interface Fraction (Math)</div><div>-(Fraction*) add: (Fraction*) f;</div><div>-(Fraction*) mul: (Fraction*) f;</div><div>-(Fraction*) div: (Fraction*) f;</div><div>-(Fraction*) sub: (Fraction*) f;</div><div>@end</div><div><br /></div><div>File thực thi.</div><div><br /></div><div>#import "FractionMath.h"</div><div><br /></div><div>@implementation Fraction (Math)</div><div>-(Fraction*) add: (Fraction*) f {</div><div> return [[Fraction alloc] initWithNumerator: numerator * [f denominator] +</div><div> denominator * [f numerator]</div><div> denominator: denominator * [f denominator]];</div><div>}</div><div><br /></div><div>-(Fraction*) mul: (Fraction*) f {</div><div> return [[Fraction alloc] initWithNumerator: numerator * [f numerator]</div><div> denominator: denominator * [f denominator]];</div><div><br /></div><div>}</div><div><br /></div><div>-(Fraction*) div: (Fraction*) f {</div><div> return [[Fraction alloc] initWithNumerator: numerator * [f denominator]</div><div> denominator: denominator * [f numerator]];</div><div>}</div><div><br /></div><div>-(Fraction*) sub: (Fraction*) f {</div><div> return [[Fraction alloc] initWithNumerator: numerator * [f denominator] -</div><div> denominator * [f numerator]</div><div> denominator: denominator * [f denominator]];</div><div>}</div><div>@end</div><div><br /></div><div><i><span class="Apple-style-span" style="color:#990000;">- Tên của category phải là duy nhất</span></i></div><div><i><span class="Apple-style-span" style="color:#990000;">- Có thể thêm bao nhiêu lần mở rộng lơp từ category là không giới hạn nhưng với tên là duy nhất.</span></i></div><div><i><span class="Apple-style-span" style="color:#990000;">- Thông thể bổ xung biến thành phần bằng category.</span></i></div><div><i><span class="Apple-style-span" style="color:#990000;">- Có thể sử dụng category để tạo ra các phương thức private. Nếu cần.</span></i></div><div><br /></div><div>MyClass.h</div><div>#import <foundation/nsobject.h></foundation/nsobject.h></div><div><br /></div><div>@interface MyClass: NSObject</div><div>-(void) publicMethod;</div><div>@end</div><div><br /></div><div><br /></div><div>MyClass.m</div><div>#import "MyClass.h"</div><div>#import <stdio.h></stdio.h></div><div><br /></div><div>@implementation MyClass</div><div>-(void) publicMethod {</div><div> printf( "public method\n" );</div><div>}</div><div>@end</div><div><br /></div><div>// private methods</div><div>@interface MyClass (Private)</div><div>-(void) privateMethod;</div><div>@end</div><div><br /></div><div>@implementation MyClass (Private)</div><div>-(void) privateMethod {</div><div> printf( "private method\n" );</div><div>}</div><div>@end</div><div><br /></div><div><br /></div><div>main.m</div><div>#import "MyClass.h"</div><div><br /></div><div>int main( int argc, const char *argv[] ) {</div><div> MyClass *obj = [[MyClass alloc] init];</div><div><br /></div><div> // this compiles</div><div> [obj publicMethod];</div><div><br /></div><div> // this throws errors when compiling</div><div> //[obj privateMethod];</div><div><br /></div><div> // free memory</div><div> [obj release];</div><div> </div><div> return 0;</div><div>}</div><div><br /></div><div>cái này thật thú vị phải không, thực ra đây là một hệ quả trực tiếp từ đăc tính run-time của Objective C.</div><div><br /></div><div><br /></div><div><span class="Apple-style-span" style="font-size:large;"><b>Protocals: Giao diện.</b></span></div><div>Đây hoàn toàn tương đồng với khái miện lớp ảo trong C++ hoặc gọi là giao diện trong C# và Java. Bản thân @protocals không có sự thực thi. Nếu lớp nào cam kết thực thi nó thì trong phần thực thi sẽ implement các phương thức mà protocals khai báo.</div><div><br /></div><div>@protocol Printing</div><div>-(void) print;</div><div>@end</div><div>Fraction.h</div><div>#import <foundation/nsobject.h></foundation/nsobject.h></div><div>#import "Printing.h"</div><div><br /></div><div>@interface Fraction: NSObject <printing,> {</printing,></div><div> int numerator;</div><div> int denominator;</div><div>}</div><div><br /></div><div>-(Fraction*) initWithNumerator: (int) n denominator: (int) d;</div><div>-(void) setNumerator: (int) d;</div><div>-(void) setDenominator: (int) d;</div><div>-(void) setNumerator: (int) n andDenominator: (int) d;</div><div>-(int) numerator;</div><div>-(int) denominator;</div><div>@end</div><div><br /></div><div><br /></div><div>Fraction.m</div><div>#import "Fraction.h"</div><div>#import <stdio.h></stdio.h></div><div><br /></div><div>@implementation Fraction</div><div>-(Fraction*) initWithNumerator: (int) n denominator: (int) d {</div><div> self = [super init];</div><div><br /></div><div> if ( self ) {</div><div> [self setNumerator: n andDenominator: d];</div><div> }</div><div><br /></div><div> return self;</div><div>}</div><div><br /></div><div>-(void) print {</div><div> printf( "%i/%i", numerator, denominator );</div><div>}</div><div><br /></div><div>-(void) setNumerator: (int) n {</div><div> numerator = n;</div><div>}</div><div><br /></div><div>-(void) setDenominator: (int) d {</div><div> denominator = d;</div><div>}</div><div><br /></div><div>-(void) setNumerator: (int) n andDenominator: (int) d {</div><div> numerator = n;</div><div> denominator = d;</div><div>}</div><div><br /></div><div>-(int) denominator {</div><div> return denominator;</div><div>}</div><div><br /></div><div>-(int) numerator {</div><div> return numerator;</div><div>}</div><div><br /></div><div>-(Fraction*) copyWithZone: (NSZone*) zone {</div><div> return [[Fraction allocWithZone: zone] initWithNumerator: numerator</div><div> denominator: denominator];</div><div>}</div><div>@end</div><div><br /></div><div><br /></div><div>Complex.h</div><div>#import <foundation/nsobject.h></foundation/nsobject.h></div><div>#import "Printing.h"</div><div><br /></div><div>@interface Complex: NSObject <printing> {</printing></div><div> double real;</div><div> double imaginary;</div><div>}</div><div><br /></div><div>-(Complex*) initWithReal: (double) r andImaginary: (double) i;</div><div>-(void) setReal: (double) r;</div><div>-(void) setImaginary: (double) i;</div><div>-(void) setReal: (double) r andImaginary: (double) i;</div><div>-(double) real;</div><div>-(double) imaginary;</div><div>@end</div><div><br /></div><div><br /></div><div>Complex.m</div><div>#import "Complex.h"</div><div>#import <stdio.h></stdio.h></div><div><br /></div><div>@implementation Complex</div><div>-(Complex*) initWithReal: (double) r andImaginary: (double) i {</div><div> self = [super init];</div><div><br /></div><div> if ( self ) {</div><div> [self setReal: r andImaginary: i];</div><div> }</div><div><br /></div><div> return self;</div><div>}</div><div><br /></div><div>-(void) setReal: (double) r {</div><div> real = r;</div><div>}</div><div><br /></div><div>-(void) setImaginary: (double) i {</div><div> imaginary = i;</div><div>}</div><div><br /></div><div>-(void) setReal: (double) r andImaginary: (double) i {</div><div> real = r;</div><div> imaginary = i;</div><div>}</div><div><br /></div><div>-(double) real {</div><div> return real;</div><div>}</div><div><br /></div><div>-(double) imaginary {</div><div> return imaginary;</div><div>}</div><div><br /></div><div>-(void) print {</div><div> printf( "%_f + %_fi", real, imaginary );</div><div>}</div><div>@end</div><div><br /></div><div><br /></div><div>main.m</div><div>#import <stdio.h></stdio.h></div><div>#import "Fraction.h"</div><div>#import "Complex.h"</div><div><br /></div><div>int main( int argc, const char *argv[] ) {</div><div> // create a new instance</div><div> Fraction *frac = [[Fraction alloc] initWithNumerator: 3 denominator: 10];</div><div> Complex *comp = [[Complex alloc] initWithReal: 5 andImaginary: 15];</div><div> id <printing> printable;</printing></div><div> id <nscopying,> copyPrintable;</nscopying,></div><div><br /></div><div> // print it</div><div> printable = frac;</div><div> printf( "The fraction is: " );</div><div> [printable print];</div><div> printf( "\n" );</div><div><br /></div><div> // print complex</div><div> printable = comp;</div><div> printf( "The complex number is: " );</div><div> [printable print];</div><div> printf( "\n" );</div><div><br /></div><div> // this compiles because Fraction comforms to both Printing and NSCopyable</div><div> copyPrintable = frac;</div><div><br /></div><div> // this doesn't compile because Complex only conforms to Printing</div><div> //copyPrintable = comp;</div><div><br /></div><div> // test conformance</div><div><br /></div><div> // true</div><div> if ( [frac conformsToProtocol: @protocol( NSCopying )] == YES ) {</div><div> printf( "Fraction conforms to NSCopying\n" );</div><div> }</div><div><br /></div><div> // false</div><div> if ( [comp conformsToProtocol: @protocol( NSCopying )] == YES ) {</div><div> printf( "Complex conforms to NSCopying\n" );</div><div> }</div><div><br /></div><div> // free memory</div><div> [frac release];</div><div> [comp release];</div><div><br /></div><div> return 0;</div><div>}</div><div><br /></div><div><br /></div><div><br /></div><div><b><span class="Apple-style-span" style="font-size:large;">Properties</span></b></div><div>Thuộc tính gần như bất cứ một ngôn ngữ mới hiện đại nào cũng hỗ chợ khái niệm này, đây là một khái niệm bảo toàn tính đóng gói của tư tưởng OOP.</div><div>Đối vơi ngôn ngữ ObC có mốt số những hỗ chợ đặc biệt hơn một chút bạn khai báo sử dụng bằng @properties cũng giống như những ngôn ngữ khác khi bạn sử dụng thuộc tính với ObC bạn sẽ có 2 lựa chọn là @synthesize và @dynamic, với lựa chọn là @synthesize thì mặc nhiên trình biên dịch sẽ giúp bạn sinh ra các phương thức set và get trên thuộc tính. nhưng nếu bạn lựa chọn là @dynamic thì mọi việc bạn phải tự làm lấy.</div><div>hãy xem code</div><div>#import <cocoa/cocoa.h></cocoa/cocoa.h></div><div><br /></div><div>@interface Photo : NSObject {</div><div> NSString* caption;</div><div> NSString* photographer;</div><div>}</div><div>- (NSString*) caption;</div><div>- (NSString*) photographer;</div><div><br /></div><div>- (void) setCaption: (NSString*)input;</div><div>- (void) setPhotographer: (NSString*)input;</div><div><br /></div><div>@end</div><div><br /></div><div><br /></div><div>và </div><div>#import <cocoa/cocoa.h></cocoa/cocoa.h></div><div><br /></div><div>@interface Photo : NSObject {</div><div> NSString* caption;</div><div> NSString* photographer;</div><div>}</div><div>@property (retain) NSString* caption;</div><div>@property (retain) NSString* photographer;</div><div><br /></div><div>@end</div><div><br /></div><div><br /></div><div><a href="http://linhdkl.blogspot.com/2010/02/tim-hieu-objective-c.html">phần 1</a></div><div><a href="http://linhdkl.blogspot.com/2010/02/tiep-phan-2-kieu-id-id-trong-obc-gan.html">phần 3</a></div><div><br /></div>Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com0tag:blogger.com,1999:blog-7097348045257270421.post-24719057312582788952010-02-10T15:47:00.011+07:002010-02-18T11:15:28.298+07:00Tìm hiểu Objective - C<div>Cũng chẳng biết lý do nào cho mình chở thành một thằng dev-er ....</div><div><br /></div><div>Hôm nay tìm hiểu về dev ứng dụng cho em IPhone nên là làm một tút về Objective - C chú này khá là mền dẻo và linh động trong sử lý nghe nói còn dẻo hơn cả C++ nữa chứ.</div><div><br /></div><div><span class="Apple-style-span" style="font-size:large;"><b>1. Một vài dòng về lịch sự ra đời và sự phát triển.</b></span></div><div>Cái gì cũng vậy ... mà hơn hết mình là dân Châu Á nên làm việc phải có trước có sau có cội có nguồn - ấy vì thế mà đừng vội đọc phần sau ngay mà hay quan tâm một chút tới cội nguồn của thàng Objective - C này.</div><div><br /></div><div><b>Lịch sử ra đời</b></div><div>The wiky thì Bard Cox và Tom Love (không biết có thằng cha này không nhưng thấy wiki nó nói thì mình cũng đưa ra đây chắc lão Tom Love này cũng có chút ít công sức) thuộc Stepstone là cha đẻ của Objective - C. Ngôn ngữ này đc giới thiệu năm 1981 và chúng ta cũng nhớ rằng thập niên 80s của thế kỷ trước là sự lên ngôi của khái niệm lập trình OOP cũng là giai đoạn cực thịnh của sự ra đời các ngôn ngữ OOP trên nên C. Tiếp tục hoàn thiện trong vài năm đến 1986 Cox chính thức ấn hành chuẩn của Objective - C trong các cuốn sách Object-Oriented Programming, An Evolutionary Approach.</div><div><b><br /></b></div><div><b>Sự kế tiếp của Steve Jobs</b></div><div>Cái tên này đã chở nên qua nổi tiếng từ cuộc đời ông cho đến sự nghiệp lẫy lừng và cả việc ông làm điên đảo cộng đồng IT thế giới cho đến chính bạn (chẳng phải bạn cũng đang diên đảo vì IPhone đây !_! )</div><div>Khi bi out khỏi Apple, năm 1988 Steve Jobs đã mua lại bản quyên của Obejctive - C từ Stepstone để viết cho ứng dụng phần cứng của mình. vọi là NeXTstep hay còn gọi là OpenStep công ty lúc này của Jobs là NeXT.</div><div>Cho đến 1996 khi Apple mua lại NeXT thì họ tiếp tục sử dụng công nghệ OpenStep để phát triên hệ điều hành Mac của họ và xây dựng một loạt công cụ XCode, Interface Builder .. và các Cocoa API ra đời...</div><div>Đến giờ thì đã hiểu là tại sao lại là Objective - C chứ không phải bất cứ ngôn ngữ nào khác để build các App trên nền Apples.</div><div><br /></div><div><b><span class="Apple-style-span" style="font-size:large;"><br /></span></b></div><div><b><span class="Apple-style-span" style="font-size:large;">2. Tìm hiểu ngôn ngữ Ob-c</span></b></div><div><br /></div><div><b>Đặc điểm cơ bản.</b></div><div>- Là ngôn ngữ hướng đối tượng</div><div>- Mở rộng từ C</div><div>- Nhẹ nhàng (không VM - không quá thực tạp với friend virtuals với template với ....)</div><div>- Mềm dẻo (mở rộng từ C nên bạn có thể dùng C thuần cấu trúc ngoài ra đây là ngôn ngữ run-time)</div><div>- Reflection (có hỗ chợ)</div><div>- nil thay thế cho NULL trong C, bởi vì bạn có thể gửi thông điệp cho nil, nhưng không thể làm như vậy với NULL.</div><div>- BOOL có 2 giá trị là YES và NO chứ không phải là true và false nữa.</div><div>- Khái niệm methods và message đc sử dụng mang ý nghĩa như nhau đối với ObC theo đó message có những thuộc tính đặc biệt. Mọto message có thể chuyền động từ obj tới một obj khác. Việc gọi thông điệp trên một obj không có nghĩa là obj đó sẽ thực hiện message nó có thể chuyển tiếp tới một obj khác chưa biết trước tóm lại có khả năng đáp trả thông điệp không trực tiệp thì gián tiếp.</div><div><br /></div><div>Khi làm việc với Objective C bạn cần chú ý là bởi vì nó dc base trên nền của C cho nên việc bạn sử dụng cú pháp C chộn lẫn với cú pháp chính thống của Objective C là hoàn toàn chấp nhận, tuy nhìn có vẻ hơi củ chuối.</div><div><br /></div><div><br /></div><div><b>Phương thưc.</b></div><div>Cách khai báo phương thức trong Objective - C </div><div>Không tham số :<span class="Apple-tab-span" style="white-space:pre"> </span></div><div><span class="Apple-tab-span" style="white-space:pre"></span><phạm vi=""> <(kiểu trả về)> <tên ng="" c=""></tên></phạm></div><div><br /></div><div>Có tham số:<span class="Apple-tab-span" style="white-space:pre"> </span></div><div><span class="Apple-tab-span" style="white-space:pre"></span><phạm vi=""> <(kiểu trả về)> <tên ng="" c="">:<(kiểu)> <tham> <nhãn>:<(kiểu)> <tham>;</tham></nhãn></tham></tên></phạm></div><div><br /></div><div>Lời gọi phương thức:</div><div>không trả về: <span class="Apple-tab-span" style="white-space:pre"> </span>[<đối tượng> <tên ng="" c="">];</tên></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>[<đối tượng> <tên ng="" c="">:<(kiểu)> <tham>];</tham></tên></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>[<đối tượng> <tên ng="" c="">:<(kiểu)> <tham> <nhãn>:<(kiểu)> <tham>];</tham></nhãn></tham></tên></div><div><br /></div><div>Trả về kết quả:<span class="Apple-tab-span" style="white-space:pre"> </span><kết> = [<đối tượng> <tên ng="" c="">];</tên></kết></div><div><span class="Apple-tab-span" style="white-space:pre"> </span><kết> = [<đối tượng> <tên ng="" c="">:<(kiểu)> <tham> <nhãn>:<(kiểu)> <tham>];</tham></nhãn></tham></tên></kết></div><div><br /></div><div><br /></div><div><br /></div><div><b>Lớp và đối tượng.</b></div><div>Ob-C sử dụng khái niệm Interface và Implementation để phân biêt file Header và file Source của C (*.h và *.c) một lớp trong ObC định nghĩa là trên một giao diện (.h) còn phần thực thi trên file .m các bạn chú ý là m vì nó khác với C và C++.</div><div><br /></div><div>@interface:</div><div><br /></div><div>#import @interface Fraction: NSObject { </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>int numerator; </div><div>@private</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>int denominator; </div><div>} </div><div>-(void) print; </div><div>-(void) setNumerator: (int) n; </div><div>-(void) setDenominator: (int) d; </div><div>-(int) numerator; </div><div>-(int) denominator; </div><div><br /></div><div>@end</div><div><br /></div><div>và đây là phần thực thi.</div><div>@implementation</div><div><br /></div><div>#import "Fraction.h" </div><div>@implementation Fraction </div><div><br /></div><div>-(void) print { </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>printf( "%i/%i", numerator, denominator ); </div><div>} </div><div><br /></div><div>-(void) setNumerator: (int) n {</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>numerator = n; </div><div>} </div><div><br /></div><div>-(void) setDenominator: (int) d { </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>denominator = d; </div><div>} </div><div><br /></div><div>-(int) denominator { </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>return denominator; </div><div>} </div><div><br /></div><div>-(int) numerator { </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>return numerator; </div><div>} </div><div>@end</div><div><br /></div><div>- Sử dụng #import để thay thế cho #include (đây là cơ chế thông minh hơn #include của C/C++ bạn chỉ phải thêm 1 lần thôi )</div><div>- ObC chỉ cho phép đơn kế thừa. Mặc định tất cả các lớp sẽ kế thừa từ NSObject.</div><div>- Cặp @.... và @end là cặp giới hạn phạm vi một lớp.</div><div>- Các thuộc tính dc khái báo trong cặp { ..... } và khai báo phương thức ở bên ngoài.</div><div>- Nếu phương thức bắt đâu bằng "+" có nghĩa nó là thuộc phạm vi lớp (static), còn nếu "-" thì nó ở phạm vi object.</div><div>- Các phạm vi truy xuất public,protected và private giống như C++ mặc định là protected.</div><div>- Các truy nhập phần tử cũng sử dụng toán tử "." đối với object và "->" nếu là con trỏ.</div><div>- không có các tầm vực truy xuất đối với phương thức (tức là trong ObC các phương thức có cùng một tầm vực là public)</div><div><br /></div><div><br /></div><div><a href="http://linhdkl.blogspot.com/2010/02/tim-hieu-objective-c-phan-2.html">phân 2</a></div><div><a href="http://linhdkl.blogspot.com/2010/02/tiep-phan-2-kieu-id-id-trong-obc-gan.html">phần 3</a></div><div><br /></div>Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com2tag:blogger.com,1999:blog-7097348045257270421.post-18499601514481797572009-12-22T13:51:00.004+07:002009-12-22T14:01:39.997+07:00Window 7Từ hồi tậu đc con laptop thì đã độ ngay cho nó chú win 7. Mày mò tìm tòi trên mạng cũng được dăm ba chút kiến thúc thú vị mang về put vô đây ai xem thì xem, không ai xem thì thi thoảng mở ra đọc lại cho đỡ buồn.<div><br /></div><div><span class="Apple-style-span" style="font-size:large;"><b><span class="Apple-style-span" style="color:#FFFFFF;">Một vài thủ thuật hotkey với Win 7</span></b></span><br /><div><br /></div><div><div>Dưới đây là danh sách các phím tắt của hệ điều hành windows 7 mà bạn nên biết nếu muốn tăng năng suất làm việc</div><div>Các phím tắt thông dụng</div><div>Phím tắt Mô tả</div><div>Win + Mũi tên lên Mở tối đa cửa sổ hiện tại</div><div>Win + Mũi tên xuống Khôi phục hoặc thu nhỏ cửa sổ hiện tại</div><div>Win + Mũi tên trái Đưa cửa sổ hiện tại về nửa bên trái màn hình</div><div>Win + Mũi tên phải Đưa cửa sổ hiện tại về nửa bên phải màn hình</div><div>Win + [số] Kích hoạt/Chạy chương trình được "pinned" ở thanh taskbar (Chương trình đang chạy không bị ảnh hưởng)</div><div>Win + Home Thu nhỏ tất cả của sổ, trừ cửa sổ hiện tại</div><div>Win + Nút cách Làm trong suốt tất cả các cửa sổ để bạn có thể nhìn thấy màn hình desktop</div><div>Win + Pause/Break Mở hộp thoại System Properties</div><div>Win + Tab Mở Aero 3D [Ấn nút Tab để thay đổi các cửa sổ]</div><div>Win + B Di chuyển về thanh taskbar (Thanh dưới cùng bên phải)</div><div>Win + D Hiện/ Ẩn desktop</div><div>Win + E Bật Window Explorer</div><div>Win + F Tìm kiếm</div><div>Win + G Đưa tất cả gadgets lên đầu</div><div>Win + L KHóa máy</div><div>Win + M Thu nhỏ tất cả các cửa sổ</div><div>Win + P Mở menu cho máy chiếu</div><div>Win + R Bật hộp thoại Run để chạy các lệnh.</div><div>Win + T Hiện thumbnail của các ứng dụng đang chạy dưới thanh Taskbar mà không cần di chuột qua</div><div>Win + = Bật kính lúp</div><div>Win + [+/-] Chỉnh kính lúp zoom to/nhỏ</div><div>Win + Shift + Mũi tên lên Chỉnh tối đa kích thước theo chiều dọc</div><div>Win + Shift + Mũi tên xuống Khôi phục kích thước theo chiều dọc</div><div>Win + Shift + Mũi tên trái Chuyển sang màn hình trái</div><div>Win + Shift + mũi tên phải Chuyển sang màn hình phải</div><div>Win + Shift + M Hoàn tác (undo) thu nhỏ tất cả các cửa sổ</div><div>Ctrl + mũi tên phải Chỉnh con trỏ đến đầu của từ kế tiếp</div><div>Ctrl + mũi tên trái Chỉnh con trỏ đến đầu của từ trước</div><div>Ctrl + Up Arrow Chỉnh con trỏ đến đầu của đoạn trước</div><div>Ctrl + Down Arrow Chỉnh con trỏ đến đầu của đoạn sau</div><div>Ctrl + Shift và các phím mũi tên Chọn 1 khối văn bản</div><div>Ctrl + Shift + Esc Bật Task Manager</div><div>Ctrl + Shift + N Tạo thư mục mới</div><div>Với Window Explorer</div><div>Nút tắt Mô tả</div><div>Alt + Mũi tên trái Trở lại</div><div>Alt + Mũi tên phải Đi tiếp</div><div>Alt + Mũi tên lên Đi lên 1 thư mục</div><div>Alt + Enter Mở cửa sổ thuộc tính (Properties) của vùng chọn hiện tại</div><div>Alt + Nút cách Mở menu phím tắt cho cửa sổ đang hoạt động</div><div>Alt + F4 Đóng cửa sổ hiện tại</div><div>Alt + Tab Chuyển sang cửa sổ vừa hoạt động</div><div>Alt + D Chuyển con trỏ lên thanh địa chỉ</div><div>Alt + P Hiện/Ẩn các bảng xem trước (preview)</div><div>Ctrl + N Mở cửa sổ mới</div><div>Ctrl + Cuộn chuột Thay đổi kiểm xem (lớn, nhỏ, list, chi tiêt...)</div><div>Num Lock + Nút sao trên bàn phím số Hiển thị tất cả thư mục con trong thư mục đã chọn</div><div>Num Lock + Nút dấu cộng (+) trên bàn phím số Hiển thị tất cả nội dung thư mục đã chọn</div><div>Num Lock + Nút dấu trừ (-) trên bàn phím số Thu hẹp thư mục đã chọn</div><div>Login và Logout Windows 7</div><div>Phần này bạn cần ấn lần lượt từng nút một (Ví dụ: Ấn nút Win, sau đó thả ra, ấn mũi tên phải, thả ra rồi ấn enter -> Tắt máy)</div><div>Nút tắt Mô tả</div><div>Win + Mũi tên phải + Enter Tắt máy (Shutdown)</div><div>Win + Mũi tên phải + Mũi tên phải + R Khởi động lại (Restart)</div><div>Win + Mũi tên phải + Mũi tên phải + S Ngủ (Sleep)</div><div>Win + Mũi tên phải + Mũi tên phải + W Chuyển User</div></div><div><br /></div><div><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; font-family:tahoma, verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:11px;"> <strong><span class="Apple-style-span" style="color:#FFFFFF;">25 năm phát triển của Microsoft Windows (theo pcworld)</span></strong></span></div><div><span class="Apple-style-span" style="font-family:tahoma, verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:100%;"><span class="Apple-style-span" style=" -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;font-size:11px;"><b><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span></b></span></span></div><div><span class="Apple-style-span" style="font-family:tahoma, verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;font-size:100%;"><span class="Apple-style-span" style=" -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;font-size:11px;"><b><span class="Apple-style-span" style=" font-weight: normal; font-size:12px;"><span class="Apple-style-span" style="color:#FFFFFF;">Được xây dựng dựa trên thành quả nghiên cứu của Xerox PARC, phiên bản Windows đầu tiên là giao diện người dùng đồ họa mà Microsoft khoác lên trên nền hệ điều hành DOS của mình. Đó quả là ý tưởng tốt, nhưng các phiên bản Windows đầu tiên nặng nề và không có nhiều ứng dụng; trong nhiều năm, Microsoft Word và Excel là 2 ứng dụng duy nhất khai thác đầy đủ giao diện Windows.<br /><br />Điều hay là Windows ngày càng tốt hơn và ngày càng phổ biến. Microsoft đã nâng cấp Windows một cách khá đều đặn trong hơn hai thập niên qua. Hãng phần mềm này cứ vài năm đưa ra phiên bản Windows mới; đôi khi phiên bản mới chỉ có vài cải tiến nhỏ (so với phiên bản trước), đôi khi nó được cải tổ hoàn toàn. Các bản nâng cấp nhỏ thường đi theo sau bản nâng cấp lớn.<br /><br />Ví dụ, Windows 95 (được đưa ra năm 1995) được phát triển mới hoàn toàn so với phiên bản Windows 3.X trước đó. Phiên bản kế tiếp, Windows 98, lại là bản nâng cấp không đáng kể, và Windows 98 Second Edition (ra mắt năm 1999) thật ra chỉ sửa vài lỗi nhỏ.<br /><br />Vậy phiên bản Windows 7 sắp tới thuộc loại nào ?<br /><br /></span><span><b><span style="font-size:100%;"><span class="Apple-style-span" style="color:#FFFFFF;">Windows 1.0</span></span></b></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br />Windows được phát triển từ hệ điều hành (HĐH) DOS của Microsoft (ra đời năm 1981) – HĐH do Bill Gates và Paul Allen phát triển để chạy trên IBM PC (máy tính cá nhân), có giao diện văn bản (text) với các lệnh một từ đơn giản.<br /><br /></span><div align="center"><span><span class="Apple-style-span" style="color:#FFFFFF;"><a onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_104a_jpg');" href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_104a.jpg" target="_blank" style="text-decoration: none; "></a></span><a href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_104a.jpg" class="highslide " onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_104a_jpg');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_104a.jpg" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_6" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;">Microsoft Windows 1.0</span></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span></div><span class="Apple-style-span" style="color:#FFFFFF;">Microsoft cho rằng để PC trở nên phổ biến, nó cần phải dễ dùng với giao diện đồ họa thay vì dạng dòng lệnh. Với suy nghĩ đó, Microsoft bắt đầu phát triển Windows vào năm 1983, và sản phẩm hoàn tất (phiên bản 1.0) được đưa ra thị trường vào tháng 11 năm 1985.<br /><br />Ban đầu Windows dự kiến được đặt tên là Inteface Manager và chỉ đơn thuần là lớp vỏ đồ họa trên nền HĐH DOS. Trong khi DOS là HĐH dựa trên text, điều khiển bằng bàn phím, thì Windows hỗ trợ thao tác dùng chuột nhấn và kéo. Tuy nhiên, các cửa sổ riêng lẻ chỉ có thể xếp kề nhau trên màn hình, không thể xếp chồng lên nhau.<br /><br />Không giống các HĐH nhồi nhét đủ thứ hiện nay, phiên bản đầu tiên của Windows chỉ có vài tiện ích sơ đẳng. Đó là chương trình đồ họa Paint, trình soạn thảo văn bản Write, lịch công tác (Calendar), trình quản lý hồ sơ (Card Filer), trình ghi chú (Notepad) và đồng hồ (Clock). Ngoài ra Windows 1.0 còn có Control Panel dùng để cấu hình các tính năng của môi trường này, và MS-DOS Executive, một tiền bối thô sơ của trình quản lý file Windows Explorer ngày nay.<br /><br />Tất nhiên, Windows 1.0 không thành công. Không có nhiều nhu cầu về giao diện người dùng đồ họa với các ứng dụng dựa trên text hiện có trên IBM PC. Nhưng điều quan trọng là phiên bản Windows đầu tiên này yêu cầu năng lực điện toán vượt hơn khả năng các máy tính thời đó.<br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span></span><span style="font-size:+0;"><span><b><span class="Apple-style-span" style="color:#FFFFFF;">Windows 2.0</span></b></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span><div align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><a onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_104b_281_29_jpg');" href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_104b%281%29.jpg" target="_blank" style="text-decoration: none; "></a></span><a href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_104b%281%29.jpg" class="highslide" onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_104b_281_29_jpg');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_104b%281%29.jpg" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_3" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a><span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;">Microsoft Windows 2.0</span></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span></div><span class="Apple-style-span" style="color:#FFFFFF;">Phiên bản thứ hai của Windows, ra mắt năm 1987, là một cải tiến của Windows 1.0. Phiên bản mới có khả năng xếp chồng các cửa sổ và cho phép thu nhỏ các cửa sổ để di chuyển trên desktop (màn hình làm việc) bằng chuột.<br /><br />Nhưng điểm đáng giá nhất của Windows 2.0 là nó có sẵn 2 ứng dụng Word và Excel của Microsoft. Hai ứng dụng có giao diện đồ họa này cạnh tranh với các ứng dụng dựa trên text đang thống trị thời đó là WordPerfect và Lotus 1-2-3. Tuy nhiên không có nhiều ứng dụng khác tương thích với Windows. Một ngoại lệ đáng kể là trình dàn trang Aldus PageMaker có 1 phiên bản chạy trên Windows.<br /><br /></span><span style="font-size:100%;"><span><b><span class="Apple-style-span" style="color:#FFFFFF;">Windows 3.0</span></b></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br />Phiên bản thứ 3 - hấp dẫn. Windows 3.0, ra mắt năm 1990, là phiên bản thành công về mặt thương mại đầu tiên, bán được 10 triệu bản trong 2 năm trước khi có bản nâng cấp 3.1. Đây là phiên bản đầu tiên của Windows có khả năng đa nhiệm thực thụ, vì vậy là lựa chọn thay thế thực sự cho HĐH DOS thống trị thời đó.<br /><br /></span><div align="center"><span><span class="Apple-style-span" style="color:#FFFFFF;"><a onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_105a_jpg');" href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_105a.jpg" target="_blank" style="text-decoration: none; "></a></span><a href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_105a.jpg" class="highslide" onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_105a_jpg');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_105a.jpg" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_4" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;">Microsoft Windows 3.0</span></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span></div><span class="Apple-style-span" style="color:#FFFFFF;">Tất nhiên, Windows 3.0 có nhiều đổi mới so với phiên bản trước. Giao diện trông đẹp hơn với các nút 3D và lần đầu tiên người dùng có thể thay đổi màu sắc của desktop bên dưới (tuy nhiên chưa có hình nền). Các chương trình được kích hoạt thông qua trình Program Manager mới dựa trên biểu tượng, và trình File Manager mới thay MS-DOS Executive cũ. Đây cũng là phiên bản Windows đầu tiên có kèm trò chơi Solitair. Quan trọng không kém, Windows 3.0 có chế độ Protected/Enhanced cho phép các ứng dụng phát triển trên Windows sử dụng nhiều bộ nhớ hơn những ứng dụng dựa trên DOS.<br /><br />Sau khi Windows 3.0 ra đời, các ứng dụng được viết cho Windows phát triển mạnh trong khi các ứng dụng “phi” Windows tàn lụi dần. Chính Windows 3.0 đã giúp Word và Excel trở thành những ứng dụng thống trị trong các lĩnh vực của mình, đánh bại WordPerfect, Lotus 1-2-3 và các đối thủ khác cố thủ trên DOS.<br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span></span><span style="font-size:+0;"><span><b><span class="Apple-style-span" style="color:#FFFFFF;">Windows 3.1</span></b></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span><div align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><a onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_105b_281_29_jpg');" href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_105b%281%29.jpg" target="_blank" style="text-decoration: none; "></a></span><a href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_105b%281%29.jpg" class="highslide" onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_105b_281_29_jpg');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_105b%281%29.jpg" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_5" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a><span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;">Microsoft Windows 3.1</span></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span></div><span class="Apple-style-span" style="color:#FFFFFF;">Ra mắt năm 1992, Windows 3.1 đơn giản là bản nâng cấp, nhưng không chỉ sửa các lỗi cần thiết, nó là phiên bản Windows đầu tiên hiển thị font TrueType có thể phóng to thu nhỏ - đưa Windows thành nền tảng thực thụ cho chế bản điện tử. Còn có điểm mới trong Windows 3.1 đó là các trình bảo vệ màn hình và thao tác kéo-thả.<br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span><b><span style="font-size:100%;"><span class="Apple-style-span" style="color:#FFFFFF;">Windows 3.11 for Workgroups</span></span></b></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br />Cùng ra mắt năm 1992 là phiên bản Windows (3.11) for Workgroup (WFW), phiên bản Windows đầu tiên có thể nối mạng. Thoạt đầu được phát triển như là thành phần bổ sung cho Windows 3.0, WFW thêm các trình điều khiển (driver) và giao thức cần thiết (bao gồm TCP/IP) cho việc nối mạng ngang hàng. Điều này làm cho WFW được ghi nhận như là phiên bản Windows đầu tiên thích hợp cho môi trường làm việc cộng tác.<br /><br /></span><div align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><a onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_105c_jpg');" href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_105c.jpg" target="_blank" style="text-decoration: none; "></a></span><a href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_105c.jpg" class="highslide" onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_105c_jpg');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_105c.jpg" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_9" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a><span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;">Microsoft Windows for Workgroups</span></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span></div><span class="Apple-style-span" style="color:#FFFFFF;"><br />Kể từ WFW, các phiên bản Windows tách thành 2 dòng: dòng cho người dùng cuối, được thiết kế để dùng trên máy tính đơn, đại diện bởi Windows 3.1 và Windows 95 kế tiếp, và dòng làm việc cộng tác, được thiết kế để dùng trên nhiều máy tính nối mạng, đại diện bởi WFW và Windows NT kế tiếp.<br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span><b><span style="font-size:+0;"><span class="Apple-style-span" style="color:#FFFFFF;">Windows NT</span></span></b></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br />Phiên bản Windows kế tiếp theo con đường làm việc cộng tác là Windows NT (viết tắt của New Technology – kỹ thuật mới), được đưa ra năm 1993. Tuy nhiên NT không phải là bản nâng cấp đơn giản từ WFW, đây là HĐH 32-bit thật sự đầu tiên được thiết kế cho các doanh nghiệp hay tổ chức có hệ thống máy tính nối mạng. (Thời đó, các phiên bản Windows cho người dùng cuối vẫn còn là HĐH 16-bit).<br /><br /></span><div align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><a onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_105d_jpg');" href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_105d.jpg" target="_blank" style="text-decoration: none; "></a></span><a href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_105d.jpg" class="highslide" onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_105d_jpg');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_105d.jpg" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_10" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a><span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;">Microsoft Windows NT</span></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span></div><span class="Apple-style-span" style="color:#FFFFFF;">Windows NT là một nhánh của HĐH OS/2 do Microsoft hợp tác phát triển với IBM. Khi mối quan hệ hợp tác này đổ vỡ, IBM tiếp tục với OS/2, còn Microsoft đổi tên phiên bản OS/2 của mình thành Windows NT.<br /><br />Phục vụ cho khách hàng doanh nghiệp, Windows NT chỉ có 2 bản: Workstation và Server. NT Workstation dành cho máy tính cá nhân trong mạng doanh nghiệp, còn NT Server phục vụ cho tất cả máy tính kết nối với nó.<br /><br />Với khả năng nối mạng được cải thiện và hoạt động ổn định, NT trở thành HĐH được sử dụng chủ yếu cho các máy trạm và máy chủ doanh nghiệp trên toàn cầu.<br /><br /></span><span style="font-size:100%;"><span><b><span class="Apple-style-span" style="color:#FFFFFF;">Windows 95</span></b></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br />Trở lại dòng Windows dành cho người dùng cuối, Microsoft đã sẵn sàng một phiên bản mới vào ngày 24/8 năm 1995. Phiên bản này, Windows 95, có lẽ là đợt phát hành Windows lớn nhất từ trước đến giờ.<br /><br /></span><div align="center"><span><span class="Apple-style-span" style="color:#FFFFFF;"><a onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_107a_jpg');" href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_107a.jpg" target="_blank" style="text-decoration: none; "></a></span><a href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_107a.jpg" class="highslide" onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_107a_jpg');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_107a.jpg" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_12" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;">Microsoft Windows 95</span></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span></div><span class="Apple-style-span" style="color:#FFFFFF;">Việc phát hành Windows 95 là một sự kiện truyền thông độc đáo, với truyền hình trực tiếp và người mua xếp hàng bên ngoài các cửa hàng chờ thời điểm phát hành lúc nửa đêm. Bản Windows này đã tạo nên cơn sốt cùng với bản nhạc “Start Me Up” của Rolling Stone.<br /><br />Điểm đáng giá nhất? Windows 95 trông đẹp hơn và làm việc tốt hơn, cả 2 điều mà người dùng đã chờ đợi nhiều năm trời. Mã nguồn Windows 95 được viết lại phần lớn, cải thiện đáng kể giao diện người dùng và chuyển Windows thành nền tảng 32-bit “giả” (vẫn còn nhân 16-bit để tương thích với các ứng dụng cũ).<br /><br />Windows 95 giới thiệu thanh tác vụ (Taskbar) lưu giữ các nút của tất cả ứng dụng đang mở. Nó cũng là phiên bản Windows đầu tiên dùng nút Start và trình đơn (menu) Start (do gắn với bản nhạc của Rolling Stone); các liên kết tắt (shortcut) trên desktop, tác vụ nhấn chuột phải và tên file dài cũng xuất hiện trong phiên bản này.<br />Trình duyệt Internet Explorer (IE) cũng xuất hiện cùng với Windows 95 – mặc dù không phải đưa ra trong bản đầu. IE 1.0 thoạt đầu có ở gói bổ sung cho phiên bản Windows 95 Plus; phiên bản 2.0 được tích hợp trong Service Pack 1 của Windows 95 đưa ra vào tháng 12/1995.<br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span></span><span style="font-size:+0;"><span><b><span><span class="Apple-style-span" style="color:#FFFFFF;">Windows 98</span></span></b></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span><div align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><a onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_107b_jpg');" href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_107b.jpg" target="_blank" style="text-decoration: none; "></a></span><a href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_107b.jpg" class="highslide" onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_107b_jpg');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_107b.jpg" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_13" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a><span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;">Microsoft Windows 98</span></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span></div><span class="Apple-style-span" style="color:#FFFFFF;">Cũng được đặt tên theo năm phát hành (1998), Windows 98 là cải tiến của phiên bản trước, nó khá giống Windows 95. Một số cải tiến hữu ích như hỗ trợ USB, chia sẻ kết nối Internet (Internet Connection Sharing) và hệ thống file FAT32, tất cả đều đáng giá nhưng không cái nào có tính đột phá.<br /><br />Microsoft đưa ra phiên bản “Second Edition” cập nhật cho Windows 98 vào năm 1999 nhưng không đặt tên là Windows 99. Phiên bản này thậm chí còn có ít thay đổi đáng kể hơn, hầu như chỉ sửa lỗi.<br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span></span><span style="font-size:100%;"><span><b><span><span class="Apple-style-span" style="color:#FFFFFF;">Windows Me</span></span></b></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span><div align="center"><span><span class="Apple-style-span" style="color:#FFFFFF;"><a onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_108a_jpg');" href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_108a.jpg" target="_blank" style="text-decoration: none; "></a></span><a href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_108a.jpg" class="highslide" onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_108a_jpg');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_108a.jpg" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_14" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;">Microsoft Windows Me</span></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span></div><span class="Apple-style-span" style="color:#FFFFFF;">Phiên bản “thiên niên kỷ” của Windows ra mắt vào năm 2000. Windows Me (Me viết tắt của Millennium, nghĩa là thiên niên kỷ) có lẽ là sai lầm lớn nhất của Microsoft, là một bản nâng cấp nhỏ nhưng dường như gây trục trặc hơn là sửa lỗi.<br /><br />Phiên bản mới này nâng cấp các tính năng đa phương tiện và Internet của Windows 98, thêm ứng dụng Windows Movie Maker và giới thiệu công cụ System Restore – tất cả đều là những thứ tốt. Không may, Windows Me khá nhiều lỗi và thường bị treo. Điều này làm cho nhiều người dùng – và hầu hết doanh nghiệp – hầu như không ngó ngàng đến bản nâng cấp này.<br /><br /></span><span style="font-size:+0;"><span><b><span class="Apple-style-span" style="color:#FFFFFF;">Windows 2000</span></b></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span><div align="center"><a href="http://www.operating-system.org/betriebssystem/bsgfx/microsoft/win2k-scr-01.gif" class="highslide" onclick="pageTracker._trackPageview ('/outgoing/http_www_operating_system_org_betriebssystem_bsgfx_microsoft_win2k_scr_01_gif');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><table width="600"><tbody><tr><td width="20" class="td1" style="font: normal normal normal 12px/normal tahoma, verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://xixam.com/ha-dieu-hanh-windows/highslide/graphics/warning.gif" width="350" height="16" alt="" border="0" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></td><td class="td2" style="font: normal normal normal 12px/normal tahoma, verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; "></td></tr></tbody></table><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.operating-system.org/betriebssystem/bsgfx/microsoft/win2k-scr-01.gif" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_26" width="600" height="439" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span></div><span class="Apple-style-span" style="color:#FFFFFF;">Được đưa ra gần như đồng thời với Windows Me dành cho người dùng cuối, Windows 2000 (hay Windows 2K) là bản nâng cấp thành công hơn cho dòng Windows làm việc cộng tác. Tiếp sau Windows NT (thật ra NT có đến 3 phiên bản, phiên bản đầu là 3.1, NT 3.5 ra mắt năm 1994, và NT 4.0 ra mắt năm 1996), Windows 2000 (còn được gọi là NT 5.0) cũng nhắm đến thị trường doanh nghiệp.<br /><br />Khác NT chỉ có 2 bản (Workstation và Server), Windows 2000 có đến 5 bản khác nhau: Professional, Server, Advanced Server, Datacenter Server và Small Business Server. Tất cả các bản có các tính năng giao diện như của Windows 95/98 và được làm cho trông tinh vi hơn.<br /><br /></span><span style="font-size:100%;"><span><b><span><span class="Apple-style-span" style="color:#FFFFFF;">Windows XP</span></span></b></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span><div align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><a onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_108b_jpg');" href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_108b.jpg" target="_blank" style="text-decoration: none; "></a></span><a href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_108b.jpg" class="highslide" onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_108b_jpg');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_108b.jpg" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_15" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a><span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;">Microsoft Windows XP</span></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span></div><span class="Apple-style-span" style="color:#FFFFFF;">Các dòng Windows dành cho người dùng cuối và doanh nghiệp được kết hợp lại (phần mã lõi) với phiên bản Windows XP đưa ra năm 2001. Đây là phiên bản Windows đầu tiên mang tính tin cậy cấp doanh nghiệp đến thị trường người dùng cuối – và tính thân thiện người dùng cuối đến thị trường doanh nghiệp. XP kết hợp những gì tốt nhất của dòng Windows 95/98/Me với cơ chế vận hành 32-bit ổn định của Windows NT/2000, và đặt vào một giao diện người dùng cách tân. Nói một cách đơn giản, XP ghép giao diện Windows 95/98/Me lên phần lõi NT/2000, loại bỏ mã DOS bên dưới trong các phiên bản Windows dành cho người dùng cuối trước đây.<br /><br />Với Windows XP, Microsoft bắt đầu phân khúc thị trường với nhiều phiên bản khác nhau, mỗi phiên bản có tập tính năng đặc trưng riêng. Các phiên bản khác nhau gồm XP Home Edition, XP Professional (dành cho người dùng doanh nghiệp), XP Media Center Edition, XP Tablet PC Edition và XP Startter Edition (dành cho người dùng ở các nước đang phát triển).<br /><br />Windows XP trông đẹp hơn và làm việc nhanh hơn so với Windows 95/98 hay Windows 2000 (ổn định hơn nhiều so với Windows Me). Với tính năng Fast User Switching, XP cho phép dễ dàng chia sẻ máy tính cho nhiều người dùng.<br /><br /></span><span style="font-size:+0;"><span><b><span class="Apple-style-span" style="color:#FFFFFF;">Windows Server 2003</span></b></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span><div align="center"><a href="http://www.sbs-rocks.com/sbs2k3/images/gui-1.jpg" class="highslide" onclick="pageTracker._trackPageview ('/outgoing/http_www_sbs_rocks_com_sbs2k3_images_gui_1_jpg');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><table width="581"><tbody><tr><td width="20" class="td1" style="font: normal normal normal 12px/normal tahoma, verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://xixam.com/ha-dieu-hanh-windows/highslide/graphics/warning.gif" width="350" height="16" alt="" border="0" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></td><td class="td2" style="font: normal normal normal 12px/normal tahoma, verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif; "></td></tr></tbody></table><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.sbs-rocks.com/sbs2k3/images/gui-1.jpg" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_24" width="581" height="500" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span></div><span class="Apple-style-span" style="color:#FFFFFF;"><br />Tuy hợp nhất về phần mã lõi nhưng Microsoft vẫn phát triển và đưa ra 2 dòng Windows khác nhau dành cho người dùng cuối và doanh nghiệp. Tháng 4/2003, Windows Server 2003 được đưa ra, đây là bản nâng cấp đáng kể so với Windows Server 2000 với nhiều tính năng bảo mật mới, trình Mananger You Server mới giúp dễ dàng cấu hình các vai trò máy chủ, hiệu suất và tính ổn định cải thiện đáng kể.<br /><br /></span><span style="font-size:100%;"><span><b><span><span class="Apple-style-span" style="color:#FFFFFF;">Windows Vista</span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span></b></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span><div align="center"><span><span class="Apple-style-span" style="color:#FFFFFF;"><a onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_110a_jpg');" href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_110a.jpg" target="_blank" style="text-decoration: none; "></a></span><a href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_110a.jpg" class="highslide" onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_110a_jpg');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_110a.jpg" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_16" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span><span><span><span class="Apple-style-span" style="color:#FFFFFF;">Microsoft Windows Vista</span></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span></div><span class="Apple-style-span" style="color:#FFFFFF;">Được đưa ra năm 2007, phiên bản Windows này mở rộng chức năng của XP và tăng tính tin cậy và bảo mật, cải tiến tính năng đa phương tiện số và bổ sung giao diện Aero 3D hào nhoáng.<br /><br />Chúng ta hãy bắt đầu với giao diện, nó yêu cầu khả năng xử lý đồ họa cao, mạnh, vì vậy hạn chế khả năng nâng cấp lên Vista của nhiều máy tính cũ. Giao diện Aero hiển thị các thành phần 3D thật sự với hiệu ứng nhìn xuyên suốt như kính. Và mọi thứ khác trong Vista cũng trông hơi khác.<br /><br />Các biểu tượng thư mục (folder) và tập tin (file) giờ hiển thị hình thu nhỏ nội dung bên trong. Khi bạn chuyển qua lại giữa các ứng dụng đang mở, các cửa sổ xoay và chuyển sang hiển thị trong không gian 3 chiều. Các cửa sổ mượt mà và trong mờ, tạo cảm giác chiều sâu khi bạn xem nhiều cửa sổ trên màn hình. Thậm chí còn có thanh Sidebar (cạnh màn hình) đặt các gadget – những ứng dụng nhỏ được thiết kế chuyên cho một công việc cụ thể.<br /><br />Bên dưới, Vista được thiết kế để chạy ổn định và an toàn hơn so với Windows XP. Một trong những tính năng bảo mật – bị nhiều người dùng phàn nàn là User Account Control, xen ngang thậm chí những hoạt động thông thường nhất để yêu cầu người dùng chấp thuận. Động cơ tốt (để ngăn chặn truy cập hệ thống trái phép), nhưng việc thực hiện quá “cứng nhắc và thô bạo” đối với hầu hết người dùng.<br /><br />Tệ hơn, nhiều người dùng gặp trục trặc khi nâng cấp máy tính cũ lên Vista. Nhiều thiết bị cũ không có trình điều khiển tương thích Vista (thật ra đây là vấn đề với nhiều phiên bản nâng cấp Windows), và một số chương trình thời XP không làm việc được trên Vista.<br /><br />Tuy nhiều người dùng không gặp vấn đề gì, nhưng cũng có những người kêu ca gây “tiếng xấu” cho Vista. Có lẽ đây là một trong những nguyên nhân làm cho Microsoft vội phát triển phiên bản kế tiếp Vista – Windows 7.<br /><br /></span><span style="font-size:+0;"><span><b><span class="Apple-style-span" style="color:#FFFFFF;">Windows Server 2008</span></b></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span><div align="center"><a href="http://www.aspvn.net/Uploads/Tin-tuc-CNTT/San-pham-moi/win2008.jpg" class="highslide" onclick="pageTracker._trackPageview ('/outgoing/http_www_aspvn_net_Uploads_Tin_tuc_CNTT_San_pham_moi_win2008_jpg');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.aspvn.net/Uploads/Tin-tuc-CNTT/San-pham-moi/win2008.jpg" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_1" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span></div><span class="Apple-style-span" style="color:#FFFFFF;"><br />Ban đầu được biết đến với tên mã Longhorn, Windows Server 2008 được đưa ra ngày 27/2/2008. (Đến giờ, các phiên bản Windows dòng server vẫn giữ quy ước đặt tên theo năm ra mắt). Windows Server 2008 được xây dựng trên những tiến bộ công nghệ và bảo mật được giới thiệu lần đầu với Windows Vista, và có tính mô-đun cao hơn phiên bản trước - Windows Server 2003.<br /><br />Tại Professional Developers Conference 2008, Microsoft đã giới thiệu Windows Server R2 (chỉ có bản 64-bit) như là biến thể dòng server của Windows 7.<br /><br /></span><span style="font-size:100%;"><span><b><span><span class="Apple-style-span" style="color:#FFFFFF;">Windows 7</span></span></b></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span><div align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><a onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_110b_jpg');" href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_110b.jpg" target="_blank" style="text-decoration: none; "></a></span><a href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_110b.jpg" class="highslide" onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_110b_jpg');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_110b.jpg" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_17" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a><span><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span><span><span class="Apple-style-span" style="color:#FFFFFF;">Microsoft Windows 7</span></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span></div><span class="Apple-style-span" style="color:#FFFFFF;">Phiên bản mới nhất của Windows được định lịch ra mắt ngày 22/10 tới. Phiên bản này được phát triển trên cùng mã lõi với Windows Vista và Windows Server 2008.<br /><br />Chỉ 2 năm ngắn ngủi sau khi đưa ra Windows Vista, đây không phải là bản nâng cấp lớn (đơn giản vì không có đủ thời gian phát triển). Windows 7 trong mối quan hệ với Windows Vista, tương tự Windows 98 nâng cấp Windows 95.<br /><br />Những thay đổi trong Windows 7? Trước hết, nó chỉnh sửa nhiều thứ của Vista mà người dùng không thích. Tương thích tốt hơn hơn với phần cứng và phần mềm cũ, và thậm chí có cả Windows XP Mode (thực ra là máy tính ảo chạy HĐH Windows XP) cho phép bạn chạy các ứng dụng thời XP. Và User Account Control bớt "thô bạo" hơn.<br /><br />Ngoài ra, Windows 7 có một vài thay đổi giao diện nhỏ nhưng hay. Sidebar được loại bỏ, giờ bạn có thể đặt các gadget ngay trên desktop. Có một chế độ Aero Peek mới cho phép bạn nhìn “phía sau” tất cả cửa sổ đang mở, cũng như các tác vụ Aero Snap mới cho phép bạn dễ dàng di chuyển và phóng to tối đa các cửa sổ.<br /><br />Tuy nhiên, thay đổi lớn nhất là ở thanh tác vụ, một vùng trên màn hình được giới thiệu đầu tiên trong Windows 95. Thanh tác vụ mới trong Windows 7 cho phép bạn đặt cả các cửa sổ đang mở cùng với ứng dụng và tài liệu ưa thích. Thanh tác vụ mới cao hơn một chút và hiển thị các nút nhỏ hơn chỉ có biểu tượng. Nhấn phải một nút trên thanh tác vụ và giờ bạn thấy danh sách các tài liệu mở gần đây cùng các tác vụ hữu ích; rê chuột trên nút đại diện ứng dụng đang mở và bạn nhìn thấy hình thu nhỏ tất cả tài liệu đang mở. Nó thay đổi cách thức bạn làm việc, theo cách tốt hơn.<br /><br /></span><span style="font-size:+0;"><span><b><span class="Apple-style-span" style="color:#FFFFFF;">Và Windows kế tiếp ?</span></b></span></span><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span><div align="center"><span class="Apple-style-span" style="color:#FFFFFF;"><a onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_110c_jpg');" href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_110c.jpg" target="_blank" style="text-decoration: none; "></a></span><a href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_110c.jpg" class="highslide" onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_110c_jpg');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_110c.jpg" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_19" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span></div><span class="Apple-style-span" style="color:#FFFFFF;">Các chuyên gia tại Microsoft liên tục làm việc trên các phiên bản mới của hệ điều hành của họ. Windows không hề chịu đứng yên.<br /><br />Theo một số thông tin trên mạng, hiện Windows 8 (tên mã “Midori”), phiên bản kế tiếp Windows 7, đang được phát triển và dự kiến sẽ ra mắt vào năm 2012. Một trong những tính năng hấp dẫn mà Microsoft đang phát triển là Distributed File System Replication (DFSR) - dịch vụ cho phép đồng bộ file và folder trên nhiều server có khả năng xuất hiện trong Windows 8 và Windows 8 Server (hoặc Windows Server 2011, theo quy ước đặt tên dòng server trước giờ).<br /><br />Theo “truyền thống”, sau phiên bản nâng cấp nhỏ (Windows 7), Windows 8 sẽ là phiên bản nâng cấp lớn?<br /><br /></span><span style="font-size:85%;"><span><b><span class="Apple-style-span" style="color:#FFFFFF;">Windows CE và Mobile</span></b></span></span><span style="font-size:85%;"><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br />Ngoài 2 dòng Windows dành cho máy tính và server, Microsoft còn phát triển các dòng Windows CE (Compact Edition) dành cho thiết bị có cấu hình phần cứng hạn chế và hệ thống nhúng, Pocket PC và Windows Mobile (phát triển từ Windows CE) dành cho thiết bị di động.</span></span></span></b></span></span></div><div><span class="Apple-style-span" style="font-family:tahoma, verdana, geneva, lucida, 'lucida grande', arial, helvetica, sans-serif;"><span class="Apple-style-span" style=" -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;font-size:small;"><span class="Apple-style-span" style="font-size:12px;"><div align="center"><span style="font-size:85%;"><a href="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_110d.jpg" class="highslide" onclick="pageTracker._trackPageview ('/outgoing/http_www_pcworld_com_vn_pcworld_info_misc_2009_10_A0910_110d_jpg');return hs.expand(this)" style="outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; "><span class="Apple-style-span" style="color:#FFFFFF;"><img src="http://www.pcworld.com.vn/pcworld/info/misc/2009/10/A0910_110d.jpg" border="0" alt="" onload="HSImageResizer.createOn(this);" id="hs_imageresizer_container_20" style="cursor: url(http://xixam.com/highslide/graphics/zoomin.cur), pointer !important; " /></span></a></span></div><div align="center"><span class="Apple-style-span" style="font-size:small;"><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span></span></div><div align="center"><span class="Apple-style-span" style="font-size:small;"><span class="Apple-style-span" style="color:#FFFFFF;"><br /></span></span></div></span></span></span></div><span class="Apple-style-span" style="color:#FFFFFF;"><br /><br /></span><br /></div>Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com0tag:blogger.com,1999:blog-7097348045257270421.post-21246295546581705752009-12-18T14:00:00.000+07:002009-12-18T14:00:05.013+07:00Mã hóa thông tin với thư viện mở Botan.Bài này viết với mục đích giới thiệu bạn sử dụng một thư viện mã nguồn mở viết bằng C++ để mã hóa thông tin đó là sử dụng thư viện Botan.<div><br /><div><b><span class="Apple-style-span" style="font-size:medium;">Chuẩn bị</span></b></div><div><span class="Apple-style-span" style="color:#CC0000;"><b>Mã hóa thông tin là gì ?</b></span></div><div>Mã hóa thông tin đơn giản là việc bạn làm thay đổi dạng thức ban đầu của dư liệu khiên chẳng ai có thể biết nó là cái gì. Nếu không có giải mã</div><div><br /></div><div><b><span class="Apple-style-span" style="color:#CC0000;">Mã công khai và mã cá nhân là gì ?</span></b></div><div>Mã <i>công khai</i> và mã <i>cá nhân</i> là một cặp được sử dụng trong các giao dịch trên mạng. Giao dịch ở đây bạn có thể hiểu theo nghĩa là một giao thức ví dụ https hoặc việc thanh toán trong thương mại điện tử. </div><div><br /></div><div>Đầu tiên bạn tham gia giao dịch bạn sẽ được cung cấp một mã công khai và một mã cá nhân, các mã này được các giải thuật mã hóa sinh ra cho bạn (RSA hoặc SHA... ) có nghĩa là <i>mã</i> <i>công khai</i> của bạn ai cũng biết, nhưng <i>mã</i> <i>cá nhân</i> của bạn thì chỉ mình bạn biết.</div><div><br /></div><div>Khi giao dịch thông tin người khác gửi cho bạn <span class="Apple-style-span" style="text-decoration: underline;">họ sẽ dùng<i> mã công khai</i> của bạn để mã hóa lại</span>, và hiển nhiên thông tin đo khi gửi đi có thể bị người khác đọc nhưng người đó sẽ không để biết được nội dung của thông tin nếu họ không có <i>mã cá nhân</i> để giải mã. Chỉ mình bạn có mã đó và bảo đảm rằng <span class="Apple-style-span" style="text-decoration: underline;">mình bạn có thể giải mã và đọc được nội dung bằng </span><i><span class="Apple-style-span" style="text-decoration: underline;">mã cá nhân</span></i><span class="Apple-style-span" style="text-decoration: underline;"> của bạn</span></div><div><br /></div><div>Ứng dụng của chúng ta là tìm hiểu cơ chế làm việc và mã hóa thông tin theo nội dung trên</div><div><br /></div><div><b><span class="Apple-style-span" style="font-size:medium;">Giới thiệu thêm.</span></b></div><div>RSA là một giải thuật nổi tiếng sử dụng để sinh ra mã công khai và mã cá nhân nó cũng có thể dùng để mã hóa bình thường.</div><div><br /></div><div>SHA cũng là giải thuật sinh mã giống như RSA. </div><div><br /></div><div>MD5: Giải thuật mã hóa một chiều mạnh và gần như không thể phá hoặc trong tình huống nếu có <i>giải</i> <i>mã được</i> thì cũng không mấy có ý nghĩa. Giải mã được không có nghĩa là từ chỗi mã hóa của MD5 bạn dùng một giải thuật ngược để suy ra chỗi ban đâu, việc giải mã MD5 chỉ sử dụng những máy chủ cực mạnh với một database không lồ chứa nội dung của rất nhiều các tổ hợp được mã hóa để tìm ra chuỗi ban đầu. :) nghe có vể cụ trâu nhưng việc giải mã này là hoàn toàn có thể và nó gần như chinh phục mọi giải thuật mã hóa.</div><div><br /></div><div><br /></div><div><b><span class="Apple-style-span" style="font-size:medium;">Trang bị :</span></b></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>- <a href="http://botan.randombit.net/download.html">Download Botan</a> </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>- Môi trường phát triển (VS 2008, CodeBlock,...) vì đã là C++ thì không kén chọn lắm ban thoải mái cho công cụ phát triển và tự do về mục đích. Trong bài viết này tôi sử dụng môi trường .NET VS 2008 để phát triển. các code sử dụng theo chuẩn Opent bạn có thể build trong những môi trường khác tương tự mà không phải lo về việc chỉnh lại code.</div><br /><div>Nội dung thực hiện.<br /><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQbiqAhMtx_wCquqIfFjkJX_0KndYLETukdWFkIXs5UM5q2aTtNpzJAi6QWOnoNjnGW_ioNfJk4PPAJp1mh6jBV81Ujvfh9VQm5gJeO35BVZXm3RXzBEEnAMa4Ju8SItEjlsZ61Qd0zMEO/" /><br /><br /><br /><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu2GiYwTbmdzGvtxOdUVn80DiIKp1xjKbMS83JVrhgbHAgMSZUwUazwYw5hrk1SPbxXw8B0XkSP-eUA9AY1oZ2pP8INKX1qNmFGtoQsyAqR0kou0YIQo9ZnwkkS78aDNHlDfil6xGSBacP/" /><br /><br /></div><div><br /></div><div><div><b><span class="Apple-style-span" style="font-size:large;"><span class="Apple-style-span" style="color:#003300;">Check password</span></span></b></div><div><span class="Apple-style-span" style="color:#003300;"><span class="Apple-style-span" style="font-size:large;"><b><br /></b></span></span></div><div><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"> </span>// file password</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>std::string filePath = _name + PERSON_PASSWORD_FILE;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>UFile inFile(filePath);</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>inFile.CreateInFileStream();</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if(!true)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>return false;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>else</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// giai thuat hash<span class="Apple-tab-span" style="white-space:pre"> </span>(SHA-512)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>std::string hash = PERSON_PASSWORD_HASH;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// tao bo su ly ma hoa</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>/* </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>pipe la mot thanh phan rat quan trong cua Botan su dung de ma hoa du lieu </div><div><span class="Apple-tab-span" style="white-space:pre"> </span>tu cac nguon dau vao khac nhau. ban tuong tuong no nhu mot factory partten</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>*/</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>Botan::Pipe pipe(new Botan::Hash_Filter(hash),new Botan::Hex_Encoder);</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>pipe.start_msg();</div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// chuyen vao bo su ly ma hoa voi pass nhan dc cua user.</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>pipe.write(_pass);</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>pipe.end_msg();</div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// doc pass da dc ma hoa luu tren UserName\password.txt</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>std::string storedPass = inFile.ReadString();</div><div><br /></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// lay lai gia tri _pass sau khi ma hoa.</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>_pass = pipe.read_all_as_string(0);</div><div><br /></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if(_pass.compare(storedPass)!=0)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>return false;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div><br /></div></div><div><br /></div><div><b><span class="Apple-style-span" style="font-size:large;"><span class="Apple-style-span" style="color:#003300;">Tạo public key và private key.</span></span></b></div><div><div> <span class="Apple-tab-span" style="white-space:pre"> </span></div><div><span class="Apple-tab-span" style="white-space:pre"></span><span class="Apple-tab-span" style="white-space:pre"> </span>// chon so bit ma hoa</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>std::string strBits = PERSON_BITS_FOR_RSA;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>Botan::u32bit bits = std::atoi(strBits.c_str());</div><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>std::string strPubFile = _name + PERSON_FILEPATH_PUBLIC_KEY;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>std::string strPriFile = _name + PERSON_FILEPATH_PRIVATE_KEY;</div><div><br /></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// fiel public key</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>std::ofstream pub(strPubFile.c_str());</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// fiel private key</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>std::ofstream priv(strPriFile.c_str());</div><div><br /></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>try</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// sinh tu dong doi tuong.</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>Botan::AutoSeeded_RNG rng;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// sinh key kieu RSA</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>Botan::RSA_PrivateKey rsaKey(rng,bits);</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>// sinh ma public rsa</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>pub <<><div><span class="Apple-tab-span" style="white-space:pre"> </span>// sinh ma private rsa</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>priv <<><div><span class="Apple-tab-span" style="white-space:pre"> </span></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>pub.close();</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>priv.close();</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>catch(std::exception& e)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>{</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if(pub.is_open())</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>pub.close();</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>if(priv.is_open())</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>priv.close();</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>throw "Khong the tao key";</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>return false;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><div><br /></div><div>...>></div><div><br /></div></div><div>đã hoàn thành song chương trình. Bạn nào có nhu cầu tìm hiểu liên hệ mình gửi code cho. </div><div><br /></div><div>.../...</div><div><br /></div></div></div></div>Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com2tag:blogger.com,1999:blog-7097348045257270421.post-54117964448913770902009-12-08T13:56:00.005+07:002009-12-08T14:42:28.909+07:00Get Links From MediaFireLà một người mê phim ảnh bạn sẽ không ít lần download film từ site MediaFire.com, có thể nói đây là một site hoàn toàn tuyện vời, tốc độ down nhanh kinh hồn và cho phép down nhiều file cùng lúc.<div>Nhưng cũng dở nếu phải thực hiện với từng link một.</div><div>minh đã viết một tool dùng để lấy tất cả link download và dùng với IDM để down về.</div><div><br /></div><div><b><span class="Apple-style-span" style="font-size:medium;">Download và sử dụng</span></b></div><div>download: <a href="http://www.mediafire.com/?zywzlmhnjyj">getlinksMF</a> </div>sử dụng yêu cầu bạn phải cài đặt .NET Framework (>=2.0). Nếu bạn dùng window 7 hoặc vista thì mặc nhiên bộ .NET framework này đã tích hợp trong windows của bạn bạn chỉ việc down về và chạy.<div><br /></div><div><div>Nếu bạn không có IDM bạn có thể download <a href="http://www.mediafire.com/?mkit23nixcz">từ đây</a> </div><div>cài ra và thực hiện theo hướng dẫn crack trong file .rar</div><div><br /></div></div><div>Bạn nào có hứng thú tìm hiểu thì <a href="http://linhdkl.blogspot.com/">mail</a> tôi gửi code cho.<br /><div><br /></div><div><div><b>Giao diện trương trình</b></div><div><br /><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjakDoMLJDrvKmt1lWvsnEsBljzTppGP31lOvX8iOiOLLX_6asIEbMKpg6ZydXbqT7q4A74zhKhGcL_SyEvEBWRIZqGN6qfDyiHpIncWXAwe13J1ZP4uqzBkHPBDgUPnVCfJxgc2hMLfZyt/" /><br /></div><br />Sau khi bạn lấy được link bạn save ra thanh file .txt sau đó bạn import file này vào IDM để IDM down nó về.<br /><br />và phần này hướng mình hướng dẫn sử dụng IDM để add link từ file .txt vào IDM.<div><br /></div><div><br /><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjsbC9avK-O9Ta1o2dy3hL-B6_cv-ATaZjTFB9_2UKRvVFklFzmhmY7ag-FfSwWTyi0XUjOknm14moM3dujGm-W7Q4WBiNGJgznJgUvhiKBj9TLfCzH_pqP__OGXVKxdIdF5vDVE4-6ba_/s912/IDM1.png" /><br /><br /><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj35GzgmBUPpk0Cusqb3oPP0Od_VGbHXFYam_jio1_A5JwRL3FlkGCk0nU9ieAIXHavFP28Zz9fK5_5a3zbjs_2SPbDP8iZ7EW4pGFYyKP1ci3cWuQEx_ibFFNq1SwimuDI3uHjDJtkb4LF/s800/IDM2.png" /><br /><br /><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsLxgGP4n9-Oi4QRQkcNEnIr_rCgoSMN6ajGUMHAMXckbGayXimEvDIYzt0yNvTq6LVKIyu3Eda3hZb4vRNSObPOP6k5IrPmFEA441g9ZXlv-XYdSOlgGyEBUtxill_uK5XyzMorfLdCHj/" /><br /><br /><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaRh3JOZm92ctY0nL1d_MZWMvaI3fs_acHyUcZqSoFO1YxlpDlzSubOhHzuTQfeRRD0h-oX80FCuHj0wnaINxECZzoOAhFl3ThVZAtK70Gi1Y3aPvRdGlSssqrAxe3vMEbw1IfvClvtenY/" /><br /></div></div></div>Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com1tag:blogger.com,1999:blog-7097348045257270421.post-45191623923329029632009-10-03T12:48:00.000+07:002009-10-03T12:48:00.357+07:00Quy luật số 9 và đàn ôngHôm vừa rồi đi nghỉ mát về nhân cái sự nhàn rỗi xếp lôi chuyện tình dục ra bàn tán. Qua câu chuyện có một quy luật khá hay về đàn ông và con số 9. Nội dung quy luật phát biểu như sau.<br /><br />Lấy hàng chục số tuổi của người đàn ông nhân vơi 9 sẽ ra số lần quan hệ tối đa mà người đó nên làm.<br />ta sẽ có những con số sau:<br /><br />2 x 9 = 18 tức là 1 tuần 8 lần với những người đàn ông từ 20 trở lên<br />3 x 9 = 27 với người đàn ông đầu 3 thì 2 tuần 7 lần<br />4 x 9 = 36 ...<br />5 x 9 = 45 ...<br /><br />tôi thì chưa có nhiều kinh nghiệm về mấy cái vụ này nhưng thấy xếp rât tâm đắc với quy luật số 9 của đàn ông !<br /><br /><img src="http://03bx.com/images/smilies/10.gif" alt="" title="10" class="inlineimg" border="0" /> <img src="http://03bx.com/images/smilies/10.gif" alt="" title="10" class="inlineimg" border="0" /> ...<br /><br />Chị em đọc tham khảo có gì sau này thông cảm cho chông nhé <img src="http://03bx.com/images/smilies/10.gif" alt="" title="10" class="inlineimg" border="0" />Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com1tag:blogger.com,1999:blog-7097348045257270421.post-18594272161592193792009-09-20T12:41:00.000+07:002009-09-20T12:41:00.713+07:00Tuyển tập phim Kẻ hủy diệt<strong>Tuyển tập phim Kẻ hủy diệt<br /><br /></strong>Là bộ phi khoa học giả tưởng mà ít nhất các bạn không xem thì cũng phải nghe nói đến một lần. Bộ phim gắn liền với tên tuổi của diễn viên người Mỹ gốc Italya Arnold Schwarzenegger - hiện ông là thị trường một bang ở Mỹ. Mình đọc được ở đâu đó là Arnold dường như được sinh ra cho vai diễn Kẻ hủy diệt (phần 1-3).<br /><br /><br /><b><span style="color:DarkRed;"> Kẻ Hủy Diệt (1984)</span></b><br />Đạo diễn : James Cameron<br />Hãng sản xuất :<br /><br />Năm 2029, trái đất bị thống trị bởi thế hệ của những robot thông minh - mạng skynet. Nhân loại đang chiến đấu chống lại những cỗ mãy diết tróc đó dưới sự lãnh đạo tài ba của Jonh Connor. Những kẻ cai trị Trái Đất quyết định gửi về quá khứ một robot sát thủ mang tên The Terminator - Kẻ Hủy Diệt để thay đổi quá khứ. Nhiệm vụ của tên robot này là giết chết Sarah Connor, người có vai trò quyết định trong cuộc kháng chiến của nhân loại sau này.<br /><br /><img src="http://www.get.vn/uploads/movie/l/S/Y/lSYPLC7EPTv/thumbnail/350x350/C9DXEC74TmI.jpg" alt="" class="tcattdimgresizer" onload="NcodeImageResizer.createOn(this);" border="0" /><br /><br />download<br /><a href="http://www.mediafire.com/?mztfi4ijj3f" target="_blank">http://www.mediafire.com/?mztfi4ijj3f</a><br /><a href="http://www.mediafire.com/?wwynnmdtdzd" target="_blank">http://www.mediafire.com/?wwynnmdtdzd</a><br /><a href="http://www.mediafire.com/?tzjzqong3d4" target="_blank">http://www.mediafire.com/?tzjzqong3d4</a><br /><a href="http://www.mediafire.com/?nmkj1nmvnnw" target="_blank">http://www.mediafire.com/?nmkj1nmvnnw</a><br /><a href="http://www.mediafire.com/?tybrj4jqjdy" target="_blank">http://www.mediafire.com/?tybrj4jqjdy</a><br /><a href="http://www.mediafire.com/?awiomgymnkr" target="_blank">http://www.mediafire.com/?awiomgymnkr</a><br /><br />or<br /><a href="http://www.megaupload.com/?d=MSILLAXC" target="_blank">http://www.megaupload.com/?d=MSILLAXC</a><br /><a href="http://www.megaupload.com/?d=Q7ZO2A95" target="_blank">http://www.megaupload.com/?d=Q7ZO2A95</a><br /><a href="http://www.megaupload.com/?d=Y8IV80E9" target="_blank">http://www.megaupload.com/?d=Y8IV80E9</a><br /><a href="http://www.megaupload.com/?d=RMZ1CJGR" target="_blank">http://www.megaupload.com/?d=RMZ1CJGR</a><br /><a href="http://www.megaupload.com/?d=IXWH0DQ2" target="_blank">http://www.megaupload.com/?d=IXWH0DQ2</a><br /><br />or<br /><a href="http://rapidshare.com/files/58117359/1984trm-kp.part01.rar" target="_blank">http://rapidshare.com/files/58117359...-kp.part01.rar</a><br /><a href="http://rapidshare.com/files/58117361/1984trm-kp.part02.rar" target="_blank">http://rapidshare.com/files/58117361...-kp.part02.rar</a><br /><a href="http://rapidshare.com/files/58117345/1984trm-kp.part03.rar" target="_blank">http://rapidshare.com/files/58117345...-kp.part03.rar</a><br /><a href="http://rapidshare.com/files/58117348/1984trm-kp.part04.rar" target="_blank">http://rapidshare.com/files/58117348...-kp.part04.rar</a><br /><a href="http://rapidshare.com/files/58117360/1984trm-kp.part05.rar" target="_blank">http://rapidshare.com/files/58117360...-kp.part05.rar</a><br /><a href="http://rapidshare.com/files/58117356/1984trm-kp.part06.rar" target="_blank">http://rapidshare.com/files/58117356...-kp.part06.rar</a><br /><a href="http://rapidshare.com/files/58117320/1984trm-kp.part07.rar" target="_blank">http://rapidshare.com/files/58117320...-kp.part07.rar</a><br /><a href="http://rapidshare.com/files/58117379/1984trm-kp.part08.rar" target="_blank">http://rapidshare.com/files/58117379...-kp.part08.rar</a><br /><a href="http://rapidshare.com/files/58117355/1984trm-kp.part09.rar" target="_blank">http://rapidshare.com/files/58117355...-kp.part09.rar</a><br /><a href="http://rapidshare.com/files/58117288/1984trm-kp.part10.rar" target="_blank">http://rapidshare.com/files/58117288...-kp.part10.rar</a><br /><br /><br /><b><span style="color:DarkRed;">Kẻ Hủy Diệt 2: Ngày Phán Xét (1991)</span></b><br />Đạo diễn : James Cameron<br /><br />Bối cảnh của bộ phim là sự tiếp nối au thất bại ở phần 1, Skynet bằng gửi thêm một robot khác, mạnh mẽ hơn để tiêu diệt Sarah Connor và đứa con của bà, John Connor - lúc này cậu bé tổng tư lệnh tương lai mới có 13t. Tuy nhiên, lần này hai mẹ con được bảo vệ bởi chính Kẻ Hủy Diệt trong phần 1, được phe kháng chiến sửa chửa và gửi về từ tương lai. Nếu như phần một là sự đối đầu của robo và người thì phần 2 là sự đối đầu của robo và robo. Xem phim song mới thấy phiên bản thì nhiều tính năng mới. Hiện đại hơn tất nhiên là tốt hơn, tuy nhiên đó không phải là tất cả.<br /><br />Cái tốt nhất chính là cái làm việc hiệu quả nhất, mới nhất không hẳn đã là tốt nhất.<br /><br /><img src="http://www.get.vn/uploads/movie/F/u/3/Fu3vTC7EPGR/thumbnail/350x350/Terminator-2-Jugdement-Day.jpg" alt="" class="tcattdimgresizer" onload="NcodeImageResizer.createOn(this);" border="0" /><br /><br />download<br /><a href="http://www.mediafire.com/?lflrjqiwy2v" target="_blank">http://www.mediafire.com/?lflrjqiwy2v</a><br /><a href="http://www.mediafire.com/?pw98gjsnzou" target="_blank">http://www.mediafire.com/?pw98gjsnzou</a><br /><a href="http://www.mediafire.com/?syjgbzkzlvm" target="_blank">http://www.mediafire.com/?syjgbzkzlvm</a><br /><a href="http://www.mediafire.com/?idehjbummzd" target="_blank">http://www.mediafire.com/?idehjbummzd</a><br /><a href="http://www.mediafire.com/?vte40mhhvlz" target="_blank">http://www.mediafire.com/?vte40mhhvlz</a><br /><a href="http://www.mediafire.com/?xwdombb2gzi" target="_blank">http://www.mediafire.com/?xwdombb2gzi</a><br /><a href="http://www.mediafire.com/?yfev5pqbiyt" target="_blank">http://www.mediafire.com/?yfev5pqbiyt</a><br /><a href="http://www.mediafire.com/?hy5iybm1t2n" target="_blank">http://www.mediafire.com/?hy5iybm1t2n</a><br /><br />or<br /><a href="http://rapidshare.com/files/58367103/1991trm2-kp.part01.rar" target="_blank">http://rapidshare.com/files/58367103...-kp.part01.rar</a><br /><a href="http://rapidshare.com/files/58366865/1991trm2-kp.part02.rar" target="_blank">http://rapidshare.com/files/58366865...-kp.part02.rar</a><br /><a href="http://rapidshare.com/files/58366949/1991trm2-kp.part03.rar" target="_blank">http://rapidshare.com/files/58366949...-kp.part03.rar</a><br /><a href="http://rapidshare.com/files/58366851/1991trm2-kp.part04.rar" target="_blank">http://rapidshare.com/files/58366851...-kp.part04.rar</a><br /><a href="http://rapidshare.com/files/58366866/1991trm2-kp.part06.rar" target="_blank">http://rapidshare.com/files/58366866...-kp.part06.rar</a><br /><a href="http://rapidshare.com/files/58366914/1991trm2-kp.part07.rar" target="_blank">http://rapidshare.com/files/58366914...-kp.part07.rar</a><br /><a href="http://rapidshare.com/files/58366909/1991trm2-kp.part08.rar" target="_blank">http://rapidshare.com/files/58366909...-kp.part08.rar</a><br /><a href="http://rapidshare.com/files/58367062/1991trm2-kp.part09.rar" target="_blank">http://rapidshare.com/files/58367062...-kp.part09.rar</a><br /><a href="http://rapidshare.com/files/58366926/1991trm2-kp.part10.rar" target="_blank">http://rapidshare.com/files/58366926...-kp.part10.rar</a><br /><br /><br />or Đây là bản DVD_Rip<br /><a href="http://www.megaupload.com/?d=Y2OX05B8" target="_blank">http://www.megaupload.com/?d=Y2OX05B8</a><br /><a href="http://www.megaupload.com/?d=BKGMR1VD" target="_blank">http://www.megaupload.com/?d=BKGMR1VD</a><br /><a href="http://www.megaupload.com/?d=JTR09IVC" target="_blank">http://www.megaupload.com/?d=JTR09IVC</a><br /><a href="http://www.megaupload.com/?d=7R50JJPD" target="_blank">http://www.megaupload.com/?d=7R50JJPD</a><br /><a href="http://www.megaupload.com/?d=SUJY71OG" target="_blank">http://www.megaupload.com/?d=SUJY71OG</a><br /><a href="http://www.megaupload.com/?d=WU3YSWI0" target="_blank">http://www.megaupload.com/?d=WU3YSWI0</a><br /><a href="http://www.megaupload.com/?d=FVOK46X1" target="_blank">http://www.megaupload.com/?d=FVOK46X1</a><br /><a href="http://www.megaupload.com/?d=QJUUTWX1" target="_blank">http://www.megaupload.com/?d=QJUUTWX1</a><br /><a href="http://www.megaupload.com/?d=57ABJ14F" target="_blank">http://www.megaupload.com/?d=57ABJ14F</a><br /><a href="http://www.megaupload.com/?d=19O68J16" target="_blank">http://www.megaupload.com/?d=19O68J16</a><br /><a href="http://www.megaupload.com/?d=UL01CDQV" target="_blank">http://www.megaupload.com/?d=UL01CDQV</a><br /><a href="http://www.megaupload.com/?d=MZZ05TGD" target="_blank">http://www.megaupload.com/?d=MZZ05TGD</a><br /><a href="http://www.megaupload.com/?d=2MKE79R4" target="_blank">http://www.megaupload.com/?d=2MKE79R4</a><br /><a href="http://www.megaupload.com/?d=UEOWI77O" target="_blank">http://www.megaupload.com/?d=UEOWI77O</a><br /><a href="http://www.megaupload.com/?d=8QOAGAFW" target="_blank">http://www.megaupload.com/?d=8QOAGAFW</a><br /><a href="http://www.megaupload.com/?d=576C8BR5" target="_blank">http://www.megaupload.com/?d=576C8BR5</a><br /><a href="http://www.megaupload.com/?d=URWCNYTA" target="_blank">http://www.megaupload.com/?d=URWCNYTA</a><br /><a href="http://www.megaupload.com/?d=0BW1IA3X" target="_blank">http://www.megaupload.com/?d=0BW1IA3X</a><br /><a href="http://www.megaupload.com/?d=LIBVN6DJ" target="_blank">http://www.megaupload.com/?d=LIBVN6DJ</a><br /><a href="http://www.megaupload.com/?d=23GP1KWN" target="_blank">http://www.megaupload.com/?d=23GP1KWN</a><br /><a href="http://www.megaupload.com/?d=HWYWRXV1" target="_blank">http://www.megaupload.com/?d=HWYWRXV1</a><br /><a href="http://www.megaupload.com/?d=HOPIQKI3" target="_blank">http://www.megaupload.com/?d=HOPIQKI3</a><br /><br /><br /><br /><br /><br /><b><span style="color:DarkRed;">Kẻ Hủy Diệt 3: Người Máy Nổi Loạn (2003) </span></b><br />Đạo diễn : Jonathan Mostow <br /><br />Tiêp nối sự thành công của phiên bản lần thứ 2. Kẻ hủy diệt 3 mang đến tính hủy diệt thật sự trong những pha hành động gay cấn, hấp dẫn. Xem kẻ hủy diệt 3 bạn không thể không ấn tượng với cảnh đuổi diệt nhau bằng xe cẩu 12tấn... Phải công nhận rằng T-X là một thế hệ robo nữ có thân hình chuẩn không phải chỉnh. Rất đẹp. Rất gợi cảm. Rất phí nếu không xem.<br /><br /><img src="http://www.get.vn/uploads/movie/b/h/c/bhcBZC7Evw0/thumbnail/350x350/IEz2LC74Tu5.jpg" alt="" class="tcattdimgresizer" onload="NcodeImageResizer.createOn(this);" border="0" /><br /><br />download<br /><a href="http://www.mediafire.com/?nit4oeywqjm" target="_blank">http://www.mediafire.com/?nit4oeywqjm</a><br /><a href="http://www.mediafire.com/?1xy2yj2uz2z" target="_blank">http://www.mediafire.com/?1xy2yj2uz2z</a><br /><a href="http://www.mediafire.com/?qzmzd2mezdl" target="_blank">http://www.mediafire.com/?qzmzd2mezdl</a><br /><a href="http://www.mediafire.com/?zeymdmgdfim" target="_blank">http://www.mediafire.com/?zeymdmgdfim</a><br /><a href="http://www.mediafire.com/?zojm0bjtiad" target="_blank">http://www.mediafire.com/?zojm0bjtiad</a><br /><br /><br />or<br /><a href="http://rapidshare.com/files/157978911/Phim88_Terminator_3_Rise_of_the_Machines__282003_29_chunk_1.avi" target="_blank">http://rapidshare.com/files/15797891...29_chunk_1.avi</a><br /><a href="http://rapidshare.com/files/157978960/Phim88_Terminator_3_Rise_of_the_Machines__282003_29_chunk_2.avi" target="_blank">http://rapidshare.com/files/15797896...29_chunk_2.avi</a><br /><a href="http://rapidshare.com/files/157979030/Phim88_Terminator_3_Rise_of_the_Machines__282003_29_chunk_3.avi" target="_blank">http://rapidshare.com/files/15797903...29_chunk_3.avi</a><br /><a href="http://rapidshare.com/files/157979062/Phim88_Terminator_3_Rise_of_the_Machines__282003_29_chunk_4.avi" target="_blank">http://rapidshare.com/files/15797906...29_chunk_4.avi</a><br /><a href="http://rapidshare.com/files/157979115/Phim88_Terminator_3_Rise_of_the_Machines__282003_29_chunk_5.avi" target="_blank">http://rapidshare.com/files/15797911...29_chunk_5.avi</a><br /><br />or<br /><a href="http://rapidshare.com/files/137846556/Terminator.3.2003.HDRip.x264.400MB.part1.rar" target="_blank">http://rapidshare.com/files/13784655...00MB.part1.rar</a><br /><a href="http://rapidshare.com/files/137845771/Terminator.3.2003.HDRip.x264.400MB.part2.rar" target="_blank">http://rapidshare.com/files/13784577...00MB.part2.rar</a><br /><a href="http://rapidshare.com/files/137845754/Terminator.3.2003.HDRip.x264.400MB.part3.rar" target="_blank">http://rapidshare.com/files/13784575...00MB.part3.rar</a><br /><a href="http://rapidshare.com/files/137846396/Terminator.3.2003.HDRip.x264.400MB.part4.rar" target="_blank">http://rapidshare.com/files/13784639...00MB.part4.rar</a><br /><br /><br /><br /><br /><b><span style="color:DarkRed;">Kẻ Hủy Diệt 4 (2009)</span></b><br /><br /><br />Lần này là một êkip khác thực hiện. Kết thúc kỷ nguyên những pha hành động của người hùng cơ bắp. Nhưng lần đầu tiên nhân vật huyền thoại Jonh connor hành động như một anh hùng thực thụ (anh hùng kiểu hồ-ly-gút cũng đấm đá, bắn súng... and make love <img src="http://03bx.com/images/smilies/1.gif" alt="" title="1" class="inlineimg" border="0" /> ) bộ phim đang là một trong những tâm điểm của mùa hè 2009.<br /><br /><br /><img src="http://www.get.vn/uploads/movie/w/f/2/wf2w3CqiwgY/thumbnail/350x350/Terminator-Salvation.jpg" alt="" class="tcattdimgresizer" onload="NcodeImageResizer.createOn(this);" border="0" /><br /><br /><br />download<br /><a href="http://www.mediafire.com/?zz5zhwtmkty" target="_blank">http://www.mediafire.com/?zz5zhwtmkty</a><br /><a href="http://www.mediafire.com/?ndd0dg3nwmd" target="_blank">http://www.mediafire.com/?ndd0dg3nwmd</a><br /><a href="http://www.mediafire.com/?nnnqznkbmby" target="_blank">http://www.mediafire.com/?nnnqznkbmby</a><br /><a href="http://www.mediafire.com/?jyiyvmh53it" target="_blank">http://www.mediafire.com/?jyiyvmh53it</a><br /><a href="http://www.mediafire.com/?dfqhm1ngzjg" target="_blank">http://www.mediafire.com/?dfqhm1ngzjg</a><br /><a href="http://www.mediafire.com/?3znmmzjttgg" target="_blank">http://www.mediafire.com/?3znmmzjttgg</a><br /><a href="http://www.mediafire.com/?gqg41mm4fed" target="_blank">http://www.mediafire.com/?gqg41mm4fed</a><br /><a href="http://www.mediafire.com/?0hmkvkeamzm" target="_blank">http://www.mediafire.com/?0hmkvkeamzm</a><br /><a href="http://www.mediafire.com/?oydeyizywz4" target="_blank">http://www.mediafire.com/?oydeyizywz4</a><br /><a href="http://www.mediafire.com/?gmzzffhmnzu" target="_blank">http://www.mediafire.com/?gmzzffhmnzu</a><br /><a href="http://www.mediafire.com/?223mmqliz2n" target="_blank">http://www.mediafire.com/?223mmqliz2n</a><br /><a href="http://www.mediafire.com/?yywzww03jxz" target="_blank">http://www.mediafire.com/?yywzww03jxz</a><br /><a href="http://www.mediafire.com/?jy5oyz1vexg" target="_blank">http://www.mediafire.com/?jy5oyz1vexg</a><br /><a href="http://www.mediafire.com/?xi2la2iyywa" target="_blank">http://www.mediafire.com/?xi2la2iyywa</a><br /><a href="http://www.mediafire.com/?n4qmmyo2jtm" target="_blank">http://www.mediafire.com/?n4qmmyo2jtm</a>Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com0tag:blogger.com,1999:blog-7097348045257270421.post-19671314680232869422009-09-15T12:39:00.000+07:002009-09-15T12:39:00.317+07:00Tuyển tập phim người nhện<strong>Tuyển tập phim người nhện<br /></strong>Một trong những phim anh hùng thời hiện đại không thể không thưởng thức.<br />Diễn Viên: Kristen Dunst, Tobey Maguire, James Fransco<br />Thể Loại: HÀNH ĐỘNG<br />Ngôn Ngữ: Việt, Anh<br /><br /><span style="font-size:85%;"><b><span style="color:DarkRed;"><br />1. Người Nhện 1 </span></b></span><br />Câu chuyện bắt đầu với sự tình cờ khiến một anh tràng nhút nhát và yếu đuối chở thành một anh hùng với năng lực của nhện<br /><br /><img src="http://mymoviebanners.com/pics/spiderman/spiderman-1.jpg" alt="" class="tcattdimgresizer" onload="NcodeImageResizer.createOn(this);" border="0" /><br /><br />Download:<br /><a href="http://www.mediafire.com/?jpgmhbnz4cg" target="_blank">http://www.mediafire.com/?jpgmhbnz4cg</a><br /><a href="http://www.mediafire.com/?w31vzjwljnt" target="_blank">http://www.mediafire.com/?w31vzjwljnt</a><br /><a href="http://www.mediafire.com/?ttdynbdklgm" target="_blank">http://www.mediafire.com/?ttdynbdklgm</a><br /><a href="http://www.mediafire.com/?yx1dmytmabj" target="_blank">http://www.mediafire.com/?yx1dmytmabj</a><br /><br /><br /><br /><b><span style="font-size:85%;"><span style="color:DarkRed;">2. Người nhện 2</span></span></b><br />Hai năm trôi qua kể từ ngày Peter Parker phát hiện ra khả năng kì lạ của mình. Anh phải luôn cố gắng cân bằng hai số phận khác nhau trong cùng con người mình: Người nhện trừ gian diệt bạo và một cậu sinh viên bình thường. Peter quyết định nói sự thật với Mary Jane. Tình bạn thân thiết giữa Peter và Harry ngày càng phức tạp bởi sau cái chết của cha mình, Harry luôn nuôi mối thù với Người Nhện. Và trong tập này, Người Nhện phải đối mặt với một kẻ độc ác khác: Giáo sư Bạch Tuộc.<br /><img src="http://www.get.vn/uploads/movie/t/D/Y/tDYLjC7EJor/thumbnail/350x350/3lgROC74Rur.jpg" alt="" class="tcattdimgresizer" onload="NcodeImageResizer.createOn(this);" border="0" /><br /><br />Download:<br /><a href="http://www.mediafire.com/?sharekey=bdbe434b7b292c39ff0c8db191da76410e7a50603143b2f0c95965eaa7bc68bc" target="_blank">http://www.mediafire.com/?sharekey=b...5965eaa7bc68bc</a><br /><br /><br /><span style="font-size:85%;"><span style="color:DarkRed;"><b>3. Người nhện 3</b></span></span><br /><br />Nếu Spider-man 1 là sự đấu tranh giữa chính nghĩa và bạo tàn, Spider-man 2 là cuộc chiến giữa niềm tin và sự lung lạc, thì đến Spider-man 3, đó là sự giằng co giữa lòng thù hận và sự tha thứ.<br /><br />Harry Osborn (James Franco) ngày càng chìm trong nỗi uất hận sau khi biết anh bạn thân nhất của mình, Peter Parker, chính là Người Nhện, kẻ đã giết chết cha của mình . Mối thù giết cha đã xóa mờ lý trí, khiến Harry lại bước tiếp trên vết xe đổ của cha mình, tự biến mình thành một Yêu Tinh Xanh thứ hai. Một kế hoạch trả thù tàn khốc đang chờ đợi Người Nhện…<br /><br />Các nhà băng trong thành phố thường xuyên bị tấn công bởi một kẻ có biệt danh Người Cát. Người cát có sức mạnh từ cát, có thể trở nên khổng lồ, hung hãn và tàn bạo nhưng cũng có thể trở nên vô định hình, không thể tiêu diệt. Người Nhện đại diện cho chính nghĩa, chắc chắn không thể bỏ qua cho Người Cát tung hoành bá đạo, và đằng sau đó còn có một nỗi căm phẫn tột cùng khi Peter (Tobey Maguire) biết rằng Người Cát chính là Flint Marko, thủ phạm đã bắn chết chú anh. Nhưng Người Cát nào dễ đối phó…<br /><br />Một quái vật từ vũ trụ vừa xâm nhập vào trái đất, đen đúa và tua tủa như một loại Rắn Độc gớm ghiếc, có thể tấn công bất cứ ai đang nuôi trong mình một lòng thù hận, làm phát tác những sức mạnh ghê gớm còn tiềm ẩn bên trong của người đó, nhưng đồng thời cũng bộc lộ cả những tham vọng và những bản chất xấu xa mà con người thường dùng lý trí để khống chế. Rắn độc luôn rình rập bên cạnh Người Nhện…<br /><br />Không chỉ một, mà có đến ba kẻ thù, với sức mạnh tương đương Người Nhện trong Spider-man 3. Chàng Peter hiền lành khù khờ sẽ đối phó ra sao? Trong những phần trước, những lúc khó khăn, bên cạnh Peter luôn có Mary Jane (Kristen Dunst), nàng là nguồn động viên tinh thần, là tình yêu vĩ đại của Người Nhện. Tuy nhiên, ở phần ba, cuộc tình của họ gặp phải sóng to gió lớn, khi Mary Jane luôn cảm thấy cô đơn và bơ vơ bên cạnh người hùng của nhân loại, và nhất là khi cô bạn xinh đẹp Gwen Stacy chen chân vào cuộc tình của họ…<br /><br />Vẫn gương mặt baby quen thuộc, 5 năm chẳng hề già lên chút nào, vẫn đôi mắt sáng hồn nhiên và nụ cười hiền hậu, Tobey Maguire như đóng khung trong vai diễn Người Nhện, kiệt tác để đời của anh (nhưng chắc chắn không phải là vai diển để đời). Tuy nhiên, Người Nhện trong phần 3 có một sức hấp dẫn hơn hẳn hai phần trước, vì đây là một Người Nhện tính “người” nhiều hơn tính “siêu anh hùng”. Người Nhện cũng có tâm ma, cũng tham vọng, cũng mê gái…<br /><br />5 năm trôi qua, nếu Tobey vẫn đóng khung trong vai diễn Người Nhện, thì hai bạn diễn của anh Kristen Dunst và James Franco đã có những bước tiến rất dài trong sự nghiệp diễn xuất. Kristen Dunst ngày càng mặn mà hơn, không chỉ ở vẻ đẹp đằm thắm của cô mà cả trong diễn xuất. Những trải nghiệm từ các phim tình cảm hài Wimbledon, Elizabethtown đến phim bi tiểu sử như Marie Antoinette, đã giúp vai diễn Mary Jane ngày càng khắc sâu vào lòng khán giả hơn, hình ảnh người con gái đầy nghị lực nhưng cũng biết chịu đựng, biết hy sinh vì tình yêu.<br /><br />Dù chỉ là vai thứ, nhưng nhân vật Harry trong loạt siêu phẩm Spider-man đã làm bàn đạp vững chắc cho những bước tiến mới của James Franco. Anh đã chứng minh khả năng nhập vai đa dạng hơn hẳn anh bạn diễn Tobey của mình, từ hình tượng người lính dũng cảm trong Annapolis, Flyboys đến chàng dũng sĩ si tình trong tuyệt phẩm Tristan + Isolde. Và Harry là vai diễn tròn trịa nhất, hoàn hảo nhất của Spider-man 3, một cuộc đấu tranh dữ dội luôn tiềm ẩn bên trong Harry, cuộc đấu tranh giữa thiện và ác, giữa thù hận và tha thứ.<br /><br />Một nhân vật mới xuất hiện trong Spider-man 3, lại một gương mặt trong sáng và hiền lành (giống như Tobey) rất quen thuộc với thể loại phim tình cảm lãng mạn, Topher Grace. Topher Grace vào vai chàng phóng viên lanh lợi và thực dụng, nuôi trong mình sự ganh tỵ ngày càng lớn dần trở thành thù hận với anh bạn đồng nghiệp Peter, để rồi cuối cùng sẵn sàng bán linh hồn mình cho Rắn Độc.<br /><br />Với tuyến nhân vật mới, với một câu chuyện cấu tứ chặt chẽ và hợp lý (điều hiếm thấy đối với những phim làm từ truyện tranh), với những pha hành động được đẩy lên thành cao trào dồn dập suốt gần 3 giờ, xen lẫn những tình huống hài hước nhẹ nhàng (nhưng không hề vô duyên) và chứa đựng một thông điệp sâu sắc, Spider-man 3 là một phim không thể bỏ qua của năm 2007.<br /><br /><img src="http://www.tnpsc.com/downloads/Spider-Man3..jpg" alt="" class="tcattdimgresizer" onload="NcodeImageResizer.createOn(this);" border="0" /><br /><br />Download:<br />CD1:<br /><a href="http://www.megaupload.com/?d=VK67BSJK" target="_blank">http://www.megaupload.com/?d=VK67BSJK</a><br /><a href="http://www.megaupload.com/?d=SQ770VL2" target="_blank">http://www.megaupload.com/?d=SQ770VL2</a><br /><a href="http://www.megaupload.com/?d=FL400H9K" target="_blank">http://www.megaupload.com/?d=FL400H9K</a><br /><a href="http://www.megaupload.com/?d=XX4K3XB1" target="_blank">http://www.megaupload.com/?d=XX4K3XB1</a><br /><a href="http://www.megaupload.com/?d=NRJDTY00" target="_blank">http://www.megaupload.com/?d=NRJDTY00</a><br /><a href="http://www.megaupload.com/?d=1ID1M4QC" target="_blank">http://www.megaupload.com/?d=1ID1M4QC</a><br /><a href="http://www.megaupload.com/?d=M0J6Y1BO" target="_blank">http://www.megaupload.com/?d=M0J6Y1BO</a><br /><a href="http://www.megaupload.com/?d=87DD2REI" target="_blank">http://www.megaupload.com/?d=87DD2REI</a><br /><br />CD2<br /><a href="http://www.megaupload.com/?d=AJJYMXCS" target="_blank">http://www.megaupload.com/?d=AJJYMXCS</a><br /><a href="http://www.megaupload.com/?d=ZGYGDTO0" target="_blank">http://www.megaupload.com/?d=ZGYGDTO0</a><br /><a href="http://www.megaupload.com/?d=0IOUN9O5" target="_blank">http://www.megaupload.com/?d=0IOUN9O5</a><br /><a href="http://www.megaupload.com/?d=OJCRV752" target="_blank">http://www.megaupload.com/?d=OJCRV752</a><br /><a href="http://www.megaupload.com/?d=H07A52HC" target="_blank">http://www.megaupload.com/?d=H07A52HC</a><br /><a href="http://www.megaupload.com/?d=Z1H72JZ5" target="_blank">http://www.megaupload.com/?d=Z1H72JZ5</a><br /><a href="http://www.megaupload.com/?d=X7ELQZB1" target="_blank">http://www.megaupload.com/?d=X7ELQZB1</a><br /><a href="http://www.megaupload.com/?d=2JZNYKS1" target="_blank">http://www.megaupload.com/?d=2JZNYKS1</a><br /><br />hoặc<br /><a href="http://www.mediafire.com/download.php?41dnemkj54m" target="_blank">http://www.mediafire.com/download.php?41dnemkj54m</a><br /><a href="http://www.mediafire.com/download.php?c2w2dlk9wyy" target="_blank">http://www.mediafire.com/download.php?c2w2dlk9wyy</a><br /><a href="http://www.mediafire.com/download.php?0dwtmemzl9x" target="_blank">http://www.mediafire.com/download.php?0dwtmemzl9x</a><br /><a href="http://www.mediafire.com/download.php?x4gl42xdwky" target="_blank">http://www.mediafire.com/download.php?x4gl42xdwky</a><br /><a href="http://www.mediafire.com/download.php?mbc9dl52zmx" target="_blank">http://www.mediafire.com/download.php?mbc9dl52zmx</a><br /><a href="http://www.mediafire.com/download.php?sjugzdjvzhg" target="_blank">http://www.mediafire.com/download.php?sjugzdjvzhg</a><br /><a href="http://www.mediafire.com/download.php?mjuvm1je5yg" target="_blank">http://www.mediafire.com/download.php?mjuvm1je5yg</a><br /><a href="http://www.mediafire.com/download.php?mmdutjmyymn" target="_blank">http://www.mediafire.com/download.php?mmdutjmyymn</a><br /><a href="http://www.mediafire.com/download.php?ztngjwuqtyj" target="_blank">http://www.mediafire.com/download.php?ztngjwuqtyj</a>Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com0tag:blogger.com,1999:blog-7097348045257270421.post-86394281932936595902009-09-10T12:37:00.000+07:002009-09-10T12:37:00.339+07:0010 điểm giống nhau giữa 1 IT và 1 KaveLượm lặt trên mạng mang về.<br /><br />1. Làm việc đêm và luôn thiếu ngủ.<br />2. Khi có hứng làm việc tốt hơn.<br />3. Không phải bỏ vốn bằng tiền mặt (khi vào nghề).<br />4. Làm việc phần lớn vì tiền (số ít làm vì yêu nghề).<br />5. Sẵn sàng phục vụ nhiều khách một lúc nếu đủ sức khỏe.<br />6. Thích quan hệ với khách nhiều tiền (tốt nhất là khách Tây).<br />7. Dễ bị quịt tiền, ăn chặn, bóc lột.<br />8. Phải lựa tính khách hàng để phục vụ.<br />9. Bị đối xử tệ bạc khi làm khách phật ý<br />10.Làm việc chưa xong, không muốn nghĩ giữa chừng<br /><br /><br />Đừng ai thất vọng nhé<br /><img src="http://03bx.com/images/smilies/20.gif" alt="" title="20" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/20.gif" alt="" title="20" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/20.gif" alt="" title="20" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/20.gif" alt="" title="20" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/20.gif" alt="" title="20" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/20.gif" alt="" title="20" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/20.gif" alt="" title="20" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/20.gif" alt="" title="20" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/20.gif" alt="" title="20" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/20.gif" alt="" title="20" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/20.gif" alt="" title="20" class="inlineimg" border="0" />Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com0tag:blogger.com,1999:blog-7097348045257270421.post-33164122448597266522009-09-05T12:36:00.000+07:002009-09-05T12:36:00.578+07:00Đạo đức kinh cho vợKính vợ đắc thọ, sợ vợ sống lâu, nể vợ bớt u sầu, đặt vợ lên đầu là trường sinh bất tử.<br /><br />Ðánh vợ nhừ tử là đại nghịch bất đạo.<br />Vợ hỏi mà nói xạo là trời đất bất dung.<br />Chê vợ lung tung là ngậm máu phun người.<br />Gặp vợ mà không cười là có mắt không tròng.<br />Ðể vợ phiền lòng là chu di tam tộc.<br />Vợ sai mà hằn học là trời đánh thánh đâm.<br />Vợ gọi mà ngậm câm là lòng lang dạ sói.<br />Ðể vợ nhịn đói là tội nhân thiên cổ.<br />Ðể vợ chịu khổ là bất tài vô dụng.<br />Trốn vợ đi ăn vụng là ngũ mã phanh thâyĐinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com0tag:blogger.com,1999:blog-7097348045257270421.post-63994028813324264632009-09-01T12:34:00.000+07:002009-09-01T12:34:00.875+07:00Bạch tuyết new version<div id="post_message_202"> Bài này tui sưu tầm trên mạng <img src="http://03bx.com/images/smilies/69.gif" alt="" title="69" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/69.gif" alt="" title="69" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/69.gif" alt="" title="69" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/69.gif" alt="" title="69" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/69.gif" alt="" title="69" class="inlineimg" border="0" /><br /><br />Câu truyện này được kể lại by Rily trong một đêm gió mùa trời không trăng không sao ( January 4, 2007) mà rily đành phải kể lể cho con bạn để nó buồn ngủ, vì trước đó đã trót lỡ kể cho nó nghe 1 câu truyện của Nguyễn Ngọc Ngạn ……………<br /><br /><b>Bạch Tuyết và 7 chú lùn</b><br /><br />Xưa có một bà hòang hậu dịu hiền ở một vương quốc nọ….. Một ngày mùa đông tuyết rơi trắng xóa, bà ngồi bên khung cửa sổ bằng gỗ mun khâu áo chờ đợi đứa con sắp chào đời. Mải làm và không để ý , bỗng chiếc kim đâm vào tay bà đau điếng, một giọt máu đỏ thắm nhỏ ra…Bỗng bà nảy ra một ý nghĩ và chắp tay vào cầu nguyện “ Ước gì đứa con sắp sinh của ta, nếu là con gái thì sẽ có một làn da trắng như tuyết kia, tóc đen như gỗ mun và môi đỏ thắm như màu máu…..<br /><br />KHông lâu sau khi hoàng hậu sinh hạ được một công chúa thì bà qua đời, công chúa được đặt tên là Bạch Tuyết sống với đức vua ….. Nhưng một thời gian sau nữa, nhà vua cũng có người vợ mới, một mụ phù thủy xinh đẹp nhưng tàn ác. Mụ có một tấm gương thần lớn treo trên tường và lúc nào mụ cũng hỏi :<br /><br />“ Gương kia ngự ở trên tường<br /><br />Thế gian ai đẹp được dường như ta……………”<br /><br />Gương thần luôn luôn trả lời rằng chẳng có ai đẹp được như bà ta cả…………<br /><br />Thời gian thấm thoắt trôi đi, và Bạch Tuyết cũng trở nên khôn lớn, giờ đây bỗng xinh đẹp lạ thường…….<br /><br />Một ngày bà Hòang Hậu lại đứng trước gương và hỏi:<br /><br />“ Gương kia ngự ở trên tường<br /><br />Thế gian ai đẹp được dường như ta????”<br /><br />KHông ngập ngừng, gương thần đáp:<br /><br />“ Xưa kia bà đẹp nhất trần<br /><br />Ngày nay Bạch Tuyết muôn phần đẹp hơn…”<br /><br />Hoàng hậu tức điên lên, Bà ta sai người mang Bạch Tuyết về vùng nông thôn hẻo lánh để giết chết và mang về cho bà quả tim của nàng.<br /><br />Thế nhưng tên người hầu, vì tham lam (và quen thói buôn người qua biên giới để kiếm được nhiều tiền hoa hồng ngòai khỏan tiền mà hoàng hậu đưa) đã giết một con lợn để lấy quả tim đem cho bà hòang hậu tần ngải cứu, hạt sen với tam thất để ăn, còn nàng Bạch Tuyết xinhđẹp hắn định bụng đưa qua Tân Thanh ở Lạng Sơn hoặc Móng cái ở Quảng Ninh , nếu cả 2 cửa khẩu đó không trót lọt thì đưa lên Hà Giang rồi đưa nàng qua cửa khẩu ở Vị Xuyên để đem bán cho bọn tàu cũng được. Dù sao thì kiếm cũng được khá nhiều lời vì nàng ta quá ư là xinh đẹp.<br /><br />Thế nhưng trên đường ra bến xe Mỹ Đình , hắn đã bị công an theo dõi và gô cổ lại đưa về đồn…. Vậy là Bạch Tuyết trở thành người tứ cố vô thân, may được các chú công an tốt bụng đưa vào một trại trẻ mồ côi ăn nhờ ở đậu ở đấy. Vì hơi lớn tuổi so với bọn trẻ con mồ côi nên hàng ngày nàng đi nhặt bao tải, ni lông giấy vụn, buổi tối ăn mặc sành điệu đứng quanh các nhà hàng bán thuốc lá kẹo cao su…… Chính tại nơi đó nàng đã làm quen và móc nối được với một băng đảng tí hon lùn tẹt mang tên “ 7 chú lùn” đi đánh giầy, vậy là nàng biết thêm được công việc đánh giầy. Nàng đã bỏ nghề bán kẹo cao su.<br /><br />Một ngày nàng đi đánh giầy, gặp một ông tây hắn làm rơi chiếc nhẫn vàng 4 con 9 nạm kim cương, vì cái này hồi ở trong cung nàng chỉ lấy làm đồ chơi nên nàng đưa cho ông ta để ông ta mang về. Cảm phục tấm lòng ngay thẳng của nàng, ông tây trẻ tuổi đẹp trai ấy đã cưới nàng về làm vợ. Vậy là cuộc đời nàng hết khổ từ đây………. Nàng tạm biệt “ 7 chú lùn” và quay trở lại với cuộc sống sung túc, nhưng không quên để lai một chút vốn cho mấy thằng bé lấy tiền đi học chữ.<br /><br />Một ngày nàng đòi chồng về thăm vua cha, vua cha bây giờ đã già lắm rồi, còn bà hòang hậu thì vẫn xinh đẹp nhưng ngày càng ác độc, bà ta thường xuyên đi shopping và mua tòan olay, debon với cả essance về dùng, nhưng nhan sắc thì cũng chẳng khá được hơn chút nào…….<br /><br />Thấy Bạch Tuyết về thăm nhà , bà ta lại chạy vào hỏi gương thần, nhưng gương thần vẫn trả lời rằng Bạch Tuyết thật là xinh đẹp, bà ta rắp tâm hãm hại lần nữa………<br /><br />Bà ta sai người tẩm thuốc độc cực mạnh vào chiếc lược rồi cho người mang tặng Bạch Tuyết, nàng nhìn thấy chiếc lược “cực độc, cực đẹp” liền vơ vội rồi chải lên tóc. Nhưng hỡi ôi ! cuộc sống xa hoa nơi thành thị đã làm mái tóc của nàng cứng đơ lên vì keo bọt for men mà nàng dùng trộm của chồng . He he. Răng của chiếc lược vừa cài lên đầu đã rụng sạch…nhưng tiếc thay còn một chút dộc dính trên tóc, nàng lăn ra bất tỉnh….<br /><br />“7 chú lùn ” ở nơi xa bấm đốt ngón tay thì hay tin nàng bị nạn liền mua xe tăng kéo đến tòa lâu đài. 7 chú mang nàng đến viện Xanh Pôn nơi có Doctor Kijuto đang thực tập, ông bác sĩ tương lai này mang con dao mổ lợn với cồn ra cắt đi 1 đoạn tóc dính độc của Bạch Tuyết và rửa sạch bằng cồn 90 độ, ngòai ra còn cho nàng uống một cốc to Votka để nàng giải độc. Thế là cuộc sống lại trở lại với nàng…………<br /><br />Nhưng Bạch Tuyết vẫn không muốn xa rời vua cha của mình, nàng vẫn muốn ở lại cùng vua cha một thời gian nữa để vua cha kí thác lại cho nàng tòa lâu đài trên di chúc, đề phòng nó rơi vào tay mụ hòang hậu.<br /><br />Thêm một lần nữa Bạch Tuyết lại bị hoàng hậu độc ác hãm hại, hôm đó nàng đang đi chơi trong khu rừng gần nhà, thì bắt gặp một giỏ táo to ai hái đầy để trước mặt. Nàng không ngờ nó là do hòang hậu bày mưu. Quá ham ăn nàng cầm quả to nhất rồi cắn 1 miếng, chất độc lại làm cho nàng ngã lăn ra và die tức thì. 7 chú lùn khi đó vẫn tá túc ở lại trong cung vua biết tin liền chạy ngay đến, sờ tim thấy tim ngừng đập, bạch tuyết không còn thở được nữa liền nghĩ là không thể cứu chữa được.7 chú lùn khóc lóc rất thương tâm……..<br /><br />Đám tang Bạch Tuyết diễn ra trong 1 gloomy Sunday……..Chú bé nhỏ tuổi nhất thương Bạch Tuyết ra đi quá sớm mà chưa được dùng thuốc lắc nên nhét vội vào miệng nàng 1 viên. Xe chở quan tài đi trên đường trong tiếng nhạc hoành tráng “ Walking in the sun “ . Bỗng tự nhiên quan tài bật nắp , Bạch Tuyết nhảy bụp ra và cứ thế lắc………..<br /><br />Chẹp, vậy là Bạch Tuyết đã được cứu sống nhờ thuốc lắc. Nàng lắc đến nỗimiếng táo từ trong miệng nàng rơi cả ra ngòai…….<br /><br />Kết cục về bà hòang hậu ra sao, vua cha Bạch Tuyết thế nào xin mời các bạn đến vũ trường để nghe Bạch Tuyết kể lại, vì từ sau hôm đó, Bạch Tuyết đã trở thành một dân nghiền thuốc lắc, 1 tay chơi siêu hạng và rời xa hẳn chốn cung cấm, làm thủ lĩnh của 7 chú lùn đi ngao du……………………….<br /><br />....ST.... </div> <!-- / message --> <!-- controls -->Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com0tag:blogger.com,1999:blog-7097348045257270421.post-36688569302493726372009-08-30T09:23:00.002+07:002009-08-31T13:14:14.526+07:00Paging by currsorNhân cái sự ông bạn gửi cho một bài về kỹ thuật tìm kiếm và săp xếp <a href="http://linhdkl.blogspot.com/2009/08/ky-thuat-phan-trang-trong-database.html">ở đây</a>. Hôm nay đẹp trời xin bàn xâu thêm một chút về vấn đề này và giới thiệu một kỹ thuật khác để paging nữa là sử dụng cursor để anh em tham khảo.<br /><br /><b><span style="color:DarkRed;">1. Nói về tìm kiếm.</span></b><br />Nếu bạn làm về tìm kiếm dữ liệu (chỉ nói trong môi trường SQL - Database). Điều đầu tiên bạn phải tính đến <b>Index</b> đây là một thuộc tính vô cùng mạnh mẽ giúp bạn tìm kiếm. Bên cạnh đó nếu gặp chở ngại về <b>Index</b> bạn phải sử dụng tiếp tới <b>Full Text Search</b>. nếu bạn không sử dụng những thuộc tính này của database thì ứng dụng của bạn sẽ đần ra khi bạn phải search khoảng 4 nghìn records. <b>Index</b> là một thuộc tính cổ điển của các hệ quản trị dữ liệu, Nhưng khi bạn <b>Index</b> trên một trường dữ liệu là TEXT thì độ dài không chế của trường này bị giới hạn và như thế INDEX không thể làm việc trên trường dữ liệu text dài. Hoặc nếu có thì cũng không hiệu quả. Nhưng đừng lo lắng vì bạn sẽ hoàn toàn thỏa mãn việc tìm kiếm text với <b>Full Text Search</b>. Một design tốt cho DB sẽ là tiền đề để bạn cải thiện hiệu năng của hệ thống cũng như việc sẽ phải thay đổi lại cấu trúc ... Design tốt rất quan trọng <img src="http://03bx.com/images/smilies/1.gif" alt="" title="1" class="inlineimg" border="0" /><br /><br /><b><span style="color:DarkRed;">2. Nói về con trỏ.</span></b><br />Có rất nhiều những tranh cãi nhau về kỹ thuật paging bằng con trỏ cũng như sử dụng subquery (con sp của ông bạn sử dụng subquery <img src="http://03bx.com/images/smilies/1.gif" alt="" title="1" class="inlineimg" border="0" /> ) . Theo ý kiến riêng tôi thây rằng con trỏ nhanh hơn nhưng không an toàn. Nguy cơ là rất lớn khi bạn sử dụng con trỏ trong việc paging.<br /><br /><b><span style="color:DarkRed;">3. Paging by cursor - demo<br /><br /></span></b><code style="white-space: nowrap;"><code><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);">CREATE PROCEDURE </span><span style="color: rgb(0, 119, 0);">[</span><span style="color: rgb(0, 0, 187);">dbo</span><span style="color: rgb(0, 119, 0);">].[</span><span style="color: rgb(0, 0, 187);">prc_Paging_Cursor</span><span style="color: rgb(0, 119, 0);">] (<br />@</span><span style="color: rgb(0, 0, 187);">Tables varchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">1000</span><span style="color: rgb(0, 119, 0);">),<br />@</span><span style="color: rgb(0, 0, 187);">PK nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">100</span><span style="color: rgb(0, 119, 0);">),<br />@</span><span style="color: rgb(0, 0, 187);">Sort nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">200</span><span style="color: rgb(0, 119, 0);">) = </span><span style="color: rgb(0, 0, 187);">NULL</span><span style="color: rgb(0, 119, 0);">,<br />@</span><span style="color: rgb(0, 0, 187);">PageNumber int </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(0, 0, 187);">1</span><span style="color: rgb(0, 119, 0);">,<br />@</span><span style="color: rgb(0, 0, 187);">PageSize int </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(0, 0, 187);">10</span><span style="color: rgb(0, 119, 0);">,<br />@</span><span style="color: rgb(0, 0, 187);">Fields nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">1000</span><span style="color: rgb(0, 119, 0);">) = </span><span style="color: rgb(221, 0, 0);">'*'</span><span style="color: rgb(0, 119, 0);">,<br />@</span><span style="color: rgb(0, 0, 187);">Filter nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">1000</span><span style="color: rgb(0, 119, 0);">) = </span><span style="color: rgb(0, 0, 187);">NULL</span><span style="color: rgb(0, 119, 0);">,<br />@</span><span style="color: rgb(0, 0, 187);">Group varchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">1000</span><span style="color: rgb(0, 119, 0);">) = </span><span style="color: rgb(0, 0, 187);">NULL</span><span style="color: rgb(0, 119, 0);">)<br />AS<br /><br /></span><span style="color: rgb(255, 128, 0);">/*Find the @PK type*/<br /></span><span style="color: rgb(0, 119, 0);">DECLARE @</span><span style="color: rgb(0, 0, 187);">PKTable varchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">100</span><span style="color: rgb(0, 119, 0);">)<br />DECLARE @</span><span style="color: rgb(0, 0, 187);">PKName varchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">100</span><span style="color: rgb(0, 119, 0);">)<br />DECLARE @</span><span style="color: rgb(0, 0, 187);">type varchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">100</span><span style="color: rgb(0, 119, 0);">)<br />DECLARE @</span><span style="color: rgb(0, 0, 187);">prec int<br /><br /></span><span style="color: rgb(0, 119, 0);">IF </span><span style="color: rgb(0, 0, 187);">CHARINDEX</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(221, 0, 0);">'.'</span><span style="color: rgb(0, 119, 0);">, @</span><span style="color: rgb(0, 0, 187);">PK</span><span style="color: rgb(0, 119, 0);">) > </span><span style="color: rgb(0, 0, 187);">0<br />BEGIN<br /> SET </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">PKTable </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(0, 0, 187);">SUBSTRING</span><span style="color: rgb(0, 119, 0);">(@</span><span style="color: rgb(0, 0, 187);">PK</span><span style="color: rgb(0, 119, 0);">, </span><span style="color: rgb(0, 0, 187);">0</span><span style="color: rgb(0, 119, 0);">, </span><span style="color: rgb(0, 0, 187);">CHARINDEX</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(221, 0, 0);">'.'</span><span style="color: rgb(0, 119, 0);">,@</span><span style="color: rgb(0, 0, 187);">PK</span><span style="color: rgb(0, 119, 0);">))<br /> </span><span style="color: rgb(0, 0, 187);">SET </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">PKName </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(0, 0, 187);">SUBSTRING</span><span style="color: rgb(0, 119, 0);">(@</span><span style="color: rgb(0, 0, 187);">PK</span><span style="color: rgb(0, 119, 0);">, </span><span style="color: rgb(0, 0, 187);">CHARINDEX</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(221, 0, 0);">'.'</span><span style="color: rgb(0, 119, 0);">,@</span><span style="color: rgb(0, 0, 187);">PK</span><span style="color: rgb(0, 119, 0);">) + </span><span style="color: rgb(0, 0, 187);">1</span><span style="color: rgb(0, 119, 0);">, </span><span style="color: rgb(0, 0, 187);">LEN</span><span style="color: rgb(0, 119, 0);">(@</span><span style="color: rgb(0, 0, 187);">PK</span><span style="color: rgb(0, 119, 0);">))<br /></span><span style="color: rgb(0, 0, 187);">END<br /></span><span style="color: rgb(0, 119, 0);">ELSE<br /></span><span style="color: rgb(0, 0, 187);">BEGIN<br /> SET </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">PKTable </span><span style="color: rgb(0, 119, 0);">= @</span><span style="color: rgb(0, 0, 187);">Tables<br /> SET </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">PKName </span><span style="color: rgb(0, 119, 0);">= @</span><span style="color: rgb(0, 0, 187);">PK<br />END<br /><br />SELECT </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">type</span><span style="color: rgb(0, 119, 0);">=</span><span style="color: rgb(0, 0, 187);">t</span><span style="color: rgb(0, 119, 0);">.</span><span style="color: rgb(0, 0, 187);">name</span><span style="color: rgb(0, 119, 0);">, @</span><span style="color: rgb(0, 0, 187);">prec</span><span style="color: rgb(0, 119, 0);">=</span><span style="color: rgb(0, 0, 187);">c</span><span style="color: rgb(0, 119, 0);">.</span><span style="color: rgb(0, 0, 187);">prec<br />FROM sysobjects o<br />JOIN syscolumns c on o</span><span style="color: rgb(0, 119, 0);">.</span><span style="color: rgb(0, 0, 187);">id</span><span style="color: rgb(0, 119, 0);">=</span><span style="color: rgb(0, 0, 187);">c</span><span style="color: rgb(0, 119, 0);">.</span><span style="color: rgb(0, 0, 187);">id<br />JOIN systypes t on c</span><span style="color: rgb(0, 119, 0);">.</span><span style="color: rgb(0, 0, 187);">xusertype</span><span style="color: rgb(0, 119, 0);">=</span><span style="color: rgb(0, 0, 187);">t</span><span style="color: rgb(0, 119, 0);">.</span><span style="color: rgb(0, 0, 187);">xusertype<br />WHERE o</span><span style="color: rgb(0, 119, 0);">.</span><span style="color: rgb(0, 0, 187);">name </span><span style="color: rgb(0, 119, 0);">= @</span><span style="color: rgb(0, 0, 187);">PKTable </span><span style="color: rgb(0, 119, 0);">AND </span><span style="color: rgb(0, 0, 187);">c</span><span style="color: rgb(0, 119, 0);">.</span><span style="color: rgb(0, 0, 187);">name </span><span style="color: rgb(0, 119, 0);">= @</span><span style="color: rgb(0, 0, 187);">PKName<br /><br /></span><span style="color: rgb(0, 119, 0);">IF </span><span style="color: rgb(0, 0, 187);">CHARINDEX</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(221, 0, 0);">'char'</span><span style="color: rgb(0, 119, 0);">, @</span><span style="color: rgb(0, 0, 187);">type</span><span style="color: rgb(0, 119, 0);">) > </span><span style="color: rgb(0, 0, 187);">0<br />SET </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">type </span><span style="color: rgb(0, 119, 0);">= @</span><span style="color: rgb(0, 0, 187);">type </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">'(' </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(0, 0, 187);">CAST</span><span style="color: rgb(0, 119, 0);">(@</span><span style="color: rgb(0, 0, 187);">prec </span><span style="color: rgb(0, 119, 0);">AS </span><span style="color: rgb(0, 0, 187);">varchar</span><span style="color: rgb(0, 119, 0);">) + </span><span style="color: rgb(221, 0, 0);">')'<br /><br /></span><span style="color: rgb(0, 119, 0);">DECLARE @</span><span style="color: rgb(0, 0, 187);">strPageSize varchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">50</span><span style="color: rgb(0, 119, 0);">)<br />DECLARE @</span><span style="color: rgb(0, 0, 187);">strStartRow varchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">50</span><span style="color: rgb(0, 119, 0);">)<br />DECLARE @</span><span style="color: rgb(0, 0, 187);">strFilter nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">1000</span><span style="color: rgb(0, 119, 0);">)<br />DECLARE @</span><span style="color: rgb(0, 0, 187);">strGroup varchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">1000</span><span style="color: rgb(0, 119, 0);">)<br /><br /></span><span style="color: rgb(255, 128, 0);">/*Default Sorting*/<br /></span><span style="color: rgb(0, 119, 0);">IF @</span><span style="color: rgb(0, 0, 187);">Sort IS NULL </span><span style="color: rgb(0, 119, 0);">OR @</span><span style="color: rgb(0, 0, 187);">Sort </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">''<br /></span><span style="color: rgb(0, 0, 187);">SET </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">Sort </span><span style="color: rgb(0, 119, 0);">= @</span><span style="color: rgb(0, 0, 187);">PK<br /><br /></span><span style="color: rgb(255, 128, 0);">/*Default Page Number*/<br /></span><span style="color: rgb(0, 119, 0);">IF @</span><span style="color: rgb(0, 0, 187);">PageNumber </span><span style="color: rgb(0, 119, 0);">< </span><span style="color: rgb(0, 0, 187);">1<br />SET </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">PageNumber </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(0, 0, 187);">1<br /><br /></span><span style="color: rgb(255, 128, 0);">/*Set paging variables.*/<br /></span><span style="color: rgb(0, 0, 187);">SET </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">strPageSize </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(0, 0, 187);">CAST</span><span style="color: rgb(0, 119, 0);">(@</span><span style="color: rgb(0, 0, 187);">PageSize </span><span style="color: rgb(0, 119, 0);">AS </span><span style="color: rgb(0, 0, 187);">varchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">50</span><span style="color: rgb(0, 119, 0);">))<br /></span><span style="color: rgb(0, 0, 187);">SET </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">strStartRow </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(0, 0, 187);">CAST</span><span style="color: rgb(0, 119, 0);">(((@</span><span style="color: rgb(0, 0, 187);">PageNumber </span><span style="color: rgb(0, 119, 0);">- </span><span style="color: rgb(0, 0, 187);">1</span><span style="color: rgb(0, 119, 0);">)*@</span><span style="color: rgb(0, 0, 187);">PageSize </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(0, 0, 187);">1</span><span style="color: rgb(0, 119, 0);">) AS </span><span style="color: rgb(0, 0, 187);">varchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">50</span><span style="color: rgb(0, 119, 0);">))<br /><br /></span><span style="color: rgb(255, 128, 0);">/*Set filter & group variables.*/<br /></span><span style="color: rgb(0, 119, 0);">IF @</span><span style="color: rgb(0, 0, 187);">Filter IS NOT NULL </span><span style="color: rgb(0, 119, 0);">AND @</span><span style="color: rgb(0, 0, 187);">Filter </span><span style="color: rgb(0, 119, 0);">!= </span><span style="color: rgb(221, 0, 0);">''<br /></span><span style="color: rgb(0, 0, 187);">SET </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">strFilter </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">' WHERE ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">Filter </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' '<br /></span><span style="color: rgb(0, 119, 0);">ELSE<br /></span><span style="color: rgb(0, 0, 187);">SET </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">strFilter </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">''<br /></span><span style="color: rgb(0, 119, 0);">IF @</span><span style="color: rgb(0, 0, 187);">Group IS NOT NULL </span><span style="color: rgb(0, 119, 0);">AND @</span><span style="color: rgb(0, 0, 187);">Group </span><span style="color: rgb(0, 119, 0);">!= </span><span style="color: rgb(221, 0, 0);">''<br /></span><span style="color: rgb(0, 0, 187);">SET </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">strGroup </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">' GROUP BY ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">Group </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' '<br /></span><span style="color: rgb(0, 119, 0);">ELSE<br /></span><span style="color: rgb(0, 0, 187);">SET </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">strGroup </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">''<br /><br /></span><span style="color: rgb(0, 119, 0);">--</span><span style="color: rgb(0, 0, 187);">SET </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">type</span><span style="color: rgb(0, 119, 0);">=</span><span style="color: rgb(221, 0, 0);">'uniqueidentifier'<br /></span><span style="color: rgb(255, 128, 0);">/*Execute dynamic query*/<br /><br /></span><span style="color: rgb(0, 0, 187);">EXEC</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(221, 0, 0);">'<br />DECLARE @PageSize int<br />SET @PageSize = ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">strPageSize </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">'<br /><br />DECLARE @PK ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">type </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">'<br />DECLARE @tblPK TABLE<br /> (<br /> PK ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">type </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' NOT NULL PRIMARY KEY<br /> )<br /><br />DECLARE PagingCursor CURSOR DYNAMIC READ_ONLY FOR<br />SELECT ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">PK </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' FROM ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">Tables </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">strFilter </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">strGroup </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' ORDER BY ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">Sort </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">'<br /><br />OPEN PagingCursor<br />FETCH RELATIVE ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">strStartRow </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' FROM PagingCursor INTO @PK<br /><br />SET NOCOUNT ON<br /><br />WHILE @PageSize > 0 AND @@FETCH_STATUS = 0<br />BEGIN<br /> INSERT @tblPK (PK) VALUES (@PK)<br /> FETCH NEXT FROM PagingCursor INTO @PK<br /> SET @PageSize = @PageSize - 1<br />END<br /><br />CLOSE PagingCursor<br />DEALLOCATE PagingCursor<br /><br />SELECT ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">Fields </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' FROM ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">Tables </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' JOIN @tblPK tblPK ON ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">PK </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' = tblPK.PK ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">strFilter </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">strGroup </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' ORDER BY ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">Sort<br /></span><span style="color: rgb(0, 119, 0);">) </span></span></code></code>Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com0tag:blogger.com,1999:blog-7097348045257270421.post-21376665001001931232009-08-29T10:04:00.002+07:002009-08-29T10:04:00.582+07:00Chiết lý về phụ nữ1. Phụ nữ giống như người dự báo thời tiết: Chỉ nhận là mình đoán thiếu chính xác chứ không sai.<br /><br />2. Phụ nữ là một bản nhạc dài không có các nốt trầm.<br /><br />3. Một người phụ nữ toàn diện : sáng diện, trưa diện, chiều diện, tối diện.<br /><br />4. Đằng sau sự thành công của một người đàn ông luôn có hình bóng của một người đàn bà, và đằng sau sự thất bại của một người đàn ông là một người đàn bà thật sự.<br /><br />5. Phụ nữ luôn lo lắng về tương lai cho đến khi có chồng. Đàn ông không bao giờ lo lắng về tương lai cho đến khi có vợ.<br /><br />6. Phụ nữ cưới chồng với hi vọng anh ta sẽ thay đổi, xong anh ta không thay đổi. Đàn ông cưới vợ với hi vọng cô ta sẽ không thay đổi, xong cô ta lại thay đổi.<br /><br />7. Về mặt triết học: Vợ là một thực thể độc lập tồn tại bên ngoài ta, ngoài ý muốn của ta.<br /><br />8. Về mặt kinh tế: Vợ là ngân hàng vô luật pháp, không thể lệ: gửi vào thì dễ, rút ra thì khó mà không thể kiện cáo gì được.<br /><br />9. Về mặt tài sản: Vợ là cái gì rất cũ mà không thể thanh lý được.<br /><br />10. Về mặt xã hội: Vợ là cá nhân tự do, tình nguyện về chung sống với ta nhưng lại luôn tố cáo ta làm mất tự do của cô ấy, và nếu như ta trả lại thì lại không nhận.<br /><br />11. Về mặt cổ học: Vợ là loại đồ cổ càng để lâu càng mất giá.<br /><br />12. Về mặt sinh học: Vợ đáng sợ hơn mãnh thú, các bà vợ có họ gần với sư tử.<br /><br />(ST)Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com0tag:blogger.com,1999:blog-7097348045257270421.post-10388190142920644132009-08-28T10:07:00.001+07:002009-08-28T10:07:00.886+07:00Càng dâm càng thíchTớ dấu cái ấy của tớ đi bằng nó.<br /><br />Trưng màu sẫm lên tớ hoàn toàn yên tâm về sự thu hút của mình. Bên trong nó, bộ phận quan trọng bậc nhất cơ thể tớ có thể thoải mái cử động. Và…những cử động ấy thật tự do. Tuyệt vời…sướng nhất là không bị phát hiện. Những biểu cảm của ham muốn, đam mê mãnh liệt, nhiều khi không đàng hoàng cho lắm! Tớ không muốn mọi người dòm thấy.<br /><br />Không đàng hoàng?<br /><br />Đương nhiên, sẽ là tội lỗi, báng bổ nếu công khai hướng đến người khác giới lạ mặt hoặc người đối diện với thao tác đong đưa cái bộ phận nhạy cảm đó. Có nó, người ta thay vì cho tớ là "thiếu đứng đắn", thì sẽ đánh giá tớ: Hấp dẫn, quý phái, sang trọng, sành điệu, lịch sự…<br /><br />Tớ dấu cái thứ quan trọng bậc nhất của tớ đi bằng nó.<br />Nó: Hai mảnh khá mỏng manh. Có thể do sở thích khác biệt nên cũng nhiều người chọn màu sáng hoặc sặc sỡ: Vàng, hồng, tím, xanh…Bây giờ, trang phục thông thường hay trang sức cũng chưa chắc được coi trọng bằng. Tớ đề cao người đầu tiên tạo ra nó.<br /><br />Với tớ, chọn loại càng dâm càng thích. Nó che dấu tội lỗi giăng đầy trong mắt. Và cho mọi người cơ hội tưởng tưởng nhiều hơn. Bên ngoài nó đời vẫn sáng!<br /><br />Đố biết cái ấy là cái gì<br /><img src="http://03bx.com/images/smilies/19.gif" alt="" title="19" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/19.gif" alt="" title="19" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/19.gif" alt="" title="19" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/19.gif" alt="" title="19" class="inlineimg" border="0" /><img src="http://03bx.com/images/smilies/19.gif" alt="" title="19" class="inlineimg" border="0" />Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com0tag:blogger.com,1999:blog-7097348045257270421.post-17184621511911979042009-08-28T09:26:00.004+07:002009-08-31T13:11:08.839+07:00Kỹ thuật phân trang trong DatabasePhần này của ông bạn tôi viết, gửi cho tôi theo kiểu khuyến mại. Đôi khi mình cũng lười thế là dùng luôn. Nhưng đọc kỹ lại phát hiện một số những điểm nên cài tiến.<br />1. Không sử dụng câu lệnh CREATE TABLE như trong này.<br />mà nên dùng DECLARE @tblTemp TABLE(id INT PRIMARY KEY, ...)<br /><br />2. Không nên khai báo con trỏ trong SQL theo kiểu như thế này.<br />mà nên khai báo thế này thêm các từ khóa như readonly,...<br /><br />bên cạnh đó cũng còn một kỹ thuật phân trang khác bằng cách sử dụng con trỏ. Tôi sẽ giới thiệu trong bài sau.<br /><br /><code style="white-space: nowrap;"><code><span style="color: rgb(0, 0, 0);"><span style="color: rgb(0, 0, 187);"></span><span style="color: rgb(0, 119, 0);">-------------------------------------------<br />if </span><span style="color: rgb(0, 0, 187);">exists </span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">select name from sysobjects where name </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">'GetManyCUS_ResultBySearch'</span><span style="color: rgb(0, 119, 0);">)<br /></span><span style="color: rgb(0, 0, 187);">drop proc GetManyCUS_ResultBySearch<br />go<br /><br />create procedure GetManyCUS_ResultBySearch<br /></span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">Keyword nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">100</span><span style="color: rgb(0, 119, 0);">),<br />@</span><span style="color: rgb(0, 0, 187);">TypeID char</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">5</span><span style="color: rgb(0, 119, 0);">),<br />@</span><span style="color: rgb(0, 0, 187);">PageSize int</span><span style="color: rgb(0, 119, 0);">,<br />@</span><span style="color: rgb(0, 0, 187);">PageNumber int</span><span style="color: rgb(0, 119, 0);">,<br />@</span><span style="color: rgb(0, 0, 187);">ItemCount int OUT<br /></span><span style="color: rgb(255, 128, 0);"><br /></span><span style="color: rgb(0, 119, 0);">as<br /></span><span style="color: rgb(0, 0, 187);">begin<br /><br /></span><span style="color: rgb(0, 119, 0);">declare @</span><span style="color: rgb(0, 0, 187);">sqlNewsSelect nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">max</span><span style="color: rgb(0, 119, 0);">),<br /> @</span><span style="color: rgb(0, 0, 187);">sqlDocumentSelect nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">max</span><span style="color: rgb(0, 119, 0);">),<br /> @</span><span style="color: rgb(0, 0, 187);">sqlProjectFDISelect nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">max</span><span style="color: rgb(0, 119, 0);">),<br /> @</span><span style="color: rgb(0, 0, 187);">sqlProjectODASelect nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">max</span><span style="color: rgb(0, 119, 0);">),<br /> @</span><span style="color: rgb(0, 0, 187);">sqlNewsTerm nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">max</span><span style="color: rgb(0, 119, 0);">),<br /> @</span><span style="color: rgb(0, 0, 187);">sqlDocumentTerm nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">max</span><span style="color: rgb(0, 119, 0);">),<br /> @</span><span style="color: rgb(0, 0, 187);">sqlProjectFDITerm nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">max</span><span style="color: rgb(0, 119, 0);">),<br /> @</span><span style="color: rgb(0, 0, 187);">sqlProjectODATerm nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">max</span><span style="color: rgb(0, 119, 0);">)<br /><br />--------------------------------------------------------------------<br /></span><span style="color: rgb(255, 128, 0);">/*Cac bieu thuc select*/<br /></span><span style="color: rgb(0, 119, 0);">--------------------------------------------------------------------<br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sqlNewsSelect </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">'<br />select<br />a.NewsTitle as ''Title'',<br />cast(a.NewsDescription as nvarchar(250)) as ''Description'',<br />'''' as ''PathFile'',<br />b.TypeID as ''TypeID''<br />from CMS_News a<br />inner join CMS_Category b on a.CategoryID = b.CategoryID<br />where b.TypeID = ''news''<br />'<br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sqlDocumentSelect </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">'<br />select<br />a.DocumentName as ''Title'',<br />cast(a.DocumentDescription as nvarchar(250)) as ''Description'',<br />a.DocumentFilePath as ''PathFile'',<br />b.TypeID as ''TypeID''<br />from CMS_Document a<br />inner join CMS_Category b on a.CategoryID = b.CategoryID<br />where b.TypeID = ''docum''<br />'<br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sqlProjectFDISelect </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">'<br />select<br />a.ProjectFDIName as ''Title'',<br />cast(a.FDIDetailContent as nvarchar(250)) as ''Description'',<br />a.FDIDocumentPath as ''PathFile'',<br />b.TypeID as ''TypeID''<br />from CMS_ProjectFDI a<br />inner join CMS_Category b on a.CategoryID = b.CategoryID<br />where b.TypeID = ''proje''<br />'<br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sqlProjectODASelect </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">'<br />select<br />a.ProjectODAName as ''Title'',<br />cast(a.ODADetailContent as nvarchar(250)) as ''Description'',<br />a.ODADocumentPath as ''PathFile'',<br />b.TypeID as ''TypeID''<br />from CMS_ProjectODA a<br />inner join CMS_Category b on a.CategoryID = b.CategoryID<br />where b.TypeID = ''proje''<br />'<br /></span><span style="color: rgb(0, 119, 0);">--------------------------------------------------------------------<br /></span><span style="color: rgb(255, 128, 0);">/*Phan tich chuoi keyword dau vao thanh cac keyword nho*/<br /></span><span style="color: rgb(0, 119, 0);">--------------------------------------------------------------------<br /><br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sqlNewsTerm </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">' 1 != 1'<br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sqlDocumentTerm </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">' 1 != 1'<br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sqlProjectFDITerm </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">' 1 != 1'<br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sqlProjectODATerm </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">' 1 != 1'<br /><br /></span><span style="color: rgb(0, 0, 187);">create table </span><span style="color: rgb(255, 128, 0);">#Keyword(Keyword nvarchar(100))<br /></span><span style="color: rgb(0, 119, 0);">declare @</span><span style="color: rgb(0, 0, 187);">sep nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">10</span><span style="color: rgb(0, 119, 0);">)<br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sep </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">' '<br /></span><span style="color: rgb(0, 119, 0);">declare @</span><span style="color: rgb(0, 0, 187);">keywordTemp nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">500</span><span style="color: rgb(0, 119, 0);">)<br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">keywordTemp </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(0, 0, 187);">replace</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">LTRIM</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">RTRIM</span><span style="color: rgb(0, 119, 0);">(@</span><span style="color: rgb(0, 0, 187);">Keyword</span><span style="color: rgb(0, 119, 0);">))+</span><span style="color: rgb(221, 0, 0);">' '</span><span style="color: rgb(0, 119, 0);">,</span><span style="color: rgb(221, 0, 0);">''''</span><span style="color: rgb(0, 119, 0);">,</span><span style="color: rgb(221, 0, 0);">''''''</span><span style="color: rgb(0, 119, 0);">)<br />while(</span><span style="color: rgb(0, 0, 187);">CHARINDEX</span><span style="color: rgb(0, 119, 0);">(@</span><span style="color: rgb(0, 0, 187);">sep </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">sep</span><span style="color: rgb(0, 119, 0);">, @</span><span style="color: rgb(0, 0, 187);">keywordTemp COLLATE Latin1_General_CS_AS</span><span style="color: rgb(0, 119, 0);">) > </span><span style="color: rgb(0, 0, 187);">0</span><span style="color: rgb(0, 119, 0);">)<br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">keywordTemp </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(0, 0, 187);">replace</span><span style="color: rgb(0, 119, 0);">(@</span><span style="color: rgb(0, 0, 187);">keywordTemp</span><span style="color: rgb(0, 119, 0);">, @</span><span style="color: rgb(0, 0, 187);">sep </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">sep</span><span style="color: rgb(0, 119, 0);">, @</span><span style="color: rgb(0, 0, 187);">sep</span><span style="color: rgb(0, 119, 0);">)<br />declare @</span><span style="color: rgb(0, 0, 187);">indexBegin int<br /></span><span style="color: rgb(0, 119, 0);">declare @</span><span style="color: rgb(0, 0, 187);">indexEnd int<br />set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">indexBegin </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(0, 0, 187);">1<br /></span><span style="color: rgb(0, 119, 0);">while(</span><span style="color: rgb(0, 0, 187);">CHARINDEX </span><span style="color: rgb(0, 119, 0);">( @</span><span style="color: rgb(0, 0, 187);">sep</span><span style="color: rgb(0, 119, 0);">,@</span><span style="color: rgb(0, 0, 187);">keywordTemp COLLATE Latin1_General_CI_AS</span><span style="color: rgb(0, 119, 0);">, @</span><span style="color: rgb(0, 0, 187);">indexBegin</span><span style="color: rgb(0, 119, 0);">) > </span><span style="color: rgb(0, 0, 187);">0</span><span style="color: rgb(0, 119, 0);">)--</span><span style="color: rgb(0, 0, 187);">Latin1_General_CS_AS<br />begin<br />set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">indexEnd </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(0, 0, 187);">CHARINDEX </span><span style="color: rgb(0, 119, 0);">( @</span><span style="color: rgb(0, 0, 187);">sep</span><span style="color: rgb(0, 119, 0);">,@</span><span style="color: rgb(0, 0, 187);">keywordTemp COLLATE Latin1_General_CI_AS</span><span style="color: rgb(0, 119, 0);">, @</span><span style="color: rgb(0, 0, 187);">indexBegin</span><span style="color: rgb(0, 119, 0);">)<br /></span><span style="color: rgb(0, 0, 187);">insert into </span><span style="color: rgb(255, 128, 0);">#Keyword values (SUBSTRING(@keywordTemp, @indexBegin, @indexEnd - @indexBegin))<br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">indexBegin </span><span style="color: rgb(0, 119, 0);">= @</span><span style="color: rgb(0, 0, 187);">indexEnd </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(0, 0, 187);">1<br />end<br /></span><span style="color: rgb(0, 119, 0);">declare @</span><span style="color: rgb(0, 0, 187);">KeywordExec nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">500</span><span style="color: rgb(0, 119, 0);">)<br />declare </span><span style="color: rgb(0, 0, 187);">rm_cursor cursor </span><span style="color: rgb(0, 119, 0);">for<br /></span><span style="color: rgb(0, 0, 187);">select<br /> Keyword <br />from<br /> </span><span style="color: rgb(255, 128, 0);">#Keyword<br /></span><span style="color: rgb(0, 0, 187);">open rm_cursor<br />fetch next from rm_cursor into<br /> </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">KeywordExec<br /></span><span style="color: rgb(0, 119, 0);">while (@@</span><span style="color: rgb(0, 0, 187);">FETCH_STATUS </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(0, 0, 187);">0</span><span style="color: rgb(0, 119, 0);">)<br /></span><span style="color: rgb(0, 0, 187);">begin<br /> </span><span style="color: rgb(0, 119, 0);">--------------------------------------------------------------------<br /> </span><span style="color: rgb(255, 128, 0);">/*Dua cac tu tim duoc trong chuoi de ghep thanh bieu thuc tim kiem*/<br /> </span><span style="color: rgb(0, 119, 0);">--------------------------------------------------------------------<br /> </span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">KeywordExec </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">'N''%' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">KeywordExec </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">'%'''<br /> </span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sqlNewsTerm </span><span style="color: rgb(0, 119, 0);">= @</span><span style="color: rgb(0, 0, 187);">sqlNewsTerm </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' or a.NewsTitle like ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">KeywordExec<br /> set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sqlDocumentTerm </span><span style="color: rgb(0, 119, 0);">= @</span><span style="color: rgb(0, 0, 187);">sqlDocumentTerm </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' or a.DocumentName like ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">KeywordExec<br /> set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sqlProjectFDITerm </span><span style="color: rgb(0, 119, 0);">= @</span><span style="color: rgb(0, 0, 187);">sqlProjectFDITerm </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' or a.ProjectFDIName like ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">KeywordExec<br /> set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sqlProjectODATerm </span><span style="color: rgb(0, 119, 0);">= @</span><span style="color: rgb(0, 0, 187);">sqlProjectODATerm </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' or a.ProjectODAName like ' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">KeywordExec<br /> fetch next from rm_cursor into </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">KeywordExec <br />end<br />close rm_cursor<br />deallocate rm_cursor<br />drop table </span><span style="color: rgb(255, 128, 0);">#Keyword<br /><br /></span><span style="color: rgb(0, 119, 0);">declare @</span><span style="color: rgb(0, 0, 187);">sql nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">max</span><span style="color: rgb(0, 119, 0);">)<br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sql </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">'<br />select<br />row_number() over( order by Title) as RowNumber,<br />Title,<br />Description,<br />PathFile,<br />TypeID<br />from ('<br /></span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">sqlNewsSelect </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' and (' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">sqlNewsTerm </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">')'<br /></span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' union '<br /></span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">sqlDocumentSelect </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' and (' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">sqlDocumentTerm </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">')'<br /></span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' union '<br /></span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">sqlProjectFDISelect </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' and (' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">sqlProjectFDITerm </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">')'<br /></span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' union '<br /></span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">sqlProjectODASelect </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' and (' </span><span style="color: rgb(0, 119, 0);">+ @</span><span style="color: rgb(0, 0, 187);">sqlProjectODATerm </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">')'<br /></span><span style="color: rgb(0, 119, 0);">+</span><span style="color: rgb(221, 0, 0);">') as tblSelect'<br /><br /></span><span style="color: rgb(0, 0, 187);">insert into loghiep values</span><span style="color: rgb(0, 119, 0);">(@</span><span style="color: rgb(0, 0, 187);">sql</span><span style="color: rgb(0, 119, 0);">)<br /><br />declare @</span><span style="color: rgb(0, 0, 187);">sqlcount nvarchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">max</span><span style="color: rgb(0, 119, 0);">)<br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sqlcount </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">'select count(*) from ('</span><span style="color: rgb(0, 119, 0);">+@</span><span style="color: rgb(0, 0, 187);">sql</span><span style="color: rgb(0, 119, 0);">+</span><span style="color: rgb(221, 0, 0);">') as tbl_Result'<br /></span><span style="color: rgb(0, 0, 187);">create table </span><span style="color: rgb(255, 128, 0);">#ItemCount(ItemCount int)<br /></span><span style="color: rgb(0, 0, 187);">insert into </span><span style="color: rgb(255, 128, 0);">#ItemCount exec(@sqlcount)<br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">ItemCount </span><span style="color: rgb(0, 119, 0);">= (</span><span style="color: rgb(0, 0, 187);">select top</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">1</span><span style="color: rgb(0, 119, 0);">) </span><span style="color: rgb(0, 0, 187);">ItemCount from </span><span style="color: rgb(255, 128, 0);">#ItemCount)<br /></span><span style="color: rgb(0, 0, 187);">drop table </span><span style="color: rgb(255, 128, 0);">#ItemCount<br /></span><span style="color: rgb(0, 119, 0);">declare @</span><span style="color: rgb(0, 0, 187);">ItemMin int</span><span style="color: rgb(0, 119, 0);">, @</span><span style="color: rgb(0, 0, 187);">ItemMax int<br />set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">ItemMin </span><span style="color: rgb(0, 119, 0);">= @</span><span style="color: rgb(0, 0, 187);">PageSize </span><span style="color: rgb(0, 119, 0);">* @</span><span style="color: rgb(0, 0, 187);">PageNumber </span><span style="color: rgb(0, 119, 0);">- @</span><span style="color: rgb(0, 0, 187);">PageSize </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(0, 0, 187);">1<br />set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">ItemMax </span><span style="color: rgb(0, 119, 0);">= @</span><span style="color: rgb(0, 0, 187);">PageSize </span><span style="color: rgb(0, 119, 0);">* @</span><span style="color: rgb(0, 0, 187);">PageNumber </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(0, 0, 187);">1<br /></span><span style="color: rgb(0, 119, 0);">if @</span><span style="color: rgb(0, 0, 187);">ItemMin </span><span style="color: rgb(0, 119, 0);">< </span><span style="color: rgb(0, 0, 187);">0 set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">ItemMin </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(0, 0, 187);">0<br /></span><span style="color: rgb(0, 119, 0);">if @</span><span style="color: rgb(0, 0, 187);">ItemMax </span><span style="color: rgb(0, 119, 0);">< </span><span style="color: rgb(0, 0, 187);">0 set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">ItemMax </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(0, 0, 187);">0<br />set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sql </span><span style="color: rgb(0, 119, 0);">= </span><span style="color: rgb(221, 0, 0);">'select<br />Title,<br />Description,<br />PathFile,<br />TypeID<br />from ('</span><span style="color: rgb(0, 119, 0);">+@</span><span style="color: rgb(0, 0, 187);">sql</span><span style="color: rgb(0, 119, 0);">+</span><span style="color: rgb(221, 0, 0);">') as tbl_Result where 1 = 1'<br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sql </span><span style="color: rgb(0, 119, 0);">= @</span><span style="color: rgb(0, 0, 187);">sql </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' and RowNumber >= ' </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(0, 0, 187);">convert</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">varchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">10</span><span style="color: rgb(0, 119, 0);">), @</span><span style="color: rgb(0, 0, 187);">ItemMin</span><span style="color: rgb(0, 119, 0);">)<br /></span><span style="color: rgb(0, 0, 187);">set </span><span style="color: rgb(0, 119, 0);">@</span><span style="color: rgb(0, 0, 187);">sql </span><span style="color: rgb(0, 119, 0);">= @</span><span style="color: rgb(0, 0, 187);">sql </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(221, 0, 0);">' and RowNumber < ' </span><span style="color: rgb(0, 119, 0);">+ </span><span style="color: rgb(0, 0, 187);">convert</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">varchar</span><span style="color: rgb(0, 119, 0);">(</span><span style="color: rgb(0, 0, 187);">10</span><span style="color: rgb(0, 119, 0);">), @</span><span style="color: rgb(0, 0, 187);">ItemMax</span><span style="color: rgb(0, 119, 0);">)<br /></span><span style="color: rgb(0, 0, 187);">exec</span><span style="color: rgb(0, 119, 0);">(@</span><span style="color: rgb(0, 0, 187);">sql</span><span style="color: rgb(0, 119, 0);">)<br /><br /></span><span style="color: rgb(0, 0, 187);">end<br />go<br /><br />grant execute on GetManyCUS_ResultBySearch to </span><span style="color: rgb(0, 119, 0);">public<br /></span><span style="color: rgb(0, 0, 187);">go<br /></span></span></code></code>Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com1tag:blogger.com,1999:blog-7097348045257270421.post-51458285108626653562009-04-27T20:39:00.003+07:002009-04-27T20:39:00.438+07:00Đạo đức kinh - Lão tửĐạo đức kinh - Lão Tử ! Sẽ và mãi là một kiệt tác chính luận của nhân loại.<br /><br />Đạo đức kinh hay còn gọi là tam tự kinh là một cuốn sách chính luận chưa đến 1000 câu nhưng chứa đựng những tư tưởng và chiết lý sâu sắc về chiết học lý luận nói chung và chiết học quản trị nói riêng (trị quốc...).<br /><span style="font-weight: bold;">Lão tử</span><br />Cuộc đời cũng như tên tuổi của Lão Tử là một bí ẩn đã và đang là một thách thức lịch sử với nhiều học giả ! Tại sao ? Vì bản thân lý lịch của ông cũng như tư tưởng mà ông để lại (đạo - kinh) đều nhất quán một quan điểm là ẩn dật với đời, thấu hiểu cái đạo của vạn vật làm vui. Thành công thì không ở lại, người đời biết đến mà không lưu lại danh tính ???.<br /><br />Phần lớn tài liệu viết về ông chỉ mang tính chuyền thuyết... hoặc vì những mục đích về khác mà thành. Theo chính sử của Trung Hoa (Nhà sử ký Tư Mã Thiên - đời Hán). Thì ông là người nước Sở làm quan chiều đại nhà Chu, là người cùng thời với Khổng Tử nhưng lớn tuổi hơn Khổng. Cũng theo Tư Mã thì Khổng và Lão đã có nhiều những tranh luận nổi tiếng và những tranh luận đó mang lại ích lợi cho Khổng rất nhiều. Sau này Khổng Tử là người thầy khởi sướng lên trường phái Nho Giáo tầm ảnh hưởng rất lớn đến lịch sử và còn lưu tới ngày nay.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtbNBabZ2FjjWyNxTXYMn4rtXTYciny0GZ9tKSaMDP1VzYGqq9BPKBhDCxMWTwojJ5v8mSAp-MC6EdF4PiovMpIYIqpGNRHzzJk5wBssRBlCcMac5iLqxFHkqnmFHAcWpI2K_rK0wkgDOh/s1600-h/Birth_of_Laozi.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 166px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtbNBabZ2FjjWyNxTXYMn4rtXTYciny0GZ9tKSaMDP1VzYGqq9BPKBhDCxMWTwojJ5v8mSAp-MC6EdF4PiovMpIYIqpGNRHzzJk5wBssRBlCcMac5iLqxFHkqnmFHAcWpI2K_rK0wkgDOh/s320/Birth_of_Laozi.PNG" alt="" id="BLOGGER_PHOTO_ID_5323767318610169282" border="0" /></a><br />Người đời sau từ tên của Lão Tử mà luận ra nhiều những truyền thuyết về cuộc đời của ông. Như mẹ ông mang thai ông 81 năm mới sinh ra ông và khi sinh hạ thì có 8 con rồng chầu về, lúc mới sinh ra ông đã là một đứa trẻ già (Lão Tử) vì thế nên lấy tên là Lão tử cũng là hiển nhiên. Phần lớn các học giả đều thông nhất một quan điểm chung là tên hiệu Lão Tử do ông tự đặt với nhiều những ý nghĩa thâm thuý và cũng có nhiều những luận giải khác nhau như là người thầy của tất thẩy các thầy, người thấu hiểu đạo trời Lão - Tử. ...<br /><br />Theo quan điểm của người viết thì tư tưởng của Lão Tử khá là bảo thủ. Ông nhìn nhận mọi việc theo kiểu tất lẽ dĩ ngẫu nó sinh ra là thế và cái đạo của thánh nhân là hiểu và làm theo nó sao cho đúng cái quy luật của đạo chẳng bận tâm tới những điều khác, kiểu như cái biết của thánh nhân là thấu hiểu cái đạo lý ở đời mà chẳng có chút gì chủ động của chủ thể để cải tạo hoặc tác động vào nó - Luận về Vô Vi (không gì cả). Chính vì thế theo một số truyền thuyết về sự ra đời của Đạo Đức Kinh cũng đề cập đến lý do ông viết và để lại cuốn sách này trước khi biết mất trên cõi đời này (cưỡi trâu nước đi vào xa mạc). Là do thỉnh cầu của một người khác - một người lính thấy trí tuệ uyên bác cũng như kiến thức của ông mà đề nghị ông viết lại những điều đó. Nhờ thế nên nhân loại ngày nay mới có quyển Đạo Đức Kinh mà tranh luận !<br /><br /><br />../..Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com2tag:blogger.com,1999:blog-7097348045257270421.post-25365780303176048752009-04-20T10:08:00.002+07:002009-04-20T10:08:00.829+07:00Thơ Hồ Xuân Hương<span style="font-weight: bold;">Quả Mít</span><br /><br />Thân em như quả mít trên cây<br />Da nó xù xì, múi nó dầy<br />Quân tử có thương thì đóng cọc,<br />Xin đừng mân mó, nhựa ra tay.<br /><br /><br /><span style="font-weight: bold;">Vịnh Cái Giếng</span><br /><br />Ngõ ngay thăm thẳm tới nhà ông,<br />Giếng tốt thanh thơi, giếng lạ lùng<br />Cầu trăng phau phau đôi ván ghép<br />Nước trong leo lẻo một dòng thông.<br /><br />Cỏ gà lún phún leo quanh mép<br />Cá diếc le te lách giữa dòng.<br />Giếng ấy thanh tân ai cũng biết<br />Đố ai dám thả nạ dòng dòng.<br /><br /><br /><span style="font-weight: bold;">Vịnh cái quạt</span><br /><br />Một lỗ xâu tự bao giờ<br />Chành ra ba góc da còn thiếu<br />Khép lại đôi bên thịt vẫn thừa.<br />Mát mặt anh hùng khi tắt gió<br />Che đầu quân tử lúc sa mưa.<br />Nâng niu ướm hỏi người trong trướng<br />Phì phạch trong lòng đã sướng chưa ?<br /><br /><br /><span style="font-weight: bold;">Trống Thủng</span><br /><br />Của em bưng bít vẫn bùi ngùi<br />Nó thủng vì chưng kẻ nặng dùi<br />Ngày vắng đập tung dăm bảy chiếc<br />Đêm thanh tỏm cắc một đôi hồi<br />Khi giang thẳng cánh bù khi cúi<br />Chiến đứng không thôi lại chiến ngồi.<br />Nhắn nhủ ai về thương lấy với<br />Thịt da ai cũng thế mà thôi.<br /><br /><br /><span style="font-weight: bold;">Chơi thuyền thưởng nguyệt</span><br /><br />Hà Đông một dải nước trong veo,<br />Lãng đãng thuyền tình chở nặng chèo.<br />Gợn sóng nhấp nhô tăm cá lội,<br />In dòng chấp chới mảnh trăng treo.<br />Muốn trôi như lá mà than thở,<br />Phải mượn tin băng để dập dìu.<br />Cây cỏ buồn cho lòng thuý ái,<br />Ái ân lênh láng biết bao nhiêu.<br /><span style="font-weight: bold;"><br />Đá ông chồng bà chồng</span><br /><br />Khéo khéo bày trò tạo hoá công,<br />Ông Chồng đã vậy lại Bà Chồng.<br />Tầng trên tuyết điểm phơ đầu bạc,<br />Thớt dưới sương pha đượm má hồng.<br />Gan nghĩa dãi ra cùng nhật nguyệt,<br />Khối tình cọ mãi với non sông.<br />Đá kia còn biết xuân già giặn,<br />Chả trách người ta lúc trẻ trung.<br /><br /><br /><br /><span style="font-weight: bold;">Đánh đu</span><br /><br />Bốn cột khen ai khéo khéo trồng,<br />Người thì lên đánh kẻ ngồi trông,<br />Trai đu gối hạc khom khom cật<br />Gái uốn lưng ong ngửa ngửa lòng.<br />Bốn mảnh quần hồng bay phấp phới,<br />Hai hàng chân ngọc duỗi song song.<br />Chơi xuân có biết xuân chăng tá.<br />Cọc nhổ đi rồi, lỗ bỏ không!<br /><br /><br /><span style="font-weight: bold;">Đề tranh Tố nữ</span><br /><br />Hỏi bao nhiêu tuổi hỡ cô mình?<br />Chị cũng xinh mà em cũng xinh<br />Đôi lứa như in tờ giấy trắng.<br />Nghìn năm còn mãi cái xuân xanh.<br />Xiếu mai chi dám tình trăng gió,<br />Bồ liễu thôi đành phận mỏng manh,<br />Còn thú vui kia sao chẳng vẽ,<br />Trách người thợ vẽ khéo vô tình.<br /><br /><br /><br /><span style="font-weight: bold;">Đèo Ba Dội</span><br /><br />Một đèo, một đèo, lại một đèo,<br />Khen ai khéo tạc cảnh cheo leo.<br />Cửa con đỏ loét tùm hum nóc,<br />Hòn đá xanh rì lún phún rêu.<br />Lắt lẻo cành thông cơn gió thốc,<br />Đầm đìa lá liễu giọt sương gieo.<br />Hiền nhân quân tử ai là chẳng<br />Mỏi gối chồn chân vẫ muốn trèo.<br /><br /><br /><span style="font-weight: bold;">Dệt cửi</span><br /><br />Thắp ngọn đèn lên thấy trắng phau,<br />Con cò mấp máy suốt đêm thâu.<br />Hai chân đạp xuống năng năng nhắc,<br />Một suốt đâm ngang thích thích mau.<br /><br />Rộng hẹp nhỏ to vừa vặn cả,<br />Ngắn dài khuôn khổ cũng như nhau.<br />Cô nào muốn tốt ngâm cho kỹ,<br />Chờ đến ba thu mới dãi màu<br /><br /><br /><br /><br /><span style="font-weight: bold;">Động Hương Tích</span><br /><br />Bày đặt kìa ai khéo khéo phòm<br />Nứt ra một lỗ hỏm hòm hòm.<br />Người quen cõi Phật chen chân xọc,<br />Kẻ lạ bầu tiên mỏi mắt dòm.<br /><br />Giọt nước hữu tình rơi thánh thót,<br />Con thuyền vô trạo cúi lom khom.<br />Lâm tuyền quyến cả phồn hoa lại,<br />Rõ khéo trời già đến dở dom.<br /><br /><br /><span style="font-weight: bold;">Đồng tiền hoẻn</span><br /><br />Cũng lò cũng bễ cũng cùng than,<br />Mở mặt vuông tròn với thế gian.<br />Kém cạnh cho nên mang tiếng hoẻn,<br />Đủ đồng ắt cũng đáng nên quan.<br /><br /><br /><span style="font-weight: bold;">Hang Cắc Cớ</span><br /><br />Trời đất sinh ra đá một chòm,<br />Nứt làm hai mảnh hỏm hòm hom.<br />Kẽ hầm rêu mốc trơ toen hoẻn,<br />Luồng gió thông reo vỗ phập phòm.<br /><br />Giọt nước hữu tình rơi lõm bõm,<br />Con đường vô ngạn tối om om.<br />Khen ai đẽo đá tài xuyên tạc,<br />Khéo hớ hênh ra lắm kẻ dòm!<br /><br /><br /><span style="font-weight: bold;">Hang Thánh Hoá chùa Thầy</span><br /><br />Khen thay con tạo khéo khôn phàm,<br />Một đố giương ra biết mấy ngoàm.<br />Lườn đá cỏ leo sở rậm rạp,<br />Lách khe nước rỉ mó lam nham.<br /><br />Một sư đầu trọc ngồi khua mõ,<br />Hai tiểu lưng tròn đứng giữa am.<br />Đến mới biết là hang Thánh Hoá,<br />Chồn chân mỏi gối vẫn còn ham!<br /><br /><br /><br /><br /><span style="font-weight: bold;">Lấy chồng chung</span><br /><br />Kẻ đắp chăn bông kẻ lạnh lùng,<br />Chém cha cái kiếp lấy chồng chung.<br />Năm thì mười hoạ chăng hay chớ<br />Một tháng đôi lần có cũng không.<br /><br />Cố đấm ăn xôi, xôi lại hẩm,<br />Cầm bằng làm mướn, mướn không công.<br />Thân này ví biết dường này nhỉ<br />Thà trước thôi đành ở vậy xong.<br /><br /><br /><span style="font-weight: bold;">Ốc Nhồi</span><br /><br />Bác mẹ sinh ra phận ốc nhồi,<br />Ðêm ngày lăn lóc đám cỏ hôi.<br />Quân tử có thương thì bóc yếm,<br />Xin đừng ngó ngoáy lỗ trôn tôi<br /><br /><br /><span style="font-weight: bold;">Quán Khánh</span><br /><br />Đứng chéo trông theo cảnh hắt heo,<br />Đường đi thiên thẹo quán cheo leo.<br />Lợp lều mái cỏ tranh xơ xác,<br />Xo kẽ kèo tre đốt khẳng kheo.<br /><br />Ba chạc cây xanh hình uốn éo,<br />Một dòng nước biếc cảnh leo teo.<br />Thú vui quên cả niềm lo cũ,<br />Kìa cái diều ai nó lộn lèo.<br /><br /><br /><span style="font-weight: bold;">Trách chiêu Hổ</span><br /><br />Xướng<br />Sao nói rằng năm lại có ba?<br />Trách người quân tử hẹn sai ra.<br />Bao giờ thong thả lên chơi nguyệt,<br />Nhớ hái cho xin nắm lá đa<br /><br />Chiêu Hổ hoạ lại<br />Rằng gián thì năm, quí có ba<br />Bởi người thục nữ tính không ra.<br />Ừ rồi, thong thả lên chơi nguyệt<br />Cho cả cành đa lẫn củ đa.<br /><br /><br /><span style="font-weight: bold;">Trách chiêu Hổ</span><br /><br />Xướng<br />Những bấy lâu nay luống nhắn nhe.<br />Nhắn nhe toan những sự gùn ghè<br />Gùn ghè nhưng vẫn còn chưa dám<br />Chưa dám cho nên phải rụt rè.<br /><br />Chiêu Hổ hoạ lại<br />Hỡi hỡi cô bay tố hão nhe<br />Hão nhe không được, gậy ông ghè.<br />Ông ghè không được, ông ghè mãi,<br />Ghè mãi rồi lâu cũng phải rè.<br /><br /><span style="font-weight: bold;">Tự tình</span><br /><br />Tiếng gà văng vẳng gáy trên bom<br />Oán hận trông ra khắp mọi chòm.<br />Mõ thảm không khua mà cũng cốc.<br />Chuông sầu chẳng đánh cớ sao om?<br />Trước nghe những tiếng thêm rầu rĩ,<br />Sau giận vì duyên để mõm mòm.<br />Tài tử văn nhân ai đó tá?<br />Thân này đâu đã chịu già tom!<br /><br /><br /><span style="font-weight: bold;">Tự tình bài 2</span><br /><br />Đêm khuya văng vẳng trống canh dồn,<br />Trơ cái hồng nhan với nước non.<br />Chén rượu hương đưa say lại tỉnh,<br />Vầng trăng bóng xế khuyết chưa tròn.<br /><br />Xiên ngang mặt đất rêu từng đám,<br />Đâm toạc chân mây đá mấy hòn.<br />Ngán nỗi xuân đi, xuân lại lại,<br />Mảnh tình san sẻ tí con con.<br /><br /><br /><span style="font-weight: bold;">Vịnh cái quạt 2</span><br /><br />Mười bảy hay là mười tám đây<br />Cho ta yêu dấu chẳng dời tay.<br />Mỏng dày từng ấy, chành ba góc<br />Rộng hẹp dường nào, cẵm một cay.<br /><br />Càng nóng bao nhiêu thời càng mát,<br />Yêu đêm chưa phi lại yêu ngày.<br />Hồng hồng má phấn duyên vì cậy.<br />Chúa dấu vua yêu một cái này.<br /><br /><br /><span style="font-weight: bold;">Vô âm nữ</span><br /><br />Mười hai bà mụ ghét chi nhau,<br />Đem cái xuân tình vứt bỏ đâu.<br />Rúc rích thây cha con chuột nhắt,<br />Vo ve mặc mẹ cái ong bầu.<br /><br />Đố ai biết đó vông hay trốc,<br />Còn kẻ nào hay cuống với đầu.<br />Thôi thế thì thôi, thôi cũng được,<br />Nghìn năm càng khỏi tiếng nương dâu.<br /><br /><br />ST : thovn<br />.../...Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com1tag:blogger.com,1999:blog-7097348045257270421.post-64725140116115963322009-04-15T10:06:00.001+07:002009-04-15T10:06:00.748+07:00Vợ tôi<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiCkgYpyUFgf1tDNr0bXOMLA-M7vuJHmYUaT_cBm118fFbxRsjX6Jd_ATV3ZcsoxgU7yDr7d1EvNllHs3wd_8NVneLTl2PSSuSPtwR3ZRSlVL0tZ58qMQ3dD7e4KFzxvPMbO4NdVbOAhw9/s1600-h/e9c5.jpg"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiCkgYpyUFgf1tDNr0bXOMLA-M7vuJHmYUaT_cBm118fFbxRsjX6Jd_ATV3ZcsoxgU7yDr7d1EvNllHs3wd_8NVneLTl2PSSuSPtwR3ZRSlVL0tZ58qMQ3dD7e4KFzxvPMbO4NdVbOAhw9/s320/e9c5.jpg" alt="" id="BLOGGER_PHOTO_ID_5315101174342973842" border="0" /></a><br />Lần đầu tiên gặp nàng tôi đã có cảm giác nàng thuộc về tôi... Tôi mê mẩn làn da mịn màng của nàng, tôi đắm say những đường cong tuyệt mỹ từ cơ thể nàng. Thật sự nàng đã chinh phục trái tim tôi làm tôi siêu lòng và tôi đã quyết định lấy nàng ngay trong cái lần đầu tiên ấy!<br /><br />Dù mặc lòng biết nàng đã qua tay người khác rồi nhưng tôi vẫn thích nàng. Cũng bởi tôi có cái suy nghĩ duy tâm một chút rằng hình như nàng đang đợi tôi đến ... Tôi gặp nàng cũng là một sự tình cờ trong những lần lang thang trên mạng tìm kiếm thì tôi tìm được nàng, nhanh đến tróng mặt chỉ 3 ngày nàng đã thuộc về tôi. Cho đến hôm nay gần như đã thấu hiểu nàng tôi vẫn luôn cảm thấy tự hào mỗi khì cùng nàng lướt trên phố.<br /><br />"Đám cưới" của chúng tôi rất giản dị chỉ 15' đồng hồ trong quán cafe với chi phí tôi phải bỏ ra là 15M nàng đã là của tôi. Mẹ tôi biết tin cụ giận lắm cụ gọi điện lên mắng cho tôi một chận nào là cái thứ tử tế thì không lấy lại lấy cái đồ đã qua tay người ta dùng rồi, nào là mẹ không đồng ý đâu ... Nhưng tôi đã quyết lấy là lấy mẹ đâu thể cản tôi được. Vậy là 2 mẹ con gay gắt với nhau mất 2 ngày cuối cùng mẹ cũng phải nhịn tôi. Bởi đó là quyết định của tôi mẹ đâu thể làm gì được...<br /><br />Bạn bè tôi nói : "ừa nhìn nó cũng được đó... Chuẩn bị khao đi ..." Nhưng nàng cũng làm cho tôi khá tốn kém với chi phí cuộc sống có thêm nàng. Dẫu sao tôi cũng thấy mình oai hơn so với ngày xưa...<br /><br />Phải nói là cảm giác tuyệt vời nhất là khi tôi cưỡi trên nàng. Trời ơi... tuy là đã qua tay rồi nhưng cảm giác vẫn như mới... :D phê không thể tả được. Tôi đề máy vào số 1 nàng vọt đi, tôi vô số 2 nàng lao tới, tôi cài tiếp số 3 nàng chở nên ngoan ngoãn hơn và nàng thuận phục hoàn toàn khi tôi để nàng chạy ở số 4. Tôi cũng chưa có thử xem kéo hết ga thì nàng chạy thế nào nhưng 60km/h thì nàng chạy ok ... chắc hết ga nàng phải lên đến 100km/h ... thế cũng là phê lắm rồi. Tiếc một điều là nàng không phải vành đúc mà là vành nan hoa nhưng mà thôi như thế cũng được đừng cầu toàn quá mà... !<br /><br />Vợ tôi Jupiter V đời 2004 mầu đen + bạc.<br /><br />.../...Đinh Linhhttp://www.blogger.com/profile/17414062272294868052noreply@blogger.com0