Skip navigation.

Log in | Sign up

My little corner on MyOpera

Simple life :)

STICKY POST

Lời ngỏ!


Chào mừng các bạn đến với Blog của tôi!
Trang này tôi làm để ghi lại những điều mình nghĩ, những gì mình cảm nhận, mình...bức xúc mà không tiện nói ra. Viết nhật ký rồi lưu trong máy thì cũng hay nhưng tui khoái việc viết nhật ký online hơn, có thể viết bất ở đâu miễn là khu vực đó có hàng Net. Thỉnh thoảng khoái chí muốn chia sẻ với bạn bè thì send cho họ cái link để họ vào thưởng thức => cũng professional ra phết bà con nhỉ?

Blog này xem tốt nhất dưới độ phân giải màn hình 1152x864 pixel trở lên, trình duyệt Opera (tất nhiên rùi), Firefox :yes: còn Internet Explorer thì mặc kệ, không quan tâm :lol:
Để bình chọn (vote) bạn cần đăng nhập vào tài khoản Opera. Nếu chưa có mời bạn vào đây để đăng ký. Để sử dụng 1 số tiện ích viết riêng cho Opera mời bạn vào đây

Lưu ý:
  • Vui lòng ghi rõ nguồn (link đến blog http://my.opera.com/namkhanh) nếu bạn sử dụng lại thông tin trên blog này.
  • Trường hợp bạn muốn comment nặc danh (Anonymous comment), bạn cần nhập đúng mã bảo vệ (Security code) thì mới post được comment của bạn. Mã bảo vệ sẽ tồn tại trong khoảng thời gian từ 10-20' nên nếu quá thời gian đấy, dù bạn có nhập đúng mã số thì vẫn bị báo lỗi & phải post lại. Vì vậy để chắc ăn, khi bạn comment dài dài, bạn nên copy lại trước khi ấn Submit!


Currently not support IE6 browser :down:

STICKY POST

Hướng dẫn sử dụng Blog

Chú ý (8/3/2007): Hiện tại Opera đã nâng cấp khá nhiều tính năng nên có thể bài viết dưới đây không còn chính xác 100% nữa, nếu có thời gian mình sẽ cập nhật lại sau mong mọi người thông cảm (tuy nhiên chỉ khác về giao diện là chính còn các mục hầu như không đổi p:). Các bạn truy cập vào trang cấu hình bằng cách ấn vào My Account thay cho Preferences

Có lẽ với người sử dụng máy tính thành thạo thì việc tạo & quản lý 1 blog cá nhân sẽ rất đơn giản, nhưng không phải ai cũng biết hết những tính năng thú vị của Opera's blog. Hôm nay mình sẽ hướng dẫn các bạn sử dụng dịch vụ Blog của Opera.

Trước tiên, để có 1 blog ở Opera, bạn cần đăng ký tài khoản tại địa chỉ http://my.opera.com/community/signup/. Việc đăng ký rất đơn giản chỉ với 4 bước như sau:
- Choose a username (chọn tên tài khoản): Blog của bạn sẽ có địa chỉ dạng http://my.opera.com/username/
- Choose a password: Nhập mật khẩu cho tài khoản của bạn, lưu ý là mật khẩu phải dài tối thiểu là 5 ký tự.
- Enter a valid e-mail address: Nhập địa chỉ email của bạn để Opera gửi link kích hoạt tài khoản. Nếu không nhận đc mã kích hoạt bạn cần xem lại trong Bulk mail hoặc đề nghị Opera gửi lại.
- Enter the characters shown in the image below: Nhập mã bảo vệ, là những ký tự hiện ngẫu nhiên ở phía dưới.
=> Check vào I agree to the terms rồi ấn Register now

Read more...

IE message: Operation aborted

, , ,

Few days ago, I assigned a task to fix a problem: IE showed an error message box and crashed when load a heavy page (it took about 40-50s to load completly) .

I thought, maybe cause of problem is Javascript (syntax error) and I checked whole the page. Hix, nothing happened :frown: After I Googled, I found the main reason are:

  1. The HTML file is being parsed

  2. Script is executing

  3. The executing script attempts to add, or remove an element from an unclosed ancestor in the markup tree (not including the script block's immediate parent element).


So I refactored code by move all JS function call into $(document).ready( ... ) (I used jQuery) to make sure the script will be excute after the page loaded successful. whew, the problem has been resolved :smile:

Determining the Number of Days in a Month with Javascript

,

Cuối tuần vừa rồi, bác Cảnh (my leader) có triển khai 1 task cho tôi với nội dung là: "chỉnh lại core của con calendar.js để ngày mặc định khi hiệp popup calendar sẽ là ngày hiện tại cộng một" (dĩ nhiên nếu đã nhập ngày trước đó rồi thì vẫn phải focus đúng).

Rất may là con calendar của tác giả Alf Magne Kalleland đã xử lý việc focus ngày nếu text field đã có giá trị nên việc của tôi lúc này khá nhàn hạ:

- Nếu textfield đã có giá trị rồi thì ko làm gì cả
- Nếu chưa có:
+ Lấy ngày hiện tại & cộng thêm 1 đơn vị
+ Nếu giá trị vừa cộng > tổng số ngày trong tháng hiện tại thì tăng tháng lên 1 đơn vị & ngày hiện tại = 1
+ Nếu tháng vừa cộng > 12 thì tăng năm hiện tại lên 1, ngày & tháng hiện tại = 1

Cái khó ở đây chính việc xác định tổng số ngày trong tháng bằng Javascript. Khó ở đây không phải thuật toán, khó ở đây chỉ đơn giản là làm thế nào để viết...càng ngắn càng tốt.

Nếu làm theo kiểu như trong các sách họp lập trình hoặc trong trường học thì sẽ phải if else (switch case) các tháng 30 ngày (4, 6, 9, 11), tháng có 31 ngày (1, 3, 5, 7, 8, 10, 12) và tháng 2 có 28 ngày (năm nhuận sẽ là 29). Ở đây lại phải xác định năm nhuận là năm như thế nào (chia hết cho 400), dài dòng ghê p:

Đối tượng Date của Javascript cho quá tải tham số date truyền vào & sẽ tự động tính toán số dư ngày thừa ra đó theo ngày hiện tại. Do đó để tính số ngày trong 1 tháng bằng Javascript chỉ cần dùng 1 dòng sau:
function daysInMonth(iMonth, iYear)
{
    return 32 - new Date(iYear, iMonth, 32).getDate();
}

Keke... vậy là task 1 giờ đã được giải quyết trong vòng chưa đầy 5'. Suỵt, bí mật :D

Mirror: http://donamkhanh.com/2009/11/01/determining-the-number-of-days-in-a-month-with-javascript.html

Use synchronous request in jQuery.ajax

,

Đã bao giờ bạn sử dụng AJAX (jQuery) để check username tồn tại như sau chưa?
function checkUser(u) {
    var isExist = false;
    $.post(
        'index.php',
        {'username': u},
        function(ret) {
            isExist = ret;
        }
    );

    return isExist;
}

if( checkUser('donamkhanh') ) {
    alert('donamkhanh already exist');
}
else {
    alert('donamkhanh does not exist');
}


Theo bạn, nếu chạy đoạn mã trên thì sẽ ra kết quả nào (giả sử rằng server script hoàn toàn chạy chính xác, trả về giá trị true/false hay 1/0 gì đó & username donamkhanh đã tồn tại)?

Do mặc định trong jQuery tất cả các request đều được sent asynchronous nên trong quá trình send request thì hàm checkUser đã return luôn giá trị lúc khởi tạo biến isExist = 0 rồi. Vậy nên kết quả luôn thông báo là username donamkhanh chưa tồn tại :smile:

Cách fix rất đơn giản, sử dụng thuộc tính async của $.ajax. Các hàm $.post hay $.get không có thuộc tính này vì
This is jQuery's low-level AJAX implementation. See $.get, $.post etc. for higher-level abstractions that are often easier to understand and use, but don't offer as much functionality (such as error callbacks).


Code ở trên sẽ sửa lại như sau:
function checkUser(u) {
    var isExist = false;
    $.ajax({
        async: false,
        type: "POST",
url: "ajax.php",
data: "username=" + u,
success: function(msg){
     isExist = msg;
}
    });

    return isExist;
}

Nếu set async = false, jQuery sẽ sử dụng synchronous cho các request. Ở ví dụ này bạn có thể thấy nó chưa thực sự cần thiết (vì có thể nhét đoạn check vào luôn trong callback function của $.post, $.get hay bất cứ ajax method nào của jQuery), tuy nhiên nếu bạn phải viết nhiều hàm (ajax) và các hàm này lấy kết quả của nhau để tính toán thì việc set synchronous là bắt buộc. Nếu không thì sẽ xảy ra tình trạng nhiều biến nhiều hàm lon ton cầm đèn dầu chạy trước ô tô ^^

Source: http://donamkhanh.com/2009/10/31/use-synchronous-request-in-jquery-ajax.html
Download Opera, the fastest and most secure browser
November 2009
M T W T F S S
October 2009December 2009
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30