Welcome to TTKS/KTQN

CLICK HERE TO OPEN

Sunday, December 18, 2011

WRITING AJAX IN NOTEPAD - FOR BROWSER I E ONLY

AJAX là chữ viết tắt của Asynchronous JavaScript And XML.Nó là dụng cụ kết hợp bởi JavaScript, XML, HTML, CSS,DOM,XMLHttpRequest object để browser gửi tài lịêu tới server rồi tiếp theo sau đó browser sẽ nhận tài lịêu trả lại theo từ server theo yêu cầu của chung ta và cho xuất hịên tài lịêu trên màng hình computer.
Trước năm 1980, vì phải dùng frame hay form nên Ajax không gọn và nhanh bằng Ajax hiện nay.
Kể từ khi JSON xuất hiện rất nhiều programmers thích dùng  AJAX với JSON để cho việc  làm của AJAX nhanh và gọn hơn nữa.
Trong bài nầy chúng ta tìm hiểu cách viết Ajax trong notepad và xem Ajax họat động như thế nào.
*Viết một đề tài gọi là text.
Mở notepad viết một đề tài theo ý muốn,thí dụ đề tài “ Nhớ Mẹ”.Viết xong thì save trong Text documents như sau nho_me.txt.
* Viết Ajax .
Mở notepad,chép cẩn thận bảng html phía trên rồi save với tên là ajax.html

Khi  bấm chuột vào chữ Click thì data chứa trong file nho_me.txt liền hiện ra nhờ dụng cụ AJAX có chứa sẵn trong Browser Internet Explorer.
Nếu không muốn viết code dài dòng như bảng html trên ,chúng ta viết như sau trong html tags để mở file nho_me.txt.
Browser tự động xử dụng Ajax Script tạo request rồi nhận trả lời và display ngay file nho_me.txt



Nếu muốn mở file của website thì viết URL của website  thay cho file nho_me.txt

* Cắt nghĩa bảng AJAX-html

Trước hết tạo một variable là  var xhrobj  trong memory.Sau đó
tạo một function request() và một function  response().Tên của 2 functions nầy tuỳ ý chúng ta chọn lấy chứ không bắt buộc phải theo như bảng html trên.

Vì XMLHttpRequest object là của Microsoft sáng kiến nghĩ ra-invented by MS- nên trong phần đầu tiên của  function request () phải viết theo công thức của Microsoft như sau nếu dùng Browser Internet Explorer.
xhrobj là viết tắt của XMLHttpRequest object.

if (navigator.appName == "Microsoft Internet Explorer") {
    xhrobj = new ActiveXObject("Microsoft.XMLHTTP"); } 
    else {
    xhrobj = new XMLHttpRequest(); }


Trong 2 functions viết chữ màu đỏ, chúng ta nối xhrobj với các properties  và method
 ( bằng dấu chấm theo qui định của DOM ) sau đây thì sẽ có AJAX họat động.
 Chúng ta tìm hiểu những danh từ của properties và methods :
  open(‘get’,’…txt’) , readyState==4 , onreadystatechange , send( null ),  respondText

open(‘get’,’…txt’) là method dùng để initialize the XMLHttpRequest Object.Trong dấu ( ) phải có một trong những parameters  GET,POST,PUT,DELETE,HEAD khi gửi request đi.
Nhận thì dùng GET,gửi đi thì dùng POST

readyState  là property ,là value được diễn tả bằng một con số gọi là integer value cho biết tình trạng ( state ) từ lúc gửi request tới server cho tới khi nhận được hồi đáp .
readyState có 4 trị số (value) khác nhau.Mỗi trị số biểu thị cho mỗi trạng thái như sau.
     0 : cho biết XMLHttpRequest đã được thành lập (created )nhưng chưa initialized
     1 : cho biết XMLHTppRequest đang ở open( ) method và sẵn sàng gửi request tới server.
     2 : cho biết request đã gửi tới server nhưng chưa nhận được hồi âm response.
     3 : cho biết đề tài hồi âm (response headers) đã nhận nhưng thân bài thì chưa nhận được.
     4 : cho biết tài lịêu hồi âm đã nhận được hòan tòan và XMLHTppRequest Status là 200 nghĩa là “OK”.Nếu status=404 thì “ page not found.”
 onreadystatechange là property, là event handler của javaScript dùng để chỉ định method  đang xử dụng.
                            onreadystatechange=handler
onreadystatechange=ajax_response , phải viết trước send( ) method.
Mỗi lần readyState thay đổi value , thì xhrobj liền pháo kích ( fires ) vào onreadystatechange làm nó hoạt động (occurring,being triggered).
responseText là property dùng để chứa data mà server đã nhận.
Khi readyState có value 0,1,2 thì responseText chứa empty string.
Khi readyState  value = 3 , responseText chứa incomplete response.
Khi readyState value=4 , responseText chứa  đây đủ hồi âm.̣(complete response)

Tóm tắt : Mấu chốt làm cho AJAX hoạt động là XMLHtppRequest object viết tắt xhrobj.
XMLHtpp object được kèm với các properties và methods dùng để gửi và nhận tài lịêu data giữa browser và server mà không cần phải chờ đợi sang trang gọi là asynchronous
 Trong  function request ( ) cần có  xhrobj.open(…) ,  xhrobj.onreadystatechange vàxhrobj.send(null) .Khi open() method dùng GET thì chúng ta dùng null cho send() method.
 Trong  function response( ) cần có xhrobj.readyState và xhrobj.responseText
 Viết thu gọn AJAX
 Để giảm bớt code, bảng ajax-html trên có thể viết gọn như sau trong script tags.Các phần khác không thay đổi.
          var xhrobj;
      function request() {
           xhrobj = new ActiveXObject("Microsoft.XMLHTTP"); 
           xhrobj.onreadystatechange = function(){
                  if (xhrobj.readyState == 4){
                  alert(xhrobj.responseText);}
           } ;   //  chữ màu xanh lá cây gọi là handler function hay callback function
           xhrobj.open ('get','nho_me.txt' );
           xhrobj.send(null);   
            } ;
Lưu ý. open() method và send() method  phải viết sau cùng thì mới có kết quả.
( handler function also called callback function is called repeatedly.)

Trong xhrobj.open ('get','nho_me.txt',true ); có thể viết thêm chữ true nếu muốnasynchronous.
Nếu viết chữ false thì sẽ có synchronous và browser sẽ bị khóa cho đến khi nhận đủ hồi âm từ server.
Trong Ajax, handler function còn được gọi callback function phải đi theo vớionreadystatechange, sẽ được called khi có hồi âm response từ server và
có nhiệm vụ chính như sau.
- checking the progress of the request.
- identifying the result of the request.
- handling data returned by the server.

KHI NÀO THÌ CẦN VIẾT AJAX DÙNG TRONG  WEBSITE ? 

 AJAX co nhiều ưu điểm nên Google’s Gmail và Outlook Express đang xử dụng.Bên cạnh những ưu điểm vẫn có những khuyết điểm nên rất nhiều programmers đã cho ý kiến giống nhau như sau
* Viết webpages có AJAX khó hơn cách viết cổ điển vì phải dùng javaScript và mất nhiều thì giờ gây tốn kém.
* Nếu  webpages có nội dung cố định hay chỉ thay đổi chút ít thì không cần AJAX.
* Nếu muốn rất đông người mở xem webpages dễ dàng với những browsers cũ thì không nên dùng AJAX. vì browsers cũ thiếu hổ trợ.
* Dùng AJAX sẽ có vấn đề security kém an toàn.Hackers có thể lọt vào ở phần nầy.
xhrobj.onreadystatechange = function (){      
             if( xhrobj.readyState == 4 ){
               eval(alert(xhrobj.responseText));}};

* Tuỳ theo mục đích của webpages chúng ta mới quyết định dụ̀ng hay không  dùng AJAX .
* Phải dùng AJAX nếu webpages chứa rất nhiều data thay đổi tuần tự, nhiều data từ các nguồn-  sources-khác nhau và nếu cần phải loading nhanh chóng.
Hiện nay đang có những nghiên cứu cải tiến AJAX bằng kỹ thuật khác .


Friday, December 16, 2011

XMAS- 2011 ĐI THĂM BẠN TẠI PHILADELPHIA


ĐƯỜNG XA KHÔNG NGẠI VẪN ĐI
TÌM THĂM BẠN CŨ QUÂN NHU MỘT THỜI.

Thursday, November 24, 2011

LỄ THANKSGIVING CỦA USA

HÔM NAY 24-NOV-2011 LỄ TẠ ƠN THIÊN CHÚA CỦA USA

102 người nước Anh trong đó có 41 người Pilgrims theo đạo Tin Lành Puritan bị cấm đạo lên chiếc tàu gổMayflower do công ty London Virginia Company tài trợ, cho vay trả nợ sau và được chấp thuân của vua nước Anh, rời cảng Plymouth vào ngày 6 September1620 để tìm đến miền đất mới được tự do thờ phượng Thiên Chúa.

Một phần ba trong 102 người là trẻ mồ côi.

Sau 2 tháng vượt 3000 miles chịu sóng gió đầy nguy hiểm trên biển

Đại Tây Dương,họ thả neo gần Cape Code vào cuối tháng November

1620.Sau đó họ thành lập làng Plymouth bang Massachusetts

Năm 1621 họ trúng mùa trồng bắp đầu tiên tại miền đất mới lạ nhờ

lao động cần cù,những ngườì còn sống sót chọn ngày13 December

1621 để cử hành lễ Cảm Tạ Đức Thượng Đế goị THANK GOD

lần đầu tiên kéo dài trong 3 ngày với 91người bạn mới là thổ dân

Indian đã tận tình giúp đở họ sống còn.

Họ được người Indian hướng dẫn cách trồng bắp,cách bắt cá trong

sông,cách lấy sáp từ cây maple để chế biến mật ngọt, nhận diện tên

những giống cây độc hại v.v…

Mãi đến năm 1789,USA mới cử hành lần đầu tiên ngày goị là

THANKSGIVING TO GOD.

Sau đó đến năm 1863 President Lincoln quyết định chọn ngày

thứ Năm lần thứ tư của tháng November để cử hành lễ

Thanksgiving Holiday cho toàn quốc USA.

Trung tuần tháng mười năm1970,người viết bài nầy và một người bạn

là Kỹ Sư Vũ Duy Đề ( hiện ở Canada ) trong thời gian đi tu nghiệp tại

US Army Natick Laboratories,Mass đã được ông bà Walter,Earline Brown

đưa đi Cape Code thăm làng Plymouth rồi lên tàu Mayflower quan sát bên trong. Mayflower lúc đó là tàu đóng lại nhái theo mô hình cũ đã mục nát từ lâu.

Thursday, November 3, 2011

ANIMATION OF A DOLPHIN

Bài nầy hướng dẫn quý bạn phương pháp thực hiện một trò chơi cá Dolphin di động ở biển cả theo kinh nghiệm của người viết tìm cách thu gọn bớt những chi tiết để cho dễ hiểu và rất cần thiết bắt buộc phải có mà thôi.

Trước hết chúng ta mở Microsoft Word vẽ 3 cái khung có kích thước in hệt nhau.

Trong khung số 1,vẽ con cá dolphin và nước biển.

Trong khung số 2, paste con cá ở khung số 1 vào rồi thay đổi tư thế của nó và thay đổi hình thức của sóng biển khác với hình số 1.

Trong khung số 3,paste con cá ở khung số 2 vào rồi thay đổi tư thế của nó và vẽ sóng biển khác với khung số 2.

Chụp hình mỗi khung bằng screenshot và tồn trử ở dạng .GIF trong My document.

Mở My document nếu thấy có xuất hiện dolphin1,dolphin2,dolphin3 thì OK.Nếu liền sau những chữ đó có dính thêm chữ gì khác như .gif thì không được vì Javascript sẽ không họat động.

Quý bạn ai không có kinh nghiệm vẽ thì screenshot 3 bức hình nầy.Khi làm screenshot nhớ loại bỏ khung màu đen bằng cách chọn no color và nhớ ba khung phải có kích thước và hình thể in hệt nhau.

Tìm hiểu bảng html trên.

Trước hết phải cho biết tên,độ lớn và source path của bức hình đầu tiên mà chúng ta muốn khởi hành từ đó bằng cách viết trong tags như sau.

img src=”dolphin1.gif” name=”animate” width=”120” height=”90”

Khi mở Browser thì bức hình nầy sẽ hiện ra ngay.Bỏ hết các phần khác phía dưới nó vẫn xuất hịên.Các phần khác dầu có đầy đủ nhưng thiếu bức hình nầy thì html không hoạt động được.

Còn những bức hình khác kế tiếp chưa xuất hịên nhưng đã có sẵn sàng trong files được preloaded vào cache hay memory như diễn tả dưới đây.

Có 2 scripts.

Trong script thứ nhất chuyển đổi 3 tấm hình dolphin1,dolphin2 và dolphin3 thành 3 image objects theo qui định của JavaScript rồi liền sau đó mỗi hình phải nối với source path riêng của nó theo qui định của DOṂ ( Document Object Model ) bằng cách viết như sau.

var image1=new Image() // declare image object như vậy

image1.src="dolphin1.gif" // nối image object với source path của nó

var image2=new Image()

image2.src="dolphin2.gif"

var image3=new Image()

image3.src="dolphin3.gif"

Mục đích của script nầy là muốn Browser preloades files của 3 tấm hình vào memory hay cache ;khi cần thì hình sẽ xuất hiện ngay không chậm trể.

Muốn hiểu sâu chi tiết nầy, quý bạn nên tìm đọc “ How to declare or create an image object in JavaScript ? “

Trong script thứ hai,chúng ta sẽ làm cho những tấm hình trên di động theo phương pháp gọi là slide show .

Có một công thức quan trọng nhất là.

document.images.animate.src=eval(“image”+step+”.src”)

Phần chữ màu lá cây dùng để tiếp xúc với hình theo src (source path) của nó.

Phần chữ màu tím xử dụng eval( ) để evaluate và execute image,step và .src.Đây là new src source path assigned to the image.Nếu thiếu phần chữ màu tím nầy thi step++ tạo increment không thể làm cho những tấm hình dolphin1,dolphin2,dolphin3 lần lượt xuất hiện được.

Nếu chỉ viết document.images.animate.src=”dolphin2.gif “ thì tấm hình số 2 liền xuất hịên sau khi tấm hình số1 biến mất.Còn tấm hình số 3 không thấy xuất hiện tiếp theo cho nên cần phải có phần chữ màu tím và một function moveIt() hoặc function slideIt() để cho cả 3 tấm hình tuần tự xuất hịên không ngừng nghĩ.

Không muốn cho hình di động nữa thì click nút STOP nghĩa là clearInterval(t).

Trong script thứ 2 có thể rút ngắn hơn như sau để càng dễ hiểu hơn.

var animate

var step=1

function moveIt(){

document.images.animate.src=eval("image"+step+".src");

step++

if(step>=4){step=1} }

Nhớ xóa bỏ hết những gì có chữ step2. Kết quả vẫn tốt như ý muốn.

Để dễ hiểu và gọn hơn nữa,chúng ta tránh xử dụng eval() bằng cách dùng cách viết sau đây vẫn cho kết quả rất tốt.

function moveIt(){

document.images.animate.src=window['image'+step].src;

step++

if(step>=4){step=1} };

Theo ý kiến của nhiều programmers kinh nghiệm thì chúng ta không nên dùng eval() với lý do:

It is extremely powerful.It makes your code to be parsed twice .In javaScript,it gives us the bad coding.It is unsafe and also slower because of invoking the interpreter

Mong Quý Bạn tự mình tạo được Slide Show tùy thích.


Saturday, October 8, 2011

JAVASCRIPT GAME-HOW TO FIRE A CRUISING WARSHIP FROM A SAUCER

JAVASCRIPT- TRÒ CHƠI PHÁO KÍCH TỪ SAUCER TỚI TÀU CHIẾN ĐANG CHẠY TRÊN BIỂN

Trong JavaScript trò chơi nầy,chúng ta xử dụng̣ tọa độ của đường cong hàm số sinetượng trưng cho sóng biển để cho tàu chiến di chuyển trên đó và dùng tọa độ của đường cong hàm số parabola để quả pháo chuyển động theo đó và theo dỏi tàu chiến lúc tới gần hoặc chạy ra xa.

Nếu muốn phóng một phi đạn từ saucer thì phi đạn phải ở trong saucer.Do đó phải ấn định vị trí chỗ khởi hành và tọa độ di chuyển của phi đạn hoàn toàn giống hệt như của saucer như dưới đây.Cố nhiên trong phần Style/CSScủa bảng html trên phải viết thêm img=” ID” của saucer thi hình của saucer mới xuất hiện.

Dùng phương pháp passing data để làm di động cùng một lúc nhiều hìnhhay nhiều objects khác nhau

function doMove(ID,L,T,ID1,P,Q,ID2,R,S){

var object2=document.getElementById(ID);

object2.style.left=L+'px';

object2.style.top=T+'px';

var object1=document.getElementById(ID1);

object1.style.left=P+'px' ;

object1.style.top=Q+'px';

var object3=document.getElementById(ID2)

object3.style.left=R+'px';

object3.style.top=S+'px';}

var veloc=15 ;

var amp=10 ;

var freq=0.2 ;

var speed=2 ;

var i=0 ;

function passingData(){

a=60+veloc*i ;

b=amp*Math.sin(freq*i*2*Math.PI) ;

x=i*speed ;

y=0.1*i*i*speed ; // phần chữ màu tím giống hệt phần xanh lá cây

c=i*speed ;

d=y=0.1*i*i*speed

doMove('ship',a,b,'ball',x,y,'saucer',c,d) // passing data vào function doMove()

i++;

if(i>=40){i=0}}

Còn tiếp

Tuesday, September 13, 2011

PHƯƠNG PHÁP LÀM QUẢ BANH DI CHUYỂN THEO QUỸ ĐẠO ELLIPSE

JAVASCRIPT FOR A BALL BOUNCING IN ELLIPTICAL ORBIT

Ellipse có 2 trục.Trục dài gọi là a và trục ngắn hơn gọi là b

Toạ độ của mổi điểm trên ellipse tính theo lượng giác học là :

X=x+(a*Math.cos(i)) ;

Y=y+(b*Math.sin(i)) ;

Muốn cho quả banh di chuyển theo hình ellipse thì cần phải có 3 parameters

là ID của quả banh và tọa độ x,y của nó. Thay đổi góc i thì x,y thay đổi theo.

Muốn quả banh di chuyển thì cần phải thay đổi tọa độ x,y nghĩa là phải thay

đổi góc i.

Thay đổi góc i bằng cách viết var i=0 ; i=i+1̣ ( hay i++)

Muốn đổi hình ellipse thành hình vòng tròn thì trong function change(){…}

chọn a=b.Nghĩa là nếu chọn a=75 thì b=75 ; nếu chọn a=150 thi b=150.Quả

banh sẽ chạy theo hình vòng tròn.

Thursday, September 8, 2011

PHƯƠNG PHÁP LÀM QUẢ BANH BOUNCING THEO PARABOL

JAVASCRIPT LÀM QUẢ BANH DI CHUYỂN THEO ĐƯỜNG PARABOL

Lưu ý. Khi banh đang chạy, click STOP banh sẽ ngừng lại.

Sau khi STOP nếu Click START nữa thì banh lại di chuyển tiếp từ chỗ đã ngừng lại.

Trong khi banh đang di chuyển nếu click START thì banh sẽ trở thành bouncing xuống rồi lên không ngừng và click nút STOP không hiệu quả

Phần script rất quan trọng nên cần quan sát kỷ sau đây khi chép vào notepad.

function diChuyen(ID,L,T){

var object=document.getElementById(ID);

object.style.left=L+'px';

object.style.top=T+'px'; } // Quả banh cần phải có 3 parameters là ID,L,T.

var i=0

function tangDan(){

x=100+12*i; // trị số của x tăng dần theo i. i means increment

y=20+1.2*i*i // hàm số parabol y=x*x.Khi x tăng i thì y tăng i*i

diChuyen('banh',x,y) // passing values banh,x,y to parameters ID,L,T

i=i+1; // i=i+1 nghĩa là i++

if(i>15){clearInterval(t);i=0}

}

Với script trên,quả banh di chuyển đi xuống theo đường parabol.

Thay đổi dấu cộng bằng dấu trừ của 1.2*i*i rồi viết y=300 -1.2*i*i thi quả banh sẽ di chuyển đi lên theo đường parabol .

Khi quả banh đang bouncing,nếu muốn stop thì huỷ bỏ chữ clearInterval(t).

Quý bạn nên học sâu script code nầy vì đó là nền tảng giúp chúng ta có thể tạo bouncing cho quả banh theo những chiều tuỳ ý chúng ta.

Thí dụ nếu chúng ta xóa bỏ parameter L và cũng phải xóa bỏ luôn tất cả những gì có liên hệ đến L rồi viết lại như sau thì sẽ có quả banh bouncing theo chiều thẳng đứng y.

function diChuyen(ID,T){

var object=document.getElementById(ID);

object.style.top=T+'px'; }

var i=0

function tangDan(){

y=300-5*i*i

diChuyen('banh',y)

i=i+1;

if(i>5){i=0;}

Nếu muốn có bouncing theo chiều ngang x thì xóa bỏ parameter T và những gì liên hệ đếnT

Friday, September 2, 2011

JAVASCRIPT LÀM DI CHUYỂN QUẢ BANH KHÔNG DÙNG parseInt( )


JAVASCRIPT CODE MOVING A BALL WITHOUT USING parseInt( )


Trong bảng html trên chúng ta không dùng parseInt() để làm quả banh di chuyển 
như trước đây.
Trong tường hợp nầy cần đặt ra hai variables : variable object để chứa quả banh 
và variable location để theo dõi vị trí thay đổi của quả banh
(keep the track of the ball location) di chuyển.
Khi chúng ta muốn di chuyển từ left sang right thì chữ loc ám chỉ sẽ khởi hành từ 
left.
Khi muốn di chuyển từ top xuống bottom thì chữ loc ám chỉ bắt đầu khởi hành từ 
top.
Ký hiệu loc+=0.5 nghĩa là location=location+ 0.5 px (Tăng thêm 0.5 pixel cho 
location value.).Muốn tăng bao nhiêu tuỳ ý.Càng tăng quả banh càng chạy nhanh.
Đó là ký hiệu viết theo qui định trong JavaScript.Có thể viết loc=loc+0.5 vẫn có 
kết quả tốt.

Code object.style.left=loc có nhiệm vụ làm cho quả banh di chuyển và khởi 
hành từ bên trái ở vị trí qui định là loc.

Mở browser thì hình quả banh và 2 nút START ,STOP hiện ra như hình ở bên
 trái phía trên cùng.Quả banh ở vị trí 0 pixel đối với thành khung bên trái và 50px
 đối với thành khung đỉnh đầu.
Khi click nút START , quả banh bắt đầy chạy từ vị trí 0 pixel.Click nút STOP thì
 quả banh liền nhảy về vị trí đã khởi hành và dừng tại đó vì chúng ta đã ấn định 
như vậy trong function stop̣(){clearTimeout(t) ; object.style.left=0 }
Muốn cho quả banh chạy từ trên xuống dưới thì chỗ nào có chữ left thay 
bằng chữ top.
Bài kế tiếp là "Javascript code for a bouncing ball ." rất thích thú vì làm quả
 banh tự động chạy xuống tới vị trí qui định rồi tự động quay trở về nhanh hay 
chậm tùy ý rồi lại chạy trở xuống.Cứ tiếp tục như vậy cho đến khi chúng ta muốn 
stop.