Niềm Đau blog

Tình yêu sao khó khăn và gian truân quá...
Đi thật xa, làm thật nhiều, yêu thật nồng say nhưng cuối cùng... trong ta... chỉ còn lại niềm đau đong đầy...

Female Android Robot - Fembot Aiko

Posted by Ly Nguyen Quan

Fembot Aiko
Aiko (beloved one)

Giới thiệu tác giả:

Lê Trung sinh năm 1975 tại Sài Gòn, năm 2 tuổi sang Nhật và 8 tuổi sang Canada. Năm 10 tuổi, anh đã chế tạo được 3 con robot di chuyển được để tham dự cuộc thi khoa học dành cho trẻ em ở Toronto – Canada. Tuy nhiên, cả ba lần Trung đều bị loại vì cuộc thi này dành cho trẻ em từ 3 đến 8 tuổi. Hơn nữa, không ai tin rằng một đứa trẻ như Trung có thể làm được những con robot như vậy. Về sau, Trung tự làm thêm 3 con robot nữa chỉ để thỏa mãn niềm đam mê sáng tạo.

Anh học dược (có 3 bằng bào chế dược phẩm) nhưng không kiếm được việc làm ưng ý và tạm chấp nhận làm nhân viên tư vấn sản phẩm cho Logitech.

"Nếu được trở lại năm 16 tuổi, tôi sẽ chọn đúng ngành học tôi yêu thích: Chế tạo robot!" – Anh nói.

Hệ thống A.I của Aiko:

Hiện, Aiko có thể đàm thoại ở mức độ đơn giản - tương tự một đứa bé 5 tuổi. Aiko có thể nhận diện được nhiều khuôn mặt khác nhau, nhận diện và theo dõi được các chuyển động khác nhau để xem họ đang làm gì. Aiko có thể nhận diện được nguy hiểm và những người làm đau mình. Aiko có thể dò quét môi trường xung quanh mình và có thể nhận biết được đâu là đối tượng quan trọng, chẳng hạn như đến ngân hàng và hiểu được điểm quan trọng là tiền, các hộp an toàn,…

Ví dụ, bạn đặt một cái ghế trước mặt Aiko thì A.I của cô nhận thấy ghế là vật gần nhất và sẽ bỏ qua các thông tin phía sau chiếc ghế. Nếu một người đứng bên cạnh cái ghế, Aiko sẽ chuyển sự tập trung về người đó. Khi có 2 người đứng cạnh ghế thì Aiko vẫn nhận thấy người thứ hai dù đang tập trung vào người thứ nhất. Nếu 2 người cùng trò chuyện với Aiko một cách lần lượt thì A.I của cô có thể xử lý để tập trung vào người đang nói với mình.

Brains Software
Phần mềm BRAINS (ver 1.01) với 3 khung nhìn

Nói sơ về phần mềm B.R.A.I.N.S (Bio Robot Artificial Intelligence Neural System)

BRAINS được Lê Trung viết bằng ngôn ngữ C, C#, Basic và luôn luôn được cập nhật phiên bản mới. Nó kiểm soát khả năng đọc, nói, toán học, tầm nhìn, màu sắc, nghe, tự động hoá và cảm nhận. Nó chính là bộ não và trái tim của Aiko.

Brains Chart

Thông số kĩ thuật của Aiko:

Aiko Body Move

Height: 152cm
Bust: 82cm Waist: 57cm Hip: 84cm
Microprocessor: LS372 and C7 Board
Micro Controller: 5-8
8Gig solid state HD with 4Gig internal memory
Central Data 1000-1500Gig
Power source: Mn-Polymer 7.2V and 12.0V
Motors: Max 130kg.cm precise feedback is provided by the military grade, stainless steel potentiometer
Motors speed: Max 0.12sec at 60 degree
23 (36) DOF
2x gyros
2cameras, 1x1ccd (1x3ccd)
Control by Internal 32 bits OS

Dịch theo trang Project Aiko

Read More...

Artificial Intelligence - Trí tuệ nhân tạo

Posted by Ly Nguyen Quan

Artificial Intelligence (trí tuệ nhân tạo, trí thông minh nhân tạo) thường được viết tắt là A.I - một dạng trí tuệ được xây dựng bởi con người, dựa trên những thuật toán lập trình. Mục đích của sự ra đời này đơn giản chỉ để các chương trình, máy móc,… có được khả năng tự tư duy như con người.

Để dễ hình dung A.I là gì, chúng ta có thể liên tưởng tới các bộ phim khoa học viễn tưởng (vd: Terminator, Wall-E, I-Robot,...).

A.I liên quan đến cách cư xử, sự học hỏi và khả năng thích ứng thông minh của máy móc. Ví dụ như: Khả năng lập lịch, trả lời các câu hỏi, nhận dạng chữ viết tay, giọng nói, khuôn mặt,...

Ngày nay, các hệ thống ứng dụng trí tuệ nhân tạo được sử dụng khá phổ biến trong y tế, khoa học kĩ thuật, quân sự, các phần mềm máy tính, game,...

Lịch sử:

Trí tuệ nhân tạo đã được bắt đầu nghiên cứu từ thập niên 1950 bởi những nhà tiên phong như Allen Newell và Herbert Simon - người sáng lập phòng thí nghiệm trí tuệ nhân tạo đầu tiên ở Đại học Carnegie Mellon. John McCarthy và Marvin Minsky - người sáng lập phòng thí nghiệm trí tuệ nhân tạo tại MIT, MIT AI Lab, năm 1959. Họ đã cùng dự hội thảo về trí tuệ nhân tạo tại Đại học Dartmouth vào mùa hè năm 1956, do McCarthy, Minsky, Nathan Rochester của IBM và Claude Shannon tổ chức.

Thuật ngữ "Artificial Intelligence" được John McCarthy đặt ra trong buổi hội thảo đầu tiên về trí tuệ nhân tạo.

Các trường phái của trí tuệ nhân tạo:

Trí tuệ nhân tạo chia thành 2 trường phái tư duy: Truyền thống và Tính toán.

Trí tuệ nhân tạo (TTNT) truyền thống:

Hầu như bao gồm các phương pháp hiện được phân loại và các phương pháp học máy (machine learning), đặc trưng bởi hình thức hóa (formalism) và phân tích thống kê. Nó còn được biết với các tên TTNT biểu tượng, TTNT logic, TTNT ngăn nắp (neat AI) và TTNT cổ điển (Good Old Fashioned Artificial Intelligence). Các phương pháp gồm có:

Hệ chuyên gia: (còn gọi là hệ thống dựa tri thức) áp dụng các khả năng suy luận để đạt tới một kết luận. Một hệ chuyên gia có thể xử lý các lượng lớn thông tin đã biết và đưa ra các kết luận dựa trên các thông tin đó.

Nhiều hệ chuyên gia đã được ứng dụng trong: y học, kế toán, điều khiển tiến trình, dịch vụ tư vấn tài chính, tài nguyên con người,...

Vd: Clippy - chương trình trợ giúp có hình cái kẹp giấy của Microsoft Office là một ví dụ. Khi người dùng gõ phím, Clippy nhận ra các xu hướng nhất định và đưa ra các gợi ý.

Clippy

Lập luận theo tình huống: (case-based reasoning - CBR) là qui trình giải các bài toán mới dựa trên lời giải của các bài toán tương tự đã gặp.

Mạng Bayes: (Bayesian network hoặc Bayesian belief network hoặc belief network) là một mô hình xác suất dạng đồ thị.

Simple Bayes Net
Một mạng Bayes đơn giản

Trí tuệ nhân tạo (TTNT) tính toán:

Nghiên cứu việc học hoặc phát triển lặp (vd: tinh chỉnh tham số trong hệ thống, chẳng hạn hệ thống connectionist). Việc học dựa trên dữ liệu kinh nghiệm và có quan hệ với TTNT phi ký hiệu, TTNT lộn xộn (scruffy AI) và tính toán mềm (soft computing). Các phương pháp chính gồm có:

Mạng Neuron nhân tạo: là một mô hình toán học hay mô hình tính toán được xây dựng dựa trên các mạng nơ-ron sinh học.

Neuron

Hệ mờ: (tiếng Anh: Fuzzy system) được phát triển từ lý thuyết tập mờ (tập mờ hay tập hợp mờ) để thực hiện lập luận một cách xấp xỉ thay vì lập luận chính xác theo lôgic vị từ cổ điển. Lôgic mờ có thể được coi là mặt ứng dụng của lý thuyết tập mờ để xử lý các giá trị trong thế giới thực cho các bài toán phức tạp (Klir 1997). Nói một cách dễ hiểu hơn thì hệ mờ là một hệ được xây dựng dựa trên tri thức.

Ứng dụng: Thang máy, camera, máy điều hoà nhiệt độ,...

Fuzzy Crisp
Tập mờ và tập rõ

Tính toán tiến hoá: (Evolutionary computation) ứng dụng các khái niệm sinh học như quần thể, biến dị và đấu tranh sinh tồn để sinh ra các lời giải càng ngày càng tốt hơn cho bài toán. Các phương pháp này thường được chia thành các thuật toán tiến hóa (ví dụ thuật toán gene) và trí tuệ bầy đàn (swarm intelligence) (chẳng hạn hệ kiến).

TTNT dựa hành vi: (Behavior based AI) một phương pháp module để xây dựng các hệ thống TTNT bằng tay.

Người ta đã kết hợp 2 trường phái này lại với nhau để hình thành hệ thống thông minh lai (hybrid intelligent system).

Dựa theo Wikipedia

Read More...

Một đám mây cân nặng bao nhiêu?

Posted by Ly Nguyen Quan

Mây - Một cái gì đó đã quá quen thuộc với chúng ta, đến mức ta hầu như vô tâm với nó. Thế nhưng, bạn đã bao giờ nghĩ rằng: "Những đám mây đang lơ lửng trên bầu trời kia nặng bao nhiêu?" chưa?

Theo Peggy LeMone - Một nhà khoa học cấp cao tại Trung tâm về nghiên cứu khí quyển Quốc gia ở Boulder, Colorado thì "Lượng nước trong một đám mây nhỏ nặng khoảng 550 tấn". Cô nói: "Nếu muốn liên tưởng trọng lượng ấy theo một cách dễ hiểu hơn, bạn có thể nghĩ tới... những con voi".

Giả sử, một con voi nặng khoảng 6 tấn thì lượng nước chứa trong một đám mây tích (cumulous) điển hình nặng tương đương 100 con voi cộng lại. Từ đó, ta có một câu hỏi khác là: "Làm sao để chúng có thể ở trên ấy được? Cái gì đã giữ chúng lại?".

LeMone giải thích rằng: "Trước hết, các phân tử nước cấu tạo nên những đám mây thì không có kích thước như một con voi mà chúng nhỏ hơn rất rất nhiều lần". Và, những phân tử nước này trôi nổi trên những luồng khí ấm từ dưới dâng lên. Tuy biết thế, nhưng sự thật về lượng nước đang lơ lửng trên bầu trời vẫn gây ngạc nhiên cho một nhà khí tượng học như LeMone.

"Tôi không hề nghĩ tới việc một đám mây có cân nặng bao nhiêu cho đến khi tôi bắt đầu tính toán nó".

Thế có bao nhiêu con voi thay cho lượng nước trong một cơn dông tố... Lớn gấp 10 lần so với một đám mây tích khổng lổ ("puffy" cumulus)? Một lần nữa, LeMone đã cho chúng ta những con số đáng kinh ngạc: Khoảng 200.000 con voi.

Puffy Culumus Cloud

Bây giờ, tiến hành tính toán cho một cơn bão (từ cấp 8 trở lên) ở bang Missouri (Mĩ) và kết quả trả về là một con số thật sự lớn.

"Điều mà chúng tôi đang làm là cân nước trong 1m2 theo lý thuyết từ một đám mây và sau đó cấp số nhân cho toàn bộ cơn bão".

Kết quả ra sao? Bốn triệu con voi. Điều đó có nghĩa là lượng nước có trong một cơn bão nặng hơn tất cả những con voi trên hành tinh này. Có lẽ nó ngang với tất cả những con voi đã từng sống trên hành tinh này.

Niềm Đau's blog dịch theo trang WSI

Read More...

Tối ưu hoá Blog - Blogspot

Posted by Ly Nguyen Quan

Mấy bác hàng xóm dạo này sao cứ phàn nàn cái sự... lười của tôi dữ quá. Để chứng minh mình... siêng năng, tôi sẽ viết cho mấy bác cái entry "Tối ưu hoá blog - Blogspot" này. Hi vọng hết bị chê ^^ (Hết chê = khen. Hehe!)

Như đã biết ở 2 entry "Hiện trạng chung dịch vụ internet tại Việt Nam" và "Tồi tệ dịch vụ internet tại Việt Nam" thì tốc độ mạng ở VN khá là cùi bắp. Để có tốc độ tốt hơn, bạn phải chi tiền ở mức hàng triệu đồng và con số đó là quá cao so với thu nhập trung bình của một người VN. Vì vậy, lượng người dùng chủ yếu ở tốc độ dưới 3Mbps nhưng đó chỉ là tốc độ theo phương diện hợp đồng, tốc độ thực thì không được như thế. Nếu có kiện cáo thì cũng chỉ nhận được câu... "Tuỳ thời điểm và trang truy cập thôi anh/chị ạ!". Khi nào ISP kí kết đảm bảo tốc độ tối thiểu thì khi đó dân tình chúng ta may ra mới nắm đằng cán (hiện giờ là nắm đằng lưỡi >"<).

Mà cũng lạ ở chỗ, đôi khi chúng ta thấy tốc độ download khá tốt nhưng khi lướt web thì tốc độ lại rất tệ. Nếu nói do server lưu trữ web có vấn đề thì cũng không hẳn vì thử nhờ 1 người bạn (tốc độ mạng và ISP như nhau) kiểm tra thì được báo lại rằng... nó vù vù. Do chương trình antivirus chăng? Nếu do nó thì sao mọi khi không bị giờ lại bị? Đau đầu thật...

Theo thống kê ở Mĩ, người dùng chỉ kiên nhẫn trong vòng 4 giây cho một trang web.
Tính toán theo lý thuyết: Cứ cho rằng tốc độ internet trung bình là 8 Mbps thì với gói cước thấp nhất mà tôi đang dùng hiện giờ là ~ 1.5 Mbps chỉ đạt 1/4.
Ghi ra giấy: 8 Mbps - 4 giây => (8/4) = 2 Mbps - (2x4) = 16 giây
Vậy: Tốc độ tải trang nên dưới 20 giây.

(Phần hướng dẫn sử dụng hình thì lời dẫn trước rồi hình ở dưới)

Trước tiên, chúng ta sẽ kiểm tra tốc độ tải trang hiện tại của bạn. Ở đây, tôi dùng trình duyệt web Firefox.

Bước 1: Tắt hết các cửa sổ của Firefox, dùng Ccleaner (mục Cleaner, tick chọn hết toàn bộ ô check trong 2 tab Windows, Applications nhưng trừ ra ô Wipe Free Space) để dọn sạch máy.

Bước 2: Mở lại Firefox, không vào blog của bạn mà vào trang StopWatch của Numion, gõ link blog bạn vào khung URL rồi click nút Start StopWatch, chờ kết quả. Đó sẽ là kết quả lần đầu của bạn (thường thì lần đầu luôn lâu hơn các lần sau), bấm Back để quay lại và làm lại một lần nữa để có kết quả lần 2 (lần 3 trở lên thì tuỳ bạn).

Tiếp theo, chúng ta sẽ tiến hành tối ưu hoá blog. Nền blog tôi dùng ở đây là BlogSpot của Google.

Bước 1: Sao lưu template phòng hờ bất trắc và phải giữ bản lưu này cho tới khi chắc chắn sự sửa đổi không gây ra lỗi gì cả, Dashboard > Layout > Edit HTML > Download Full Template

Bước 2: Tối ưu CSS

- Theo tôi biết thì 1 kí tự = 1 Byte (không định dạng), cả dấu cách (space bar trên bàn phím) cũng được tính 1 cách = 1 Byte. Vì vậy, hãy giảm thiểu những kí tự không cần thiết trong CSS và thu gọn CSS lại. Tôi hay dùng trang CleanCSS để tối ưu CSS cho blog của mình.

- Cách dùng trang CleanCSS khá đơn giản.

Chỉnh Options như hình là được

Options-CleanCSS

Mục Compression (code layout) có 5 mức độ là: Highest, High, Standard, Low và Custom. Tuỳ nhu cầu mà bạn sử dụng, nếu đoạn CSS nào bạn chắc chắn là rất ít phải sửa chữa, thay đổi thì có thể dùng mức High hoặc Highest. Còn không thì cứ để Standard.

Compress Level

Ví dụ đoạn code CSS chưa được tối ưu là:

.footer {
 background:#333322;
 color:#EED;
 padding:10px 10px 10px 10px;
 }

.footer .left {
 width:64%;
 }

.footer .right {
 text-align:right;
 width:35%;
 }

.footer a {
 color:#FFFFF;
 text-decoration:none;
 }

.footer a:hover {
 text-decoration:none;
 color:silver;
 }

Khung Messages cho ta biết nó đã thao tác những gì (sửa, lược bỏ,...) trên đoạn CSS

Messages CleanCSS

Kết quả cuối cùng, đoạn CSS đã được tối ưu hoá. Dòng Input, Output và Compression Ratio cho ta biết nó đã giúp ta tiết kiệm được bao nhiêu Bytes vô ích!

Result CleanCSS

Ví dụ trên, tôi chỉ mới để mức Standard, nếu đưa lên Hight hoặc Hightest thì càng tiết kiệm được nhiều hơn (ở mức High, Highest thì CSS sẽ không được dễ nhìn cho lắm ^^).

Lưu ý: Nên thao tác cho từng đoạn nhỏ CSS thôi. Không nên làm một lèo vì nó có thể khiến trang bị lỗi.

Bước 3: Tối ưu JavaScript (JS)

- Với BlogSpot thì theo tôi, đặt hẳn JS trong source là tốt nhất. Nó giúp cho blog load nhanh hơn khi bạn câu link JS từ host khác. Tuy nhiên, việc làm này có thể khiến cho source rất dài cùng một vài vấn đề khác (vấn đề gì thì còn tuỳ thuộc vào nhiều thứ).

- Thứ tự JS trong source cũng rất quan trọng. Vd:

Có 2 đoạn code JS là A và B (liên quan nhau). Nếu đặt A trước B thì chạy nhưng khi ngược lại B trước A thì không chạy.
Có 1 đoạn code JS, đặt ở trước tag </head> thì chạy nhưng khi đưa xuống trước </body> thì không chạy.
...

- Hãy cố gắng tập trung tất cả code JS về cuối source (tức là trên </body>) và hạn chế ở code JS ở khoảng giữa <head></head>

- Nếu bạn dùng framework như Prototype, Scriptaculous, Mootools, JQuery,... thì hãy nén nó lại trước khi đưa vào source. Điều đó giúp bạn tiết kiệm được rất nhiều Byte vô ích.

- Trang JavaScript Compressor sẽ giúp bạn nén JS. Cách dùng cũng rất đơn giản, bạn chỉ việc copy - paste đoạn JS vào khung (nếu đoạn JS dài bạn cần chờ 1 lúc vì có thể quá trình nạp code khiến trình duyệt web của bạn bị đứng). Sau đó, bạn chỉ tick chọn JSMin hoặc Packer rồi click Compressor Rate It. Packer nén tốt hơn JSMin nhưng những kí tự nó sinh ra có khi khiến bạn khó hiểu và sẽ có vài trường hợp nén JSMin chạy được còn Packer thì không.

Một đoạn code JS chưa nén:

Object.extend(Object, {
  inspect: function(object) {
    try {
      if (Object.isUndefined(object)) return 'undefined';
      if (object === null) return 'null';
      return object.inspect ? object.inspect() : String(object);
    } catch (e) {
      if (e instanceof RangeError) return '...';
      throw e;
    }
  },

và đã nén ở mức JSMin, Packed

Object.extend(Object,{inspect:function(object){try{if(Object.isUndefined(object))return'undefined';if(object===null)return'null';return object.inspect?object.inspect():String(object);}catch(e){if(e instanceof RangeError)return'...';throw e;}},
Object.extend(Object,{inspect:function(a){try{if(Object.isUndefined(a))return'undefined';if(a===null)return'null';return a.inspect?a.inspect():String(a)}catch(e){if(e instanceof RangeError)return'...';throw e;}},

- Có trường hợp "không nén" thì code chạy được và ngược lại. Hoặc, một số đoạn code JS không thực thi được hay hiển thị tốt trên BlogSpot.

- Nên demo tại máy (nếu có thể) trước khi đưa vào blog. Chủ yếu của việc demo là xét xem có thể nén được không? Nén mức nào thì hợp lý và vị trí đặt code ở đâu?

- Có khả năng, khi để nhiều đoạn JS trong cùng 1 source với nhau như thế sẽ sinh ra lỗi xung đột. Khi đó, cần phải lưu đoạn code JS nào có dung lượng nhỏ hơn ra host ngoài rồi câu link vào.

Bước 4: Tối ưu source (nói chung)

- Hãy chú thích thật rõ ràng (chú thích rõ chứ không dư thừa) những đoạn code (CSS, JS,...) trong source để sau này dễ dàng tìm kiếm, thay đổi hay tối ưu.

Một loại chú thích dư thừa (loại chú thích này chỉ thích hợp khi hướng dẫn cho người đọc hiểu công dụng và khi áp dụng vào thực tế thì nó không còn cần thiết nữa)

/* Calendar
----------------------------------------------- */
/* The calendar Table */
table#bcalendar {border:1px solid #000;border-top:0; margin:0px 0 0px; width:100%;}
/* The Cells in the Calendar */
table#bcalendar tbody tr td {text-align:center;padding:2px;border:1px outset black;}
/* Links in Calendar */
table#bcalendar tbody tr td a {font-weight:bold; color:#fff;}

Nên tối ưu nó thành dạng sau:

/* -------------------------- Calendar */
table#bcalendar{border:1px solid #000;border-top:0;margin:0;width:100%;}
table#bcalendar tbody tr td{border:1px outset #000;padding:2px;text-align:center;}
table#bcalendar tbody tr td a{color:#fff;font-weight:700;}

Những thứ được thay đổi (giúp bạn giảm từ 0.381KB xuống còn 0.214KB, tức tiết kiệm được 43.8%) là

Đổi "0px" thành "0"
Đổi "0 0 0" thành "0"
Đổi "black" thành "#000"
Đổi "bold" thành "700"
Lược bỏ các chú thích

- Hãy chịu khó vào Dashboard > Layout > Edit HTML > tick Expand Widget Templates rồi kéo xuống phần <body></body> và dò từ từ để xoá bỏ những dòng cách không cần thiết cho đến khi hết thì thôi. Nguyên nhân là vì tôi đã từng xem source code cho 1 vài bạn và nhận ra rằng trong phần <body></body> có không ít chỗ giữa dòng này với dòng kia cách nhau tới hơn 2 dòng. Nếu cần phân biệt đoạn này với đoạn kia thì chỉ cần cách nhau 1 dòng là đủ. Còn giữa các thuộc tính, đôi khi không cần bất kì khoảng cách nào.

Quá dư (cách nhau tới 2 dòng)

</b:if></b:if>
</dd>


<dd class='comment-footer'>
</dd>

Hoặc (các thuộc tính cách nhau 1 cách)

<span style='color: blue; font-weight: bold;'>

Nên thu gọn lại sẽ hay hơn (giảm số dòng và khoảng cách dư)

</b:if></b:if>
</dd>

<dd class='comment-footer'>
</dd>
<span style='color:blue;font-weight:bold;'>

- Đưa các đoạn code JS vào sát lề trái của khung chứa source.

Đoạn code này bị cách lề trái một khoảng

function bcLoadStatus(){
   cls = document.getElementById('calLoadingStatus');
   img = document.createElement('img');
   img.src = bcLoadingImage;
   img.style.verticalAlign = 'middle';
   cls.appendChild(img);
   txt = document.createTextNode(bcLoadingMessage);
   cls.appendChild(txt);
  }

Xử lý nó

function bcLoadStatus(){
cls = document.getElementById('calLoadingStatus');
img = document.createElement('img');
img.src = bcLoadingImage;
img.style.verticalAlign = 'middle';
cls.appendChild(img);
txt = document.createTextNode(bcLoadingMessage);
cls.appendChild(txt);
}

- Gom những cái có thể ở một dòng lại với nhau.

Các thuộc tính của ul.menunew .menulienket:hover dư sức nằm trên một dòng

ul.menunew .menulienket:hover {
background:#3FF;
color:#000;
width:100px;
}

Sau khi gom lại (quá gọn)

ul.menunew .menulienket:hover{background:#3FF;color:#000;width:100px;}

Hoặc ở code JS (ở JS thì cẩn thận tí, sai một chút cũng khiến cả đoạn không chạy được)

if (act) {
if (objActive.tagName == 'A') {
objActive.style.color = clrOrg;
clearInterval(TimerID);
act = 0;
}
}
}

Chỉ thu gọn ở mấy cái {}

if (act) {if (objActive.tagName == 'A') {
objActive.style.color = clrOrg;
clearInterval(TimerID);
act = 0;}}}

Thu gọn xịn hơn, ta được (có thể dùng Javascript Compressor ở mức JSMin)

if(act){if(objActive.tagName=='A'){objActive.style.color=clrOrg;clearInterval(TimerID);act=0;}}}

Bước 5: Tối ưu Page Elements (thành phần trang)

- Hạn chế dùng quá nhiều gadget trong blog vì điều đó khiến cho blog chậm đi. Nếu có thể hãy để những gì liên quan nhau trong một gadget.

- Không dùng nhiều widget ngoài hoặc thuộc nhiều trang khác nhau.

- Không ẩn các gadget liên quan chức năng blog vì như vậy sẽ tạo sự khó chịu cho người dùng lúc cần tới nó (Vd: Phải quay lại trang chủ mới thấy được shoutbox).

- Hạn chế dùng table lồng table và không dùng frame lồng frame.

- Không lưu các file có liên quan tới cấu trúc trang trên nhiều host khác nhau để giữ được sự ổn định cho toàn blog.

- Những gì chỉ cần hiển thị khi xem một bài viết thì hãy đặt nó vào đoạn code sau:

<b:if cond='data:blog.pageType == "item"'>
Nội dung
</b:if>

- Hạn chế các đoạn JS không cần thiết như: Cấm chuột phải, hiệu ứng trỏ chuột (đồng hồ, dòng chữ bay lượn,...),...

- Hạn chế các hiệu ứng dùng flash trên blog.

- Tránh lạm dụng các biểu tượng cảm xúc.

- Nếu bạn nghĩ cách tốt nhất để xử lý hình ảnh trên blog bạn là nén ảnh tối đa hoặc dùng ảnh kích thước nhỏ thì đó là một sai lầm. Chẳng thích thú gì khi nhìn một tấm ảnh có chất lượng kém (màu không thật, gãy, mờ,...) hay có size tí xíu. Bạn nên có một phần mềm xử lý ảnh nho nhỏ trong máy để tiện cho việc xử lý (các chương trình xử lý ảnh luôn tốt hơn các trang xử lý ảnh trực tuyến). Hãy thử thay đổi giữa các định dạng ảnh JPEG, GIF, PNG để chọn ra định dạng tối ưu nhất (dung lượng, chất lượng và kích thước). Trong trường hợp bạn cần phải giữ nguyên kích thước ảnh lớn (Vd: 1024x768 px) thì bạn có thể dùng thêm một ảnh thumbnail (hình nhỏ) cho ảnh gốc.

Đoạn code HTML cho 2 ảnh gốc và thumbnail, khi click vào ảnh thumbnail nó sẽ trả ra ảnh gốc.

<a href="link ảnh gốc"><img src="link thumbnail"/></a>
Eo! Trước mắt là nhớ được có nhiêu đó nên viết cho anh em nhiêu đó. Từ từ nhớ thêm được gì thì tôi sẽ bổ sung vào sau.

Read More...

5 phút trong cuộc sống

Posted by Ly Nguyen Quan

Cuộc sống là một chuỗi những điều ưu tiên. Và những điều ưu tiên hàng đầu của bạn là gì? Hãy dành cho những người mà bạn yêu quý hơn 5 phút trong quỹ thời gian hằng ngày của bạn.

Trong công viên, một người phụ nữ ngồi gần một người đàn ông trên băng ghế gần sân chơi cho trẻ em. "Đó là con trai tôi" - người phụ nữ vừa nói vừa chỉ tay về phía cậu bé mặc áo len đỏ đang chơi cầu trượt. "Nó trông rất khoẻ mạnh" - người đàn ông đáp lời. "Còn con trai của tôi là đứa mặc áo len màu xanh ấy". Nói rồi, ông ta nhìn đồng hồ và nói với theo cậu con trai: "Về thôi, Todd", cậu bé tên Todd quay nhìn bố nài nỉ: "5 phút nũa thôi mà bố, chỉ 5 phút nữa thôi".

Người đàn ông khẽ gật đầu và cậu bé lại tiếp tục chạy nhảy với vẻ rất sung sướng. 5 phút trôi qua, người cha đứng dậy và nói: "Sao? Bây giờ chúng ta về được chưa con?". Todd lại nài nỉ một lần nữa: "Bố, 5 phút nữa, chỉ 5 phút nữa thôi!". Người đàn ông lại mỉm cười và nói: "Được rồi!". Người phụ nữ thấy vậy bèn thốt lên: "Ông thật là một người cha kiên nhẫn". Người đàn ông cười và chậm rãi nói: "Con trai cả Tommy của tôi bị một kẻ lái xe say rượu đụng chết năm ngoái trong khi nó đang chạy xe đạp gần đây. Tôi chưa bao giờ dành nhiều thời gian cho Tommy và bây giờ tôi có thể đánh đổi bất cứ thứ gì để có thể ở bên nó dù chỉ 5 phút. Tôi nguyện rằng sẽ không bao giờ lặp lại lỗi lầm đó với Todd. Todd nghĩ nó có 5 phút để chơi đùa. Nhưng sự thật là tôi đã có thêm 5 phút nữa để nhìn nó chơi đùa".

Sưu tầm

Read More...

The salty coffee - Café muối

Posted by Ly Nguyen Quan

Chàng trai gặp cô gái ở một buổi tiệc. Cô rất xinh đẹp, quyến rũ và đến hơn nửa số người trong buổi tiệc đều để ý đến cô. Trong khi chàng trai chỉ là một người rất bình thường, không ai buồn nhìn tới. Cuối cùng, khi buổi tiệc gần kết thúc, chàng trai ngượng ngập mời cô gái uống café với mình. Cô gái rất ngạc nhiên, nhưng vì lời mời quá lịch sự nên cô đồng ý. Họ ngồi ở một chiếc bàn nhỏ trong góc phòng tiệc, nhưng chàng trai quá lo lắng, mãi không nói được lời nào làm cho cô gái cũng cảm thấy bất tiện. Bỗng nhiên, chàng trai gọi người phục vụ:

- Xin cho tôi ít muối để tôi cho vào café!

Mọi người đứng xung quanh đều hết sức ngạc nhiên và nhìn chăm chăm vào chàng trai. Chàng trai đỏ mặt nhưng vẫn múc một thìa muối cho vào cốc café và uống. Cô gái tò mò:

- Sao anh có sở thích kỳ quặc thế?
- Khi tôi còn nhỏ, tôi sống gần biển - Chàng trai giải thích
- Khi chơi ở biển, tôi có thể cảm thấy vị mặn của nước, giống như café cho muối vào vậy! Nên bây giờ, mỗi khi tôi uống café với muối, tôi lại nhớ tới tuổi thơ và quê hương của mình.

Cô gái thật sự cảm động. Một người đàn ông yêu nơi mình sinh ra thì chắc chắn sẽ yêu gia đình và có trách nhiệm với gia đình của mình. Cô gái bắt đầu nói chuyện cởi mở hơn, về nơi cô sinh ra, về gia đình... Trước khi ra về, họ hẹn nhau một buổi gặp tiếp theo... Qua những lần gặp gỡ, cô gái thấy chàng trai quả là một người lý tưởng: rất tốt bụng, biết quan tâm... Và cô đã tìm được người đàn ông của mình nhờ cốc café muối. Câu chuyện đến đây vẫn là có hậu vì "công chúa" đã tìm được "hoàng tử", và họ cưới nhau, sống hạnh phúc.

Mỗi buổi sáng, cô gái đều pha cho chàng trai - nay đã là chồng cô - một cốc café với một thìa muối. Và cô biết rằng chồng cô rất thích như vậy. Suốt 50 năm kể từ ngày họ cưới nhau, bao giờ người chồng cũng uống cốc café muối và cảm ơn vợ đã pha cho mình cốc café ngon đến thế. Sau 50 năm, người chồng bị bệnh và qua đời, để lại cho người vợ một bức thư: "Gửi vợ của anh, xin em tha thứ cho lời nói dối suốt cả cuộc đời của anh. Đó là lời nói dối duy nhất - về cốc café muối. Em có nhớ lần đầu tiên anh mời em uống café không? Lúc đó, anh đã quá lo lắng, anh định hỏi xin ít đường nhưng anh lại nói nhầm thành muối. Anh cũng quá lúng túng nên không thể thay đổi được đành phải tiếp tục lấy muối cho vào cốc café và bịa ra câu chuyện về tuổi thơ ở gần biển để được nói chuyện với em. Anh đã định nói thật với em rất nhiều lần nhưng rồi anh sợ em sẽ không tha thứ cho anh. Và anh đã tự hứa với mình sẽ không bao giờ mói dối em một lời nào nữa, để chuộc lại lời nói dối ban đầu. Bây giờ, anh đã đi thật xa rồi, nên anh sẽ nói sự thật với em. Anh không thích café muối, nhưng mỗi sáng được uống cốc café muối từ ngày cưới em, anh chưa bao giờ cảm thấy hối tiếc vì mình đã phải uống cả. Nếu anh có thể làm lại từ đầu, anh vẫn sẽ làm như thế để có được em, và anh sẽ uống café muối cả cuộc đời". Khi người vợ đọc xong lá thư cũng là khi lá thư trong tay bà ướt đẫm nước mắt. Nếu bạn hỏi người vợ rằng: "Café muối có vị thế nào?", chắc chắn bà sẽ trả lời: "Ngọt lắm".

Phiên bản tiếng Anh

He met her on a party, she was so outstanding, many guys chasing after her, while he was so normal, nobody paid attention to him. At the end of the party, he invited her to have coffee with him. She was surprised, but as he was polite, she promised. They sat in a nice coffee shop, he was too nervous to say anything, she felt uncomfortable, she thought, "Please, let me back home". Suddenly he asked the waiter: "Would you please give me some salt? I'd like to put it in my coffee.

Everybody stared at him, so strange! His face turned red, but still, he put the salt in his coffee and drank it. She asked him curiously: "Why you have this hobby?". He replied: "When I was a little boy, I was living near the sea, I liked playing in the sea, I could feel the taste of the sea, salty and bite, just like the taste of the salty coffee. Now every time I have the salty coffee, I always think of my childhood, think of my hometown, I miss my hometown so much, I miss my parents who are still living there". While saying that, tears filled his eyes. She was deeply touched. That's his true feeling, from the bottom of his heart. A man who can tell out his homesick, he must be a man who loves home, cares about home, has responsibility of home. Then she also started to speak, spoke about her faraway hometown, her childhood, her family. That was a really nice talk, also a beautiful beginning of their story. They continued to date. She found actually he was a man who meets all her demands: he had tolerance, was kind hearted, warm, careful...he was such a good person but she almost missed him! Thanks to his salty coffee! Then the story was just like every beautiful love story: the princess married to the prince, then they were living the happy life... And, every time she made coffee for him, she put some salt in the coffee as she knew that's the way he liked it.

After 40 years, he passed away, left her a letter which said: "My dearest, please forgive me, forgive my whole life lie. This was the only lie I said to you - the salty coffee. Remember the first time we dated? I was so nervous at that time, actually I wanted some sugar, but I said salt. It was hard for me to change so I just went ahead. I never thought that could be the start of our communication! I tried to tell you the truth many times in my life, but I was too afraid to do that, as I have promised not to lie to you for anything. Now I'm dying, I afraid of nothing so I tell you the truth: I don't like the salty coffee, what a strange bad taste. But I have the salty coffee for my whole life since I knew you, I never feel sorry for anything I do for you. Having you with me is my biggest happiness for my whole life. If I can live for the second time, I still want to know you and have you for my whole life, even though I have to drink the salty coffee again." Her tears made the letter totally wet. Someday, someone asked her: "What's the taste of salty coffee?" It's sweet. "She replied".


Sưu tầm

Read More...

    Recent Posts

    Recent Comments