Timezone of Response of Silverpop API datetime

After some hours debugging, I found out:

The datetime return from Silverpop API is set in timezone of the login user. Why?

– login user has 1-1 relation with the refresh token (Want to change? Go to Org Amins, Oganization Settings, Application Account Access)
– refresh token has 1-1 relation with the oauth-key
– and we use oauth-key to make API call

So if we use user@examplecom/somepassword to login to https://engageXX.silverpop.com/settings.do?action=userProfile

then change the Localization/TimeZone to GMT

 

 

And then:
For example, if we call API to get all MailingTemplate, then LastModified Date of each MailingTemplate in the Response is in GMT timezone

FASTFOOD: 2013 sẽ là năm cất cánh cho web

Vì sao?

Một số công nghệ web đã trưởng thành và sẽ được triển khai trên nhiều trang web, mang lại nhiều ấn tượng cho user, giảm công sức cho lập trình viên khi phát triển và phân phối ứng dụng

CSS filters, mang sức mạnh đồ hoạ 3D

Cho phép thực hiện nhiều hiệu ứng đồ hoạ phức tạp (làm mờ, đổ bóng, bóp mép, đổi hình dạng của đối tượng, thay đổi mật độ màu, …) bằng các khai báo đơn giản.

Cho phép thực hiện các thao tác đồ hoạ phức tạp như đổ bóng vertex (như dùng GLSL, được ứng dụng phổ biến nhiều năm nay trong các xử lý đồ hoạ 3D)

Xem ví dụ tại CSS Filter

Lợi ích lớn cho các game nền web, các ứng dụng cần những hiệu ứng gây shock về đồ hoạ, xử lý ảnh

 

Google Chrome Apps

Google ko đối đầu trực tiếp với Windows, Mac, Linux, mà họ tạo ra Chrome,  cố gắng làm cho Chrome có mặt tại nhiều nơi, nhiều thiết bị như TV, laptop, điện thoại

Với Chrome, Google mang lại cho các lập trình viên khả năng viết chương trình bằng JS HTML CSS (là đơn giản hơn nhiều so với việc viết bằng C# Java PHP), chạy chương trình trong Chrome.

  • Phát triển nhanh chóng, thuận tiện
  • Rất dễ phân phối (vì có WebStore)
  • Có nhiều khả năng tương tác phần cứng (cổng serial, usb, bluetooth, webcam, mic, loa, âm thanh, …)
  • Vẽ thêm “cánh” (tương tác, tính năng) cho  ”hổ” (các trang web sẵn có)

Hiện tại, viết extension/app cho Chrome là dễ nhất, nhanh nhất và thuận tiện nhất (so với việc viết cho Firefox, IE, Opera)


ECMAScript 6, cải tiến Javascript

ECMAScript 6 (ES6), là cải tiến của JavaScript, sửa các vấn đề “chíu khọ” trong ngôn ngữ JavaScript, cung cấp tính năng mới thuận tiện hơn, dễ bảo trì mã nguồn hơn.

  • thêm class, kế thừa, mixins (lai ghép, tương tự như đa kế thừa trong C++)
  • Hệ thống tải/nạp module (giúp tổ chức mã nguồn gọn gàng, nhanh, dễ quản lý hơn)
  • proxies
  • cải tiến việc gọi hàm bất đồng bộ (asynchronous), vứt bỏ sự rối rắm của các hàm callback

Web Components

Web Components cho ta khả năng thêm tag mới cho trình duyệt, tương tự như những tag gốc sẵn có. VD:

  • Tạo ra thẻ mới (VD mydiv)
  • Tạo style và tính năng cho thẻ đó
  • người dùng khác chỉ cần khai báo thẻ, tương tự như thẻ gốc (div)

Web Components sẽ thay đổi cách viết, sử dụng và phân phối các thư viện JavaScript hiện có theo hướng dễ dàng hơn nhiều.

Tương lai

Các tính năng mới, API mới sẽ được (tự động) đưa vào trình duyệt mới ngày càng nhanh hơn

  • Vì phần lớn các trình duyệt sẽ tự động cập nhật phiên bản mới
  • Với Chrome, cứ 4 tháng là sẽ có một bản mới sẽ được đưa tới 350 triệu người dùng
  • Thị phần của các trình duyệt Webkit đủ lớn, để các trình duyệt khác (như IE, Opera, Firefox) phải chạy theo và đưa tính năng tương đương vào.

Lập trình ứng dụng Facebook

(FASTFOOD version  – không trau chuốt sửa chữa)

UPDATE:
Lập trình ứng dụng cho Facebook sử dụng Eclipse Galileo – Develop a #Facebook #app with #Eclipse Galileo – Learn the Facebook Connect API
http://su.pr/AckWqo

Viết facebook app bằng .NET (dùng VS2008 và bộ Toolkit nguồn mở): http://www.stevetrefethen.com/wiki/Facebook%20application%20development%20in%20ASP.NET.ashx

Ngày 18/11/2010, Facebook thông báo một tính năng mới cho các lập trình viên.
– Chúng ta đã có thể tạo TestUser để thử nghiệm ứng dụng mà ko phải lo lắng về chuyện bị Facebook coi là spam.
– Các testUser có thể kết bạn với nhau (ko cần accept).
– Khi dùng xong có thể xoá đi.

– TestUser không tương tác với các account thật của Facebook được,và cũng không chuyển đổi thành account thật được.
– Không truy xuất được các nội dung công khai trên các Page (thật, hiện có).

http://mashable.com/2010/11/17/facebook-test-users/

Cần

  • Chuẩn bị kỹ thuật, server
  • Thêm ứng dụng Facebook Developer vào account Facebook của mình, đây là chỗ quản lý và cấu hình các ứng dụng mà bạn phát triển
  • Thiết lập tham số cho ứng dụng mới của bạn
  • Phát triển ứng dụng của bạn
  • Quản lý ứng dụng của bạn
  • Cần có facebook account
  • Cần biết lập trình một ngôn ngữ (dùng để viết) web nào đó, VD như PHP, Ruby on Rails, JavaScript, Python, ASP.NET — Nhất là những nền tảng ngôn ngữ có sẵn thư viện API để viết Facebook app (PHP, ASP.NET).
  • Hiểu biết cơ bản về Internet, SSH, MySQL, và Unix
  • Biết sử dụng Web hosting, có host để xài (để chứa ứng dụng của bạn)
  • Server cần chạy được HTML, tối thiểu một nền tảng lập trình web PHP (có cURL) và/hoặc .NET. Nếu có kết nối CSDL càng tốt
  • Cần cài ứng dụng Developer của Facebook
  • Vào mục này http://www.facebook.com/developers/ , chọn allow (để sử dụng facebook app Developer trong profile của mình)
  • Nhấn “Set Up New Application”. Khai báo, submit.
  • Xem thêm về các trường có thể khai báo tại đây: http://wiki.developers.facebook.com/index.php/Creating_a_Platform_Application

Có 2 thông tin quan trọng cần lưu ý:

  • * API key: chuỗi này là định danh ứng dụng của bạn với Facebook (về sau khi gọi API tới facebook luôn phải đính chuỗi này vào)
  • * Chuỗi bí mật của ứng dụng: Facebook sử dụng key này để xác định ứng dụng nào đang gọi, bạn ko được share key này cho ai khác.
  • Lưu ý, mỗi khi sửa thông tin của App, sẽ mất vài chục phút để update trên các Server của FB.
  • Các trường thông tin cần sửa là:
    • Canvas Page URL (url trên facebook để truy cập ứng dụng của bạn, lúc test bạn sẽ chạy thử từ URL này)
    • Canvas Callback URL (url của ứng dụng, mà bạn host trên site)

Tóm lại

đây là mô hình của ứng dụng trên Facebook: User Facebook Website của bạn (hay ứng dụng của bạn)

Do vậy, bạn nhất thiết phải có một webserver trên mạng (hosting, hoặc server riêng). PHP và MySQL là nên có, dù không bắt buộc.

Một số phần quan trọng để ứng dụng của bạn thực sự trở thành một phần của facebook

  • Kiểu dáng phù hợp http://devtacular.com/articles/bkonrad/how-to-style-an-application-like-facebook/
  • Liệt kê App lên Application Directory
  • Chỉnh sửa các thông tin cơ bản của ứng dụng thật đầy đủ, nhất là trang About của App
  • Canvas Page: là nơi hiển thị chính của ứng dụng, là nơi cho user tương tác với App của bạn
  • Profile Box: ứng dụng của bạn có thể được hiển thị trên trang Profile của user
  • Application Menu: menu nhỏ bên dưới góc phải, tương tự như menu Start của Windows.

Xài FBML hay iframe cho ứng dụng của bạn?

http://wiki.developers.facebook.com/index.php/Choosing_between_an_FBML_or_IFrame_Application

FBML

FBML diagram

  • Dựng trang nhanh dễ, dùng thẻ của facebook
  • Thể hiện các thành tố cơ bản của facebook rất đơn giản (chỉ cần ghi thẻ tương ứng là xong)
  • URL và kiểm tra xác thực user đơn giản

IFrames

Iframe diagram

  • Linh hoạt, thích viết gì thì viết, vì bản chất là User tương tác với trực tiếp với trang nằm trên hosting của mình
  • Chuyển các ứng dụng có sẵn sang dạng Facebook dễ dàng
  • Nhanh hơn khi sử dụng, User view trang không cần qua Proxy của FB để render các thẻ
  • Sử dụng JavaScript, HTML, CSS của mình (xài jquery, blueprint vô tư)
  • Chạy ajax nhanh hơn do user chạy trực tiếp trang của mình (không qua proxy)
  • Debug dễ hơn (vì mã HTML và js là nguyên bản)
  • vẫn chỉnh được kích thước (auto resize), không ngại bị scrollbar (dùng thêm js của facebook trong iframe)

Khuyên dùng

  • nên xài iframe, ko phải tái nạp các thành phần topbar và appbar,chatbar của Facebook, vẫn tận dụng được tốt FBML nếu dùng XFBML.

iframe with XFBML

  • JS của facebook sẽ scan DOM và render lại các thẻ fb trên chính browser, bớt được các vòng roundtrip trên app server của mình
  • trích xuất dc URL trong iframe của mình ra trang facebook container (dùng js của facebook trong iframe của mình)
  • Nếu đang dùng iframe, có thể chuyển trang thành dạng FBML, sử dụng fb_force_mode
  • Có thể dùng HTML, đánh dấu, và dùng javascript lib của Facebook để có khả năng hiển thị tương tự FBML
  • http://wiki.developers.facebook.com/index.php/Using_HTML_to_Imitate_XFBML

Các thành phần cơ bản quan trọng của Facebook App

  • * API, gọi hàm, lấy dữ liệu trả về từ Facebook.
  • * FBML, Facebook Markup Language, ngôn ngữ mô tả của Facebook, khi ứng dụng trả về FBML, đi qua Proxy của Facebook, các thẻ fbml sẽ được render để trả về HTML thực cho User.
  • * XFBML, một mở rộng của FBML, sử dụng javascript để render FBML trên trình duyệt của User, không đi qua proxy.
  • * FQL, Facebook Query Language, lấy dữ liệu sử dụng dạng ngôn ngữ tựa như SQL query, không cần dùng API. Giảm tải lời gọi API, chỉ lấy những gì cần, tránh dùng nhiều round trip (nhiều lần gọi API) để lấy thông tin. (cách dùng tương tự như gọi API vì nó là một hàm API mà, bạn gọi API fql.query với tham số là query của bạn)
    http://developers.facebook.com/news.php?blog=1&story=257
  • * FBJS, Facebook javascript

Facebook Connect

  • biết được user facebook đang ở trên site của bạn
  • đưa bạn bè lên site của bạn
  • xuất bản thông  tin mới từ site lên stream của các bạn facebook đã connect
  • làm cho user comment được thông tin trên site bạn, và hiện cả trên facebook

Di cư ứng dụng web social của bạn lên facebook

Chuyển hết kho user lên facebook account: http://wiki.developers.facebook.com/index.php/Express_Registration

 

Tổng hợp các kiến thức Facebook

http://developers.facebook.com/docs/guides/web/

 

 

  • Chuẩn bị kỹ thuật, server
  • Thêm ứng dụng Facebook Developer vào account Facebook của mình, đây là chỗ quản lý và cấu hình các ứng dụng mà bạn phát triển
  • Thiết lập tham số cho ứng dụng mới của bạn
  • Phát triển ứng dụng của bạn
  • Quản lý ứng dụng của bạn

Xây dựng hệ thống chơi game Tá lả phỏm online (garagames)

Tớ sắp làm (trong nhóm) một cái game chơi bài, trò chơi nổi tiếng và rất phổ biến tại Việt Nam – Tá Lả – Phỏm. Nếu các bạn muốn biết kỹ năng, những gì diễn ra trong đầu tớ, … hay đơn giản là cũng muốn tham gia, muốn học làm một thứ tương tự như thế này, thì hãy theo dõi bài này nhé.

UPDATE: Hệ thống (đã cải tiến và nâng cấp về performance, scale) đang chạy trên http://www.vn-zoom.com , hoạt động ổn định. Chúng tôi cũng sẵn lòng cung cấp các game này như là dịch vụ (SaaS) để cùng hợp tác triển khai trên hệ thống thứ 3, cùng tối thiểu hoá chi phí đầu tư và tăng hiệu quả kinh doanh.

UPDATE: Dịch vụ chơi game này đang được Minh Viet JSC cung cấp (giám đốc Dũng Nguyễn – Googler)

CREDIT: Rất cảm ơn góp ý của @hoangxu, @gachien, @dungla, @tridm, @lehuongA2, @hoahongxam trong quá trình xây dựng tài liệu

Mô tả về trò chơi

Tớ dùng ngôn ngữ đời thường bình dân để mô tả, các bạn có viết doc cho doanh nghiệp, khách hàng nhớ đổi giọng văn nhé. Cách mô tả ở đây là dựng user story, hướng tới các bạn lập trình viên, để các bạn có thể dễ dàng biến mô tả này thành tổ chức dữ liệu và module business cho chương trình

Luật chơi Tá Lả thông dụng – quy ước, thuật ngữ

Quân = Cây: chỉ 1 lá bài
Số: chữ, số in trên lá bài, chỉ độ to của lá bài (A là nhỏ nhất < 2 ❤ … < Q < K là to nhất)
Chất: màu, kiểu lá bài: rô cơ bích tép (nhép) (RCBT)
Bài (để chơi): luôn luôn có 9 cây (mỗi Người luôn có 9 cây trên bài và cả các cây đã ăn)

Hội chơi: một nhóm người chơi liên tục các ván tạo thành Hội. Hội tan rã (kết thúc) khi có 1 Người nghỉ.

Ván: một ván có tối đa 4 người chơi là Người1, Người2, Người3, Người4
NgườiN: N là số từ 1 đến 4, người bất kỳ trong ván chơi đều có Người Trước và Người Sau. Người cầm Bài để chơi.

Bắt đầu Ván: khi bắt đầu chơi, hệ thống sẽ Chia bài cho các người chơi.

  • Các quân bài khi chia được phân phối ngẫu nhiên. Các quân còn lại (Nọc) cũng được sắp xếp ngẫu nhiên.
  • Vị trí Người chơi 1 2 3 4 cũng được sắp xếp ngẫu nhiên. (hoặc vào trước ngồi trước)
  • Nếu Ù, có option để cho chọn có random lại chỗ ngồi không
  • Khi bắt đầu ván đầu tiên, Random để chọn người Đánh đầu tiên. Người này sẽ được (hệ thống) tự động lấy thêm Cây đầu từ Nọc

Nọc: phần bài còn lại ngay sau khi chia xong, đặt ở giữa bàn.

Cạ: 2 Quân cùng số (số bằng nhau, VD cùng là 2, cùng là Q) hoặc 2 Quân cùng Chất có Số cách nhau 1 hoặc 2 đơn vị
Phỏm: (Note: Phỏm cũng đc coi là cạ, vì vẫn thoả mãn điều kiện của Cạ): gồm 3 Cây trở lên. Các Cây này cần thoả mãn tính chất: liên tiếp Số cùng Chất, hoặc các cây có cùng Số

Lượt: Ván tá lả chơi theo lượt, lần lượt từng người chơi (Từ Người1 đến NgườiN, sau NgườiN là Người1). Mỗi khi đến Lượt (có Lượt), Người chơi phải làm hai việc: Lấy bài và Đánh bài. Lấy bài là quyết định Ăn cây Rác của Người Trước hoặc bốc một Cây từ Nọc lên. Đánh bài là Đánh, hoặc Ù. Lượt đổi luân phiên Ngược chiều kim đồng hồ.
Đánh: một Người khi đến lượt chơi, luôn luôn phải đánh Cây Rác (Người Sau có thể Ăn). Không được đánh cây đã Ăn. (Note: Đánh cây trong Cạ, trong Phỏm đều được) (Note: Móm vẫn phải đánh)

Cây Rác: Khi đến lượt, sau khi Lấy Bài (Người chơi sẽ có 10 Cây), Người chơi phải Đánh ra một Cây Rác (để bài luôn có 9 Cây)
Cây Đã Ăn: Người chơi ăn Cây Rác của Người Trước thì Cây đó sẽ trở thành Cây Đã Ăn của Người Chơi (đang có Lượt). Cây Đã Ăn phải luôn lật cho tất cả Người chơi trong Ván được biết.
Bốc: lấy một Cây từ Nọc khi đến Lượt
Chốt: khi Người chơi có Lượt mà Người Sau đã có 3 Cây Rác thì lần Đánh này gọi là Chốt.
Ăn: một Người khi đến lượt chơi, có thể ăn của Người Trước, chỉ được Ăn nếu cây đó Ăn vào Cạ –> trở thành Phỏm. Mỗi Phỏm chỉ được Ăn vào 1 Cây. (VD: có Cạ 2R3R, có thể ăn 1R, 4R. Sau khi ăn 1R, không được ăn 4R nữa. Nếu có cạ 2R3R 5R6R, có thể ăn 1R và 4R, trường hợp này không tính là Ăn 2 lần vào Phỏm vì 4R ăn vào Phỏm 5R6R chứ không phải ăn nối vào 1R2R3R).

Tạm thời không cho phép ăn khống. (hoặc bố trí đây là ràng buộc Option)
Chú ý với các phỏm dọc, thì số nhỏ nhất là A, số lớn nhất là K. (VD chỉ có thể có Phỏm 1 2 3, J Q K, không cho phép Q K A)

Chuyển: khi có người Ăn, Cây Rác trên cùng (vì mỗi Người có thể có nhiều Cây Rác) được chuyển Ngược chiều kim đồng hồ 1 mức.
Tái: sau khi Chuyển, Người nào có Cây Rác giảm xuống từ 4 -> 3 thì Người đó lại được có Lượt tiếp (Ăn/Bốc và Đánh tiếp)
(Note: Móm vẫn được Tái).

Ăn Chốt: Người chơi Ăn Cây Rác của Người Trước khi mà mình đã có sẵn 3 Cây Rác

Kết thúc ván: khi một Người đến Lượt mà đã có 3 Cây Rác, sau khi Ăn/Bốc, họ phải thực hiện các hành động theo thứ tự sau:

  • Hạ (nếu có Phỏm)
  • Gửi (nếu có thể)
  • Đánh (bắt buộc phải đánh, Móm cũng phải đánh)
  • Ngồi đợi với phần bài còn lại để tính điểm (nếu ván kết thúc bằng tính điểm)

Hạ: Khi Người nào đã có 3 Cây Rác, đánh Cây Rác thứ 4 thì phải Hạ, trình tất cả các Phỏm của mình ra, thực hiện các lần Gửi. giữ lại các Cây còn lại để tính điểm. Thứ tự hạ trước sau có liên quan đến thắng thua. Nếu tổng số điểm bằng nhau, Người nào Hạ trước sẽ thắng. (Note: một Người có thể Hạ nhiều lần, do họ có thể được Tái)

Gửi: khi Hạ, nếu Người chơi có Phỏm để hạ thì sẽ được Gửi. Người chơi đưa các cây trên bài mình vào các Phỏm của Người đã Hạ trước sao cho Phỏm đó vẫn đảm bảo tính chất Phỏm sau khi Gửi.
Móm: khi Hạ, nếu không có Phỏm, Người chơi sẽ bị Móm. Móm không được Gửi.
Ù: Bất kỳ lúc nào khi 9 Cây trên Bài có thể sắp xếp thành các Phỏm mà không còn thừa cây nào thì Người chơi có thể Ù. Thời điểm Ù khi nào do Người chơi quyết định. Khi Ù, Ván kết thúc ngay lập tức.
Khi Hạ, sau khi trình hết Phỏm ra, Người chơi có thể Gửi đến mức không còn Cây nào (Tính điểm = 0) thì cũng là Ù. Ván chơi kết thúc lập tức.

Ù Khan: Ngay sau khi chia xong bài, nếu Người chơi không có bất kỳ Phỏm hay Cạ nào thì tính là Ù Khan, quyền lợi giống như Ù.

Ù Tròn: Người chơi khi đến lượt có 10 Cây trên bài, đều có thể ghép thành Phỏm cả –> được gấp đôi Ù

Đền: Một Người chơi phải chịu phạt thay các Người khác. Có nhiều tình huống dẫn đến phải đền:

  • Do ngốc: Nếu Người chơi nào bị ăn 3 Cây Rác (dẫn đến Người Sau được Ù) thì phải chịu thay các Người chơi (không Ù) còn lại phần phạt khi Ù.
  • Đền do Tái vòng: khi người được Tái lại Ù, người ăn chốt cuối cùng phải chi trả phí Ù (chi 15Chip) hộ hai người còn lại.
  • Đền do Ăn láo: Ăn 2 cây vào một Phỏm, Ăn không thành Phỏm (nếu gỡ bỏ ràng buộc khi Ăn sẽ xảy ra trường hợp này)
  • Đền do gửi: không áp dụng (VD: Người1 hạ 1R2R3R, Người2 hạ, rồi gửi con 4R vào, Người3 Hạ, rồi gửi 5R vào, Ù –> Người2 bị đền –> do tạo điều kiện cho Người sau Ù)

Hoặc trong quá trình hạ, người nào ăn cây thứ 4 của người trước đó và khi một trong những người hạ sau Ù

Tính Điểm: Sau khi các phỏm đã hạ hết xuống và gửi đi thì các Cây trên tay sẽ sử dụng để tính điểm bằng cách cộng lại số điểm của từng Cây (A=1, J=11, Q=12, K=13). Nếu bài nào có số điểm thấp nhất thì thắng. Trường hợp đồng điểm thì tính theo thứ tự Hạ, Hạ trước thì thắng.
Trường hợp tất cả cùng Móm, người nào Móm trước thì thắng.

Luật tính thưởng phạt

Đơn vị cơ bản cho một ván là Chip. Một Chip có thể đổi thành x Coin (tuỳ theo nhóm chơi quyết định).
Các thưởng phạt được tính theo quy tắc sau:

  • Ván kết thúc bằng Tính Điểm: Người nhất được lấy tất cả thưởng của các Người còn lại. Người nhì nộp 1Chip, ba nộp 2Chip, bét nộp 3Chip.
  • Móm phải nộp 4Chip.
  • Khi Ù, mỗi Người còn lại nộp cho Người Ù 5Chip (tổng cộng Người Ù ăn 15Chip)
  • Ù Khan, cũng như Ù
  • Ù Tròn, gấp đôi Ù
  • Người bị Ăn Chốt nộp 4Chip cho Người Ăn
  • Người nào ăn khống trong Lượt, khi đến cuối mà không có Phỏm cho Cây Đã Ăn ấy sẽ đền 5Chip cho mỗi Người còn lại (mất tổng cộng 15Chip).

Business

  • Hệ thống hỗ trợ chơi theo luật Phỏm Hà Nội
  • Hệ thống có API cho các client giao tiếp tự do (client có thể là wap, web, mobile app)
  • Không có chế độ cho máy chơi (do hạn chế thời gian nên không cài đặt AI cho máy được)
  • Luật nộp Gà: Option. Khi bị Ăn, Người bị Ăn nộp 1 Chip vào Gà.
  • Khi Ù (Ù, Ù Tròn, Ù Khan): Người Ù được nhận toàn bộ số Chip trong Gà.
  • Luật được thiết kế để không phá hỏng tính đúng của Ván bài, tuy nhiên không ràng buộc quá chặt –>Người chơi có thể mắc sai sót (dẫn đến phải Đền) như vậy mới hấp dẫn và hay, giống thực tế
  • Một số luật bổ sung nhưng không phổ biến, sẽ được xem xét để cài đặt sau hoặc để dạng luật option của Ván.

.

Design

Do thời gian thực hiện dự án quá ngắn, nên phải theo phương pháp phát triển dự án Agile. Phần design sẽ được giảm thiểu tài liệu.

Hạn chế cài đặt các luật Option

.

Code

PHP
lock/sync
RESTful API
Flash
JavaMobile

Cache control problem with IE6 when do Ajax site call XML API

When create ajax site, we let client browser use js to make some call to our API services (REST). API function return output as XML (our format). Then the js at browser parse the return XML to display some fancy on screen.

Firefox, Mozzila base work fine, but IE6 is so stupid and lazy. IE6 cache the return XML data, and later call to API (with the same URL), IE6 take data from it internal cache, avoid calling from API.

To avoid it, our API server must send some header(s), tell the browser (client) NOT TO CACHE the XML data (fetching from API). You must do it from SERVER, remember.

Here is correct sequence (write in PHP), work for IE6

header(“Expires: Mon, 26 Jul 1997 05:00:00 GMT”);
header(“Last-Modified: ” . gmdate(“D, d M Y H:i:s”) . ” GMT”);
header(“Cache-Control: no-store, no-cache, must-revalidate”);
header(“Cache-Control: post-check=0, pre-check=0”, false);
session_start();
header(“Cache-Control: private”);

But, beside the problem with IE (while using js, make ajax call to XML file), using caching with API oriented and ajax call is very sweet.

Some resource I found here about caching:

http://www.htaccesselite.com/using-php-header-function-vt156.html
http://www.phpbuilder.com/board/showthread.php?t=10294526
http://www.websiteoptimization.com/speed/tweak/cache/
http://www.chriskirkland.net/news/59_PHP-Cache-Control-script.html
http://www.badpenguin.org/docs/php-cache.html
http://www.mnot.net/cache_docs/
http://www.htaccesselite.com/using-php-header-function-vt156.html