• Skip to main content

MrHói's Blog

The simple is the best

You are here: Home / Archives for mrhoi

mrhoi

Những điểm thú vị trên WordPress 3.6

August 18, 2013 by mrhoi Leave a Comment

Tuần vừa qua tôi đã cất công và cập nhật và trải nghiệm phiên bản WordPress mới nhất, tuy không thay đổi nhiều về mặt giao diện, nhưng những nâng cấp cho thấy đội ngũ phát triển WordPress rất quan tâm đến trải nghiệm của người dùng, đúng như cách mà tôi mong mỏi. Các nhân tôi cũng luôn muốn dành thời gian trả nghiệm những gì mình làm, để xem có thể thay đổi giúp người dùng có “lợi” hơn không… dù gì phần mềm cũng là một loại hình dịch vụ, càng làm tốt công việc chung càng trôi chảy.

Điểm qua một số điểm hay ho nào:

  1. Bổ sung thư viện ID3 vào hệ thống core, thật tuyệt với khi tôi biết là WordPress đã sử dụng cả Snoopy và ID3 trong hệ thống của mình, cá nhân tôi làm việc hơi nhiều với 2 bạn này. Việc bổ sung này giúp hệ thống nhận diện những file âm thanh và video. Thuận tiện hơn nữa là có thể sử dung shortcode hoặc link trực tiếp để hiển thị Player.
  2. Theme mặc định của WordPress chính thức hỗ trợ HTML5… ôi quá tuyệt sắp tới một loại các Studio sản xuất theme sẽ chuyển qua HTML5 phù hợp cho môi trường di động hiện nay.
  3. Biểu tượng Lock giúp hạn chế nhiều người chỉnh sửa nội dung cùng lúc… trước đây wordpress có cảnh báo khi bạn đang chỉnh sửa nội dung mà thành viên khác đang viết… nhưng giờ đây cảnh báo được hiển thị rõ ràng hơn… giúp công việc không bị chồng chéo.

Hiện tại tôi càng cảm thấy mình nên đi theo và đóng góp cho cộng đồng WordPress là lựa chọn đúng đắn nhất từ trước tới nay của tôi… có “bạn ấy” bên cạnh tôi chẳng sợ gì cả… mọi ý tưởng của tôi đều có thể và được bạn ấy hỗ trợ rất tốt.

Cảm ơn “bạn” nhé.

Filed Under: Wordpress Tagged With: bạn ấy, HTML

Chờ đợi gì từ cuộc sống

August 16, 2013 by mrhoi Leave a Comment

Chiều gặp vài chuyện không vui, nhưng có niềm vui lớn nhất là cuối tuần… Thú thực từ hồi đi làm tới giờ, hầu như mình không có ngày cuối tuần cho đúng nghĩa, vì đây là thời gian cực kỳ thích thú với mình vì được thỏa mãn đam mê, làm việc theo sở thích với một tâm lý hoàn toàn không có áp lực gì cả.

Về đến nhà, với trong đầu chẳng biết nên ăn gì… phát hiện ra mình đang có dấu hiệu nhẹ của việc nghiện cafe, có vẻ rất buồn ngủ và khó có thể tập trung khi chưa uống chất kích thích này… dù sao mình có lẽ sẽ không lệ thuộc nó trong thời gian tới, vì mọi việc cũng đang đi vào quỹ đạo, quẳng bớt mấy thứ ba lăng nhăng ra một bên, chẳng nhận thêm việc vào người nữa, dành thời gian đó làm những việc mình thích.

Một chuyện tự dưng mình nghĩ tới, chẳng biết là tốt hay xấu, là ích ý hay vô tâm, chợt nhận ra một điều rằng, cuộc sống cũng giống như một trò chơi, công bằng với người này thì bất công với người kia, âu mình cũng chẳng phải thân thánh gì, nên cũng chẳng thay đổi được. Còn nhỏ thì muốn thế này thế kia, lớn lên chẳng muốn gì nữa… chỉ muốn dựa vào sức của chính mình thực hiện vài điều nho nhỏ, tốt đẹp cho cuộc sống. Có lẽ làm việc theo trái tim, giúp mình cảm thấy thanh thản và đầy hứng khởi hơn.

Hôm qua là một ngày dài, tự cảm thấy căng thẳng và nhiều lúc không biết nên làm gì để thay đổi cả xa hội với những tâm lý kém cơi mở như hiện nay. Ai cũng chăm chăm cho bản thân, rồi sợ sệt… rồi dần làm cuộc sống của mình cứ đi vào vòng luẩn quẩn.

Bây giờ, đôi chút tỉnh táo, tắm một lát, rồi vào làm việc tiếp… vẫn biết mình còn hạnh phúc khi có một việc để làm… một hay hai ai đó để yêu, và một hi vọng lớn ở phía trước.

Filed Under: Gia đình

Kiểm tra mã nguồn trước khi sử dụng

August 15, 2013 by mrhoi Leave a Comment

Nếu bạn đã từng sử dụng hôm hệ thống mã nguồn mở nhưng WordPress, Joomla… hay bất kỳ hệ thống nào khác trên nền tảng PHP, có lẽ bạn sẽ bị choáng ngợp bở vô vàng những thư viện, plugin kèm theo… chắc chắn không phải ai trong số chúng ta biết được những câu lệnh viết trong đó có ý nghĩa gì? Tại sao có những người viết ra cho chúng ta sử dụng miễn phí… hôm trước tôi có nghe một câu ngạn ngữ rất tâm đắc: “không có miếng pho-mát thơm ngon mà không mất tiền mua, nếu có thì nó sẽ nằm ở trên cái bẫy chuột” 😀

Thực tế thì tôi cũng là một trong những nhà phát triển, tôi vô cùng hủng hộ những người làm vì lý tưởng, cấu nghiến cho xã hội vô điều kiện, tôi tin rằng thời gian và trách nhiệm của mỗi chúng ta sẽ giúp cho họ có những bù đắp trong tương lai. Với tôi, chỉ đơn giản là tốt làm vì sở thích, nó giống như một hình thức giải trí bằng “công việc”. Nhưng với thời đại người khôn của khó… cũng nên phải đề phóng. Tôi xin giới thiệu một số lưu ý và các thức kiểm tra một mã nguồn “miễn phí” mà bạn lượm được, để tránh các rủi ro trong tương lai, hay kiểm tra thật kỹ các thông tin sau:

Mã nguồn không được có đoạn “mã hóa” nào, vì nếu gặp những đoạn mã này, bạn sẽ không biết script làm gì với website của mình.

Kiểm tra lại các hàm sau có tồn tại trong mã nguồn của bạn sử dụng, nếu có hay đọc thật kỹ để biết chính xác những gì tác giả làm sẽ không gây hại gì cho website của bạn:

  • base64_encode: nếu có hàm này, bạn hãy cần thận vì sẽ mã hóa một đoạn dữ liệu sau đó sử dụng hàm kế tiếp để thực hiện.
  • base64_decode
  • file_get_contents: thay vì mã hóa nội dung trong code, script có thể lấy dữ liệu từ site khác để thực thi những mã lệnh bạn không mong muốn.
  • curl: tương tự như hàm trên, thay vì sử dụng 1 câu lệnh, thư viện curl sẽ thực hiện các lệnh trao đổi dữ liệu nâng cao hơn.
  • http: là một thư viện của PHP sử dụng để giao tiếp với các site khác… tất nhiên nếu bạn viết thì không thành vấn đề, hay xem lại tác giả xử lý gì với câu lệnh ấy nhé.
  • eval: Hàm này vô cùng nguy hiểm khi sử dụng, vì nó sẽ thực hiện các lệnh có trong chuỗi truyền vào…

Một cách an toàn khi sử dụng các mã nguồn không rõ lai lịch, hay đổi các tên thư mục cơ sở của bạn về những dạng “không giống ai” các “tác giả” có ý định xấu, sẽ không thể biết cấu trúc site của bạn ra sao để “xử lý” cả.

Tiếp nữa là kiểm tra chmod để chắc chắn rằng không ai có thể ghi, chỉnh sửa dữ liệu mã nguồn trên website ngoài bạn.

Điều cuối cùng, nếu bạn có đủ kinh phí, hay mua và ủng hộ các nhà phát triển chân chính, thay vì sử dụng những mã nguồn không rõ nguồn gốc nhé.

Chúc bạn thành công.

Filed Under: Wordpress Tagged With: công việc, không giống ai, miễn phí, sử dụng, tác giả, xử lý

Tại sao tôi lại thích dịch vụ của nước ngoài?

July 28, 2013 by mrhoi Leave a Comment

Gần chục năm đi làm dịch vụ, nhưng tôi chưa hề có ý định sử dụng các dịch vụ của Việt Nam cho công việc cá nhân của mình? Tại sao vậy? Ngoài các yêu cầu độc quyền liên quan đến tính quốc gia thì nếu có 2 sự lựa chọn giữa Tây và Ta thì tôi nhất định sẽ chọn Tây vì một vài ví dụ đơn giản sau:

Hosting, máy chủ… cùng với một giá tiền thì các dịch vụ nước ngoài luôn ngon, bổ, rẻ hơn, các khúc mắc duy nhất là không được pháp luật Việt Nam bảo hộ cho cá nhân tôi, nhưng điều này có lẽ chẳng chẳng là vấn đề lớn đối với tôi, chỉ đơn giản là có nhiều cách để giải quyết vấn đề này bằng việc hạn chế sử dụng thẻ tín dụng, sao lưu dữ liệu thường xuyên.

Dịch vụ mạng xã hội, tôi chọn Facebook để phát triển cộng đồng thay vì Zing Me, dù cho Zing me đã đặt thẳng vấn đề, và hỗ trợ tôi trong việc phát triển, nhưng giờ đấy các bạn thấy các bạn VNG đã chán ốm và chuyển qua Zalo… tôi không biết có phải tính cả thèm chóng chán của người Việt mà tất cả các sản phẩm công nghệ đều èo uột, lãng phí công sức xây dựng kinh khủng, nếu tính khấu hao và chi phí đầu vào thì mấy dự án đó chắc lỗ điên. Tôi không hề có chút tin tưởng nào vào dịch vụ của người Việt, chẳng thể đem công sức của mình đổ sông đổ biển với các bạn ấy được. Hiện ngay cả những công ty công nghệ lớn đều có những chủ trương cực kỳ sai lầm và nóng vội trong việc phát triển sản phẩm.

Tôi chọn dịch vụ của nước ngoài, vì các bạn ấy phục vụ cả tỷ người và hãnh diện vì điều đó, trong khi các dịch vụ trong nước phục vụ có chưa hơn 80 triệu người dùng luôn vỗ ngực tự hào mình là số một… ở Việt Nam. Tâm lý số 1 quá cao, kèm thêm kiểu khiếm tốn nửa vời, khiến không ít “người ta” làm việc thiếu quyết tâm và đam mê. Có chăng việc hưởng thụ thành quả lao động đơn giản chỉ là ngồi chém gió.

Tôi sẽ vẫn chọn dịch vụ của các bạn nước ngoài nếu có thể, bởi vì nó giúp tôi hoàn thiện chính bản thân mình, hoàn thiện dịch vụ của mình, tôi luôn so sánh tôi với họ, dịch vụ của tôi với dịch vụ của họ, để mong rằng một ngày nào đó tôi đạt được 80% giống họ sẽ là điều đàng mừng… và giờ thay vì ngồi viết và so sánh tiếp tôi sẽ tiếp tục làm việc, nghiên cứu, học hỏi để tương lai có thể giống được như “họ”.

Filed Under: Suy nghĩ Tagged With: người ta, Việt Nam, Zing Me

Khắc phục việc treo wordpress khi chưa kịp thực hiện các lệnh pingback hoặc trackback

July 15, 2013 by mrhoi Leave a Comment

Trong khi sử dung wordpress, với dữ liệu khổng lồ hằng ngày đổ vào hệ thống, kết hợp với khả năng pingback và trackback tự động của WordPress, nột điểm khá thú vị của WordPress và tốt cho SEO, nhưng cũng đem lại phiền toái không nhỏ với người quản trị hệ thống.

Vậy có vấn đề gì xảy ra, tôi không muốn nói tới việc bạn để WordPress chạy Cron Job khi người dùng truy cập website… kể cả khi bạn đã tắt tình năng này và sử dụng chạy WordPress Cron Job thủ công với crontab trên Unix (nếu bạn chưa tôi ưu hiệu xuất của wordpress theo cách này… hãy đón chờ bài viết giời thiệu tính năng này trên blog của tôi trong một vài ngày tới nhé).

Trở lại với tình huống trên, thú thật là khi chuyển đổi Server cho ứng dụng của mình, tôi đã quên bật Crontab thực hiện chức năng chạy thủ công, để thực hiện các CronJob của WordPress… nên hệ thống của tôi xảy ra tình trạng tồn đọng các lệnh pingback và trackback cần thiết phải xử lý. Tất nhiên khi tôi nhớ ra điều này thì khối lượng lệnh tồn đọng đã chiếm một số lượng rất lớn. Hệ thống của tôi trở nên ỳ ạch mỗi khi crontab thủ công kia tiến hành.

Và sau đây là đoạn mã nguồn tôi tìm được và tiến hành xử lý trong file wp-includescomment.php

function do_all_pings() {

global $wpdb;

// Do pingbacks

while ($ping = $wpdb->get_row(“SELECT ID, post_content, meta_id FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = ‘_pingme’ LIMIT 1″)) { delete_metadata_by_mid( ‘post’, $ping->meta_id ); pingback( $ping->post_content, $ping->ID ); }

// Do Enclosures

while ($enclosure = $wpdb->get_row(“SELECT ID, post_content, meta_id FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = ‘_encloseme’ LIMIT 1”)) { delete_metadata_by_mid( ‘post’, $enclosure->meta_id ); do_enclose( $enclosure->post_content, $enclosure->ID ); }

// Do Trackbacks

$trackbacks = $wpdb->get_col(“SELECT ID FROM $wpdb->posts WHERE to_ping ” AND post_status = ‘publish'”);

if ( is_array($trackbacks) )

foreach ( $trackbacks as $trackback )

do_trackbacks($trackback);

//Do Update Services/Generic Pings

generic_ping();

}

Các bạn chú ý những dòng được bôi đậm, hệ thống sẽ tiến hành thực hiện hàng trăm, ngàn câu lệnh tìm kiếm những bản ghi phù hợp, ghi nhận việc phải pingback / trackback để thực hiện… Giải pháp của tôi là bắt hệ thống xử lý dần dần với việc giới hạn lại số lượng post cần xử lý mỗi khi thực hiện… ở đây tôi lấy luôn số lượng post hiển thị ở trang chủ làm giới hạn của việc này. Thực tế nếu hệ thống của bạn chạy thường xuyên thì việc trên không dẫn đến việc nghẽn hệ thống… nhưng nếu bạn gặp trường hợp giống tôi… hi vọng bạn có thể tham khảo các xứ lý này.

function do_all_pings() {

global $wpdb;

// get limit of post per page

$limit = get_option(‘posts_per_page’, 10);

$limit = $limit * 50;

// Do pingbacks

$pings = $wpdb->get_results($wpdb->prepare(“SELECT meta_id, post_id FROM {$wpdb->postmeta} WHERE meta_key = ‘_pingme’ LIMIT %d”, $limit));

if (is_array($pings)) {

foreach ($pings as $ping) {

$post_id = $ping->post_id;

$post = get_post($post_id);

delete_metadata_by_mid( ‘post’, $ping->meta_id );

//pingback( $ping->post_content, $ping->ID );

pingback( $post->post_content, $post->ID );

}

}

// Do Enclosures

$enclosures = $wpdb->get_results($wpdb->prepare(“SELECT meta_id, post_id FROM {$wpdb->postmeta} WHERE meta_key = ‘_encloseme’ LIMIT %d”, $limit));

if (is_array($enclosures)) {

foreach($enclosures as $enclosure) {

$post_id = $enclosure->post_id;

$post = get_post($post_id);

delete_metadata_by_mid( ‘post’, $enclosure->meta_id );

//do_enclose( $enclosure->post_content, $enclosure->ID );

do_enclose( $post->post_content, $post->ID );

}

}

// Do Trackbacks

$trackbacks = $wpdb->get_col($wpdb->prepare(“SELECT ID FROM $wpdb->posts WHERE to_ping ” AND post_status = ‘publish’ LIMIT %d”, $limit));

if ( is_array($trackbacks) )

foreach ( $trackbacks as $trackback )

do_trackbacks($trackback);

//Do Update Services/Generic Pings

generic_ping();

}

Chúc các bạn thành công.

Filed Under: Hệ thống, Wordpress Tagged With: 'post', 'posts_per_page', AND post_status = 'publish', Cron Job, CronJob, Do Enclosures, Do Trackbacks, Do Update Services, dPress Cron Job, FROM, Generic Pings, LIMIT, post_content, SELECT, SELECT ID, SELECT ID FROM, WHERE, Wordpress Cron Job

Tối ưu xử lý wordpress với dữ liệu lớn khi thêm mới bài viết

July 14, 2013 by mrhoi 2 Comments

Nếu bạn sử dụng wordpress để triển khai một tờ báo điện tử, hay đơn giản để thử nghiệm với hệ thống với khối lượng dữ liệu lớn, tôi nghĩ bạn sẽ gặp một trường hợp giống như tôi, đó là việc hệ thống xử lý rất chậm và quá tải khi lượng bài viết được cập nhật thường xuyên và liên tục.

Sau khi xem các slow query của MySQL, tôi chợt nhật thấy một điểm đó là khi cập nhật nội dung hệ thông sẽ tự cập nhật tổng số các bài viết thuộc taxonomy mà bài viết đó sử dụng…. sẽ không thành vấn đề lớn, nếu dữ liệu bạn nhỏ, nhưng với lượng dữ liệu khổng lồ thì vấn đề sẽ nằm ở tốc độ truy vấn và tạo ra một câu lệnh Join khổng lồ với cú pháp gốc của WordPress. Mã nguồn được thay đổi tại thư mục wp-includes/taxonomy.php

if ( $object_types )

$count += (int) $wpdb->get_var( $wpdb->prepare( “SELECT COUNT(*) FROM $wpdb->term_relationships, $wpdb->posts WHERE $wpdb->posts.ID = $wpdb->term_relationships.object_id AND post_status = ‘publish’ AND post_type IN (‘” . implode(“‘, ‘”, $object_types ) . “‘) AND term_taxonomy_id = %d”, $term ) );

Với cú pháp trên, số lượng bảng ghi được tạo trong lệnh trên sẽ là tổ hợp của bảng Post và bảng team_relationships, sẽ là vấn đề nếu dữ liệu post và tag của bạn khá lớn.

Các giải quyết của tôi, sử dụng lệnh LEFT JOIN, để hạn chế lại những bản ghi term_relationships phù hợp với yêu cầu thuật toán, thay vì lấy hết ra rồi mới lọc

if ( $object_types )

$count += (int) $wpdb->get_var( $wpdb->prepare( “SELECT COUNT(*) FROM $wpdb->term_relationships LEFT JOIN $wpdb->posts ON $wpdb->posts.ID = $wpdb->term_relationships.object_id AND post_status = ‘publish’ AND post_type IN (‘” . implode(“‘, ‘”, $object_types ) . “‘) WHERE term_taxonomy_id = %d”, $term ) );

Hi vọng nếu bạn gặp trường hợp giống như tôi, có thể giựa vào gợi ý trên để tối ưu hóa hệ thống cho mình.

Còn với tôi, tôi cũng ghi chép ra đây để thay đổi lại mỗi khi cập nhật phiên bản mới của wordpress.

Chúc bạn thành công.

Filed Under: Wordpress Tagged With: cập nhật, COUNT, FROM, JOIN, LEFT, Left Join, SELECT, SELECT COUNT, WHERE

  • « Go to Previous Page
  • Go to page 1
  • Interim pages omitted …
  • Go to page 6
  • Go to page 7
  • Go to page 8
  • Go to page 9
  • Go to page 10
  • Interim pages omitted …
  • Go to page 40
  • Go to Next Page »

Copyright © 2026 · Revolution Pro on Genesis Framework · WordPress · Log in