tag:blogger.com,1999:blog-61918806582261795972009-07-11T12:29:19.799+04:00Hỗn tạp BlogBlog tin học và cuộc sống...Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comBlogger142125tag:blogger.com,1999:blog-6191880658226179597.post-54553789699109425082009-07-10T20:45:00.001+04:002009-07-11T12:29:20.098+04:00Tambov Love Bridge 10 - Hành trình Bạch DươngĐây là số thứ 10 tròn trĩnh của Tambov Love Bridge, con số tròn trĩnh nhưng cọc cạch. Thời gian trôi qua cũng quá nhanh, 10 số trong hơn 1 năm. Lần lượt những người của Tambov Love Bridge cũng đã về nước. Lần chia tay này là lần thứ 2...<br /><br />Năm nay có nhiều người về lắm, không chỉ 2 chị trong Tambov Love Bridge mà đám bạn cùng đợt sang với tôi cũng về mấy đứa. Còn sót lại vài đứa học kiến trúc và học lên thạc sĩ bọn tôi. Đoàn tôi sang 17 người, đã 1 lần "sẻ đôi" khi 1 số đứa qua khu KTX khác sống, nhưng đó chỉ là giả, còn giờ là thật...<br /><br />Chủ đề của số 10 Tambov Love Bridge này cũng không gì khác là chia tay những người sắp về ấy, cùng chia sẻ chút kỉ niệm trong quãng thời gian sang-sống-về tại xứ sở Bạch Dương này. Mời mọi người lắng nghe.<br /><br /><table bgcolor="#000000" cellpadding="0" cellspacing="0"><tr><td><embed quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" bgcolor="#000" width="328" height="94" src="http://www.esnips.com//escentral/images/widgets/flash/esnips_player.swf" flashvars="theTheme=blue&autoPlay=no&theFile=http://www.esnips.com//nsdoc/e6007e3e-0170-485e-8e47-e1e2b2cf1e66&theName=love bridge 10 - Hanh trinh Bach Duong...&thePlayerURL=http://www.esnips.com//escentral/images/widgets/flash/mp3WidgetPlayer.swf"></embed></td></tr><tr><td><table cellpadding="2" style="font-family:Verdana, Arial, Helvetica, sans-serif; padding-left:2px; color:#FFFFFF; text-decoration:none ; ; font-size:10px; font-weight:bold"><tr><td><a style="color:#FFFFFF; text-decoration:none " href="http://www.esnips.com/CreateWidgetAction.ns?type=0&objectid=e6007e3e-0170-485e-8e47-e1e2b2cf1e66"> Get this widget </a></td><td style="font-size:7px; font-weight:normal;">|</td><td align="center"><a align="center" style="color:#FFFFFF; text-decoration:none " href="http://www.esnips.com/doc/e6007e3e-0170-485e-8e47-e1e2b2cf1e66/love-bridge-10---Hanh-trinh-Bach-Duong.../?widget=flash_player_esnips_blue"> Track details </a></td><td style="font-size:7px; font-weight:normal;">|</td><td><a align="center" style="color:#FF6600; text-decoration:none" href="http://www.esnips.com//adserver/?action=visit&cid=player_dna&url=/socialdna"> eSnips Social DNA </a></td></tr></table></td></tr></table><br /><a href="http://www.mediafire.com/?htynn4mumz3" rel="nofollow" target="_blank">Download Tambov Love Bridge 10.</a><div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-5455378969910942508?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-26528476033297973192009-07-04T10:00:00.001+04:002009-07-04T10:00:20.859+04:00Trang tin tức tổng hợpChắc mọi người đều quen thuộc với trang đọc tin tổng hợp <a href="http://baomoi.com/" rel="nofollow" target="_blank">Baomoi.com</a>. Mấy ngày vừa rồi, tôi rảnh rỗi nên cũng ngồi làm <a href="http://demo.luot.net/ttth" rel="nofollow" target="_blank">1 trang tương tự</a> như thế. Trước đây tôi cũng đã làm 1 <a href="http://rilwis.googlepages.com/news.html">trang tin tổng hợp</a> như vậy tại Google Pages (bây giờ vẫn còn đó) bằng HTML và Javascript (có dùng Google Feed API để lấy feed). Lần này tôi làm hoàn toàn bằng PHP.<br /><br />Đây là giao diện của trang web:<br /><br /><img src="http://img5.imageshack.us/img5/92/ttth.png" /><br /><!--more--><br />Các bạn có thể ghé thăm demo trang web này <a href="http://demo.luot.net/ttth" rel="nofollow" target="_blank">tại đây</a> (domain và host là 1 người bạn cho tôi dùng ké, cho nên chả biết đến lúc nào nó die).<br /><br />Hiện giờ website mới chỉ có chức năng cơ bản là tự động cập nhật tin tức từ các nguồn feed vào các mục riêng biệt, tôi cũng chưa kịp viết phần quản lí cho nó nữa. Lúc nào hứng thú thêm, tôi sẽ hoàn thiện nốt.<br /><br />Mọi người xem thử rồi cho tôi biết ý kiến của mình nhé :). Cám ơn mọi người rất nhiều.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-2652847603329797319?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-64139935647129413052009-06-30T10:00:00.002+04:002009-06-30T10:00:25.687+04:00Người Mỹ dạy bài học cô bé Lọ Lem như thế đấy<img alt=" Người Mỹ dạy bài học cô bé Lọ Lem như thế đấy" border="0" src="http://www.binhminhmua.info/wp-content/uploads/2009/06/lolem_3.jpg" /><br /><br />Giờ học văn bắt đầu. Hôm nay thầy giảng bài <b>Chuyện Cô bé Lọ Lem</b>.<br /><br />Trước tiên thầy gọi một học sinh lên kể chuyện Cô bé Lọ lem. Em học sinh kể xong, thầy cảm ơn rồi bắt đầu hỏi.<br /><br />Thầy: Các em thích và không thích nhân vật nào trong câu chuyện vừa rồi?<br /><br />Học sinh (HS): Thích Cô bé Lọ Lem Cinderella ạ, và cả Hoàng tử nữa. Không thích bà mẹ kế và chị con riêng bà ấy. Cinderella tốt bụng, đáng yêu, lại xinh đẹp. Bà mẹ kế và cô chị kia đối xử tồi với Cinderella.<br /><br />Thầy: Nếu vào đúng 12 giờ đêm mà Cinderella chưa kịp nhảy lên cỗ xe quả bí thì sẽ xảy ra chuyện gì?<br /><br />HS: Thì Cinderella sẽ trở lại có hình dạng lọ lem bẩn thỉu như ban đầu, lại mặc bộ quần áo cũ rách rưới tồi tàn. Leo ôi, trông kinh lắm !<br /><br />Thầy: <i>Bởi vậy, các em nhất thiết phải là những người đúng giờ, nếu không thì sẽ tự gây rắc rối cho mình. Ngoài ra, các em tự nhìn lại mình mà xem, em nào cũng mặc quần áo đẹp cả. Hãy nhớ rằng chớ bao giờ ăn mặc luộm thuộm mà xuất hiện trước mặt người khác</i>. Các em gái nghe đây: các em lại càng phải chú ý chuyện này hơn. Sau này khi lớn lên, mỗi lần hẹn gặp bạn trai mà em lại mặc luộm thuộm thì người ta có thể ngất lịm đấy (Thầy làm bộ ngất lịm, cả lớp cười ồ). <i>Bây giờ thầy hỏi một câu khác. Nếu em là bà mẹ kế kia thì em có tìm cách ngăn cản Cinderella đi dự vũ hội của hoàng tử hay không? Các em phải trả lời hoàn toàn thật lòng đấy!</i><br /><br />HS: (im lặng, lát sau có em giơ tay xin nói) Nếu là bà mẹ kế ấy, em cũng sẽ ngăn cản Cinderella đi dự vũ hội.<br /><br />Thầy: Vì sao thế ?<br /><br />HS: Vì … vì em yêu con gái mình hơn, em muốn con mình trở thành hoàng hậu.<br /><br />Thầy: Đúng. Vì thế chúng ta thường cho rằng các bà mẹ kế dường như đều chẳng phải là người tốt. <i>Thật ra họ chỉ không tốt với người khác thôi, chứ lại rất tốt với con mình. Các em hiểu chưa? Họ không phải là người xấu đâu, chỉ có điều họ chưa thể yêu con người khác như con mình mà thôi</i>.<br /><br />Bây giờ thầy hỏi một câu khác: bà mẹ kế không cho Cinderella đi dự vũ hội của hoàng tử, thậm chí khóa cửa nhốt cô bé trong nhà. Thế tại sao Cinderella vẫn có thể đi được và lại trở thành cô gái xinh đẹp nhất trong vũ hội ?<br /><br />HS: Vì có cô tiên giúp ạ, cô cho Cinderella mặc quần áo đẹp, lại còn biến quả bí thành cỗ xe ngựa, biến chó và chuột thành người hầu của Cinderella.<br /><br />Thầy: Đúng, các em nói rất đúng ! Các em thử nghĩ xem, nếu không có cô tiên đến giúp thì Cinderella không thể đi dự vũ hội được, phải không?<br /><br />HS: Đúng ạ !<br /><br />Thầy: Nếu chó và chuột không giúp thì cuối cùng Cinderella có thể về nhà được không ?<br /><br />HS: Không ạ !<br /><br />Thầy: Chỉ có cô tiên giúp thôi thì chưa đủ. Cho nên các em cần chú ý: <i>Dù ở bất cứ hoàn cảnh nào, chúng ta đều cần có sự giúp đỡ của bạn bè. Bạn của ta không nhất định là tiên là bụt, nhưng ta vẫn cần đến họ. Thầy mong các em có càng nhiều bạn càng tốt</i>.<br /><br />Bây giờ, đề nghị các em thử nghĩ xem, nếu vì mẹ kế không muốn cho mình đi dự vũ hội mà Cinderella bỏ qua cơ hội ấy thì cô bé có thể trở thành vợ của hoàng tử được không ?<br /><br />HS: Không ạ ! Nếu bỏ qua cơ hội ấy thì Cinderella sẽ không gặp hoàng tử, không được hoàng tử biết và yêu.<br /><br />Thầy: Đúng quá rồi ! Nếu Cinderella không muốn đi dự vũ hội thì cho dù bà mẹ kế không ngăn cản đi nữa, thậm chí bà ấy còn ủng hộ Cinderella đi nữa, rốt cuộc cô bé cũng chẳng được lợi gì cả. Thế ai đã quyết định Cinderella đi dự vũ hội của hoàng tử ?<br /><br />HS: Chính là Cinderella ạ.<br /><br />Thầy: <i>Cho nên các em ạ, dù Cinderella không còn mẹ đẻ để được yêu thương, dù bà mẹ kế không yêu cô bé, những điều ấy cũng chẳng thể làm cho Cinderella biết tự thương yêu chính mình. Chính vì biết tự yêu lấy mình nên cô bé mới có thể tự đi tìm cái mình muốn giành được</i>. Giả thử có em nào cảm thấy mình chẳng được ai yêu thương cả, hoặc lại có bà mẹ kế không yêu con chồng như trường hợp của Cinderella, thì các em sẽ làm thế nào ?<br /><br />HS: Phải biết yêu chính mình ạ !<br /><br />Thầy: <i>Đúng lắm! Chẳng ai có thể ngăn cản các em yêu chính bản thân mình. Nếu cảm thấy người khác không yêu mình thì em càng phải tự yêu mình gấp bội. Nếu người khác không tạo cơ hội cho em thì em cần tự tạo ra thật nhiều cơ hội. Nếu biết thực sự yêu bản thân thì các em sẽ tự tìm được cho mình mọi thứ em muốn có</i>. Ngoài Cinderella ra, chẳng ai có thể ngăn trở cô bé đi dự vũ hội của hoàng tử, chẳng ai có thể ngăn cản cô bé trở thành hoàng hậu, đúng không ?<br /><br />HS: Đúng ạ, đúng ạ !<br /><br />Thầy: Bây giờ đến vấn đề cuối cùng. Câu chuyện này có chỗ nào chưa hợp lý không?<br /><br />HS: (im lặng một lát) Sau 12 giờ đêm, mọi thứ đều trở lại nguyên dạng như cũ, thế nhưng đôi giày thủy tinh của Cinderella lại không trở về chỗ cũ.<br /><br />Thầy: Trời ơi ! Các em thật giỏi quá ! Các em thấy chưa, ngay cả nhà văn vĩ đại (nhà văn Pháp Charles Perrault, tác giả truyện Cô Bé Lọ Lem - chú thích của người dịch) mà cũng có lúc sai sót đấy chứ. Cho nên sai chẳng có gì đáng sợ cả. Thầy có thể cam đoan là nếu sau này có ai trong số các em muốn trở thành nhà văn thì nhất định em đó sẽ có tác phẩm hay hơn tác giả của câu chuyện Cô bé Lọ lem ! Các em có tin như thế không ?<br /><br />Tất cả học sinh hồ hởi vỗ tay reo hò.<br /><br /><h3>Cảm nghĩ sau khi đọc bài “Người Mỹ giảng dạy chuyện Cô bé Lọ Lem như thế đấy”</h3><br /><b>Thời Hàn Băng (nhà báo Trung Quốc)</b><br /><br />Bài “Người Mỹ giảng dạy chuyện Cô bé Lọ Lem như thế đấy” để lại trong tôi một ấn tượng mạnh hơn bất cứ lời bình nào về nền giáo dục của nước Mỹ.<br /><br />Người thầy giáo trong bài báo ấy chẳng khác một thiên thần. Ông đem lại cho lũ trẻ lòng công bằng, tình yêu thương, tinh thần đoàn kết giúp đỡ lẫn nhau, tư duy lý tính, ý nghĩa của cuộc đời … Với cách giáo dục như thế, sao mà lũ trẻ không có tình thương, sao mà chúng còn chịu sự ràng buộc và hạn chế của những điều này khoản nọ nào đấy ?<br /><br />Tôi bỗng nhớ lại hồi học trung học, thầy giáo có tổ chức cho chúng tôi học tập tấm gương Lại Ninh.<br /><br />Chuyện Lại Ninh như sau: Ngày 13 tháng 3 năm 1988, thiếu niên Lại Ninh 14 tuổi bỗng phát hiện thấy có đám cháy trong rừng, anh liền tức tốc chạy tới chỗ cháy và cầm lấy một cành cây hăng hái quên mình dập lửa. Tuy các đội viên đội chữa cháy từng khuyên mọi người chớ chạy đến gần đám lửa, nhưng vì không đành lòng nhìn thấy tài sản của nhà nước bị thiệt hại, Lại Ninh vẫn tiếp tục dập lửa. Sau cùng đám cháy rừng bị dập tắt, hơn 3500 mẫu rừng được cứu thoát, trạm vệ tinh chuyển tiếp truyền hình trong rừng và nhà kho của công ty dầu lửa cũng bình yên vô sự. Sáng hôm 14, người ta tìm thấy xác Lại Ninh trong đống tro rừng. Tay phải anh vẫn còn nắm chặt cành cây, mặt hướng lên đồi, cặp kính cận thị văng đâu mất, tay trái bám lấy mặt đất, chân phải ở tư thế leo lên đồi. Lại Ninh đã vĩnh biệt chúng ta nhưng tinh thần của anh mãi mãi còn sống với chúng ta. Anh là tấm gương để chúng ta học tập noi theo! Anh mãi mãi là niềm kiêu hãnh của chúng ta!<br /><br />Lại Ninh là một thiếu niên tốt và có tinh thần quý trọng của công rất cao. Thế nhưng tại sao chúng ta không dạy dỗ trẻ em cách phòng tránh khi có cháy rừng mà lại khuyến khích các em chạy tới đám cháy? Có “tài sản nhà nước” nào quý hơn tính mạng con người chăng? Những người thân của Lại Ninh sẽ phải chịu đựng nỗi đau như thế nào vì chuyện ấy? Còn có cách giáo dục nào thiếu đạo đức hơn lối dạy trẻ em như thế không? Nhất là ngày nay, trong khi một lũ quan tham ra sức chiếm đoạt “tài sản nhà nước” thì ta vẫn tiếp tục dạy dỗ các em hy sinh thân mình để bảo vệ một loại tài sản nào đó, thử hỏi đạo trời ở đâu?<br /><br />Tại nước Mỹ, khi xảy ra nguy hiểm, các thầy cô giáo bao giờ cũng khuyên răn học trò rời xa ngay nơi đó và hướng dẫn chúng rất tường tận cách tránh né. Họ hiểu rằng tính mạng giữ được thì lại có thể làm ra tài sản… Cách giáo dục của chúng ta thì có thể đưa bao nhiêu thanh thiếu niên ưu tú đi tới chỗ chết!<br /><br />Thế nhưng trước đây tôi đâu có biết đạo lý ấy. Tôi từng mong muốn mình cũng được như Lại Ninh liều thân chữa cháy, dẫu có hy sinh trong đám lửa thì cũng không quản ngại. Cho tới năm học lớp 12, tôi được một thầy giáo trẻ (dạy môn sử) có lương tri bảo ban, dần dần hiểu rõ thực chất của nhiều vấn đề, từ đó tôi bắt đầu suy nghĩ sâu sắc. Sau khi trở thành nhà báo, đi nhiều thấy nhiều, tôi dần dần hiểu ra rằng tính mạng con người, tình thương yêu, lòng khoan dung và niềm tin mới là thứ đáng quý nhất.<br /><br />Kiểu giáo dục khuyên bảo lũ trẻ con ấu trĩ xông vào cứu cái gọi là “tài sản nhà nước” ấy thật đáng trách, ngay cả loài cầm thú cũng chẳng làm thế. Tất cả mọi thứ vật chất đều có thể làm lại, riêng sinh mạng thì không thể.<br /><br />Cách giáo dục ấy hủy hoại lũ trẻ từ nhỏ, xóa bỏ thiên tính của chúng, ươm trồng hạt giống tính nô lệ. Ngay từ ở nhà trẻ, có cô giáo đã quyết định thái độ đối xử với từng cháu tùy theo bố mẹ cháu chức vụ cao hay thấp, giàu hay nghèo; ngay từ tuổi ấy chúng đã dần dần học được cách lấy lòng cô giáo. “Nô tính” ấy thâm căn cố đế tới mức sau này có người leo lên địa vị lãnh đạo rồi mà vẫn còn giữ thói cũ, thậm chí còn nặng hơn. Thấy khách nước ngoài thì cung kính vâng vâng dạ dạ; thấy quần chúng bình thường thì nạt nộ ra oai… Thật là đáng buồn làm sao!<br /><br />Chế độ giáo dục xóa bỏ lương tri, tính người, hủy hoại tình thương yêu, trau dồi nô tính và tính phục tùng, gạt người nghèo ra khỏi ghế nhà trường chẳng những chỉ đào sâu hố ngăn cách giàu nghèo mà còn hủy hoại tiền đồ của một dân tộc. Nếu không thấy rõ sự khác biệt giữa chúng ta với người Mỹ ngay từ cách giáo dục trẻ em, nếu không cải tổ nền giáo dục mà cứ phát triển theo kiểu giết gà lấy trứng như thế này thì chúng ta sẽ mãi mãi chẳng đuổi kịp người Mỹ và con cháu chúng ta sau này sẽ phải trả giá đau khổ cho cách tăng trưởng kinh tế này.<br /><br /><b>Nguyễn Hải Hoành</b><br /><br /><b>Lược dịch theo báo Trung Quốc</b><br />(Mượn từ blog moscow80)<br /><br />***<br /><br />Bài viết này tôi trích dẫn từ blog <a href="http://www.binhminhmua.info/2009/06/ng%C6%B0%E1%BB%9Di-m%E1%BB%B9-d%E1%BA%A1y-bai-h%E1%BB%8Dc-co-be-l%E1%BB%8D-lem-nh%C6%B0-th%E1%BA%BF-d%E1%BA%A5y/comment-page-1/#comment-2132" rel="nofollow" target="_blank">Bình minh mưa</a>, 1 bài viết theo tôi rất hay, có ý nghĩa và sâu sắc.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-6413993564712941305?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-89561203796798946232009-06-27T10:00:00.000+04:002009-06-27T10:00:19.525+04:00Học Javascript nâng cao với John ResigTrên blog của John Resig, chủ nhân của jQuery, có 1 slide <a href="http://ejohn.org/apps/learn/" rel="nofollow" target="_blank">tổng hợp về javascript nâng cao</a>. Phần này trình bày các khía cạnh (ít gặp) của javascript ở 1 mức độ sâu, bao gồm nhiều vấn đề liên quan đến function, closure, object, ... Các slide được trình bày gồm có code kèm theo 1 phần mô tả ngắn gọn và có thể chạy được để test nội dung đoạn code đó. Có khoảng gần 100 slide, tôi cũng chưa đủ sức xem hết các slide này, để hiểu chúng chắc cần 1 khoảng thời gian dài nữa.<br /><br />Nếu bạn muốn tìm hiểu sâu về javascript, có lẽ slide này sẽ có ích với bạn.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-8956120379679894623?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-8256767697705120542009-06-24T01:33:00.006+04:002009-06-24T23:45:22.561+04:00Tạo album ảnh flash cực đẹp bằng EmageView<h2>Giới thiệu</h2><br /><a href="http://www.namkennic.com/blog/?p=6" rel="nofollow" target="_blank">EmageView</a> là 1 source bằng flash dùng để tạo album ảnh trên web. Tác giả của nó là <b>Nam Kennic</b>. Mới đầu khi tạo ra project này, tác giả đã share demo trên blog của mình và nó đã thu hút được rất nhiều sự quan tâm của nhiều người (có thể thấy qua 160 comment tại trang giới thiệu EmageView trên blog Nam Kennic). Có lẽ vì nó rất đẹp, thiết kế bắt mắt, tương tác hấp dẫn và có nhiều hiệu ứng ảnh sinh động.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_Mt4qyhflsHY/SkG-XghKKwI/AAAAAAAAAVY/iCa4Mcx5riA/s1600-h/2.png" imageanchor="1" rel="nofollow" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" src="http://4.bp.blogspot.com/_Mt4qyhflsHY/SkG-XghKKwI/AAAAAAAAAVY/iCa4Mcx5riA/s400/2.png" /></a></div><br /><br />Tuy chỉ share <i>bản demo</i> (bao gồm 1 file flash và file xml lưu database), nhưng nhiều người dùng khác vì cảm thấy yêu thích source này nên đã viết phần quản trị cho nó, trong đó Lê Bằng là 1 người khá nổi. Tuy nhiên, không hiểu vì lí do gì, các chia sẻ này đều đã bị xóa đi, các link download cũng không còn hoạt động. Cho nên việc tìm hiểu mã nguồn phần quản trị của Lê Bằng cũng không thực hiện được.<br /><br />Hôm trước, anh nlfb có đề nghị tôi làm nốt phần quản trị cho EmageView, để khỏi phải mất công tự tạo thumbnails và file xml database bằng tay. Đến hôm nay thì hoàn thành nên chia sẻ cùng với các bạn đọc của Hỗn tạp.<br /><!--more--><br />Phần quản trị tôi viết rất đơn giản, nó chỉ làm 2 nhiệm vụ:<br />- tự động sinh ra thumbnails tương ứng với từng ảnh<br />- tự động update lại file <span style="font-family: "Courier New",Courier,monospace;">database.xml</span><br /><br /><h2>Demo and Download</h2><br />Các bạn có thể coi qua <a href="http://rilwis.110mb.com/emageview/" rel="nofollow" target="_blank">demo của EmageView</a>, và truy cập vào <a href="http://rilwis.110mb.com/emageview/admin" rel="nofollow" target="_blank">phần quản trị</a> với <span style="font-family: "Courier New",Courier,monospace;">username</span> và <span style="font-family: "Courier New",Courier,monospace;">password</span> như sau:<br /><br /><div class="code">username: admin<br />password: admin</div><br />Do phiên bản EmageView tôi dùng là khá cũ (bản demo đầu tiên), nên nó yêu cầu Flash 9 (bây giờ đã có Flash 10 rồi). Nếu bạn cài Flash 10 cho trình duyệt rồi thì hãy nhấn chuột phải và chọn <span style="font-family: "Courier New",Courier,monospace;">Play</span> để chạy demo.<br /><br />Mã nguồn của toàn bộ script này, các bạn có thể <a href="http://rilwis.110mb.com/emageview.zip">download tại đây</a>.<br /><br /><h2>Hướng dẫn sử dụng</h2><br />Sau khi download về, giải nén và upload lên host, bạn chỉnh sửa trong file <span style="font-family: "Courier New",Courier,monospace;">config.php</span> các thông số như sau:<br /><br /><div class="code"><pre style='color:#000000;background:#ffffff;'><span style='color:#a65700; background:#ffffe8; '><?php</span><span style='color:#000000; background:#ffffe8; '></span><br /><span style='color:#400000; background:#ffffe8; '>define</span><span style='color:#808030; background:#ffffe8; '>(</span><span style='color:#0000e6; background:#ffffe8; '>'IMAGES_PATH'</span><span style='color:#808030; background:#ffffe8; '>,</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#0000e6; background:#ffffe8; '>'images'</span><span style='color:#808030; background:#ffffe8; '>)</span><span style='color:#800080; background:#ffffe8; '>;</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#696969; background:#ffffe8; '>// path to images directory</span><span style='color:#000000; background:#ffffe8; '></span><br /><span style='color:#400000; background:#ffffe8; '>define</span><span style='color:#808030; background:#ffffe8; '>(</span><span style='color:#0000e6; background:#ffffe8; '>'THUMBNAILS_PATH'</span><span style='color:#808030; background:#ffffe8; '>,</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#0000e6; background:#ffffe8; '>'thumbnails'</span><span style='color:#808030; background:#ffffe8; '>)</span><span style='color:#800080; background:#ffffe8; '>;</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#696969; background:#ffffe8; '>// path to thumbnails directory</span><span style='color:#000000; background:#ffffe8; '></span><br /><span style='color:#000000; background:#ffffe8; '></span><br /><span style='color:#696969; background:#ffffe8; '>// thumbnails size</span><span style='color:#000000; background:#ffffe8; '></span><br /><span style='color:#400000; background:#ffffe8; '>define</span><span style='color:#808030; background:#ffffe8; '>(</span><span style='color:#0000e6; background:#ffffe8; '>'THUMBNAILS_WIDTH'</span><span style='color:#808030; background:#ffffe8; '>,</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#008c00; background:#ffffe8; '>120</span><span style='color:#808030; background:#ffffe8; '>)</span><span style='color:#800080; background:#ffffe8; '>;</span><span style='color:#000000; background:#ffffe8; '></span><br /><span style='color:#400000; background:#ffffe8; '>define</span><span style='color:#808030; background:#ffffe8; '>(</span><span style='color:#0000e6; background:#ffffe8; '>'THUMBNAILS_HEIGHT'</span><span style='color:#808030; background:#ffffe8; '>,</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#008c00; background:#ffffe8; '>90</span><span style='color:#808030; background:#ffffe8; '>)</span><span style='color:#800080; background:#ffffe8; '>;</span><span style='color:#000000; background:#ffffe8; '></span><br /><span style='color:#400000; background:#ffffe8; '>define</span><span style='color:#808030; background:#ffffe8; '>(</span><span style='color:#0000e6; background:#ffffe8; '>'THUMBNAILS_SAVE_RATIO'</span><span style='color:#808030; background:#ffffe8; '>,</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#800000; background:#ffffe8; font-weight:bold; '>true</span><span style='color:#808030; background:#ffffe8; '>)</span><span style='color:#800080; background:#ffffe8; '>;</span><span style='color:#000000; background:#ffffe8; '></span><br /><span style='color:#000000; background:#ffffe8; '></span><br /><span style='color:#400000; background:#ffffe8; '>define</span><span style='color:#808030; background:#ffffe8; '>(</span><span style='color:#0000e6; background:#ffffe8; '>'XML_FILE'</span><span style='color:#808030; background:#ffffe8; '>,</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#0000e6; background:#ffffe8; '>'database.xml'</span><span style='color:#808030; background:#ffffe8; '>)</span><span style='color:#800080; background:#ffffe8; '>;</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#696969; background:#ffffe8; '>// you don't need to change this ;)</span><span style='color:#000000; background:#ffffe8; '></span><br /><span style='color:#000000; background:#ffffe8; '></span><br /><span style='color:#696969; background:#ffffe8; '>// admin login</span><span style='color:#000000; background:#ffffe8; '></span><br /><span style='color:#400000; background:#ffffe8; '>define</span><span style='color:#808030; background:#ffffe8; '>(</span><span style='color:#0000e6; background:#ffffe8; '>'USERNAME'</span><span style='color:#808030; background:#ffffe8; '>,</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#0000e6; background:#ffffe8; '>'admin'</span><span style='color:#808030; background:#ffffe8; '>)</span><span style='color:#800080; background:#ffffe8; '>;</span><span style='color:#000000; background:#ffffe8; '></span><br /><span style='color:#400000; background:#ffffe8; '>define</span><span style='color:#808030; background:#ffffe8; '>(</span><span style='color:#0000e6; background:#ffffe8; '>'PASSWORD'</span><span style='color:#808030; background:#ffffe8; '>,</span><span style='color:#000000; background:#ffffe8; '> </span><span style='color:#0000e6; background:#ffffe8; '>'admin'</span><span style='color:#808030; background:#ffffe8; '>)</span><span style='color:#800080; background:#ffffe8; '>;</span><span style='color:#000000; background:#ffffe8; '></span><br /><span style='color:#a65700; background:#ffffe8; '>?></span><br /></pre></div><br /><br />Trong đó:<br />- 2 thông số đầu là cấu hình đường dẫn đến thư mục chứa ảnh và chứa thumbnails, bạn có thể để mặc định.<br />- 3 thông số tiếp theo là cấu hình kích thước thumbnails. Thông số thứ 3 chỉ rõ có lưu giữ tỉ lệ hỉnh hay không, nếu bạn thiết lập là <span style="font-family: "Courier New",Courier,monospace;">true</span> thì chỉ cần điền thông số <span style="font-family: "Courier New",Courier,monospace;">THUMBNAIL_WIDTH</span> là được, <span style="font-family: "Courier New",Courier,monospace;">THUMBNAIL_HEIGHT</span> sẽ được tự động tính toán.<br />- 2 thông số cuối cùng là tên và password của khu vực quản trị, bạn đặt tùy ý mình.<br /><br />Riêng thông số về file database, bạn không được sửa, vì nó là nơi mà flash sẽ đọc để lấy dữ liệu ảnh. <br /><br />Sau khi tùy biến xong, bạn hãy tạo các thư mục con trong thư mục <span style="font-family: "Courier New",Courier,monospace;">images</span> (mỗi thư mục sẽ là 1 album), và upload hình vào đó. Nhớ là phải upload hình vào 1 album nào đó, không được upload ra ngoài. Cũng lưu ý là các album không được lồng nhau.<br /><br />Cuối cùng là truy cập vào khu vực quản trị qua trình duyệt, bạn sẽ thấy hình sau:<br /><br /><div style="clear: both; text-align: center;"><img border="0" src="http://4.bp.blogspot.com/_Mt4qyhflsHY/SkFLJ3V1AyI/AAAAAAAAAVQ/hSlditry6vs/s400/1.png" /></div><br /><br />Nhấn vào link <span style="font-family: "Courier New",Courier,monospace;">Rebuild thumbnails and database file</span> để cập nhật lại thumbnails và file database là xong! Bây giờ bạn có thể truy cập lại vào trang web của mình để tận hưởng thành quả.<br /><br /><h2>Một vài hạn chế của EmageView</h2><br />Do bản demo tôi dùng là bản cũ, nên nó có nhiều điểm không được tốt lắm:<br />- Yêu cầu flash 9, mặc dù có thể chạy với flash 10, nhưng phải nhấn chuột phải, chọn <span style="font-family: "Courier New",Courier,monospace;">Play</span>.<br />- Không hiển thị thumbnail cho các ảnh có định <i>dạng khác jpg</i>, thậm chí nếu có định dạng jpg mà <i>không viết thường</i> (VD như A.JPG) thì cũng không hiển thị thumbnail. Tuy vậy, khi nhấn vào đó thì hình chính vẫn hiển thị bình thường.<br /><br />Nếu bạn nào có nhã hứng tìm hiểu file flash này để khắc phục những nhược điểm trên thì tuyệt quá. Lúc ấy, xin hãy cho tôi biết nhé.<br /><br />Ngoài ra, còn có những hạn chế mà phần quản trị do tôi viết mà tôi rất sẵn lòng lắng nghe các bạn góp ý.<br /><br />Hy vọng rằng EmageView này sẽ mang lại cho các bạn 1 niềm vui nho nhỏ.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-825676769770512054?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-6151851316875340962009-06-21T21:00:00.001+04:002009-06-21T21:02:37.868+04:00Khắc phục lỗi "Operation aborted" của IEHôm trước sau khi làm xong giao diện cho Hỗn tạp, 1 người bạn bảo tôi là vào 1 bài viết của Hỗn tạp bằng IE 6 hoặc 7 đều không được, có lỗi "<span style="font-family: "Courier New",Courier,monospace;">Operation aborted</span>". Tôi cũng không để ý lắm, cứ nghĩ là máy đó bị gì thôi, chứ tôi thử vào bằng các trình duyệt khác đều ổn.<br /><br />Hôm nay vô tình đọc được 1 comment tại <a href="http://blog.disqus.net/" rel="nofollow" target="_blank">blog của Disqus</a> (nền tảng comment mà Hỗn tạp đang dùng), nói rằng đây là 1 bug của IE 6 và 7 do sử dụng hàm Javascript <span style="font-family: "Courier New",Courier,monospace;">appendChild</span>, tôi mới bắt đầu tìm hiểu kỹ càng hơn.<br /><br /><!--more--><br /><br />Thông tin ở các nơi mà tôi tìm trên mạng đều chủ yếu phản ánh lỗi và sửa lỗi kiểu mì ăn liền chứ không có phân tích rõ ràng. Chỉ có chính <a href="http://support.microsoft.com/kb/927917" rel="nofollow" target="_blank">trang Support của Microsoft</a> mới mô tả đầy đủ và chi tiết.<br /><br /><h2>Nguyên nhân lỗi</h2><br />Lỗi này xảy ra khi IE 6, 7 <em>không thể hiển thị được đúng 1 phần tử nào đó</em> trong trang web. Chi tiết hơn, lỗi xảy ra khi có 1 phần tử A chứa 1 script, script này cố gắng làm thay đổi nội dung của <em>phần tử cha</em> của A. Thông thường, sự thay đổi nội dung phần tử cha của A được thực hiện thông qua các hàm Javascript <span style="font-family: "Courier New",Courier,monospace;">appendChild</span> và <span style="font-family: "Courier New",Courier,monospace;">innerHTML</span>.<br /><br />Nói vậy hơi khó hiểu 1 chút, chúng ta xem ví dụ sau:<br /><br /><div class="code"><pre style='color:#000000;background:#ffffff;'><span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>html</span><span style='color:#a65700; '>></span><br /><span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>body</span><span style='color:#a65700; '>></span><br /> <span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>div</span><span style='color:#a65700; '>></span><br /> <span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>script type="text/Javascript"</span><span style='color:#a65700; '>></span><br /> document<span style='color:#808030; '>.</span>body<span style='color:#808030; '>.</span>innerHTML<span style='color:#808030; '>+=</span><span style='color:#0000e6; '>"sample text"</span><span style='color:#800080; '>;</span><br /> <span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>script</span><span style='color:#a65700; '>></span><br /> <span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>div</span><span style='color:#a65700; '>></span><br /><span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>body</span><span style='color:#a65700; '>></span><br /><span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>html</span><span style='color:#a65700; '>></span><br /></pre></div><br />Như ta thấy, đoạn script trên nằm trong phần tử <span style="font-family: "Courier New",Courier,monospace;">div</span> (phần tử A) và nó cố gắng làm thay đổi nội dung của phần tử <span style="font-family: "Courier New",Courier,monospace;">body</span> (phần tử cha của A), nên gây ra lỗi.<br /><br />Đối với blogger chúng ta, thì dạng như thế này rất hay gặp khi bạn muốn bổ sung 1 script vào trang web:<br /><br /><div class="code"><pre style='color:#000000;background:#ffffff;'><span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>html</span><span style='color:#a65700; '>></span><br /><span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>body</span><span style='color:#a65700; '>></span><br /> <span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>div</span><span style='color:#a65700; '>></span><br /> ...<br /> <span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>script type="text/javascript"</span><span style='color:#a65700; '>></span><br /> <span style='color:#800000; font-weight:bold; '>var</span> script <span style='color:#808030; '>=</span> document<span style='color:#808030; '>.</span>createElement<span style='color:#808030; '>(</span><span style='color:#0000e6; '>'script'</span><span style='color:#808030; '>)</span><span style='color:#800080; '>;</span><br /> script<span style='color:#808030; '>.</span>src <span style='color:#808030; '>=</span> <span style='color:#0000e6; '>'...'</span><span style='color:#800080; '>;</span><br /> script<span style='color:#808030; '>.</span>type <span style='color:#808030; '>=</span> <span style='color:#0000e6; '>'text/javascript'</span><span style='color:#800080; '>;</span><br /> document<span style='color:#808030; '>.</span>body<span style='color:#808030; '>.</span>appendChild<span style='color:#808030; '>(</span>script<span style='color:#808030; '>)</span><span style='color:#800080; '>;</span><br /> <span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>script</span><span style='color:#a65700; '>></span><br /> <span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>div</span><span style='color:#a65700; '>></span><br /><span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>body</span><span style='color:#a65700; '>></span><br /><span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>html</span><span style='color:#a65700; '>></span><br /></pre></div><br />Ở đây script được sinh ra động và được chèn vào <span style="font-family: "Courier New",Courier,monospace;">body</span> nhờ vào hàm <span style="font-family: "Courier New",Courier,monospace;">appendChild</span>. Bạn dễ dàng nhận thấy rằng nó cũng có cùng nguyên tắc với VD trước, và do đó, cũng sẽ có lỗi trên IE 6 và 7.<br /><br /><h2>Cách khắc phục lỗi</h2><br />Cách đơn giản nhất để khỏi gặp lỗi này là nâng cấp IE lên bản 8. Tuy nhiên, đó là vấn đề của người dùng, chúng ta không thể bắt họ thay đổi khi mà ta chưa sửa được lỗi.<br /><br />Để sửa lỗi này, chúng ta phải tránh không gặp trường hợp 1 script cố gắng thay đổi nội dung của phần tử cha của A (A chứa script). Việc này phải làm bằng tay (tự code lại, hoặc sửa code) theo hướng chuyển script đó ra khỏi phần tử A.<br /><br />Tốt nhất nên đưa script ra ngoài cùng (tức là chỉ nằm trong thẻ <span style="font-family: "Courier New",Courier,monospace;">body</span>). Khi đó nếu script có thay đổi nội dung trang web (tức là phần <span style="font-family: "Courier New",Courier,monospace;">body</span>), thì cũng không "phạm luật" (nên nhớ là <span style="font-family: "Courier New",Courier,monospace;">body</span> lúc này đóng vai trò là phần tử A, như vậy script chỉ thay đổi A chứ <em>không thay đổi phần tử cha</em> của A)<br /><br />Trong trường hợp không đưa được script ra ngoài cùng, thì có thể tự tạo thêm 1 thẻ <span style="font-family: "Courier New",Courier,monospace;">div</span> khác (hoặc bất kì thẻ nào cũng được) ở đúng vị trí cần thay đổi, và để script thay đổi thẻ đó như VD sau:<br /><br /><div class="code"><pre style='color:#000000;background:#ffffff;'><span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>html</span><span style='color:#a65700; '>></span><br /> <span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>body</span><span style='color:#a65700; '>></span><br /> <span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>div</span><span style='color:#274796; '> </span><span style='color:#074726; '>id</span><span style='color:#808030; '>=</span><span style='color:#0000e6; '>"targetContainer"</span><span style='color:#a65700; '>></span><span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>div</span><span style='color:#a65700; '>></span><br /> <span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>div</span><span style='color:#a65700; '>></span><br /> <span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>script type="text/Javascript"</span><span style='color:#a65700; '>></span><br /> document<span style='color:#808030; '>.</span>getElementById<span style='color:#808030; '>(</span><span style='color:#0000e6; '>'targetContainer'</span><span style='color:#808030; '>)</span><span style='color:#808030; '>.</span>innerHTML<span style='color:#808030; '>+=</span><span style='color:#0000e6; '>"sample text"</span><span style='color:#800080; '>;</span><br /> <span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>script</span><span style='color:#a65700; '>></span><br /> <span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>div</span><span style='color:#a65700; '>></span><br /> <span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>body</span><span style='color:#a65700; '>></span><br /><span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>html</span><span style='color:#a65700; '>></span><br /></pre></div><br />Như ta thấy, thay vì sửa đổi nội dung của phần tử <span style="font-family: "Courier New",Courier,monospace;">body</span> (cha của <span style="font-family: "Courier New",Courier,monospace;">div</span> chứa script), script chỉ sửa đổi phần tử <span style="font-family: "Courier New",Courier,monospace;">div</span> "anh em", như vậy không "phạm luật" và chạy tốt.<br /><br />Blog Hỗn tạp bị dính lỗi này ở phần <strong>Các bài viết liên quan</strong>, và bây giờ đã được sửa lại.<br /><br />Các trình bày, diễn giải và phân tích ở trên đều dựa theo trang Support của Microsoft. Hy vọng rằng nó sẽ có ích phần nào cho các bạn làm web.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-615185131687534096?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-48801208029913113282009-06-19T16:18:00.002+04:002009-06-19T16:20:34.693+04:00Làm Readmore trong Blogger giống WordPressTrong WordPress, để tạo đoạn phân cách Readmore, chúng ta nhấn vào nút More (có hình trang giấy ngăn đôi), nếu chuyển sang kiểu soạn thảo HTML, sẽ thấy có thẻ <span style="font-family: "Courier New",Courier,monospace;"><!--more--></span> được chèn vào vị trí đó. Khi đó, phần phía trên thẻ <span style="font-family: "Courier New",Courier,monospace;"><!--more--></span> này sẽ được hiển thị ở trang chủ và các trang category (nếu chọn kiểu hiển thị là summary), phần còn lại sẽ chỉ xem được khi vào xem 1 bài viết. Cách làm này có 1 điểm lợi là giữ được định dạng HTML.<br /><br />Trong Blogger, chúng ta từ trước đến giờ chỉ có cách hiển thị tự động theo 1 số lượng kí tự hoặc từ (xem <a href="http://hontap.blogspot.com/2009/06/tim-hieu-va-cai-tien-auto-readmore.html">bài viết trước</a>) và toàn bộ phần văn bản đó sẽ bị xóa định dạng HTML đi.<br /><br />Bài viết này sẽ trình bày 1 cách làm Auto Readmore cho Blogger đảm bảo được cả 2 yêu cầu trên: vừa có thể tùy biến theo thẻ <span style="font-family: "Courier New",Courier,monospace;"><!--more--></span> (giữ nguyên định dạng HTML) và vừa có thể tự động sinh ra phần văn bản thu gọn (không có định dạng HTML).<br /><br /><!--more--><br /><br /><h2>Chức năng của script</h2><br />- Nếu trong bài viết của bạn có thẻ <span style="font-family: "Courier New",Courier,monospace;"><!--more--></span>, nó sẽ lấy đó làm dấu phân cách, phần trước thẻ đó sẽ được hiển thị ở trang chủ và giữ nguyên định dạng HTML, phần sau đó chỉ hiển thị khi đọc 1 bài viết.<br /><br />- Nếu trong bài viết của bạn không có thẻ <span style="font-family: "Courier New",Courier,monospace;"><!--more--></span>, thì script sẽ tự động sinh ra đoạn văn bản thu gọn ở trang chủ như script auto readmore thông thường. Lúc này định dạng HTML sẽ không còn (hình ảnh thumbnail vẫn được duy trì).<br /><br />Cách làm này đảm bảo rằng các tùy biến của bạn về auto readmore trước đây vẫn được bảo tồn (khi không có thẻ <span style="font-family: "Courier New",Courier,monospace;"><!--more--></span>), đồng thời, có 1 ưu điểm nữa là khi bạn có ý định chuyển sang WordPress, thì nội dung bài viết cũng đã có sẵn Readmore cho bạn! Hơn thế nữa, với việc dùng <span style="font-family: "Courier New",Courier,monospace;"><!--more--></span>, bạn có khả năng uyển chuyển hơn trong việc tùy biến độ dài đoạn văn bản thu gọn.<br /><br /><h2>Cách cài đặt script</h2><br />Trước tiên, các bạn vào phần chỉnh sửa template, chọn kiểu chỉnh sửa HTML, và đánh dấu vào ô Expand Widget Templates. Nhớ sao lưu trước khi thực hiện. Tốt hơn hết là bạn nên download template về máy tính và chỉnh sửa ở file này.<br /><br />Tìm đến thẻ <span style="font-family: "Courier New",Courier,monospace;"></head></span> và chèn đoạn mã sau vào ngay trước đó:<br /><br /><div class="code"><pre style='color:#000000;background:#ffffff;'><span style='color:#808030; '><</span>b<span style='color:#800080; '>:</span><span style='color:#800000; font-weight:bold; '>if</span> cond<span style='color:#808030; '>=</span><span style='color:#0000e6; '>'data:blog.pageType != &quot;item&quot;'</span><span style='color:#808030; '>></span><br /> <span style='color:#808030; '><</span>script type<span style='color:#808030; '>=</span><span style='color:#0000e6; '>'text/javascript'</span><span style='color:#808030; '>></span><br /> <span style='color:#696969; '>//<![CDATA[</span><br /> <span style='color:#800000; font-weight:bold; '>function</span> strip<span style='color:#808030; '>(</span>s<span style='color:#808030; '>,</span>n<span style='color:#808030; '>)</span><span style='color:#800080; '>{</span><span style='color:#800000; font-weight:bold; '>return</span> s<span style='color:#808030; '>.</span><span style='color:#800000; font-weight:bold; '>replace</span><span style='color:#808030; '>(</span><span style='color:#800000; '>/</span><span style='color:#0000e6; '><</span><span style='color:#808030; '>.</span><span style='color:#808030; '>*</span><span style='color:#808030; '>?</span><span style='color:#0000e6; '>></span><span style='color:#800000; '>/</span><span style='color:#800000; font-weight:bold; '>ig</span><span style='color:#808030; '>,</span> <span style='color:#0000e6; '>''</span><span style='color:#808030; '>)</span><span style='color:#808030; '>.</span><span style='color:#800000; font-weight:bold; '>split</span><span style='color:#808030; '>(</span><span style='color:#800000; '>/</span><span style='color:#0000e6; '>\s</span><span style='color:#808030; '>+</span><span style='color:#800000; '>/</span><span style='color:#808030; '>)</span><span style='color:#808030; '>.</span><span style='color:#800000; font-weight:bold; '>slice</span><span style='color:#808030; '>(</span><span style='color:#008c00; '>0</span><span style='color:#808030; '>,</span>n<span style='color:#808030; '>-</span><span style='color:#008c00; '>1</span><span style='color:#808030; '>)</span><span style='color:#808030; '>.</span><span style='color:#800000; font-weight:bold; '>join</span><span style='color:#808030; '>(</span><span style='color:#0000e6; '>' '</span><span style='color:#808030; '>)</span><span style='color:#800080; '>}</span><br /> <span style='color:#800000; font-weight:bold; '>function</span> createSummary<span style='color:#808030; '>(</span>id<span style='color:#808030; '>)</span> <span style='color:#800080; '>{</span><br /> <span style='color:#800000; font-weight:bold; '>var</span> p <span style='color:#808030; '>=</span> document<span style='color:#808030; '>.</span>getElementById<span style='color:#808030; '>(</span>id<span style='color:#808030; '>)</span><span style='color:#808030; '>,</span> content <span style='color:#808030; '>=</span> p<span style='color:#808030; '>.</span>innerHTML<span style='color:#800080; '>;</span><br /> <span style='color:#800000; font-weight:bold; '>if</span> <span style='color:#808030; '>(</span><span style='color:#800000; '>/</span><span style='color:#0000e6; '><!--</span><span style='color:#0000e6; '>\s</span><span style='color:#808030; '>*</span><span style='color:#0000e6; '>more</span><span style='color:#0000e6; '>\s</span><span style='color:#808030; '>*</span><span style='color:#0000e6; '>--></span><span style='color:#800000; '>/</span><span style='color:#808030; '>.</span><span style='color:#800000; font-weight:bold; '>test</span><span style='color:#808030; '>(</span>content<span style='color:#808030; '>)</span><span style='color:#808030; '>)</span> <span style='color:#800080; '>{</span><br /> p<span style='color:#808030; '>.</span>innerHTML <span style='color:#808030; '>=</span> content<span style='color:#808030; '>.</span><span style='color:#800000; font-weight:bold; '>split</span><span style='color:#808030; '>(</span><span style='color:#800000; '>/</span><span style='color:#0000e6; '><!--</span><span style='color:#0000e6; '>\s</span><span style='color:#808030; '>*</span><span style='color:#0000e6; '>more</span><span style='color:#0000e6; '>\s</span><span style='color:#808030; '>*</span><span style='color:#0000e6; '>--></span><span style='color:#800000; '>/</span><span style='color:#808030; '>)</span><span style='color:#808030; '>[</span><span style='color:#008c00; '>0</span><span style='color:#808030; '>]</span><span style='color:#800080; '>;</span><br /> <span style='color:#800080; '>}</span> <span style='color:#800000; font-weight:bold; '>else</span> <span style='color:#800080; '>{</span><br /> <span style='color:#800000; font-weight:bold; '>var</span> imgTag <span style='color:#808030; '>=</span> <span style='color:#0000e6; '>''</span><span style='color:#808030; '>,</span> img <span style='color:#808030; '>=</span> p<span style='color:#808030; '>.</span>getElementsByTagName<span style='color:#808030; '>(</span><span style='color:#0000e6; '>'img'</span><span style='color:#808030; '>)</span><span style='color:#800080; '>;</span><br /> <span style='color:#800000; font-weight:bold; '>if</span> <span style='color:#808030; '>(</span>img<span style='color:#808030; '>.</span>length <span style='color:#808030; '>>=</span> <span style='color:#008c00; '>1</span><span style='color:#808030; '>)</span> <span style='color:#800080; '>{</span><br /> imgTag <span style='color:#808030; '>=</span> <span style='color:#0000e6; '>'<img class="thumb" src="'</span><span style='color:#808030; '>+</span>img<span style='color:#808030; '>[</span><span style='color:#008c00; '>0</span><span style='color:#808030; '>]</span><span style='color:#808030; '>.</span>src<span style='color:#808030; '>+</span><span style='color:#0000e6; '>'" />'</span><span style='color:#800080; '>;</span><br /> <span style='color:#800080; '>}</span><br /> p<span style='color:#808030; '>.</span>innerHTML <span style='color:#808030; '>=</span> imgTag <span style='color:#808030; '>+</span> strip<span style='color:#808030; '>(</span>content<span style='color:#808030; '>,</span> <span style='color:#008c00; '>125</span><span style='color:#808030; '>)</span> <span style='color:#808030; '>+</span> <span style='color:#0000e6; '>'...'</span><span style='color:#800080; '>;</span><br /> <span style='color:#800080; '>}</span><br /> <span style='color:#800080; '>}</span><br /> <span style='color:#696969; '>//]]></span><br /> <span style='color:#808030; '><</span><span style='color:#808030; '>/</span>script<span style='color:#808030; '>></span><br /><span style='color:#808030; '><</span><span style='color:#808030; '>/</span>b<span style='color:#800080; '>:</span><span style='color:#800000; font-weight:bold; '>if</span><span style='color:#808030; '>></span><br /></pre></div><br />Bạn lưu ý, hình ảnh thumbnail sẽ có class CSS là .thumb, bạn nên tùy biến CSS cho nó, VD như tôi làm như sau (chèn đoạn này vào phần trước <span style="font-family: "Courier New",Courier,monospace;">]]></b:skin></span>):<br /><br /><div class="code"><pre style='color:#000000;background:#ffffff;'><span style='color:#808030; '>.</span>thumb<span style='color:#800080; '>{</span><span style='color:#bb7977; font-weight:bold; '>display</span><span style='color:#808030; '>:</span><span style='color:#074726; '>inline</span><span style='color:#800080; '>;</span><span style='color:#bb7977; font-weight:bold; '>margin</span><span style='color:#808030; '>:</span><span style='color:#008c00; '>5</span><span style='color:#006600; '>px</span> <span style='color:#008c00; '>10</span><span style='color:#006600; '>px</span> <span style='color:#008c00; '>10</span><span style='color:#006600; '>px</span> <span style='color:#008c00; '>0</span><span style='color:#800080; '>;</span><span style='color:#bb7977; font-weight:bold; '>width</span><span style='color:#808030; '>:</span><span style='color:#008c00; '>120</span><span style='color:#006600; '>px</span><span style='color:#800080; '>}</span><br /></pre></div><br />Đồng thời, bạn có thể tùy biến số từ hiển thị (trong trường hợp tự động sinh đoạn văn bản thu gọn) ở trong đoạn code trên (thay số 125 bằng số tùy ý bạn).<br /><br />Sau đó, tìm đến thẻ <span style="font-family: "Courier New",Courier,monospace;"><data:post.body/></span> và thay thế bắng đoạn mã sau:<br /><br /><div class="code"><pre style='color:#000000;background:#ffffff;'><span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>b</span><span style='color:#5f5035; '>:if</span><span style='color:#274796; '> cond</span><span style='color:#808030; '>=</span><span style='color:#0000e6; '>'data:blog.pageType != &quot;item&quot;'</span><span style='color:#a65700; '>></span><br /> <span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>span</span><span style='color:#274796; '> expr:</span><span style='color:#074726; '>id</span><span style='color:#808030; '>=</span><span style='color:#0000e6; '>'&quot;p&quot; + data:post.id'</span><span style='color:#a65700; '>></span><span style='color:#a65700; '><</span><span style='color:#5f5035; '>data:post</span><span style='color:#008c00; '>.</span><span style='color:#274796; '>body</span><span style='color:#a65700; '>/></span><span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>span</span><span style='color:#a65700; '>></span><br /> <span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>script type='text/javascript'</span><span style='color:#a65700; '>></span>createSummary<span style='color:#808030; '>(</span><span style='color:#808030; '>&</span>quot<span style='color:#800080; '>;</span>p<span style='color:#808030; '><</span>data<span style='color:#800080; '>:</span>post<span style='color:#808030; '>.</span>id<span style='color:#808030; '>/</span><span style='color:#808030; '>></span><span style='color:#808030; '>&</span>quot<span style='color:#800080; '>;</span><span style='color:#808030; '>)</span><span style='color:#800080; '>;</span><span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>script</span><span style='color:#a65700; '>></span><br /> <span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>a</span><span style='color:#274796; '> expr:</span><span style='color:#074726; '>href</span><span style='color:#808030; '>=</span><span style='color:#0000e6; '>'data:post.url'</span><span style='color:#274796; '> </span><span style='color:#074726; '>title</span><span style='color:#808030; '>=</span><span style='color:#0000e6; '>'Đọc tiếp'</span><span style='color:#a65700; '>></span>Đọc tiếp <span style='color:#074726; '>&</span><span style='color:#074726; '>amp</span><span style='color:#074726; '>;</span>rarr;<span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>a</span><span style='color:#a65700; '>></span><br /><span style='color:#a65700; '><</span><span style='color:#800000; font-weight:bold; '>b</span><span style='color:#5f5035; '>:else</span><span style='color:#a65700; '>/></span><br /> <span style='color:#a65700; '><</span><span style='color:#5f5035; '>data:post</span><span style='color:#008c00; '>.</span><span style='color:#274796; '>body</span><span style='color:#a65700; '>/></span><br /><span style='color:#a65700; '></</span><span style='color:#800000; font-weight:bold; '>b</span><span style='color:#5f5035; '>:if</span><span style='color:#a65700; '>></span><br /></pre></div><br />Xong!<br /><br />Hy vọng rằng script này sẽ có ích đối với bạn.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-4880120802991311328?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-56954009348486658172009-06-16T15:38:00.006+04:002009-06-16T16:08:43.751+04:00Tìm hiểu và cải tiến Auto ReadmoreMọi người dùng Blogger chắc đều biết đến tiện ích <a href="http://www.vietwebguide.com/2008/12/auto-readmore-script-ver30.html" rel="nofollow" target="_blank">Auto Readmore</a> nổi tiếng của AnhVo. Ở bài viết này, tôi sẽ cùng các bạn tìm hiểu qua cách code của tiện ích này, đồng thời đề xuất 1 cách nâng cấp để code được tốt hơn.<br /><br />Trước hết, chúng ta xem qua nội dung của script này:<br /><br /><div class="code"><pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span style="color: rgb(128, 0, 0); font-weight: bold;">function</span> removeHtmlTag<span style="color: rgb(128, 128, 48);">(</span>strx<span style="color: rgb(128, 128, 48);">,</span>chop<span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">{</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">if</span><span style="color: rgb(128, 128, 48);">(</span>strx<span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">indexOf</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 0, 230);">"<"</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 128, 48);">!=</span><span style="color: rgb(128, 128, 48);">-</span><span style="color: rgb(0, 140, 0);">1</span><span style="color: rgb(128, 128, 48);">)</span><br /> <span style="color: rgb(128, 0, 128);">{</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">var</span> s <span style="color: rgb(128, 128, 48);">=</span> strx<span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">split</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 0, 230);">"<"</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">for</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(128, 0, 0); font-weight: bold;">var</span> i<span style="color: rgb(128, 128, 48);">=</span><span style="color: rgb(0, 140, 0);">0</span><span style="color: rgb(128, 0, 128);">;</span>i<span style="color: rgb(128, 128, 48);"><</span>s<span style="color: rgb(128, 128, 48);">.</span>length<span style="color: rgb(128, 0, 128);">;</span>i<span style="color: rgb(128, 128, 48);">++</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">{</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">if</span><span style="color: rgb(128, 128, 48);">(</span>s<span style="color: rgb(128, 128, 48);">[</span>i<span style="color: rgb(128, 128, 48);">]</span><span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">indexOf</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 0, 230);">">"</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 128, 48);">!=</span><span style="color: rgb(128, 128, 48);">-</span><span style="color: rgb(0, 140, 0);">1</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">{</span><br /> s<span style="color: rgb(128, 128, 48);">[</span>i<span style="color: rgb(128, 128, 48);">]</span> <span style="color: rgb(128, 128, 48);">=</span> s<span style="color: rgb(128, 128, 48);">[</span>i<span style="color: rgb(128, 128, 48);">]</span><span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">substring</span><span style="color: rgb(128, 128, 48);">(</span>s<span style="color: rgb(128, 128, 48);">[</span>i<span style="color: rgb(128, 128, 48);">]</span><span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">indexOf</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 0, 230);">">"</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 128, 48);">+</span><span style="color: rgb(0, 140, 0);">1</span><span style="color: rgb(128, 128, 48);">,</span>s<span style="color: rgb(128, 128, 48);">[</span>i<span style="color: rgb(128, 128, 48);">]</span><span style="color: rgb(128, 128, 48);">.length</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 128);">}</span><br /> <span style="color: rgb(128, 0, 128);">}</span><br /> strx <span style="color: rgb(128, 128, 48);">=</span> s<span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">join</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 0, 230);">""</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 128);">}</span><br /> chop <span style="color: rgb(128, 128, 48);">=</span> <span style="color: rgb(128, 128, 48);">(</span>chop <span style="color: rgb(128, 128, 48);"><</span> strx<span style="color: rgb(128, 128, 48);">.</span>length<span style="color: rgb(128, 128, 48);">-</span><span style="color: rgb(0, 140, 0);">1</span><span style="color: rgb(128, 128, 48);">)</span> <span style="color: rgb(128, 0, 128);">?</span> chop <span style="color: rgb(128, 0, 128);">:</span> strx<span style="color: rgb(128, 128, 48);">.</span>length<span style="color: rgb(128, 128, 48);">-</span><span style="color: rgb(0, 140, 0);">2</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">while</span><span style="color: rgb(128, 128, 48);">(</span>strx<span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">charAt</span><span style="color: rgb(128, 128, 48);">(</span>chop<span style="color: rgb(128, 128, 48);">-</span><span style="color: rgb(0, 140, 0);">1</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 128, 48);">!=</span><span style="color: rgb(0, 0, 230);">' '</span> <span style="color: rgb(128, 128, 48);">&&</span> strx<span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">indexOf</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 0, 230);">' '</span><span style="color: rgb(128, 128, 48);">,</span>chop<span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 128, 48);">!=</span><span style="color: rgb(128, 128, 48);">-</span><span style="color: rgb(0, 140, 0);">1</span><span style="color: rgb(128, 128, 48);">)</span> chop<span style="color: rgb(128, 128, 48);">++</span><span style="color: rgb(128, 0, 128);">;</span><br /> strx <span style="color: rgb(128, 128, 48);">=</span> strx<span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">substring</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 140, 0);">0</span><span style="color: rgb(128, 128, 48);">,</span>chop<span style="color: rgb(128, 128, 48);">-</span><span style="color: rgb(0, 140, 0);">1</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">return</span> strx<span style="color: rgb(128, 128, 48);">+</span><span style="color: rgb(0, 0, 230);">'...'</span><span style="color: rgb(128, 0, 128);">;</span><br /><span style="color: rgb(128, 0, 128);">}</span><br /><br /><span style="color: rgb(128, 0, 0); font-weight: bold;">function</span> createSummaryAndThumb<span style="color: rgb(128, 128, 48);">(</span>pID<span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">{</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">var</span> div <span style="color: rgb(128, 128, 48);">=</span> document<span style="color: rgb(128, 128, 48);">.</span>getElementById<span style="color: rgb(128, 128, 48);">(</span>pID<span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">var</span> imgtag <span style="color: rgb(128, 128, 48);">=</span> <span style="color: rgb(0, 0, 230);">""</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">var</span> img <span style="color: rgb(128, 128, 48);">=</span> div<span style="color: rgb(128, 128, 48);">.</span>getElementsByTagName<span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 0, 230);">"img"</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">var</span> summ <span style="color: rgb(128, 128, 48);">=</span> summary_noimg<span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">if</span><span style="color: rgb(128, 128, 48);">(</span>img<span style="color: rgb(128, 128, 48);">.</span>length<span style="color: rgb(128, 128, 48);">>=</span><span style="color: rgb(0, 140, 0);">1</span><span style="color: rgb(128, 128, 48);">)</span> <span style="color: rgb(128, 0, 128);">{</span> <br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">if</span><span style="color: rgb(128, 128, 48);">(</span>thumbnail_mode <span style="color: rgb(128, 128, 48);">==</span> <span style="color: rgb(0, 0, 230);">"float"</span><span style="color: rgb(128, 128, 48);">)</span> <span style="color: rgb(128, 0, 128);">{</span><br /> imgtag <span style="color: rgb(128, 128, 48);">=</span> <span style="color: rgb(0, 0, 230);">'<span style="float:left; padding:0px 10px 5px 0px;"><img src="'</span><span style="color: rgb(128, 128, 48);">+</span>img<span style="color: rgb(128, 128, 48);">[</span><span style="color: rgb(0, 140, 0);">0</span><span style="color: rgb(128, 128, 48);">]</span><span style="color: rgb(128, 128, 48);">.</span>src<span style="color: rgb(128, 128, 48);">+</span><span style="color: rgb(0, 0, 230);">'" width="'</span><span style="color: rgb(128, 128, 48);">+</span>img_thumb_width<span style="color: rgb(128, 128, 48);">+</span><span style="color: rgb(0, 0, 230);">'px" height="'</span><span style="color: rgb(128, 128, 48);">+</span>img_thumb_height<span style="color: rgb(128, 128, 48);">+</span><span style="color: rgb(0, 0, 230);">'px"/></span>'</span><span style="color: rgb(128, 0, 128);">;</span><br /> summ <span style="color: rgb(128, 128, 48);">=</span> summary_img<span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 128);">}</span> <span style="color: rgb(128, 0, 0); font-weight: bold;">else</span> <span style="color: rgb(128, 0, 128);">{</span><br /> imgtag <span style="color: rgb(128, 128, 48);">=</span> <span style="color: rgb(0, 0, 230);">'<div style="padding:5px" align="center"><img style="max-width:'</span><span style="color: rgb(128, 128, 48);">+</span>img_thumb_width<span style="color: rgb(128, 128, 48);">+</span><span style="color: rgb(0, 0, 230);">'px; max-height:'</span><span style="color: rgb(128, 128, 48);">+</span>img_thumb_height<span style="color: rgb(128, 128, 48);">+</span><span style="color: rgb(0, 0, 230);">'px;" src="'</span><span style="color: rgb(128, 128, 48);">+</span>img<span style="color: rgb(128, 128, 48);">[</span><span style="color: rgb(0, 140, 0);">0</span><span style="color: rgb(128, 128, 48);">]</span><span style="color: rgb(128, 128, 48);">.</span>src<span style="color: rgb(128, 128, 48);">+</span><span style="color: rgb(0, 0, 230);">'" /></div>'</span><span style="color: rgb(128, 0, 128);">;</span><br /> summ <span style="color: rgb(128, 128, 48);">=</span> summary_img<span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 128);">}</span><br /> <span style="color: rgb(128, 0, 128);">}</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">var</span> summary <span style="color: rgb(128, 128, 48);">=</span> imgtag <span style="color: rgb(128, 128, 48);">+</span> <span style="color: rgb(0, 0, 230);">'<div>'</span> <span style="color: rgb(128, 128, 48);">+</span> removeHtmlTag<span style="color: rgb(128, 128, 48);">(</span>div<span style="color: rgb(128, 128, 48);">.</span>innerHTML<span style="color: rgb(128, 128, 48);">,</span>summ<span style="color: rgb(128, 128, 48);">)</span> <span style="color: rgb(128, 128, 48);">+</span> <span style="color: rgb(0, 0, 230);">'</div>'</span><span style="color: rgb(128, 0, 128);">;</span><br /> div<span style="color: rgb(128, 128, 48);">.</span>innerHTML <span style="color: rgb(128, 128, 48);">=</span> summary<span style="color: rgb(128, 0, 128);">;</span><br /><br /><span style="color: rgb(128, 0, 128);">}</span><br /></pre></div><br /><br />Đoạn script này gồm 2 hàm:<br />- hàm đầu tiên <span style="font-family: courier new">removeHtmlTag</span> dùng để loại bỏ các thẻ HTML và lấy ra <span style="font-family: courier new">chop</span> kí tự đầu tiên của 1 xâu<br />- hàm thứ 2 <span style="font-family: courier new">createSummaryAndThumb</span> có nhiệm vụ lấy nội dung của bài viết (nơi có ID là <span style="font-family: courier new">pID</span>), lấy ra hình ảnh đầu tiên nằm trong phần nội dung đó, sau đó sử dụng hàm <span style="font-family: courier new">removeHtmlTag</span> để sinh ra đoạn văn bản cần rút gọn<br /><br />Ứng với mỗi hàm này, chúng ta sẽ đưa ra các cải tiến tương ứng.<br /><br /><h2>1.Cải tiến đầu tiên</h2><br />Trước tiên, xét hàm <span style="font-family: courier new">removeHtmlTag</span>, ta có thể đưa ra 1 chút nhận xét như sau:<br /><br /><h3>1.1. Về việc loại bỏ các thẻ HTML</h3>Công việc này được thực hiện lần lượt qua các bước sau:<br />- tìm các kí tự <<br />- chia xâu văn bản ban đầu thành các mảng dựa vào kí tự đó<br />- trong mỗi phần được chia, tìm kí tự > tương ứng và xóa phần giữa chúng đi<br />- cuối cùng là nối tất cả các phần lại với nhau<br /><br />Có vẻ khá rắc rối! Nhất là ở việc tìm các kí tự < và >. Chúng ta biết rằng Javascript có 1 công cụ cực mạnh để tìm kiếm và thay thế các đoạn văn bản theo mẫu, đó là biểu thức tiêu chuẩn (regular expression). Vì thế, chúng ta sẽ ứng dụng nó thay cho việc dùng các hàm tìm kiếm như trên.<br /><br />Toàn bộ công việc tìm kiếm, thay thế (loại bỏ) các thẻ HTML đối với biểu thức tiêu chuẩn chỉ cần thực hiện 1 câu lệnh đơn giản như sau:<br /><br /><div class="code"><pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;color:black;">s <span style="color: rgb(128, 128, 48);">=</span> s<span style="color: rgb(128, 128, 48);">.</span><span style="font-weight: bold;color:maroon;" >replace</span><span style="color: rgb(128, 128, 48);">(</span><span style="color:maroon;">/</span><span style="color: rgb(0, 0, 230);"><</span><span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 128, 48);">*</span><span style="color: rgb(128, 128, 48);">?</span><span style="color: rgb(0, 0, 230);">></span><span style="color:maroon;">/</span><span style="font-weight: bold;color:maroon;" >ig</span><span style="color: rgb(128, 128, 48);">,</span> <span style="color: rgb(0, 0, 230);">''</span><span style="color: rgb(128, 128, 48);">)</span><span style="color:purple;">;</span></pre></div><br /><br />trong đó s là xâu ban đầu. Tôi gán luôn giá trị trả về cho s để khỏi mất công khai báo thêm biến.<br /><br /><h3>1.2. Lấy ra n kí tự đầu tiên</h3><br /><br />Phần này AnhVo xử lí khá khéo! Khéo ở chỗ đã tính đến việc kí tự cuối cùng bị lấy nằm giữa từ, hơn nữa, có thể là kí tự unicode của tiếng Việt ("chăt" vào giữa chúng có thể gây ra tình trạng kí tự ô vuông). Do đó AnhVo đã dùng 1 mẹo: tìm kiếm kí tự trắng (space) liền sau kí tự cuối cùng và lấy đến đó.<br /><br />Chỗ này tôi chỉ để xuất 1 cách làm khác thôi, là thay vì cắt theo kí tự thì ta cắt theo từ, như thế xử lí tiện hơn vì không phải lo cắt vào giữa, cũng không phải lo việc tìm kiếm kí tự trắng.<br /><br />Nếu cắt theo từ, thì có thể dùng tiếp tục biểu thức tiêu chuẩn. Toàn bộ công việc cũng chỉ đơn giản như sau:<br /><br /><div class="code"><pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">s <span style="color: rgb(128, 128, 48);">=</span> s<span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">split</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(128, 0, 0);">/</span><span style="color: rgb(0, 0, 230);">\s</span><span style="color: rgb(128, 128, 48);">+</span><span style="color: rgb(128, 0, 0);">/</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br />s <span style="color: rgb(128, 128, 48);">=</span> s<span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">slice</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 140, 0);">0</span><span style="color: rgb(128, 128, 48);">,</span>n<span style="color: rgb(128, 128, 48);">-</span><span style="color: rgb(0, 140, 0);">1</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br />s <span style="color: rgb(128, 128, 48);">=</span> s<span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">join</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 0, 230);">' '</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br /></pre></div><br /><br />Ở đây có 3 hàm, chúng lần lượt làm các công việc sau:<br />- chia xâu s ban đầu thành nhiều phần, lấy 1 hoặc nhiều kí tự trắng (bao gồm cả xuống dòng) làm kí tự phân cách<br />- lấy ra n phần đầu tiên<br />- nối n phần đó lại với nhau<br /><br />Kết hợp với phần trước, hàm của chúng ta có cả thảy 4 dòng code:<br /><br /><div class="code"><pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span style="color: rgb(128, 0, 0); font-weight: bold;">function</span> stripTags<span style="color: rgb(128, 128, 48);">(</span>s<span style="color: rgb(128, 128, 48);">,</span>n<span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">{</span><br /> s <span style="color: rgb(128, 128, 48);">=</span> s<span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">replace</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(128, 0, 0);">/</span><span style="color: rgb(0, 0, 230);"><</span><span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 128, 48);">*</span><span style="color: rgb(128, 128, 48);">?</span><span style="color: rgb(0, 0, 230);">></span><span style="color: rgb(128, 0, 0);">/</span><span style="color: rgb(128, 0, 0); font-weight: bold;">ig</span><span style="color: rgb(128, 128, 48);">,</span> <span style="color: rgb(0, 0, 230);">''</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br /> s <span style="color: rgb(128, 128, 48);">=</span> s<span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">split</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(128, 0, 0);">/</span><span style="color: rgb(0, 0, 230);">\s</span><span style="color: rgb(128, 128, 48);">+</span><span style="color: rgb(128, 0, 0);">/</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br /> s <span style="color: rgb(128, 128, 48);">=</span> s<span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">slice</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 140, 0);">0</span><span style="color: rgb(128, 128, 48);">,</span>n<span style="color: rgb(128, 128, 48);">-</span><span style="color: rgb(0, 140, 0);">1</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br /> s <span style="color: rgb(128, 128, 48);">=</span> s<span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">join</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 0, 230);">' '</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br /><span style="color: rgb(128, 0, 128);">}</span><br /></pre></div><br /><br />Javascript còn có 1 tính năng khá hay là xâu chuỗi các hàm của 1 đối tượng (chain), nhờ đó, toàn bộ hàm đầu tiên của chúng ta có thể viết ngắn gọn lại trong 1 dòng như sau:<br /><br /><div class="code"><pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span style="color: rgb(128, 0, 0); font-weight: bold;">function</span> stripTags<span style="color: rgb(128, 128, 48);">(</span>s<span style="color: rgb(128, 128, 48);">,</span>n<span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">{</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">return</span> s<span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">replace</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(128, 0, 0);">/</span><span style="color: rgb(0, 0, 230);"><</span><span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 128, 48);">*</span><span style="color: rgb(128, 128, 48);">?</span><span style="color: rgb(0, 0, 230);">></span><span style="color: rgb(128, 0, 0);">/</span><span style="color: rgb(128, 0, 0); font-weight: bold;">ig</span><span style="color: rgb(128, 128, 48);">,</span> <span style="color: rgb(0, 0, 230);">''</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">split</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(128, 0, 0);">/</span><span style="color: rgb(0, 0, 230);">\s</span><span style="color: rgb(128, 128, 48);">+</span><span style="color: rgb(128, 0, 0);">/</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">slice</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 140, 0);">0</span><span style="color: rgb(128, 128, 48);">,</span>n<span style="color: rgb(128, 128, 48);">-</span><span style="color: rgb(0, 140, 0);">1</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">join</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 0, 230);">' '</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br /><span style="color: rgb(128, 0, 128);">}</span><br /></pre></div><br /><br />Lưu ý 1 chút là trong hàm này, tôi có đổi tên hàm, tên các biến cho gọn gàng.<br /><br /><h2>2.Cải tiến thứ 2</h2><br />Bây giờ ta xét đến hàm thứ 2. Để cải tiến nó, chúng ta xem lại 1 chút cách toàn bộ script hoạt động. Khi cài đặt script này, chắc hẳn các bạn còn nhớ chúng ta phải <i>cấu hình</i> 1 chút cho nó:<br /><br /><div class="code"><pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">thumbnail_mode <span style="color: rgb(128, 128, 48);">=</span> <span style="color: rgb(0, 0, 230);">'no-float'</span><span style="color: rgb(128, 0, 128);">;</span><br />summary_noimg <span style="color: rgb(128, 128, 48);">=</span> <span style="color: rgb(0, 140, 0);">430</span><span style="color: rgb(128, 0, 128);">;</span><br />summary_img <span style="color: rgb(128, 128, 48);">=</span> <span style="color: rgb(0, 140, 0);">340</span><span style="color: rgb(128, 0, 128);">;</span><br />img_thumb_height <span style="color: rgb(128, 128, 48);">=</span> <span style="color: rgb(0, 140, 0);">100</span><span style="color: rgb(128, 0, 128);">;</span><br />img_thumb_width <span style="color: rgb(128, 128, 48);">=</span> <span style="color: rgb(0, 140, 0);">120</span><span style="color: rgb(128, 0, 128);">;</span><br /></pre></div><br /><br />Việc cấu hình này gồm 2 phần chính là cấu hình cho hình ảnh thumbnail (gồm chiều rộng và chiều cao, cũng như thuộc tính float) và cấu hình cho số lượng kí tự cần hiển thị. Phần cấu hình cho hình ảnh, ta có thể thấy là sau đó được gán vào thuộc tính <span style="font-family: courier new">style</span>, <span style="font-family: courier new">width</span> và <span style="font-family: courier new">height</span> khi sinh ra đoạn mã HTML (ở hàm thứ 2 <span style="font-family: courier new">createSummaryAndThumb</span>). Sau này AnhVo có cải tiến chút ít là đưa tất cả các thuộc tính <span style="font-family: courier new">width</span> và <span style="font-family: courier new">height</span> đó vào CSS (trong thẻ <span style="font-family: courier new">style</span>).<br /><br />Như vậy, nhận thấy rằng toàn bộ phần cấu hình dành cho hình ảnh đều thuộc về CSS. Vậy thì sao ta không gán cho chúng 1 lớp (class) để khỏi phải lặp lại nhiều lần ở các hình ảnh ở các bài viết? Điều này có 2 điều lợi: 1 là làm mã HTML của trang web sáng sủa, gọn gàng hơn vì CSS không bị gán trong từng thẻ IMG mà được rút ra thành 1 class; 2 là làm đoạn code javascript của chúng ta cũng đơn giản hơn (do không phải cấu hình nữa).<br /><br />Như thế, tôi đã viết lại hàm thứ 2 này theo hướng đó, gán cho các hình ảnh thuộc tính CSS của lớp <span style="font-family: courier new">thumb</span>. Ngoài ra, số kí tự hiển thị cũng được thay bằng số từ hiển thị (cho phù hợp với hàm đầu tiên mà tôi cải tiến), ở đây là 125 (xem cuối hàm).<br /><br /><div class="code"><pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span style="color: rgb(128, 0, 0); font-weight: bold;">function</span> createSummaryAndThumb<span style="color: rgb(128, 128, 48);">(</span>id<span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">{</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">var</span> p <span style="color: rgb(128, 128, 48);">=</span> document<span style="color: rgb(128, 128, 48);">.</span>getElementById<span style="color: rgb(128, 128, 48);">(</span>id<span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">var</span> imgtag <span style="color: rgb(128, 128, 48);">=</span> <span style="color: rgb(0, 0, 230);">''</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">var</span> img <span style="color: rgb(128, 128, 48);">=</span> p<span style="color: rgb(128, 128, 48);">.</span>getElementsByTagName<span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 0, 230);">'img'</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">if</span><span style="color: rgb(128, 128, 48);">(</span>img<span style="color: rgb(128, 128, 48);">.</span>length<span style="color: rgb(128, 128, 48);">>=</span><span style="color: rgb(0, 140, 0);">1</span><span style="color: rgb(128, 128, 48);">)</span> <span style="color: rgb(128, 0, 128);">{</span><br /> imgtag <span style="color: rgb(128, 128, 48);">=</span> <span style="color: rgb(0, 0, 230);">'<img class="thumb" src="'</span><span style="color: rgb(128, 128, 48);">+</span>img<span style="color: rgb(128, 128, 48);">[</span><span style="color: rgb(0, 140, 0);">0</span><span style="color: rgb(128, 128, 48);">]</span><span style="color: rgb(128, 128, 48);">.</span>src<span style="color: rgb(128, 128, 48);">+</span><span style="color: rgb(0, 0, 230);">'" />'</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 128);">}</span><br /> p<span style="color: rgb(128, 128, 48);">.</span>innerHTML <span style="color: rgb(128, 128, 48);">=</span> imgtag <span style="color: rgb(128, 128, 48);">+</span> stripTags<span style="color: rgb(128, 128, 48);">(</span>p<span style="color: rgb(128, 128, 48);">.</span>innerHTML<span style="color: rgb(128, 128, 48);">,</span><span style="color: rgb(0, 140, 0);">125</span><span style="color: rgb(128, 128, 48);">)</span> <span style="color: rgb(128, 128, 48);">+</span> <span style="color: rgb(0, 0, 230);">'...'</span><span style="color: rgb(128, 0, 128);">;</span><br /><span style="color: rgb(128, 0, 128);">}</span><br /></pre></div><br /><br />Công việc cuối cùng là bạn chỉ cần chỉnh sửa CSS cho class thumb thôi, VD như tôi làm như sau (chèn đoạn này vào phần trước <span style="font-family: courier new">]]></b:skin></span> là được):<br /><br /><div class="code"><pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;color:black;"><span style="color: rgb(128, 128, 48);">.</span>thumb<span style="color:purple;">{</span><span style="color: rgb(187, 121, 119); font-weight: bold;">display</span><span style="color: rgb(128, 128, 48);">:</span><span style="color: rgb(7, 71, 38);">inline</span><span style="color:purple;">;</span><span style="color: rgb(187, 121, 119); font-weight: bold;">margin</span><span style="color: rgb(128, 128, 48);">:</span><span style="color: rgb(0, 140, 0);">5</span><span style="color: rgb(0, 102, 0);">px</span> <span style="color: rgb(0, 140, 0);">10</span><span style="color: rgb(0, 102, 0);">px</span> <span style="color: rgb(0, 140, 0);">10</span><span style="color: rgb(0, 102, 0);">px</span> <span style="color: rgb(0, 140, 0);">0</span><span style="color:purple;">;</span><span style="color: rgb(187, 121, 119); font-weight: bold;">width</span><span style="color: rgb(128, 128, 48);">:</span><span style="color: rgb(0, 140, 0);">120</span><span style="color: rgb(0, 102, 0);">px</span><span style="color:purple;">}</span></pre></div><br />Như vậy, toàn bộ script Auto Readmore sẽ được viết lại như sau:<br /><br /><div class="code"><pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><span style="color: rgb(128, 128, 48);"><</span>b<span style="color: rgb(128, 0, 128);">:</span><span style="color: rgb(128, 0, 0); font-weight: bold;">if</span> cond<span style="color: rgb(128, 128, 48);">=</span><span style="color: rgb(0, 0, 230);">'data:blog.pageType != &quot;item&quot;'</span><span style="color: rgb(128, 128, 48);">></span><br /> <span style="color: rgb(128, 128, 48);"><</span>script type<span style="color: rgb(128, 128, 48);">=</span><span style="color: rgb(0, 0, 230);">'text/javascript'</span><span style="color: rgb(128, 128, 48);">></span><br /> <span style="color: rgb(105, 105, 105);">//<![CDATA[</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">function</span> stripTags<span style="color: rgb(128, 128, 48);">(</span>s<span style="color: rgb(128, 128, 48);">,</span>n<span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">{</span><span style="color: rgb(128, 0, 0); font-weight: bold;">return</span> s<span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">replace</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(128, 0, 0);">/</span><span style="color: rgb(0, 0, 230);"><</span><span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 128, 48);">*</span><span style="color: rgb(128, 128, 48);">?</span><span style="color: rgb(0, 0, 230);">></span><span style="color: rgb(128, 0, 0);">/</span><span style="color: rgb(128, 0, 0); font-weight: bold;">ig</span><span style="color: rgb(128, 128, 48);">,</span> <span style="color: rgb(0, 0, 230);">''</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">split</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(128, 0, 0);">/</span><span style="color: rgb(0, 0, 230);">\s</span><span style="color: rgb(128, 128, 48);">+</span><span style="color: rgb(128, 0, 0);">/</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">slice</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 140, 0);">0</span><span style="color: rgb(128, 128, 48);">,</span>n<span style="color: rgb(128, 128, 48);">-</span><span style="color: rgb(0, 140, 0);">1</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 128, 48);">.</span><span style="color: rgb(128, 0, 0); font-weight: bold;">join</span><span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 0, 230);">' '</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">}</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">function</span> createSummaryAndThumb<span style="color: rgb(128, 128, 48);">(</span>id<span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">{</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">var</span> p <span style="color: rgb(128, 128, 48);">=</span> document<span style="color: rgb(128, 128, 48);">.</span>getElementById<span style="color: rgb(128, 128, 48);">(</span>id<span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">var</span> imgtag <span style="color: rgb(128, 128, 48);">=</span> <span style="color: rgb(0, 0, 230);">''</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">var</span> img <span style="color: rgb(128, 128, 48);">=</span> p<span style="color: rgb(128, 128, 48);">.</span>getElementsByTagName<span style="color: rgb(128, 128, 48);">(</span><span style="color: rgb(0, 0, 230);">'img'</span><span style="color: rgb(128, 128, 48);">)</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 0); font-weight: bold;">if</span><span style="color: rgb(128, 128, 48);">(</span>img<span style="color: rgb(128, 128, 48);">.</span>length<span style="color: rgb(128, 128, 48);">>=</span><span style="color: rgb(0, 140, 0);">1</span><span style="color: rgb(128, 128, 48);">)</span> <span style="color: rgb(128, 0, 128);">{</span><br /> imgtag <span style="color: rgb(128, 128, 48);">=</span> <span style="color: rgb(0, 0, 230);">'<img class="left thumb" src="'</span><span style="color: rgb(128, 128, 48);">+</span>img<span style="color: rgb(128, 128, 48);">[</span><span style="color: rgb(0, 140, 0);">0</span><span style="color: rgb(128, 128, 48);">]</span><span style="color: rgb(128, 128, 48);">.</span>src<span style="color: rgb(128, 128, 48);">+</span><span style="color: rgb(0, 0, 230);">'" />'</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 128);">}</span><br /> p<span style="color: rgb(128, 128, 48);">.</span>innerHTML <span style="color: rgb(128, 128, 48);">=</span> imgtag <span style="color: rgb(128, 128, 48);">+</span> stripTags<span style="color: rgb(128, 128, 48);">(</span>p<span style="color: rgb(128, 128, 48);">.</span>innerHTML<span style="color: rgb(128, 128, 48);">,</span><span style="color: rgb(0, 140, 0);">125</span><span style="color: rgb(128, 128, 48);">)</span> <span style="color: rgb(128, 128, 48);">+</span> <span style="color: rgb(0, 0, 230);">'...'</span><span style="color: rgb(128, 0, 128);">;</span><br /> <span style="color: rgb(128, 0, 128);">}</span><br /> <span style="color: rgb(105, 105, 105);">//]]></span><br /> <span style="color: rgb(128, 128, 48);"><</span><span style="color: rgb(128, 128, 48);">/</span>script<span style="color: rgb(128, 128, 48);">></span><br /><span style="color: rgb(128, 128, 48);"><</span><span style="color: rgb(128, 128, 48);">/</span>b<span style="color: rgb(128, 0, 128);">:</span><span style="color: rgb(128, 0, 0); font-weight: bold;">if</span><span style="color: rgb(128, 128, 48);">></span><br /></pre></div><br /><br />Đây cũng chính là đoạn mã mà tôi đang dùng cho Hỗn tạp Blog. Đoạn mã này tôi chèn trong thẻ HEAD, ngay trước <span style="font-family: courier new"></head></span> (các bạn có thể view source để xem). Nguyên nhân là do host Websamba mà AnhVo dùng đã không còn hoạt động. Nếu các bạn muốn sử dụng nó, có thể copy đoạn code trên, chèn vào trước thẻ <span style="font-family: courier new"></head></span>, các phần còn lại trong template không cần phải thay đổi gì cả.<br /><br />Hy vọng vài phần tích và cải tiến nhỏ ở trên có thể giúp các bạn hiểu phần nào đoạn mã mà mình đang dùng. Thân ái.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-5695400934848665817?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-90081607921962921592009-06-15T20:46:00.004+04:002009-06-15T20:46:19.713+04:00Đổi giao diện của Hỗn tạpLâu rồi Hỗn tạp vẫn dùng 1 giao diện Aspire, 1 giao diện mà tôi thích ngay từ lần đầu nhìn thấy. Nhưng dùng 1 thời gian dài, cũng cảm thấy ý thích đó giảm bớt đi nhiều, thế nên đã có ý định tìm kiếm 1 giao diện mới cho blog này. Nhưng tìm mãi không thấy cái nào vừa ý. Một điều cảm thấy hơi buồn là các giao diện của Blogger phần nhiều được <em>chuyển từ giao diện của WordPress sang</em>, ít có cái nào đặc trưng của Blogger, mà giao diện của WordPress không phải mạnh ở "mặt tiền" mà chủ yếu là khả năng tùy biến layout nằm bên trong, điều mà Blogger <em>hầu như</em> không có.<br /><br />Vậy là tôi dành tự thiết kế cho Hỗn tạp, và sản phẩm là cái chúng ta đang thấy. Không biết mọi người đánh giá giao diện này thế nào, xin cho tôi ý kiến nhé :). Cám ơn rất nhiều.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-9008160792196292159?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-64885926960562282352009-06-06T17:53:00.003+04:002009-06-15T20:11:18.618+04:00...Nơi tuổi thơ tôi<h2>Intro..</h2><br /><br />Hêhê.. đây mới gọi là nói về giấc mơ đêm của mình nè.. keke..<br />Chả là.. ko hỉu sao.. mấy hôm vừa rồi toàn mơ.. với khung cảnh nền là ở Tuyên Quang nhà e.. nên hum nay.. hứng chí.. ngồi tưởng tượng lại cảnh vật quê nhà.. rùi tả lại cho cả nhà nghe.. ..nghe xong.. ai mà mún vìa xem xét ngó nghiêng thì cứ đăng kí với iem ná.. ..tả theo trình tự ko gian và thời gian ná.. cho dễ hình dung<br /><br /><h2>Bođì nè..</h2><br /><br />Khu nhà e.. phải nói là 1 khu dân cư be bé mới đúng.. vốn dĩ là 1 khu sinh sống của toàn bộ công nhân viên chức của 1 nhà máy quốc phòng.. với số công nhân trg nhà máy khoảng 1000 (là con số từ thời e còn ở đấy.. chứ bi jờ thì chắc tăng lên ùi.. nhưng e chả bít tăng đến đâu.. ) ..tức là số hộ dân chắc vào khoảng 700 - 800 gì đấy.. còn bé hơn cả 1 cái thị trấn nhỏ í nhở.. ..nhưng mà để dễ gọi thì e gọi tổng thể là 'nhà máy' nhá.. vì cũng chỉ toàn ng trg nhà máy sống ở đếy thui mà..<br /><br />Nhà máy tọa lạc ngay cạnh quốc lộ 2.. với 1 hàng rào lý tưởng là 1 dãy núi.. hehe..<br />Cụ thể là thế này này..<br /><br />Đi trên quốc lộ 2.. qua Đoan Hùng (Phú Thọ) chỉ 10km thui.. thì sẽ có 1 cái ngã ba ko bé mà cũng chẳng to đứng ở đấy chỉ cần đảo mắt qua qua.. là sẽ thấy ngay 1 tấm biển có ghi "Nhà máy 'có khỉ' chính xác Z129" ..hêhê.. tại ngày xưa ở đấy là biển cũ.. chữ mờ ảo.. nên toàn bị mọi ng gọi đùa thế.. chứ thực tế bi jờ thì đã đc thay 1 tấm biển đẹp đẽ rùi..<br /><br />Nhìn thẳng theo hướng tấm biển.. sẽ thấy 1 cái dốc.. caoooo.. caoooo.. thật là cao.. lại hơi ngoằn nghoèo tí chút.. ..hêhê.. nơi đây đã từng có 1 số cô cậu học sinh thik lao dốc phải gãy chân gãy tay ùi đấy..<br /><br />Leo hết con dốc.. là cánh cổng vào nhà máy.. cổng bé tí tẹo.. cũng có ng canh đầy đủ, hẳn hoi.. nhưng mà cũng chỉ là để cho vui í mà.. chứ còn vẫn còn ối đường vào nữa í..<br />Qua cổng.. đi đc 1 đoạn ngăn ngắn, bằng phẳng.. là lại có 1 con dốc nữa.. nhưng là dốc xuống ..cái dốc này cũng có ng đã từng gãy răng ùi í.. hehe..<br /><br />1 dốc lên, 1 dốc xuống.. hơi lằng nhằng nhể.. nhưng đấy là đg để đi qua 1 dãy núi đấy.. thế mới bảo là nhà máy có 1 bức tường rào lý tưởng.. keke..<br /><br />Đến đây thì là vào lòng chảo ùi.. (hơi na ná giống Điện Biện Phủ ) ..trung tâm của nhà máy..<br /><br />Xuống hết con dốc 2.. thì sẽ đập vào mắt là 1 khu sản xuất rộng lớn của nhà máy.. trg nì sản xuất toàn những thứ liên quan đến sắt thép.. rồi các chi tiết máy móc.. hay jỉ jì í.. e cũng chả kể hết đc.. và cũng sản xuất cả thuốc súng.. bom mìn j đó.. hehe.. (thỉnh thoảng ngồi nhà e vẫn đc nghe tiếng bom đạn thật đếy.. keke)<br /><br />Qua cái cổng nhà máy 'sản xuất' kia.. là 1 con dốc be bé đi lên.. ..lên đến đỉnh dốc thì là bắt đầu vào đến khu tập trung đông dân nhứt.. chỗ này bằng phẳng.. trải rộng.. tất cả mọi nhà đều tập trung ven con đường chính.. (đường này đẹp còn hơn đường quốc lộ 2 ngày xưa í..) ..nhà nào nhà nấy đất đai đều rộng thênh thang.. bát ngát.. nhưng vẫn ko rộng bằng nhà iem..<br /><br />Nói đến nhà iem.. (giờ bán rồi.. hơi phí.. hêhê..)<br /><br />Nhà e cũng nằm trên cái trục đường chính ấy.. tọa lạc ở nơi đc xem là thế 'rồng cuộn hổ ngổi' ..hêhê.. đùa tí thôi.. chả đến mức í đc đâu.. nhưng mà nghe ng ta nói thì là nhà e ở chỗ đất đẹp nhứt nhà máy đếy ạ.. trung tâm nhà máy (quay compa thì đúng là trung tâm ná.. ) ..gần chợ.. gần trường học.. nằm ở lưng chừng dốc (ko phải mấy con dốc kia đâu ) ..đất đai cao ráo..<br /><br />..tả thì là đường thênh thang rùi ná.. mà lại là đoạn đg đẹp nhứt, rộng nhứt.. hữu thì dựa núi (thực ra là đồi thui.. nhưng mà nó cũng to to cao cao.. nên gọi thế cho nó oai.. hehe..) ..trước mắt thì là 1 cái ao.. còn sau lưng thì tất nhiên là nhà hàng xóm ùi..<br /><br />Vây quanh nhà thì là vượn tược.. cây cối xanh tốt.. đủ các thể loại cây ăn quả.. ngày xưa nhìu quả lắm í.. nhưng mà đến luk e chuyển đi thì hình như bọn cây í nhớ e hay sao í.. hình như là ko còn ra hoa kết trái nữa..<br /><br />Cồng vào nhà thì nổi bật cực kì lun ná.. 1 bên thì 1 cây mít cổ thụ.. (..hề hề.. tuổi đời bằng e mà) ..dưới gốc thì là 1 khóm trúc.. bên kia thì 1 cây ổi và 1 cây xoài mini.. keke.. đấy.. chửa đi vào mà đã thấy toàn cây ăn quả ùi đếy.. (đây chính là chỗ e mơ tới nè.. hehe..)<br /><br />À mà đến ngay cả cái cổng nhà e cũng mô phỏng theo 1 con dốc nhá.. hehe.. ngoài đường dốc.. về đến nhà vẫn cứ dốc típ..<br /><br />Nhà e thì kiến trúc chả có j đặc biệt lắm.. nên e chả kể.. e chỉ kể cảnh vật xung quanh thui.. hehe..<br /><br />Đứng từ tầng 2 nhà e ná.. nhìn ra phía xa xa là 1 dãy núi hùng vĩ ná.. hôm nào mà trời quang mây tạnh.. trg xanh hem sương mù.. thì có khi còn nhìn rõ cả ng đi trên í nữa đếy.. ..khổ nỗi đấy là chỗ tập bắn của Sư đoàn 316.. nên chả có ma nào dám vác xác lên đếy cả.. hề hề.. có ngày chết oan chứ chả..<br /><br />Mà nhắc đến TQg thì chắc ai cũng nghĩ đến sông Lô í nhờ..<br /><br />Theo như cảm giác của ng miền núi thì con sông í xa nhà e lắm í.. tận 2km lận.. còn theo như ng đồng bằng.. mà nhứt là dân HN í.. thì chỉ có 2km thui.. hehe..<br /><br />Bờ con sông í thỉnh thoảng cũng có những bãi đá nhô ra.. đẹp phết.. cũng có kỉu nước vỗ rì rào ná.. ..ra đấy ngồi thì mát mà thik cực í.. nhưng mà để ra đc đấy thì cũng gian nan vất vả phết.. ngày xửa ngày xưa e đã từng phải cực kì chật vật mới leo trèo ra ngoài í đc.. rồi sau đó lại chật vật leo vào.. mà thực ra là leo xuống rùi leo lên í.. ..luk í mà rơi xuống thì chỉ có nước toi mạng thui.. hehe.. cũng may là giờ e còn đc ngồi ở đây mà kể.. hèhè..<br /><br />Đi xa ra khỏi nhà e thêm vài km nữa.. thì đến một khu dân cực nghèo.. (ngày xưa thế.. còn bi jờ thì e ko rõ.. ) ..cảnh vật ở đấy cũng đẹp lắm í.. hêhê.. cánh đồng ngô rộng bát ngát.. tuyệt đẹp với những hoa ngô.. rồi cả những dãy núi đá.. những con suối róc rách.. còn có cả những cái lò gạch nghi ngút khói.. hèhè.. giờ e cũng ko thể nhớ hết nổi nữa.. ko còn tưởng tượng ra đc nữa.. đã lâu lắm rùi e ko về.. mà ra đây thì lại càng lâu.. có khi phải 7, 8 năm rùi í..<br /><br />hôm trc papa ra đấy.. có chụp vài kỉu ảnh.. nên cũng mường tượng ra đc chút ít..<br /><br />Thôi.. kể in ít thôi.. xì tóp ở đây..<br /><br /><h2>Outro..</h2><br /><br />Nói tóm lại là.. khu nhà e ở í.. đc bao bọc bởi hàng loạt những dãy núi đá.. khá giống với lòng chảo.. cảnh rứt là đẹp (đấy là đối với e ná ) ..đứng đâu nhìn cũng thấy núi.. khí hậu thì mát mẻ.. nhìu cây (e iu cây mà.. hehe..)<br /><br />E thik nhất là cái cảm giác đc hứng gió mỗi đêm.. khi mà e đứng trên sân thượng nhà e í.. mọi thứ lung linh cực kì.. hehe.. nhưng giờ thì hết cơ hội đc thế ùi..<br /><br />Nói chung là.. nơi đâu gắn với tuổi thơ mình thì thường rất rất đẹp.. và mình rất iêu mến.. hehe.. nên là e iêu TQg nhà e nhứt.. HN cũng đẹp nhưng chỉ nhì thui.. làm sao mà HN lại có thể thân thương như nơi mà e đã e ra đc..<br /><br />E vừa vô Google tìm thử xem có cái ảnh nào về Z129 hem.. để minh họa cho nó thêm phần sinh động.. nhưng mà chả thấy j.. có vẻ như nơi ấy còn quá xa xôi hẻo lánh với mọi ng í nhở.. để hum nào e vìa.. rùi chụp vài tấm.. haizzz..<br /><br />***<br /><br /><em>Bài viết của em gái tôi, tôi rất thích :)</em><div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-6488592696056228235?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-1255005343458167972009-06-05T00:24:00.001+04:002009-06-05T00:29:46.667+04:00Vì sao lúc ô tô chuyển động ta thấy các nan hoa của vành xe chuyển động lúc ngược lúc xuôi?Tình cờ trong lúc tìm 1 câu trả lời thì thấy <a href="http://vn.answers.yahoo.com/question/index?qid=20071226191310AAErXsh" rel="nofollow" target="_blank">1 câu hỏi khác</a> trên Yahoo! Hỏi & Đáp khá thú vị nên post lại vào Hỗn tạp:<br /><br /><b>Hỏi:</b><br />Vì sao lúc ôtô chuyển động ta thấy các nan hoa của vành xe chuyển động lúc ngược lúc xuôi?<br /><br /><b>Trả lời (có sửa đi đôi chút cho rõ ràng):</b><br />Nguyên nhân không phải là do ảo giác của mắt, mà là do mắt ta cảm nhận được 24 hình mỗi giây, đó cũng là số lần chụp của các máy quay phim chụp hình.<br /><br />Khi xe hơi bắt đầu chạy (còn rất chậm), bạn thấy bánh xe chuyển động tới bình thường, vì khi đó thời gian để 1 nan hoa của bánh xe dịch chuyển tới vị trí của nan hoa phía trước nó hãy còn lớn hơn hơn 1/24 giây.<br /><br />Khi xe chạy nhanh hơn, sao cho một nan hoa dịch chuyển được một quảng đường đúng bằng khoảng cách giữa các nan hoa trong 1/24 giây thì: khi máy quay chụp các hình liên tiếp (hay mắt nhận các hình ảnh liên tiếp), máy sẽ chụp được các hình đúng vào thời điểm mỗi nan hoa của bánh xe dịch chuyển đến đúng vị trí của cái nan hoa trước nó (và giống hệt nó), làm cho ta thấy dường như bánh xe không quay, trong lúc xe vẫn chuyển động so với cây cối hai bên đường.<br /><br />Còn vì sao thấy bánh xe quay lui? Đó là khi, trong khoảng thời gian bằng 1/24 giây mỗi nan hoa của bánh xe dịch chuyển được một quảng đường (trên cung tròn) <i>gần bằng</i> 2 lần khoảng cách giữa các nan hoa. Như vậy, trên 2 hình chụp liên tiếp ta thấy dường như vị trí của các nan hoa không nhích về phía trước, mà là về phía ngược lại.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-125500534345816797?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-34794950437242957582009-06-01T00:11:00.000+04:002009-06-01T00:11:04.278+04:00Có đôi mắt dõi theo bạnCó một đôi mắt, dõi theo bạn từng ngày. Có một đôi tai, luôn lắng nghe từng lời bạn nói. Có đôi bàn tay, hăm hở làm theo bạn...<br /><br />Và có cậu bé đáng yêu, mơ một ngày nào đó sẽ là người giống bạn.<br /><br />Bạn đã là thần tượng của chú bé đáng yêu.<br /><br />Bé vẫn luôn tin tưởng, bạn là người thông minh nhất, không một nỗi nghi ngờ. Bé đặt trọn niềm tin, lắng nghe điều bạn nói, dõi theo điều bạn làm.<br /><br />Và cậu bé sẽ nói, và cậu bé sẽ làm, như cách bạn từng làm.<br /><br />Có một cậu bé, với đôi mắt tinh anh, tin rằng bạn luôn đúng, và dõi theo bạn từng ngày. Bạn đang là gương sáng, qua những gì bạn làm.<br /><br />Cậu bé sẽ dõi theo, để lớn lên giống bạn.<br /><br />- Khuyết danh<br /><br />***<br /><br />Một bài viết hay trích từ <a href="http://blog.ishopvietnam.com/2009/05/co-oi-mat-doi-theo-ban.html" rel="nofollow" target="_blank">blog Thư quán</a>.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-3479495043724295758?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-28692342492639245012009-05-21T22:12:00.000+04:002009-05-21T22:12:06.786+04:00Chuyện giữa Sài GònMột câu chuyện có thật, cảm động. Cuộc đời còn nhiều người bất hạnh, và mỗi người đừng nên thờ ơ trước mỗi bất hạnh đó.<br /><br />Câu chuyện được kể lại <a href="http://vn.myblog.yahoo.com/n_xuanthanh/article?new=1&mid=158" rel="nofollow" target="_blank">từ đây</a>: "Chuyện giữa Sài Gòn".<br /><br />Tối, nó chở bạn gái dạo vòng vòng đường phố Sài Gòn, trời hôm nay khá mát mẻ vì mới sau một trận mưa tuy nhỏ nhưng đủ để làm ẩm ướt quần áo. Đi đến Nguyễn Trãi, khu vực buôn bán các mặt hàng sầm uất tại Quận 5, nó chạy chầm chậm để vừa có thể ngắm nhìn các cửa hàng với ánh đèn sáng lóa, với nhiều nhãn hiệu quần áo thời trang nổi tiếng, vừa có thể trò chuyện với đứa bạn gái đang ngồi sau lưng. Gần đến đoạn vòng xoay Phù Đổng, nó chợt thấy một thằng nhỏ, gọi là nhỏ vậy chứ thật ra thằng ấy nhìn có vẻ cũng đã hơn 20 tuổi, thằng bé đang đứng nói chuyện gì đó với một ông bảo vệ tại cửa hàng, điệu bộ khá lễ phép, tiếp đến ông bảo vệ xua tay, và thằng nhỏ quay đi. Điều khiến nó thấy là lạ với thằng nhỏ là trông nó khá ốm, người nó mặc chiếc áo thun có tay dài qua cùi chỏ, vai đeo một chiếc ba lô lép xẹp, và gương mặt nó thì bị hóp lại ở hai bên gò má, phần cánh tay lộ ra khỏi áo thì tố cáo rằng nó rất ốm, vừa quay mặt ra thì nó ngồi xuống ở một bãi rác, đến đó thì xe của nó cũng đã đi qua, nhưng nó vẫn cố quan sát xem thằng nhỏ ấy sẽ làm gì. Qua kính chiếu hậu, nó thấy thằng nhỏ thọc tay vào một bao ni lông đựng rác, lôi ra một hột vịt lộn người ta đã ăn hết, chậm rãi nó dùng tay móc phần thừa cho vào miệng, thấy cảnh đó nó thật sự sốc. Ngay lập tức nó đem toàn bộ những gì nó đã quan sát được kể ngay cho bạn gái nó, và dường như hiệu ứng sốc đã bị lây ngay sang bạn nó.<br /><br />2 đứa nó cứ hỏi nhau những câu hỏi mà chắc chắn chả đứa nào trả lời được, nào là tại sao thằng nhỏ lại đi lang thang với bộ dạng như thế, nó đã nói gì với ông bảo vệ để khi xong nó lại quay sang móc rác ra ăn… Chỉ có một điều mà 2 đứa chắc chắn là thằng nhỏ hiện đang rất đói, và mất khoảng 10 giây suy nghĩ, nó quay xe lại – khi đó đã đến KS New World, nó bảo bạn gái nó lôi dùm trong túi ra 10 ngàn VNĐ để đưa cho thằng nhỏ đó. Trở lại đường Nguyễn Trãi, nó dáo dác tìm và cuối cùng cũng thấy được thằng nhỏ đang dựa một thùng rác đặt dọc trên đường đi, chính xác hơn thì nó vừa ôm bụng vừa tì lên thùng rác, mặt nhăn lại, tiếp đến rồi chậm rãi, nó tiếp tục mở thùng rác và lôi ra một bịch nước. Tức tốc, nó bật đèn xi nhan để xin đường quay ngoắt xe ngay trước mặt, thằng nhỏ nhìn lên thấy có 2 đứa đậu xe ngay thùng rác thì có vẻ nó chột dạ, đóng ngay nắp thùng rác lại và định rảo bước đi. Ngay lập tức nhỏ bạn ngồi sau lưng nó chìa ra tờ tiền 10 ngàn được gấp đôi ngay trước mặt và bảo “em cầm lấy mua gì ăn đi”, cử chỉ đó làm thằng nhỏ có vẻ hoảng sợ, nó đưa ánh mắt nghi hoặc nhìn 2 đứa suốt, đồng thời một số người trên đường cũng nhìn 2 đứa nó như thể chúng nó đang giở trò gì với thằng nhóc, còn thằng nhỏ thì “đứng hình” có đến hơn 5 giây đồng hồ, phải đến lần nhắc lại thứ 3, nó mới dám chìa tay ra nhận tờ tiền, đồng thời làm 2 đứa nó bất ngờ bằng một hành động rất lễ phép – khoanh 2 tay lại và cúi gập người xuống cảm ơn (như trong phim Hàn Quốc hay chiếu, có điều trong phim họ không khoanh tay), thằng nhỏ lặp lại hành động đó 2 lần làm 2 đứa nó rất áy náy, nên nó quyết định đưa xong thì rồ ga để đánh xe đi ngay, riêng bạn gái nó thì vẫn ngoái lại nhìn xem thằng nhỏ sẽ làm gì, và hình ảnh cuối cùng về thằng nhỏ mà bạn gái nó thấy được là có một ông ngồi bên đường đã gọi thằng nhỏ lại hỏi chuyện khi nó vừa quay đi, và nó tiếp chuyện ông với 2 tay đang khoanh lại rất lễ phép.<br /><br />Có lẽ 2 đứa nó sẽ chẳng bao giờ trả lời được câu hỏi mà tụi nó đã đặt ra, cũng như biết chính xác tại sao thằng nhỏ đó lại đi bới rác ăn như vậy, song hành động đó đã làm tụi nó phần nào bớt cảm thấy áy náy khi thấy 1 thằng bé lại đi lục thùng rác để ăn giữa một con đường phồn hoa tấp nập như thế.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-2869234249263924501?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-42178604364074123852009-05-06T17:48:00.005+04:002009-05-07T11:51:42.661+04:00Chèn thêm Copyright vào cuối Feed trong BloggerFeed trong Blogger tuy không được <a href="http://hontap.blogspot.com/2009/04/tuy-bien-cach-hien-thi-feed-trong.html">tùy biến 1 cách thoải mái như ở trong WordPress</a>, nhưng chúng ta vẫn có thể làm cho nó tốt hơn so với mặc định. Bài viết này sẽ trình bày cách thêm 1 (hoặc nhiều) dòng có dạng "copyright" vào cuối Feed trong Blogger.<br /><br />Ở đây tôi dùng chữ "copyright" do người ta thường chèn các thông tin dạng này vào cuối feed. Nó hoàn toàn không phải là 1 sự bắt buộc, và tất nhiên bạn có thể chèn các link quảng cáo (refferal) của mình, hay các lời chúc, hoặc hình ảnh, ... <br /><br />Có 2 cách để thực hiện điều này:<br /><br /><h3>Cách 1: Sử dụng chính Blogger</h3><br />Cách này chỉ đơn giản là dùng các thiết lập có sẵn của Blogger để làm. Để thực hiện, hãy vào <b>DashBoard -> Settings -> Site Feed</b>.<br /><br />Bạn sẽ thấy 1 ô <b>Post Feed Footer</b>, đó chính là nơi bạn có thể chèn thêm 1 số dòng chữ tùy ý vào cuối Feed. Nội dung của phần này có thể chứa các ký tự HTML, do đó, bạn có thể chèn các link hay hình ảnh tùy ý.<br /><br />VD đối với Hỗn tạp Blog tôi chèn 1 đoạn như sau:<br /><br /><pre><code class="html"><br /><p>Bài viết tại <a href="http://hontap.blogspot.com/">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.<p></code></pre><br /><h3>Cách 2: Dùng FeedBurner</h3><br />Nếu bạn sử dụng <a href="http://feedburner.google.com/" rel="nofollow" target="_blank">FeedBurner</a> để gửi feed, bạn có thể tận dụng công cụ này để thêm vào 1 đoạn cuối Feed.<br /><br />Trong FeedBurner, bạn hãy vào <b>Tab Optimize</b> và chọn <b>Summary Burner</b> ở cuối menu bên trái. Sau đó nhấn vào <b>Active</b> nếu bạn chưa kích hoạt dịch vụ này.<br /><br />Sau khi kích hoạt, bạn chỉ cần điền phần nội dung sẽ hiển thị ở cuối feed trong ô <b>Teaser</b>. Lưu ý là ở đây không chấp nhận HTML nên bạn sẽ không thể ghi các link hay hình ảnh ở đó được.<br /><br />Ngoài ra, bạn cũng nên chú ý thêm ô <b>Maximum Length</b> ở bên trên, nó quy định số kí tự trong mỗi bài viết sẽ được gửi đi.<br /><br />Hai cách trên hoàn toàn không "đụng chạm" đến nhau, có nghĩa là bạn hoàn toàn có thể sử dụng đồng thời cả 2, hoặc lựa chọn 1 trong 2 cái tùy ý mình. Cách 1 theo tôi nghĩ là đơn giản hơn và cho phép HTML nên thoải mái hơn trong việc bổ xung nội dung, đồng thời cũng có sẵn trong Blogger nên thao tác thuận tiện. Hiện giờ tôi cũng đang dùng cách này đối với Hỗn tạp.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-4217860436407412385?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-44078666847030016242009-04-28T00:46:00.002+04:002009-04-28T00:52:38.019+04:00Nghịch chút với biến trong bash shellTrong Linux thì bash shell có thể coi như 1 công cụ lập trình nhỏ, dùng để xử lí nhiều thao tác tự động. Nắm vững cách sử dụng cách lệnh cũng như lập trình với bash shell, chúng ta có thể làm được nhiều việc mà nếu không có chúng sẽ rất khó khăn.<br /><br />Trong lúc tìm 1 script nhỏ để đổi tên hàng loạt file, tôi có tìm được tới <a href="http://linux.byexamples.com/archives/135/rename-multiple-files/" rel="nofollow" target="_blank">bài viết này</a>. Ở đây có 2 điểm nhỏ khi xử lí biến trong bash shell khá thú vị, đó là:<br /><br /><span style="font-size: large;">1.</span> Nếu có 1 biến $f, thì biến ${f%.txt} sẽ tìm kiếm xâu ".txt" ở cuối biến đó và xóa nó đi.<br /><br />VD (lấy luôn từ link trên):<br /><div class="code">f=new-ham.txt # define $f as 'new-ham.txt'<br />echo ${f%.txt} # display 'new-ham'</div><br /><span style="font-size: large;">2.</span> Cũng tương tự như trên, nhưng thay vì tìm kiếm 1 xâu ở cuối của biến, biểu thức ${f#new-} sẽ tìm kiếm xâu "new-" ở đầu biến.<br /><br />Với biến $f được khai báo như ở trên thì:<br /><div class="code">echo ${f#new-} # display 'ham.txt'</div><br />Tôi ghi chú lại ở đây để dễ nhớ, sau này còn tra cứu :).<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-4407866684703001624?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-24170896153712965432009-04-23T16:11:00.003+04:002009-04-23T16:19:17.400+04:00Tùy biến cách hiển thị feed trong WordPressWordPress cung cấp cho chúng ta 2 cách hiển thị feed là hiển thị toàn bộ hoặc 1 phần bài viết trong feed (<b>Full Feed</b> và <b>Summary Feed</b>). Nếu hiển thị toàn bộ bài viết trong feed thì tất nhiên sẽ giúp người đọc dễ dàng hơn trong việc theo dõi bài viết, nhưng nó cũng có 2 điểm bất cập sau:<br /><br />- Một là người đọc sẽ ít ghé thăm trang web của bạn hơn. Hiển nhiên vì nội dung đã được truyền tải đầy đủ rồi. Người ta sẽ chỉ vào nếu như họ muốn trao đổi qua comment trên đó, hoặc khi có vấn đề gì cần hỏi. Kinh nghiệm của tôi cho thấy là số lượng này rất ít, và thường là những bạn bè, hay khách cực kì thân thuộc với website mới ghé vào kiểu này.<br /><br />- Hai là dễ bị ăn cắp bài viết. Nếu bạn cung cấp Full Feed thì ăn cắp bài viết dễ dàng lắm, hoặc là đăng kí nhận feed qua email của tài khoản trong Blogger để bài viết được tự động gửi lên Blogger, hoặc là dùng các plugin đọc Feed rồi chuyển nó thành bài viết trong WordPress, ...<br /><br />Cho nên tôi thấy ít khi người ta để dạng Full Feed "nguyên trạng" mà thường thêm 1 số thông tin kèm theo ở cuối bài viết như "Copyright by ... " và kèm thêm vài link quảng cáo của chính họ.<br /><br />Còn đối với dạng Summary Feed thì nội dung truyền tải sẽ khá ngắn gọn, đối với WordPress mặc định là 55 từ. Nội dung bài viết sẽ không chứa các kí tự HTML và nhất là hình ảnh, do đó sẽ làm giảm đi sự thu hút của người đọc. Tuy nhiên, nó lại khắc phục được 2 nhược điểm trên của Full Feed.<br /><br />Tóm lại là mỗi kiểu có những điểm mạnh và điểm yếu riêng. Trong 1 lần trao đổi với <a href="http://tip4pc.com/" rel="nofollow" target="_blank">anh nlfb</a>, nhờ những gợi ý đó của anh trong việc theo dõi các feed của các blog nổi tiếng, tôi viết thêm 1 hàm PHP này để tùy biến việc hiển thị feed cho tốt hơn, khắc phục được nhược điểm của 2 loại feed trên. Vốn ban đầu là viết riêng cho <a href="http://www.taiphanmem.org/">TaiPhanMem.org</a> và cho anh nlfb, bây giờ cùng chia sẻ luôn với mọi người.<br /><br /><div class="code"><span style="color: #007700;"><?</span><span style="color: #0000bb;">php<br /></span><span style="color: #ff8000;">/*<br /> * Show WordPress RSS Feed in the beautiful format.<br /> * Copyright (C) Rilwis (rilwis@gmail.com)<br /> */<br /></span><span style="color: #007700;">function </span><span style="color: #0000bb;">insertToFeed</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$content</span><span style="color: #007700;">) {<br /> global </span><span style="color: #0000bb;">$post</span><span style="color: #007700;">;<br /><br /> </span><span style="color: #0000bb;">$category </span><span style="color: #007700;">= </span><span style="color: #0000bb;">get_the_category</span><span style="color: #007700;">();<br /> </span><span style="color: #0000bb;">$category </span><span style="color: #007700;">= </span><span style="color: #0000bb;">$category</span><span style="color: #007700;">[</span><span style="color: #0000bb;">0</span><span style="color: #007700;">];<br /><br /> </span><span style="color: #0000bb;">$catLink </span><span style="color: #007700;">= </span><span style="color: #0000bb;">get_category_link</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$category</span><span style="color: #007700;">-></span><span style="color: #0000bb;">cat_ID</span><span style="color: #007700;">);<br /> </span><span style="color: #0000bb;">$catName </span><span style="color: #007700;">= </span><span style="color: #0000bb;">$category</span><span style="color: #007700;">-></span><span style="color: #0000bb;">cat_name</span><span style="color: #007700;">;<br /><br /> </span><span style="color: #0000bb;">$content </span><span style="color: #007700;">= </span><span style="color: #0000bb;">strip_tags</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$post</span><span style="color: #007700;">-></span><span style="color: #0000bb;">post_content</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'<p><ul><li><img><strong>'</span><span style="color: #007700;">);<br /><br /> </span><span style="color: #0000bb;">$contentWords </span><span style="color: #007700;">= </span><span style="color: #0000bb;">wordwrap</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$content</span><span style="color: #007700;">, </span><span style="color: #0000bb;">1000</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'[rw]'</span><span style="color: #007700;">);<br /> </span><span style="color: #0000bb;">$contentWords </span><span style="color: #007700;">= </span><span style="color: #0000bb;">explode</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'[rw]'</span><span style="color: #007700;">, </span><span style="color: #0000bb;">$contentWords</span><span style="color: #007700;">);<br /><br /> </span><span style="color: #0000bb;">$content </span><span style="color: #007700;">= </span><span style="color: #0000bb;">$contentWords</span><span style="color: #007700;">[</span><span style="color: #0000bb;">0</span><span style="color: #007700;">];<br /><br /> </span><span style="color: #0000bb;">$content </span><span style="color: #007700;">= </span><span style="color: #0000bb;">preg_replace</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'/\[caption(.*?)\]/'</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'<p style="text-align:center" align="center">'</span><span style="color: #007700;">, </span><span style="color: #0000bb;">$content</span><span style="color: #007700;">);<br /><br /> </span><span style="color: #0000bb;">$content </span><span style="color: #007700;">= </span><span style="color: #0000bb;">preg_replace</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'/\[\/caption\]/'</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'</p>'</span><span style="color: #007700;">, </span><span style="color: #0000bb;">$content</span><span style="color: #007700;">);<br /><br /> </span><span style="color: #0000bb;">$pageDom </span><span style="color: #007700;">= new </span><span style="color: #0000bb;">DomDocument</span><span style="color: #007700;">();<br /><br /> </span><span style="color: #0000bb;">$content </span><span style="color: #007700;">= </span><span style="color: #0000bb;">mb_convert_encoding</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$content</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'HTML-ENTITIES'</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'UTF-8'</span><span style="color: #007700;">);<br /> </span><span style="color: #0000bb;">$pageDom</span><span style="color: #007700;">-></span><span style="color: #0000bb;">loadHTML</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$content</span><span style="color: #007700;">);<br /> </span><span style="color: #0000bb;">$content </span><span style="color: #007700;">= </span><span style="color: #0000bb;">$pageDom</span><span style="color: #007700;">-></span><span style="color: #0000bb;">saveXML</span><span style="color: #007700;">();<br /><br /> </span><span style="color: #0000bb;">$content </span><span style="color: #007700;">= </span><span style="color: #0000bb;">$content</span><span style="color: #007700;">.</span><span style="color: #dd0000;">'<p><em><a href="'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">get_permalink</span><span style="color: #007700;">().</span><span style="color: #dd0000;">'">Read more and download</a>. <a href="'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">get_permalink</span><span style="color: #007700;">().</span><span style="color: #dd0000;">'#comments">Comments</a>. Posted in <a href="'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">$catLink</span><span style="color: #007700;">.</span><span style="color: #dd0000;">'">'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">$catName</span><span style="color: #007700;">.</span><span style="color: #dd0000;">'</a>.</em></p><hr /><p><em>Copyright &copy;'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">date</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'Y'</span><span style="color: #007700;">).</span><span style="color: #dd0000;">' <a href="'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">get_bloginfo</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'home'</span><span style="color: #007700;">).</span><span style="color: #dd0000;">'">'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">get_bloginfo</span><span style="color: #007700;">().</span><span style="color: #dd0000;">'</a>.<br/>If you want to get some helps or disscuss, please visit our forum at <a href="http://forum.taiphanmem.org">http://forum.taiphanmem.org</a>.<br/>Thank you for reading our feed.</em></p>'</span><span style="color: #007700;">;<br /><br /> return </span><span style="color: #0000bb;">$content</span><span style="color: #007700;">;<br />}<br /><br /></span><span style="color: #0000bb;">add_filter</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'the_excerpt_rss'</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'insertToFeed'</span><span style="color: #007700;">);<br /></span><span style="color: #0000bb;">add_filter</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'the_content_rss'</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'insertToFeed'</span><span style="color: #007700;">);<br /></span><span style="color: #0000bb;">?></span></div><br />Đoạn code trên bạn chỉ cần paste vào trong file <b>functions.php</b> của theme đang dùng trong WordPress là có thể sử dụng.<br /><br /><h2>Giải thích và tùy biến cách hiển thị trong hàm:</h2><br /><h3>Lấy tên của Category tương ứng với bài viết</h3><br /><div class="code"><span style="color: #0000bb;">$category </span><span style="color: #007700;">= </span><span style="color: #0000bb;">get_the_category</span><span style="color: #007700;">();<br /></span><span style="color: #0000bb;">$category </span><span style="color: #007700;">= </span><span style="color: #0000bb;">$category</span><span style="color: #007700;">[</span><span style="color: #0000bb;">0</span><span style="color: #007700;">];<br /><br /></span><span style="color: #0000bb;">$catLink </span><span style="color: #007700;">= </span><span style="color: #0000bb;">get_category_link</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$category</span><span style="color: #007700;">-></span><span style="color: #0000bb;">cat_ID</span><span style="color: #007700;">);<br /></span><span style="color: #0000bb;">$catName </span><span style="color: #007700;">= </span><span style="color: #0000bb;">$category</span><span style="color: #007700;">-></span><span style="color: #0000bb;">cat_name</span><span style="color: #007700;">;</span><br /></div><br />Đoạn code này dùng để lấy tên của Category tương ứng với bài viết. Ở đây tôi chỉ lấy tên của category đầu tiên. Bạn cũng có thể sửa lại 1 chút bằng cách quét qua toàn bộ mảng <b>$category</b> và lưu tên của chúng thành 1 mảng mới rồi khi nào cần hiển thị thì dùng hàm <b>implode()</b> cũng được.<br /><br /><h3>Loại bỏ các thẻ HTML không cần thiết và rút ngắn nội dung</h3><br />Phần công việc này tương ứng với đoạn code sau đây:<br /><br /><div class="code"><span style="color: #0000bb;">$content </span><span style="color: #007700;">= </span><span style="color: #0000bb;">strip_tags</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$post</span><span style="color: #007700;">-></span><span style="color: #0000bb;">post_content</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'<p><ul><li><img><strong>'</span><span style="color: #007700;">);<br /><br /></span><span style="color: #0000bb;">$contentWords </span><span style="color: #007700;">= </span><span style="color: #0000bb;">wordwrap</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$content</span><span style="color: #007700;">, </span><span style="color: #0000bb;">1000</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'[rw]'</span><span style="color: #007700;">);<br /></span><span style="color: #0000bb;">$contentWords </span><span style="color: #007700;">= </span><span style="color: #0000bb;">explode</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'[rw]'</span><span style="color: #007700;">, </span><span style="color: #0000bb;">$contentWords</span><span style="color: #007700;">);<br /><br /></span><span style="color: #0000bb;">$content </span><span style="color: #007700;">= </span><span style="color: #0000bb;">$contentWords</span><span style="color: #007700;">[</span><span style="color: #0000bb;">0</span><span style="color: #007700;">];<br /><br /></span><span style="color: #0000bb;">$content </span><span style="color: #007700;">= </span><span style="color: #0000bb;">preg_replace</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'/\[caption(.*?)\]/'</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'<p style="text-align:center" align="center">'</span><span style="color: #007700;">, </span><span style="color: #0000bb;">$content</span><span style="color: #007700;">);<br /><br /></span><span style="color: #0000bb;">$content </span><span style="color: #007700;">= </span><span style="color: #0000bb;">preg_replace</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'/\[\/caption\]/'</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'</p>'</span><span style="color: #007700;">, </span><span style="color: #0000bb;">$content</span><span style="color: #007700;">);<br /><br /></span><span style="color: #0000bb;">$pageDom </span><span style="color: #007700;">= new </span><span style="color: #0000bb;">DomDocument</span><span style="color: #007700;">();<br /><br /></span><span style="color: #0000bb;">$content </span><span style="color: #007700;">= </span><span style="color: #0000bb;">mb_convert_encoding</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$content</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'HTML-ENTITIES'</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'UTF-8'</span><span style="color: #007700;">);<br /></span><span style="color: #0000bb;">$pageDom</span><span style="color: #007700;">-></span><span style="color: #0000bb;">loadHTML</span><span style="color: #007700;">(</span><span style="color: #0000bb;">$content</span><span style="color: #007700;">);<br /></span><span style="color: #0000bb;">$content </span><span style="color: #007700;">= </span><span style="color: #0000bb;">$pageDom</span><span style="color: #007700;">-></span><span style="color: #0000bb;">saveXML</span><span style="color: #007700;">();<br /></span></div><br />Như các bạn thấy, tôi dùng hàm <b>striptags</b> để loại bỏ các thẻ HTML và giữ lại các thẻ chính như <i>p</i> (để các đoạn văn được phân tách rõ ràng), <i>img</i> (giữ lại hình ảnh), <i>strong, ul, li</i>. Mục đích của chỗ này là để cho nội dung được rút ngắn bớt mà vẫn giữ được 1 vài định dạng cơ bản. Bạn cũng có thể thêm hoặc bớt 1 số thẻ HTML nếu muốn tại chỗ này.<br /><br />Sau đó, hàm <b>wordwrap</b> được dùng để tách nội dung ra theo số lượng kí tự cho sẵn. Ở đây tôi lấy là 1000 kí tự. Lưu ý là con số 1000 này không phải là chính xác 100%, do hàm wordwrap sẽ cắt đến hết 1 từ, không để xảy ra tình trạng 1 từ bị chẻ đôi (dùng cách này không phải bận tâm về việc 1 kí tự Unicode bị "chặt giữa"), và cũng do trong nội dung của chúng ta còn sót lại 1 số thẻ HTML. Tuy nhiên, có thể áng chừng như vậy. Bạn có thể sửa nó để tăng, giảm số lượng kí tự thể hiện, tốt nhất là bạn nên thử xem số lượng bao nhiêu thì phù hợp với blog của bạn.<br /><br />2 dòng tiếp theo là dùng để loại cặp <b>shortcode</b> trong WordPress dùng để hiển thị hình ảnh <i>[caption ...]...[/caption]</i>. Nếu như bạn dùng các shortcode khác thì nên bổ xung nó ở đây.<br /><br />Và đoạn cuối cùng là để trả lại định dạng XHTML được định dạng đúng. Nguyên nhân phải làm chỗ này là có thể trong quá trình cắt bằng wordwrap, 1 số thẻ HTML bị cắt vào đúng giữa. Việc dùng hàm <b>saveXML()</b> sẽ giúp chúng ta đóng các thẻ này lại 1 cách hợp lí.<br /><br /><h3>Hiển thị Feed</h3><br />Sau khi đã làm xong các bước trên, Feed của chúng ta đã khá hoàn thiện, bước dưới đây là để hiển thị nó:<br /><br /><div class="code">$content <span style="color: #007700;">= </span><span style="color: #0000bb;">$content</span><span style="color: #007700;">.</span><span style="color: #dd0000;">'<p><em><a href="'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">get_permalink</span><span style="color: #007700;">().</span><span style="color: #dd0000;">'">Read more and download</a>. <a href="'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">get_permalink</span><span style="color: #007700;">().</span><span style="color: #dd0000;">'#comments">Comments</a>. Posted in <a href="'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">$catLink</span><span style="color: #007700;">.</span><span style="color: #dd0000;">'">'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">$catName</span><span style="color: #007700;">.</span><span style="color: #dd0000;">'</a>.</em></p><hr /><p><em>Copyright &copy;'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">date</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'Y'</span><span style="color: #007700;">).</span><span style="color: #dd0000;">' <a href="'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">get_bloginfo</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'home'</span><span style="color: #007700;">).</span><span style="color: #dd0000;">'">'</span><span style="color: #007700;">.</span><span style="color: #0000bb;">get_bloginfo</span><span style="color: #007700;">().</span><span style="color: #dd0000;">'</a>.<br/>If you want to get some helps or disscuss, please visit our forum at <a href="http://forum.taiphanmem.org">http://forum.taiphanmem.org</a>.<br/>Thank you for reading our feed.</em></p>'</span><span style="color: #007700;">;<br /><br />return </span><span style="color: #0000bb;">$content</span>;</div><br />Trong phần này, ngoài những gì đã được làm ở các bước trên, bạn chú ý thêm về cách lấy link của bài viết thông qua hàm <b>get_permalink()</b>, lấy thông tin của blog thông qua <b>get_bloginfo()</b>. Những thứ này tôi dùng để tạo link đến bài viết (dạng như Read More trong feed) và ghi 1 số thông tin về Copyright. Bạn nên sửa lại cho phù hợp với blog của mình.<br /><br />Tất nhiên là bạn có thể chèn thêm bất kì các đoạn mã HTML nào vào chỗ này, bao gồm cả các đoạn mã quảng cáo của Google Adsense (hay bất kì dịch vụ nào nữa). <br /><br /><h3>Tích hợp vào các hàm về feed của WordPress</h3><br />Sau khi đã làm xong các bước trên, việc tích hợp vào các hàm feed của WordPress chỉ đơn giản là thực hiện 2 lệnh dưới:<br /><br /><div class="code"><span style="color: #0000bb;">add_filter</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'the_excerpt_rss'</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'insertToFeed'</span><span style="color: #007700;">);<br /></span><span style="color: #0000bb;">add_filter</span><span style="color: #007700;">(</span><span style="color: #dd0000;">'the_content_rss'</span><span style="color: #007700;">, </span><span style="color: #dd0000;">'insertToFeed'</span><span style="color: #007700;">);</span></div><br />Ở đây tôi add_filter cho cả 2 hàm, tương ứng với 2 lựa chọn hiển thị Full Feed và Summary Feed của WordPress, có nghĩa là dù bạn chọn là cái gì cũng không ảnh hưởng tới Feed, tất cả đã được hàm này làm hộ cho rồi.<br /><br />Kết quả của việc làm này các bạn có thể xem qua <a href="http://feeds2.feedburner.com/taiphanmem" rel="nofollow" target="_blank">Feed của TaiPhanMem.org</a>. Chúc các bạn có những kiểu feed đẹp và hiệu quả.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-2417089615371296543?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-23659097965334283012009-04-15T21:34:00.001+04:002009-04-15T21:36:12.037+04:00Love Bridge 9 - Tháng 4 - Khúc giao mùa...Mùa hè đã về theo tiếng gọi của mùa xuân, và Love Bridge bọn tôi cũng đã hoàn thành chương trình cho tháng 4 này, 1 chương trình chào đón những ấm áp, những niềm vui của 1 khoảnh khắc thời gian mới.<br /><br />Trong chương trình lần này, có 2 sự đặc biệt: đầu tiên là khách mời của chương trình - 1 bạn đã từng học tiếng Nga trong năm dự bị, nay đã chuyển lên Moscow, nhưng vẫn luôn gắn bó với Tambov; thứ nữa là kỷ niệm Love Bridge tròn 1 tuổi.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://i253.photobucket.com/albums/hh54/Zel0983/LB/6-1.jpg" imageanchor="1" rel="nofollow" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" height="420" src="http://i253.photobucket.com/albums/hh54/Zel0983/LB/6-1.jpg" width="420" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://i253.photobucket.com/albums/hh54/Zel0983/LB/hong2.jpg" imageanchor="1" rel="nofollow" style="margin-left: 1em; margin-right: 1em;" target="_blank"><img border="0" height="262" src="http://i253.photobucket.com/albums/hh54/Zel0983/LB/hong2.jpg" width="420" /></a></div><br />Mời mọi người cùng thưởng thức những âm điệu của khúc giao mùa tháng 4:<br /><br /><b>Link download </b> <br /><br /><a href="http://www.mediafire.com/?tbies1xzmnv" rel="nofollow" target="_blank">http://www.mediafire.com/?tbies1xzmnv</a><br /><br /><b>Link nghe trực tiếp</b><br /><br /><a href="http://www.esnips.com/doc/cee6e166-c903-4f46-b45c-787295484bf3/Love-Bridge-9---Thang-4---Khuc-giao-mua" rel="nofollow" target="_blank">http://www.esnips.com/doc/cee6e166-c903-4f46-b45c-787295484bf3/Love-Bridge-9---Thang-4---Khuc-giao-mua</a><br /><br /><b>List các bài hát trong chương trình:</b><br /><br />01. Tháng Tư về<br />02. Bay đến ước mơ<br />03. Ta đã yêu trong mùa gió<br />04. Trái tim thật thà<br /><br />* Nhịp đập âm thanh : Dirt room ( Blue October )<br /><br />05. Tôi là tôi 2<br />06. Nếu em không phải là giấc mơ<br />07. Буду<br />08. Dạ khúc<br /><br />* Khách mời Love Bridge : Hồng - tenbigstar1209 ( from Moscow )<br /><br />09. Tôi mơ<br />10. Mùa đông đã qua<br />11. Hơi ấm ngày xưa<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-2365909796533428301?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-19044920546998947702009-04-12T02:00:00.002+04:002009-04-12T02:04:04.263+04:00Một vài trao đổi về Page RankLà 1 webmaster, có lẽ không ai còn lạ gì với chỉ số Page Rank (PR) của Google dùng để đánh giá 1 trang web. Chỉ số này được nói đến nhiều bởi uy tín của nó trong nhiều chỉ số khác như Alexa Rank, Compete Rank, Link Popularity, ... Tuy vậy, 1 điều bất cập về PR là Google không đưa ra 1 lịch trình cụ thể về thời gian để cập nhật, vì thế mỗi khi có đợt update là các webmaster lại truyền tin cho nhau để xem website của mình thế nào.<br /><br />Vào đầu tháng 4 vừa rồi, Google cũng đã cập nhật PR. Tôi và <a href="http://tip4pc.com/" rel="nofollow" target="_blank">anh nlfb</a> cũng có 1 buổi nói chuyện về lần cập nhật này, và có 1 số điểm muốn chia sẻ với mọi người.<br /><br />Như mọi người đã biết, trong nhiều tài liệu về SEO thì PR được nói đến như 1 chỉ số dựa trên các link liên kết đến trang web được xét. Chi tiết về cách tính toán chỉ số này, các bạn có thể đọc thêm ở <a href="http://hontap.info/2008/03/kien-thuc-co-ban-ve-google-pagerank.html">1 bài viết trước</a> trong Hỗn tạp. Nói nôm na là bạn càng có nhiều link liên kết đến trang web của mình thì chỉ số PR của trang web đó càng cao. Ở đây chú ý 1 điểm là <i>PR được tính theo từng trang web (web page) trong 1 website, chứ không tính theo domain</i> như Alexa Rank (khá nhiều người bỏ qua điểm này khi nói về PR của 1 website, vì rằng có thể trang homepage của bạn có PR 2, nhưng 1 trang nào đó trong website lại có thể có PR 4 chẳng hạn).<br /><br />Thế nhưng trong đợt cập nhật PR vừa rồi, chúng tôi (gồm tôi và anh nlfb) để ý thấy 1 số blog của người Việt được tăng PR, còn 1 số thì giữ nguyên (ở đây tôi nói PR của website là ám chỉ PR của homepage, các đoạn sau cũng sẽ vậy). Liệu có phải là các link liên kết quyết định không?<br /><br />Nếu bạn theo dõi 1 website, VD như Hỗn tạp, thì bạn sẽ thấy thỉnh thoảng lắm mới có thêm 1 liên kết bạn bè. Dù rằng thời gian đầu có thể rất nhiều, nhưng sau đó, rất ít khi được cập nhật. Tôi nghĩ rằng các blog khác cũng vậy. Khi bạn dạo qua các blog trong danh sách Friends bên phải của tôi, bạn sẽ thấy rằng phần lớn chúng tôi liên kết thành vòng tròn, nghĩa là bạn sẽ bắt gặp các gương mặt quen thuộc ở hầu hết các blog đó, vẫn cứ là blog này, blog kia, ... Và vì phần lớn các blog này đều là các blog cá nhân, mang ít nhiều dấu ấn của tác giả, nên tôi nghĩ chuyện trích dẫn từ các blog, diễn đàn, website khác tới các bài viết trên từng blog là không nhiều. Bạn có thể thử search Google để thấy điều đó. Như thế sẽ dẫn tới 1 khả năng là lượng link đến 1 blog khó mở rộng được, hoặc ít ra là hạn chế trong chừng mực nào đó.<br /><br />Vậy thì tại sao 1 số blog lại được tăng PR, còn 1 số thì không?<br /><br />Anh nlfb có đưa ra 1 ý kiến lí giải cho trường hợp này, rằng các blog này đều có giới hạn PR của nó. Nghĩa là 1 blog có thể lên PR 4 trong 1 năm, lên PR 5 trong 3 năm, nhưng sau đó sẽ không thể lên tiếp lên được PR 6. Bạn (cũng như tôi) sẽ thắc mắc rằng điều này vô lí, vì như vậy thì trước khi sinh ra blog, ta cũng đã biết được giới hạn mình sẽ bị kìm? Hoặc là trong thời gian ta viết blog mà có 1 sự chuyển biến xuất sắc, 1 sự đổi hướng mang tính đột phá thì ta vẫn không được đánh giá cao?<br /><br />Trả lời cho thắc mắc này, chúng ta cùng xem xét tiếp. Thực tế là các website có PR cao từ 8 trở lên rất ít, và chúng thường chiếm 1 lượng traffic khổng lồ, VD như twitter chẳng hạn. Cỡ 1 blog như chúng ta thì khó có thể vươn lên tầm traffic đó. Như thế, ta sẽ thấy rằng dường như có 1 mối liên hệ giữa lượng traffic với PR. Lượng traffic này từ đâu ra? Nó là do người dùng tạo ra. Vậy tại sao người dùng tạo ra traffic đối với trang web này mà lại không tạo ra traffic đối với trang web kia?<br /><br />Bạn hãy đứng ở vị trí của người dùng để trả lời cho câu hỏi đó. Hãy trả lời tại sao bạn muốn vào trang web này mà không vào trang web kia, rằng tại sao bạn lại lưu bookmark của nó hay thích đọc nó 1 cách chi tiết và cẩn thận? Đó là vì bạn đã <b>nhận được 1 cái gì đó</b> từ trang web đó, là vì trang web này đã <b>tạo ra 1 giá trị</b> cần thiết và hữu ích dành cho bạn.<br /><br />Google đủ thông minh để nhận ra điều đó. Google đánh giá website dựa trên việc nó có mang lại nhiều lợi ích cho cộng đồng hay không, PR gần như thể hiện giá trị ấy (link cũng là 1 yếu tố trong việc xét giá trị website, vì nhiều link tương đương với có nhiều website coi website của mình có giá trị).<br /><br />Nếu coi lại 1 lần nữa 1 số blog, có thể chúng ta sẽ nhận ra rằng 1 số blog có phạm vi bài viết khá rộng, ngược lại 1 số blog có phạm vi hẹp theo những chủ đề xác định. Điều này sẽ ảnh hưởng đến lượng người khách truy cập của blog đó. Hiển nhiên rằng nếu bạn yêu thích âm nhạc, bạn sẽ không vào Hỗn tạp, hoặc nếu bạn thích WordPress, bạn sẽ khó lòng vào các blog thủ thuật máy tính, ... Có nghĩa là <i>khi đã xác định được phạm vi của blog, thì các giá trị mà blog đó mang lại cho người dùng sẽ được xác định</i> 1 cách tương ứng. Nói 1 cách thẳng thắn thì <i>nếu đã xác định hướng đi, có nghĩa là chúng ta đã tự bó hẹp</i> chính chúng ta. Tuy vậy, cần phải xem xét 2 khía cạnh thêm, mà theo tôi nghĩ là phạm vi của hướng đi đó và độ sâu của các bài viết (nói 1 cách hình tượng là sự triển khai theo chiều rộng và chiều sâu). Ví như 1 blog về WordPress thì phạm vi khá hẹp (nếu làm nhiều trên WP, bạn sẽ cảm thấy dường như càng ngày càng ít cái để nói, Blogger có lẽ cũng thế), nên nó cần chiều sâu của các bài viết để tạo ra giá trị mới và thu hút người đọc. Hay như 1 blog về phần mềm (như <a href="http://taiphanmem.org/">taiphanmem.org</a> của tôi) thì có phạm vi khá rộng, nên sự chuyên sâu có thể đặt nhẹ hơn. Nhưng dù thế nào đi nữa, chúng ta cũng thấy rằng chúng ta đã bị bó hẹp theo 1 nghĩa đen, và điều đó gián tiếp thu nhỏ lượng người đọc của chúng ta. Bạn hãy cân nhắc điều này khi tạo ra 1 website, hay khi định hướng cho website.<br /><br />Nếu bạn còn mơ hồ về mối liên hệ giữa PR và giá trị của website, bạn hãy coi ví dụ về <a href="http://adobe.com/" rel="nofollow" target="_blank">website của Adobe</a>. Nó đã từng được Google tặng cho PR 10, hiện nay là 9. Và chính vì PR cao như thế, nó đã bị chỉ trích khá nhiều. Nguyên nhân là vì nó không có nội dung! Hãy thử đọc website đó, và trả lời xem rằng nó cung cấp thông tin gì cho bạn. Rất ít, cực ít nếu như không muốn nói là gần như 0 (bản thân tôi dù vào khá nhiều lần, nhưng chưa bao giờ dừng chân để đọc). Đứng về phương diện SEO thì điều này là tối kị, 1 website không có nội dung thì đừng mong gì đến SEO. Thế nhưng điều ngược lại là website của Adobe lại thu hút lượng traffic khổng lồ cùng với chỉ số PR cao chót vót. Đó là vì họ đã tạo ra những sản phầm cần thiết cho người dùng, là Flash Player, là SWF Player, là Adobe AIR hay các sản phẩm đồ họa như Photoshop, ... Hãy nghĩ đến tầm quan trọng của các sản phẩm này khi mà bạn vào 1 trang web và không xem được flash, bạn sẽ làm gì? Flash vẫn là 1 chiếc xương sườn quan trọng của các website. Và vì thế, người dùng cần nó, nó có giá trị, nó cần cho cộng đồng, Google nhận thấy điều đó: PR 9 là điều tất yếu.<br /><br />Nếu lướt web nhiều, bạn sẽ nhận thấy nhiều trang web đơn giản bằng html, nội dung đơn thuần và viết rất lâu rồi, không có các kĩ thuật SEO, nhưng PR lại rất cao, 6 hoặc 7. Có lẽ đó là vì cách lí giải trên, theo giá trị của website.<br /><br />Vậy thì cái gì là thước đo giá trị của 1 website?<br /><br />Trả lời cho câu hỏi này, chúng ta hãy nghĩ về giá trị mà website tạo ra. Giá trị đó cần phải được kiểm chứng bởi người dùng. Bởi vì thế, nên thước đo sẽ là 1 tập hợp các chỉ số nào đó của người dùng mà tôi nghĩ rằng ngay cả Google cũng đang cố gắng để mô phỏng cho hoàn thiện. Nếu bạn theo dõi bằng Google Analytics, bạn sẽ bắt gặp nhiều chỉ số dạng này, như lượng truy cập, thời gian đọc trang, số trang đọc trong website hay lượng bounce rate, ... Tất cả những cái này đều nói lên sự quan tâm của người dùng đối với website. Và nó phần nào ảnh hưởng tới sự quan trọng của website đó. Thuật toán chính xác mà Google dựa vào để tính toán PR có lẽ sẽ không ai biết, trừ họ, nhưng chúng ta có thể phỏng đoán và xác định cho mình những gì cần làm để tạo ra các giá trị hữu ích cho người dùng. Đừng làm các website vô nghĩa trừ phi bạn dành nó cho chính bạn. Hãy nghĩ đến người khác, và đặt mình vào vị trí của họ để hiểu rằng họ cần gì và chúng ta nên làm gì.<br /><br />Hi vọng rằng những ý kiến rút ra từ cuộc trao đổi của 2 anh em chúng tôi sẽ giúp các bạn phần nào trong quá trình SEO cho website. Chúc các bạn luôn có những website và blog tuyệt vời.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-1904492054699894770?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-36066568661890673642009-04-06T21:46:00.002+04:002009-04-06T22:08:22.637+04:00Ghi chép đầu tuầnTranh thủ lúc đợi thằng bạn về ăn cơm, ngồi viết 1 chút cho blog khỏi "rêu phong".<br /><br />*** <br /><br />Dạo này thấy trong người khá mệt mỏi. Có lẽ do thời tiết thay đổi làm nhiều người bị cảm cúm. Mình sụt sịt 2 tuần rồi :(. Tuyết giờ đã tan hết, trời cũng đã nắng lên nhiều. Chỉ là vẫn còn gió nên vẫn lạnh, còn bụi mù nữa. Cũng chẳng mấy chốc mà chớm hè, lúc đó cỏ mọc xanh rờn, hoa nở khắp nơi, cây cối trổ lộc, lại đi hái táo về ăn. Nhanh lắm, một khi đã tới thì chỉ cần vài ba ngày là thay đổi khắp mọi thứ. Rồi cả thời tiết nữa, sẽ nóng gần bằng ở nhà, rồi sẽ lại có những buổi chiều tụ tập dưới chân "ốp" (khu KTX) ngồi tán phét, ...<br /><br />*** <br /><br />Tuần vừa rồi phải đuổi theo thằng bạn học cùng. Nó làm bài nhanh quá, đã gần xong, trong khi mình cứ thong thả. Học với nó cũng có cái hay, không theo không được. Mỗi lần như thế, làm bài xong là cảm giác thoải mái, lâng lâng, không còn phải lo lắng rằng ngày mai mình sẽ làm gì, tính xem lúc nào nộp bài, liệu cứ thế này có kịp không (mà chắc chắn rằng các câu trả lời đều bị "mua chuộc" rồi). Giờ thì cũng đã tạm ổn, chỉ có điều mấy ngày cuối tuần không được nghỉ "dưỡng sức" mà lại thêm sụt sịt.<br /><br />Thằng bạn mình là nó chỉ khoái xem phim rồi ... hết! Nên nó rảnh là nó nghĩ đến học chứ ở đất Tambov này không biết làm gì. Nó không có đam mê lướt web như mình, hay đọc báo cũng không, blog thì càng không. Bên này nó vậy, web, game online và phim (mà muốn có phim thì cần có web để download) là thứ duy nhất khiến người ta giết thời gian nhanh chóng. Chả bù như ở VN, đôi khi tìm lúc rảnh cũng không có. Mấy đứa bạn tôi hồi nọ có nói với tôi là tôi may mắn hơn bọn nó vì còn có sở thích web, còn có thể viết blog, làm web, nghịch linh tinh ... còn bọn nó thì đôi khi ngủ dậy, mở máy tính ra để chơi game (quen tay) vì không còn biết làm gì cho hết ngày.<br /><br />***<br /><br />Vừa mới đọc blog của em gái, thấy nó viết lung ta lung tung mà đọc lại thấy vui :). Cái ngôn ngữ 9x kia mình kịch liệt phản đối dùng, mà sao đọc của nó thấy rất dễ truyền đạt cái sự vui vẻ, phấn khích của nó sang mình. Hay thật, mình thì không làm được chuyện đó, có lẽ tính nó thế, tính mình lại khác. Được cái 2 anh em rất hợp nhau nên dù thế nào thì cũng không thành vấn đề :D<br /><br />***<br /><br />Kết thúc dòng cuối cùng cũng là lúc thằng bạn gõ cửa, trở về từ ... mấy trận bóng đá. Bụng đói quá rồi, "cẩu xực" thôi. Chúc mọi người 1 tuần vui vẻ!<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-3606656866189067364?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-69623578198304518202009-04-03T01:03:00.001+04:002009-04-03T01:04:42.567+04:00StatOwl.com – Công cụ phân tích người dùng InternetNếu là webmaster, chắc hẳn bạn đã từng dùng qua công cụ Google Analytics, cho phép bạn theo dõi các thông số về người dùng duyệt qua website của bạn như các thông tin trình duyệt, hệ điều hành, độ phân giải màn hình, … Thế nhưng bạn chỉ có thể theo dõi được trên 1 website của bạn mà thôi. Bây giờ với trang web <a href="http://statowl.com/" rel="nofollow" target="_blank">http://statowl.com</a> bạn có thể phân tích những số liệu đó của người dùng khắp toàn Internet.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_Mt4qyhflsHY/SdUnJR1WHFI/AAAAAAAAATg/xfF5b_ZpaLs/s1600-h/1.jpg" imageanchor="1" rel="nofollow" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/_Mt4qyhflsHY/SdUnJR1WHFI/AAAAAAAAATg/xfF5b_ZpaLs/s400/1.jpg" /></a></div><br />Trang web này cung cấp các thông tin về người dùng Internet theo các chỉ mục phân loại ở tay trái. Dưới đây chúng ta cùng xem qua 1 số thống kê đáng chú ý:<br /><br /><h3>1.Phân tích về trình duyệt của người sử dụng:</h3><br />Để xem thống kê này, bạn nhấn vào mục Web Browsers bên tay trái rồi chọn Market Share.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_Mt4qyhflsHY/SdUnQSQZPlI/AAAAAAAAATo/TRxq4EbCvVM/s1600-h/2.jpg" imageanchor="1" rel="nofollow" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/_Mt4qyhflsHY/SdUnQSQZPlI/AAAAAAAAATo/TRxq4EbCvVM/s400/2.jpg" /></a></div><br />Bạn có thể chọn loại biểu đồ khác trong menu Chart Type cho phù hợp với sở thích, mặc định là bản đồ dạng nhân bánh (pie chart). Dưới đây là ảnh chụp của biểu đồ trên ở dạng cột 3D:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_Mt4qyhflsHY/SdUnVuwkzfI/AAAAAAAAATw/cH0JasmVOWU/s1600-h/3.jpg" imageanchor="1" rel="nofollow" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/_Mt4qyhflsHY/SdUnVuwkzfI/AAAAAAAAATw/cH0JasmVOWU/s400/3.jpg" /></a></div><br />Ngoài ra, để kết quả thêm khách quan, bạn cũng có thể thay đổi khoảng thời gian thống kê ở menu TimeFrame, có các lựa chọn 3 tháng, 6 tháng, 1 năm hoặc tùy chọn.<br /><br /><h3>2.Thống kê về hệ điều hành của người dùng</h3><br />Bạn chọn mục Operating Systems, sau đó chọn Market Share.<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/_Mt4qyhflsHY/SdUns_7RkqI/AAAAAAAAAT4/OSptP9b9zqM/s1600-h/4.jpg" imageanchor="1" rel="nofollow" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/_Mt4qyhflsHY/SdUns_7RkqI/AAAAAAAAAT4/OSptP9b9zqM/s400/4.jpg" /></a></div><br /><h3>3.Xem độ phân giải màn hình</h3><br />Hãy vào mục System Settings và chọn Screen Resolution:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_Mt4qyhflsHY/SdUnyZDh-fI/AAAAAAAAAUA/wRnl0qjgRrU/s1600-h/5.jpg" imageanchor="1" rel="nofollow" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/_Mt4qyhflsHY/SdUnyZDh-fI/AAAAAAAAAUA/wRnl0qjgRrU/s400/5.jpg" /></a></div><br />Ngoài những thống kê ở trên, bạn còn có thể xem thống kê về version của flash plugin được cài trên trình duyệt, thống kê về tốc độ kết nối của người dùng, thậm chí là cả những cách thức mà người dùng sử dụng Google để tìm kiếm, … Đối với các thống kê này, ngoài phần biểu đồ trực quan, bạn còn có thể xem các bảng dữ liệu chi tiết ở dưới. VD dưới đây là bảng thống kê các bộ máy tìm kiếm được sử dụng nhiều nhất:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_Mt4qyhflsHY/SdUn3GsJzbI/AAAAAAAAAUI/9D9heGv3XEk/s1600-h/6.jpg" imageanchor="1" rel="nofollow" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/_Mt4qyhflsHY/SdUn3GsJzbI/AAAAAAAAAUI/9D9heGv3XEk/s400/6.jpg" /></a></div><br />Hy vọng các thông tin này sẽ hữu ích cho các webmaster trong việc thiết kế web, viết các ứng dụng flash hay tối ưu SEO cho website.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-6962357819830451820?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-89055731105396187952009-03-30T01:31:00.001+04:002009-03-30T01:31:27.339+04:00Giới thiệu cộng đồng WordPress Việt NamMặc dù phát triển đã khá lâu, nhưng bây giờ chúng ta mới thực sự có 1 sân chơi dành riêng cho <a href="http://wordpressvn.net/" rel="nofollow" target="_blank">cộng đồng WordPress Việt Nam</a>. Website và diễn đàn thảo luận về WordPress bằng tiếng Việt này được lập ra bởi bạn <a href="http://blog.link2caro.net/" rel="nofollow" target="_blank">Trần Minh Quân</a> (nick CA RO). Tuy mới ra đời chỉ khoảng 1 tuần trở lại đây, nhưng diễn đàn cũng đã có sự tham gia của 1 số anh tài trong làng WordPress Việt Nam hiện nay, điển hình là <a href="http://onetruebrace.com/" rel="nofollow" target="_blank">QAD</a> và <a href="http://hutek.info/" rel="nofollow" target="_blank">hutek</a>.<br /><br />Hiện nay diễn đàn đang trong giai đoạn khởi đầu và cần sự tham gia của chúng ta. Nếu bạn cảm thấy có năng lực, hoặc nhiệt huyết, bạn có thể đăng kí vào nhóm dịch Codex, nhóm Kỹ thuật hay nhóm Mod điều hành diễn đàn.<br /><br />Tôi cũng mới biết tin này qua <a href="http://hutek.info/" rel="nofollow" target="_blank">blog của bác hutek</a>, và cũng đã tham gia diễn đàn. Hi vọng rằng chúng ta sẽ cùng trao đổi hiệu quả và ngày càng "chuyên nghiệp" hơn trong các vấn đề liên quan đến WordPress.<br /><br />Nếu bạn dùng WordPress, tại sao lại không tham gia nhỉ ;). Hãy nhớ link của nó nhé: <a href="http://wordpressvn.net/" rel="nofollow" target="_blank">http://WordPressVN.net</a>.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-8905573110539618795?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-35449929838812609192009-03-24T22:34:00.003+03:002009-03-26T20:42:17.416+03:00TaiPhanMem.org thay đổi giao diệnTrong những ngày vừa qua, tôi tập trung vào làm lại 1 giao diện mới cho trang web <a href="http://www.taiphanmem.org/">TaiPhanMem.org</a>. Giao diện cũ nhận được khá nhiều ý kiến góp ý là đơn giản quá và không thu hút, hơn nữa cũng đã sử dụng 1 thời gian khá dài rồi nên việc tìm kiếm 1 thiết kế mới lúc này là hợp lí. Đến hôm nay là tròn 10 ngày kể từ khi bắt đầu công việc, giao diện đã hoàn tất và đưa vào sử dụng.<br /><br />Đây là ảnh chụp giao diện mới của <a href="http://www.taiphanmem.org/">TaiPhanMem.org</a>:<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://img201.imageshack.us/img201/4285/514af99bc43d996f2a1aa08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="420" src="http://img201.imageshack.us/img201/4285/514af99bc43d996f2a1aa08.png" style="cursor: move;" width="289" /></a></div><br /><br />Trong giao diện mới này ngoài thiết kế bố cục các trang gồm trang chủ, trang archive (bao gồm category), và trang bài viết được khác đi thì tôi cũng bổ xung thêm chức năng <b>Advanced Search</b>, chức năng <b>Report</b> phần mềm (do là site về phần mềm nên yêu cầu về report link die, crack, ... lúc nào cũng có), hiển thị <b>thumbnail</b> và giới thiệu ngắn gọn về phần mềm, ... Ngoài ra cũng sử dụng thêm 1 số plugin hữu ích khác như <b>Smart Sort</b> (dùng để sắp xếp bài viết trong Category, rất tuyệt!), <b>WP-Cumulus</b> (dùng để làm các tag bay bay), ...<br /><br />Lần làm theme mới này tôi cũng học được khá nhiều điều với WordPress, từ cách thao tác với nội dung bài viết đến việc tạo các query post theo ý mình (những điều này tôi đều nhờ Google cả), và tôi cũng học được thêm nhiều về thiết kế nhờ vào việc theo dõi những trang web hay về thiết kế web. Mỗi phần trên <a href="http://www.taiphanmem.org/">TaiPhanMem.org</a> có lẽ sẽ gây cho bạn cảm giác quen thuộc, là vì tôi cóp nhặt mỗi nơi 1 chút, gom về lại thành giao diện của mình :D.<br /><br />Mặc dù khá mệt (không biết vì mệt do làm theme này hay là do thời tiết chuyển mùa :D) nhưng tôi cũng thấy vui vui vì mấy anh em làm trang <a href="http://www.taiphanmem.org/">TaiPhanMem.org</a> đều thấy thích giao diện này. Không biết các bạn nghĩ sao, tôi rất mong nhận được ý kiến và nhận xét của các bạn!<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-3544992983881260919?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-38302508060443438302009-03-10T19:09:00.002+03:002009-03-11T16:53:54.502+03:00Cách tận dụng các mạng xã hội để quảng bá websiteThời gian vừa qua tôi mới có dịp tìm hiểu và sử dụng các mạng xã hội. Bài viết này xin được chia sẻ 1 chút kinh nghiệm của bản thân trong việc sử dụng các mạng xã hội 1 cách hiệu quả để quảng bá website. Rất mong sự góp ý của các bạn.<br /><br /><h2>Mạng xã hội và những lợi thế của nó</h2><br />Có rất nhiều mạng xã hội đang được tận dụng hiện nay để quảng bá website, trong số đó có thể kể ra vài tên tuổi chính như:<br /><br />- Về bookmark: đứng đầu có lẽ là delicious, tiếp đến Digg, và Stumble Upon, ...<br />- Về status: đại gia chắc thuộc về Twitter và Identi.ca, ...<br />- Về micro blog: có lẽ nổi bật là Tumblr, ...<br />- Về kết nối bạn bè: Facebook và MySpace chắc không có ứng cử viên sánh bằng, ngoài ra, ở Việt Nam thì Yahoo! 360, ...<br /><br />Và còn 1 loạt các "dạng mạng xã hội" khác như FriendFeed chuyên dùng để cập nhật Feed và status, Flickr chuyên về chia sẻ ảnh, hay 1 loạt các nền tảng blog như WordPress.com, TypePad, ...<br /><br />Vấn đề đặt ra là 1 người bình thường khó có thể tham gia 1 cách thường trực trên các mạng này cùng 1 lúc. Thông thường, người ta chỉ chọn 1-2 mạng chính và hoạt động mạnh trên đó, còn các mạng khác thì bỏ trống. Việc chọn 1 mạng xã hội để quảng bá website sẽ đem lại lợi ích khá lớn, vì nó giúp bạn:<br /><br />- Thông báo 1 cách nhanh chóng những thay đổi trên website tới người khác<br />- Tận dụng những liên kết chéo giữa bạn bè, người quen trên mạng xã hội để tạo ra traffic cho website<br />- Và có thể như <a href="http://blogviet.info/2009/03/chi%cc%89-co%cc%81-khoa%cc%89ng-7-commenter-tren-blogviet-s%c6%b0%cc%89-du%cc%a3ng-twitter/" rel="nofollow" target="_blank">BlogViet phân tích</a>, việc các bộ máy tìm kiếm thường xuyên ghé thăm các mạng xã hội này cũng giúp website bạn được index nhanh hơn.<br /><br />Việc để trống các mạng xã hội khác sẽ làm mất đi những lợi thế trên của bạn, điều đó thật đáng tiếc. Trong phần dưới đây, tôi sẽ nêu 1 vài công cụ giúp bạn tự động update những mạng xã hội đó thông qua Feed của website.<br /><br /><h2>Đưa feed lên các mạng xã hội</h2><br />Để đưa feed của website lên 1 dịch vụ nào đó, VD như Twitter, có nhiều dịch vụ đáp ứng:<br /><br /><h3><a href="http://twitterfeed.com/" rel="nofollow" target="_blank">TwitterFeed.com</a></h3><br />Dịch vụ này cho phép lấy feed từ website của bạn và gửi lên Twitter, Identi.ca, Hellotxt và Ping.fm. Twitter và Identi.ca là các dịch vụ update status khá tương đồng nhau. Về Hellotxt và Ping.fm chút nữa chúng ta đề cập sau.<br /><br />TwitterFeed làm việc tốt, đặc biệt là nó cho phép sử dụng OpenID, nên hầu như chúng ta <b>không phải đăng kí lại</b> (nên nhớ là nếu bạn sở hữu 1 account Google, Blogger, Yahoo!, WordPress.com, ... thì bạn đã có sẵn 1 địa chỉ OpenID rồi). Nó thao tác tốt với tiếng Việt, và cho phép rút ngắn đường link thông qua rất nhiều dịch vụ miễn phí như TinyURL, Tr.im, ... Ngoài ra, với 1 tài khoản, bạn có thể thêm bao nhiêu link feed cũng được.<br /><br />Điểm dở của dịch vụ này là <b>thời gian update và số lượng</b>. Nó chỉ cho tối đa 5 bài viết trong 1 lần update và khoảng thời gian update ngắn nhất là 30 phút. Nếu blog (website) của bạn nhỏ thì đây không phải là vấn đề. Tuy nhiên, với các website update liên tục với số lượng lớn thì điều này không tốt lắm.<br /><br /><h3><a href="http://pingvine.com/" rel="nofollow" target="_blank">Pingvine.com</a></h3><br />Dịch vụ này tương tự như TwitterFeed, tuy nhiên chỉ cho phép update trên Twitter, Identi.ca và Ping.fm (kém TwitterFeed ở Hellotxt). Pingvine khắc phục được 2 nhược điểm trên của TwitterFeed với khả năng update feed 5 phút một lần, và không giới hạn số lượng.<br /><br />Tuy nhiên điểm dở của dịch vụ này là <b>xử lí tiếng Việt kém</b>, chữ Việt hiện ra không đúng. Đồng thời nó cũng <b>không rút ngắn đường link</b>. Nếu link feed của bạn được sử dụng qua FeedBurner thì bạn sẽ thấy nó có dạng<br /><br /><div class="code">http://feedproxy.google.com/~r/hontap/~3/L4ehcinlFkU/chuc-mung-8-3-mot-nua-yeu-thuong.html</div><br />Quá dở phải không?<br /><br />Hiện nay thì website này còn đang dính 1 lỗi là không sửa được link feed hoặc xóa link feed. Tôi cũng bị trường hợp này, và đang gửi thông báo đến cho họ, hi vọng họ sẽ sớm sửa lỗi.<br /><br />Có 1 điểm vừa là ưu điểm, vừa là nhược điểm của dịch vụ này, đó là bạn <b>không cần phải đăng kí</b>. Chỉ cần điền username/password (đối với Twitter) hay key (đối với Ping.fm) và địa chỉ Feed là bạn có thể sử dụng ngay. Tuy vậy, vì đó mà mỗi tài khoản (Twitter hay Ping.fm) chỉ tương ứng với đúng 1 feed, nghĩa là bạn không thể dùng nó với nhiều blog như TwitterFeed.<br /><br />PingVine do lỗi tiếng Việt nên tôi nghĩ nó sẽ tốt với các blog, website tiếng Anh.<br /><br /><h3><a href="http://friendfeed.com/" rel="nofollow" target="_blank">FriendFeed</a></h3><br />FriendFeed bản thân nó như cái tên gọi là cho phép bạn update feed của các blog, website lên chính account của mình tại đó. Nhưng không chỉ có thế, nó có thể được dùng như 1 trang update status hệt như Twitter. Điểm đặc biệt của nó là cho phép <b>update feed hay status của mình lên Twitter</b>. Tức là mỗi lần feed của bạn có bài viết mới, hoặc bạn update 1 status trong FriendFeed thì những bài mới, status mới đó cũng sẽ được gửi qua Twitter tương ứng.<br /><br />FriendFeed có khả năng tùy biến khá cao, cho phép bạn update 1 lúc nhiều feed (bạn có thể chọn trong số các feed mà bạn đã thêm vào FriendFeed, không nhất thiết chọn tất cả) để update qua Twitter. FriendFeed cũng có khả năng <b>tự rút gọn link</b> thông qua dịch vụ của chính nó. Tốc độ update ở FriendFeed khá cao (theo tôi nhận thấy, vì không có thông tin chính thức từ trang chủ).<br /><br />Hiện nay tôi và bác Tỉnh ở BlogViet đang dùng FriendFeed để update feed qua Twitter.<br /><br /><h2>Các công cụ update All In One</h2><br />Nếu bạn chỉ sử dụng 1 trong các công cụ kể trên, có khả năng bạn chỉ có thể update 1 hoặc vài mạng xã hội và vẫn bỏ sót nhiều mạng còn lại. Vì thế hãy tận dụng nốt những công cụ dưới đây:<br /><br /><h3><a href="http://ping.fm/" rel="nofollow" target="_blank">Ping.fm</a></h3><br />Giống như chức năng ping trong WordPress, trang Ping.fm này làm 1 nhiệm vụ: mỗi khi bạn gửi cho nó 1 "thứ gì đó", nó lập tức gửi "thứ đó" <b>tới tất cả các mạng xã hội</b> mà bạn chọn. Giống như 1 quả bóng bị đục thủng nhiều lỗ, mỗi khi bạn đổ nước vào, nước sẽ phun ra khắp các hướng.<br /><br />Cái "thứ gì đó" mà tôi nói ở đây nên là các bài viết trong feed của bạn. Nhưng làm thế nào để gửi feed đến Ping.fm 1 cách tự động? Xin hãy dùng TwitterFeed hoặc PingVine mà tôi nói đến ở trên. Bạn sẽ có 1 quy trình quảng bá tương tự như sau:<br /><br /><b><i>Bài mới => Cập nhật feed => TwitterFeed đọc feed đó và gửi tới Ping.fm => Ping.fm phân phát nó tới khắp các mạng xã hội còn lại.</i></b><br /><br />Khả năng của Ping.fm rất lớn, nghĩa là nó cho phép cập nhật tới vài chục mạng xã hội, bao gồm từ các mạng đình đám nhất như FaceBook, MySpace, Twitter, FriendFeed, LinkedIn đến <b>Yahoo! 360</b>, Tumblr, WordPress.com, Blogger, ... Nói chung, bạn có thể dùng nó để update hầu như tất cả các mạng phổ biến.<br /><br />Đặc biệt hơn là Ping.fm có thể <b>update cả delicious</b>. Trong giới hạn hiểu biết của mình, tôi mới chỉ biết Ping.fm này là công cụ duy nhất cho phép tự động bookmark lên delicious. Chỉ tiếc là nó vẫn chưa hỗ trợ Digg và Stumble Upon.<br /><br />Còn 1 điểm thú vị nữa của Ping.fm khiến nó trở thành 1 công cụ cực kì hữu hiệu là bạn có thể update bằng cách gửi tin nhắn thông qua <b>Yahoo! Messenger</b>, GTalk, Email, ... Nếu bạn dùng Yahoo! Messenger như tôi, thì chỉ cần gửi tin nhắn đến nick <b>pingdotfm</b> là dịch vụ sẽ tự động update tất cả các mạng mà bạn chọn.<br /><br /><h3><a href="http://hellotxt.com/" rel="nofollow" target="_blank">Hellotxt</a></h3><br />Hellotxt có thể coi là anh em song sing của Ping.fm. Về chức năng, nó tương tự như trên nên tôi không trình bày kĩ. Tuy vậy, dịch vụ này thua Ping.fm ở 2 điểm:<br /><br />- 1 là không cho update lên mạng delicious vốn rất nổi tiếng<br />- 2 là không cho update thông qua Yahoo! Messenger, 1 công cụ chat mà người Việt chúng ta dùng rất nhiều. Nó chỉ cho phép dùng GTalk hay Jabber, tuy nhiên cũng chỉ đang ở dạng thử nghiệm bêta.<br /><br />Đọc đến đây chắc các bạn cũng hình dung được cách sử dụng các công cụ trên để cập nhật tự động account của mình tại các mạng xã hội. Do điều kiện chưa được thử nghiệm hết các công cụ trong chúng, và chưa khám phá các công cụ tự động khác, nên bài viết có lẽ còn thiếu sót nhiều, rất mong được các bạn góp ý và chia sẻ kinh nghiệm với tôi trong vấn đề này.<br /><br />Chúc các bạn blogging vui vẻ! Và rất vui nếu được kết nối với các bạn thông qua Twitter (mạng xã hội mà tôi dùng chủ yếu hiện nay) tại địa chỉ: <a href="http://twitter.com/rilwis">http://twitter.com/rilwis</a>.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-3830250806044343830?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-47662224954939695092009-03-08T14:00:00.001+03:002009-03-08T14:00:36.481+03:00Chúc mừng 8-3 - Một nửa yêu thương<b>PHỤ NỮ</b><br /><br /><i>Nếu một lần nữa được sinh ra<br />Em vẫn xin sẽ làm con gái<br />Đàn ông các anh quá dạn dày từng trải<br />Nên thèm nghe tiếng nhẹ nhàng dịu êm.<br /><br />Một lần nữa em vẫn xin là em<br />Với nông nổi, vội vàng, hấp tấp<br />Đàn ông các anh nhìn xa trông rộng<br />Nên cần người đôi lúc biết lắng nghe.<br /><br />Con gái chúng em tựa cánh đồng quê<br />Ngựa các anh phi mỏi chân dừng nghỉ<br />Đàn ông vẫn coi mình thông minh trong ý nghĩ<br />Không có chúng em, lấy ai để sánh so.<br /><br />Các anh nghĩ mình khoẻ mạnh vô bờ<br />Chân yếu tay mềm chúng em đâu dám sánh<br />Không có chúng em, các anh đâu thành “phái mạnh”<br />Lấy ai để có thể chở che.<br /><br />Chúng em biết nói những điều các anh thích nghe<br />Biết khiêm tốn, nhún nhường khi cần thiết.<br />Biết nhóm lên, giữ gìn ngọn lửa bếp<br />Vun trồng hạt giống các anh để lại cho đời.<br /><br />Em vẫn xin được làm con gái thôi<br />Để bù vào những gì anh còn thiếu<br />Tuy suốt đời sẽ là “phái yếu”<br />Để yêu và mãi sẽ được yêu…<br /><br />...</i><br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://i253.photobucket.com/albums/hh54/Zel0983/LB/BBTLB8-0.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="420" src="http://i253.photobucket.com/albums/hh54/Zel0983/LB/BBTLB8-0.jpg" style="cursor: move;" width="333" /></a></div><br />Love Bridge số 8 “ Một nửa yêu thương…” - số đặc biệt dành tặng cho ngày quốc tế phụ nữ mùng 8.3…<br /><br />Hãy lắng nghe những lời thì thầm yêu thương được gửi tới một nửa của thế giới - những người Mẹ, những người Chị, những người Bạn và những người Em gái …các bạn nhé<br /><br />Dẫu cho, đôi khi không có một lời lẽ nào,không có một bài hát nào có thể nói đủ những tình cảm của ta dành cho nửa kia của thế giới.... thì những nhịp đập khẽ khàng của trái tim cũng sẽ giúp ta ủ ấm những nỗi nhớ nhung và sẽ thay ta nói lên tất cả...<br /><br /><div class="separator" style="clear: both; text-align: center;"><a href="http://i253.photobucket.com/albums/hh54/Zel0983/LB/KhachmoiLB8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="279" src="http://i253.photobucket.com/albums/hh54/Zel0983/LB/KhachmoiLB8.jpg" style="cursor: move;" width="420" /></a></div><br /><b>LIST BÀI HÁT TRONG LB 8</b><br /><br />1. From Sarah with love<br />2. Người mẹ hiền yêu dấu<br />3. Bóng mưa<br />4. Quê hương<br />5. Mây và Núi<br /><br />*Nhịp đập âm thanh- Love hurts<br /><br />6. Con cò<br />7. Miss you<br />8. Bóng cả<br />9. Biển đêm<br />10. Gửi tình cho gió<br /><br />*Khách mời LB<br /><br />11. Bonjour Viet Nam<br />12. Nước trong nguồn<br />13. Ona odna<br />14. Enternal flame<br />15. Bông hồng cài áo<br /><br />Link download LB8<br /><br /><a href="http://www.mediafire.com/?mwkzmymm5ny">http://www.mediafire.com/?mwkzmymm5ny</a><br /><br />Link download trực tiếp từ host của diễn đàn<br /><br /><a href="http://svtambov.com/lb/lb8.mp3">http://svtambov.com/lb/lb8.mp3</a><br /><br /><a href="http://svtambov.com/showthread.php?t=631">Nghe trực tiếp tại đây</a> (Kéo xuống cuối bài viết có phần media nghe trực tiếp)<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-4766222495493969509?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.comtag:blogger.com,1999:blog-6191880658226179597.post-61890605826878344712009-03-04T03:08:00.002+03:002009-03-04T03:11:34.863+03:00Thêm 1 hệ thống comment nữa cho blogHôm qua lang thang trên mạng tôi tình cờ thấy 1 website dùng hệ thống comment của <a href="http://intensedebate.com" rel="nofollow" target="_blank">IntenseDebate</a>. Hệ thống comment này cũng tương tự như DISQUS mà tôi đã giới thiệu ở <a href="http://hontap.info/2009/02/disqus-he-thong-comment-moi-cho-blogger.html">1 bài viết trước</a> (hiện đang được dùng trên Hỗn tạp). Tuy vậy, nó có 1 vài ưu điểm tốt hơn DISQUS thế này:<br /><br />- Cho phép sử dụng OpenID<br />- Lựa chọn nhiều theme hơn cho comment, bao gồm cả việc tự tạo CSS cho nó<br />- Cho phép export comment ra file XML<br /><br />Đặc biệt là nó có khá nhiều widget hay dành cho blog như:<br />- Button hiển thị tổng số comment và số người comment<br />- Danh sách comment mới nhất<br />- Những bài viết phổ biến nhất. Chú ý là nó không tính theo số comment nhé, mà tính theo cả lượng đọc nữa. Dùng cái này có thể thay thế widget của Feed2JS được.<br />- Xem những người đọc blog lâu nhất<br /><br />Ngoài ra thì việc quản lí comment bằng công cụ này cũng khá tốt. Có chức năng lọc comment, threated comments, hay gửi email khi có comment, ...<br /><br />Cách cài đặt hệ thống comment này trên Blogger cũng đơn giản như DISQUS, bạn chỉ cần upload file template của bạn lên website, để cho nó chỉnh sửa rồi copy template đó ngược trở lại vào template của bạn là được. Bạn cũng có thể cài đặt nó trên nhiều dạng website/blog khác nữa, không chỉ Blogger, tất cả đều có hướng dẫn khá chi tiết bằng hình ảnh khi bạn làm.<br /><br />Hi vọng rằng các công cụ này sẽ giúp cho việc quản lí cũng như trình bày comment trên blog của các bạn được tốt hơn.<div class="blogger-post-footer"><p>Bài viết tại <a href="http://hontap.blogspot.com">Hỗn tạp Blog</a>. Cám ơn bạn đã dành thì giờ để đọc, và rất mong bạn cho ý kiến để bài viết được tốt hơn.</p><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6191880658226179597-6189060582687834471?l=hontap.blogspot.com'/></div>Tuan Anhhttp://www.blogger.com/profile/06131467224428839266noreply@blogger.com