2011年5月28日 星期六

[Android] Notices

* 手機預設是會隨手機方向轉向,轉向後會使 activity 會重啟,所有狀態會回到初使值。

* dialog 字數會影響 dialog size in version 1.5 and 1.6 (?)



* Reference
- Android Screen Orientation Behavior

[Encoding] URL encode

  • URL 中只能出現部分的 ASCII 碼; 這些 ASCII 碼包含 a-z、A-Z、0-9、以及一些特殊字元和保留字元。因此若不是 ASCII 碼的任何部分,瀏覽器便必須對其進行編碼。
  • 對於 URL 的編碼要分前段後段
    • 前段會依瀏覽器的設定編碼,例: chrome 預設使用 UTF8; IE 預設使用 Big5 經設定後才能改為 UTF8
    • 後段則依使用者端設定編碼,例: chrome 預設使用 UTF8;
  • ISO-8859-1 是一個支援西歐語系的編碼,它是無法正確顯示中文。
  • 當設定網頁的編碼方式的時候(利用 meta 標籤),請選擇能夠呈現網頁內容的編碼;以台灣常見的正體中文來說,可以選擇 Big5 或者 UTF-8。
  • 當網頁經由 <form> 標籤傳送中文資料到伺服器端的時候,Firefox 和 IE(其他的瀏覽器可以自行去測試)會將 URL 中的中文資料依照網頁的編碼 方式來 encode。
  • 如果伺服器端使用的是 Tomcat 5.5.x 版,其預設的解讀中文資料的方式 是以 ISO-8859-1 來進行,因此會顯示亂碼;再進一步處理(或者顯示、儲存) 資料之前,請先給予適當的編碼;也就是說,若網頁編碼為 Big5,請在伺服器端 轉成 Big5;若網頁編碼為 UTF-8,請在伺服器端的程式將其轉成 UTF-8。



* Reference
- 關於各瀏覽器對網頁與文字編碼的處理規則研究整理 **
- 細談 URL 編碼 **

2011年5月15日 星期日

[Design] Validation on Business, Service, Web layer

對是否把校驗當作商業邏輯這個問題,存在著正和反兩種意見,而Spring提供的驗證模式(和資料綁定)的設計對這兩種意見都不排斥。特別是,校驗應該不應該被強制綁定在Web層,而且應該很容易本地化並且可以方便地加入新的驗證邏輯。基於上述的考慮,Spring提供了一個Validator介面。這是一個基礎的介面並且適用於應用程序的任何一個層面。



* Reference
- 5. Validation, Data Binding, and Type Conversion

URL 命名規則

* 因為是 URL,所以盡量簡短有意義好記的命名。

* 可以想成物件階層或是 map、array,將 [] 想成 /。

* 命名意義:

domain/context/function or objectId/function(content)

2011年5月14日 星期六

[Web] Cache

* cache 有以下類型:
  • cache 在 client browse.
    • 客户端的 browser 會自動 cache 一部份的靜態文件,以增加網頁速度。
  • cache 在 proxy server.
    • ISP 為了增加用户的訪問速度,也會在中轉的 server 中提供大量的 cache 文件,user 不用到目的地取,中途就有 data。
  • web 應用也会在 server 部署 cache module,從而將不會即時更新的網頁 cache 起來。
    • 這種 cache 有些是通過編寫程序實現的,有些是使用例如 memcached 這類模組實現的。
  • 編譯器 cache
    • 比如: php 程序在 zend engine 上跑,每次跑的时候都會進行編譯,這個編譯過程是會耗費 cpu 的。因此優化工具會自動 cache 已編譯的的结果。當然,jsp 也是這樣,不然我们總可以在 tomcat 的文件夾下找到些莫名的class 文件。

* 動態文件的 cache 方式:
  • 對於小的可重用的 data,通過 cookie cache 動態结果是個不錯的選擇。
  • 通過文件做 cache
    • 尤其適合新聞網站。訪問的时候看到的後缀是 html,但是實際上該 html 文件不存在的时候,程序會重定向,從而產生 cache 文件。在 apache server 中,這種重定向工作主要是通過 mod_rewrite 來完成的。當某些缺心眼的人不给你提供這玩意的时候,也可以通過 ErrorDocument 來設置。

* Purpose:
  • 因為大多數情況下,response time 都會花在取資料上,而且從 internet 的邊緣(?) retrieve data 比從 internet 中的速度更快、省錢。因此將不常更新的 web data 靠近 end user 保存,通过减少重複查詢 DB 的次數來提高 DB 的效能,即時返回 response data,達到增加打開網頁的速度,避免重複計算,使服務提供商保留頻寬,節省費用。
  • cache 設備 (proxy server?) 工作在比 router 更高的層次上,能夠把 user 要訪問的 message 抓到 local side,在最短的時間內將 message 連續、完整且即時的傳遞給 end user,不僅縮短了 response time,也提高了 server 在高峰時所能承受的訪問量。
  • In a word, 可以:
    • 降低頻寬的使用
    • 提升 server 效能


[cache in Client]

* 一般瀏覽器在瀏覽一個網頁時會把網頁上的資料複製一份到 Temporary Internet Files,因此打開網頁時速度不快,但再次打開時就會很快。

* 一些動態網頁,若被瀏覽器 cache 起來,然後沒有關閉 browser 再開啟便不會自動更新內容,因此即使按 F5 重新整理後也會看不出其變化。

* 每次 user 請求一個頁面的時候, browser 會先到 cache 裡查找是否有符合要求且尚未過期的內容,如果有則直接讀取 cache,而能省略網路傳輸。

* 因此通常靜態比較會採用 cache 方式。


[cache in Server]

* 如果您的瀏覽器有設定Proxy Server,瀏覽器閱讀前會先到Proxy Server上索取資料,如果Proxy Server上有資料(代表曾經有人讀取過該網頁)就會從Proxy Server上索取資料。


[No cache]

* 透過 HTTP head tag 中的 “Cache-control” 來控制。

* value 有 private、no-cache、max-age、must-revalidate等,default private。

* 其作用根據不同的重新瀏覽方式分為以下幾種情况:
  • 打開新窗口,如果指定 cache-control 的值為:
    • private、 no-cache、 must-revalidate,那麼打開新窗口訪問時都會重新 request server。
    • 而如果指定了 max-age 值,那麼在此值内的時間裡就不會重新 request。
  • 在位址輸入 URL,如果值為:
    • private 或 must-revalidate,只有第一次訪問時會訪問 server,之後就不會再訪問了。
    • no-cache,那麼每次都會訪問。
    • max-age,在過期前不會再訪問。
  • 回上一頁,如果值為:
    • private、must-revalidate、max-age,不會重訪問。
    • no-cache,每次都重複訪問。
  • 刷新頁面
    • 無論何值都會重覆訪問。(【Ctrl】 + 【F5】就可強制更新?)

* 根據 http 協議,通常是通過加 meta data 來控制瀏覽器緩存的。但是需要註意的是在某個 html head 加上 meta data cache-control 其實只能控制你當前這個文件的瀏覽器緩存,而在當前文件中類似於外部鏈接 javascript 文件或者其他靜態資源是不會加上任何 meta data 的,除非你使用 mod_expires 或者 mod_header 來配置的你的 apache 服務器。

* 原來有以下幾個語法可防止被 cache ,而每次 query 就都到網站來抓該網頁。

<%
    Response.Expires=0 
    Response.CacheControl = "no-cache"     
    Response.AddHeader "Pragma","no-cache"   
%>


* Reference
- 網頁內容不要使用cache的方法
- 不要把網頁 cache 起來的語法
- ASP.NET Cache支持的三种类型
- Web服务器服务器加速技术一(2)
- 系统管理 —— 缓存更新
- 第十三章 缓存机制
- http meta data 简介
- 8-2-3 整理cache
- http瀏覽器緩存控制筆記
- Cache无处不在

2011年5月8日 星期日

[Spring] mvc view-controller annotation


    spring-webmvc
    /


* 不管什麼 url 都要經過 spring-webmvc

* URL -> spring-webmvc -> controller -> tile

* URL -> spring-webmvc -> tile



* 因為 spring default 要經過 controller 做 mapping,所以要告訴它不必這樣做。

[Javascript] Note

必得寫成

<script></script>

完整的結尾

若寫成

<script />

在有多個 script 時 tag 的配置會錯亂!

2011年5月4日 星期三

[Server] Apache SSI

* Setting Apache SSI Configuration (httpd.conf):

- Load Module
加上以下 module,預設是有開,但還是檢查檢查
LoadModule include_module modules/mod_include.so

- Add "+Includes"
在 <directory "static="" path"="" resources="">;</directory> 此 Directory 中,
其中的 Option 後加上 +Includes

- Add filter
在 <ifmodule mime_module=""></ifmodule> 中加上 AddOutputFilter INCLUDES .html
表示要 include 的是 html 檔

--- 到此已可在 html 中 include html file ---

- 在 weblogic module, 中加上以下內容,
<location "/mobile">
    SetOutputFilter Includes
</location>

Location 指的是 context root


* 然後 便可在 html or jsp 中 include 另一檔案

html 中:  <!--#include file="xxx.html" -->

jsp 中:  <!--#include virtual="xxx.html" -->

2011年5月1日 星期日

[Tiles] 版本

在 tiles 2.2 以上

支援在 tiles config 使用 EL


[CSS] Text CSS

* 用 em 當單位的好處是會隨字體大小改變

* 緊排 (kerning) letter-spacing