星期四, 3月 31, 2005

elifdef

#ifdef 和 #if defined 一樣。
所以可以用

#ifdef USE_A
   .....
#elif defined USE_B
   .....
#elif defined USE_C
   .....
#endif

來作C裡面沒有的elifdef

這是查gnu cpp的online document查到的

星期一, 3月 28, 2005

Memo : Books to buy

Dive into Python.
MPEG4.

.天龍可以加入會員了,不用身分證字號。
會員卡scan後mail過去可以得到授權碼,
可以用7-11取貨。
可以用ATM。

英文大考驗-台灣小吃篇

在 http://www.longwin.com.tw/~jon/blog/archives/cat_ae.html 看到的

-----------------------------------------
早 餐~
燒餅     Clay oven rolls
油條     Fried bread stick
韭菜盒    Fried leek dumplings
水餃     Boiled dumplings
蒸餃     Steamed dumplings
饅頭     Steamed buns
割包     Steamed sandwich
飯糰     Rice and vegetable roll
蛋餅     Egg cakes
皮蛋     100-year egg
鹹鴨蛋    Salted duck egg
豆漿     Soybean milk
米漿     Rice & peanut milk
飯 類~
稀飯     Rice porridge
白飯     Plain white rice
油飯     Glutinous oil rice
糯米飯    Glutinous rice
滷肉飯    Braised pork rice
蛋炒飯    Fried rice with egg
地瓜粥    Sweet potato congee

麵 類~
餛飩麵    Wonton & noodles
刀削麵    Sliced noodles
麻辣麵    Spicy hot noodles
麻醬麵    Sesame paste noodles
鴨肉麵    Duck with noodles
鵝肉麵    Goose with noodles
鱔魚麵    Eel noodles
烏龍麵    Seafood noodles
榨菜肉絲麵  Pork , pickled mustard green noodles
蚵仔麵線   Oyster thin noodles
板條     Flat noodles
米粉     Rice noodles
炒米粉    Fried rice noodles
冬粉     Green bean noodle

湯 類~
魚丸湯    Fish ball soup
貢丸湯    Meat ball soup
蛋花湯    Egg & vegetable soup
蛤蜊湯    Clams soup
蚵仔湯    Oyster soup
紫菜湯    Seaweed soup
酸辣湯    Sweet & sour soup
餛飩湯    Wonton soup
豬腸湯    Pork intestine soup
肉羹湯    Pork thick soup
花枝湯    Squid soup
花枝羹    Squid thick soup

甜 點~
愛玉     Vegetarian gelatin
糖葫蘆    Tomatoes on sticks
長壽桃    Longevity Peaches
芝麻球    Glutinous rice sesame balls
麻花     Hemp flowers
雙胞胎    Horse hooves

冰 類~
綿綿冰    Mein mein ice
麥角冰    Oatmeal ice
地瓜冰    Sweet potato ice
紅豆牛奶冰  Red bean with milk ice
八寶冰    Eight treasures ice
豆花     Tofu pudding

果 汁~
甘蔗汁    Sugar cane juice
酸梅汁    Plum juice
楊桃汁    Star fruit juice
青草茶    Herb juice

點 心~
蚵仔煎    Oyster omelet
棺材板    Coffin
臭豆腐    Stinky tofu
油豆腐    Oily bean curd
麻辣豆腐   Spicy hot bean curd
天婦羅    Tenpura
蝦片     Prawn cracker
蝦球     Shrimp balls
春捲     Spring rolls
雞捲     Chicken rolls
碗糕     Salty rice pudding
筒仔米糕   Rice tube pudding
紅豆糕    Red bean cake
綠豆糕    Bean paste cake
豬血糕    Pig's blood cake
糯米糕    Glutinous rice cakes
蘿蔔糕    Fried white radish patty
芋頭糕    Taro cake
肉圓     Taiwanese Meatballs
水晶餃    Pyramid dumplings
肉丸     Rice-meat dumplings
豆干     Dried tofu

其他:
當歸鴨    Angelica duck
檳榔     Betel nut

星期五, 3月 25, 2005

Bookmark

AVR Libc source : AVR 版本的ANSI C library
http://savannah.nongnu.org/download/avr-libc/

AVR Sample Module Library : AVR外接chip的library module.
http://hubbard.engr.scu.edu/embedded/avr/avrlib/docs/html/main.html

星期四, 3月 24, 2005

sed

sed [-n] [-e 'script'] [-f script_file] file...

script的格式:

[address [,address]] command [argument]

command有

d : 刪除
n : 讀入下一行
a\文字 : 加入文字
i\文字 : 插入文字
c\文字 : 替換文字


Example

sed '1\4\d' fileout 將fileout的第一到第四行刪除後顯示出來

Kermit File Transfer


特性

  • 一次(一個session)傳送一個檔案
  • data 以block的方式傳送,一個block最多100 byte
  • receiver收到每個block都要做 acknowledges
  • 使用check sum 作error detection
  • 傳送中abort的話要整個file重新傳送

Sequence
  1. Client ready,送出NACK (Negative Acknowledge) 給server。Server回應S (Initialization),之後送出包含file name的F (File Header) packet。
  2. 用D (File Data) packet來送 file data。
  3. End of Transmission 用 Z (End of File) packet 來通知。
  4. Server 要 terminate  session 用 B (End of Batch) packet
  5. Server 的每一個packet,Client都要送出 acknowledge packet.
  6. Client 或 Server timeout 時都要送出 T (timeout) packet.
  7. E (Fatal Error) packet會terminate session.
Packet

Packet 格式

Start of Packet   : 1 byte - 0x01
Data Block Length : 1 byte - 0x23 + Data block length
Packet Sequence   : 1 byte - 0x20 + packet sequence number
Packet Type       : 1 byte - reference below ..
Data block        : N byte
Check Byte        : 1 byte
End of Packet     : 1 byte - 0x0D


Packet Type

'N' : NACK  - datablock contains no data
'S' : Initialization - datablock contains initialize parameters
'F' : File Header - datablock contains the filename
'D' : File Data - datablock contains the file data
'Z' : End of fil - datablock contains user-selectable attribute
'B' : End of batch - datablock contains no data
'T' : Timeout delay exceed - datablock contains no data.
'E' : Fatal Error - block contains no data, transfer will be aborted.

Sequence


 initialize

        NCAK
Client----------->Server
      <----------
        S & F


 Data transfer

          D
Client <---------- Server
       ----------->
         ACK


 End Transder

          Z
Cient <------------ Server
      ------------->
         ACK

Client <----------- Server
          B

星期三, 3月 23, 2005

年度洗牙完成

昨天總算是所有牙齒的工作完成。
醫生說下次要9月5號以後才可以再去看。
  • 要用牙縣
  • 轉角處不要太用力刷
  • 刷牙要對著鏡子

星期二, 3月 22, 2005

完工: 將menu和移到external data

Lu Sir's idea:
設計上所有osd的Menu structure都是static宣告的。
所以可以全部搬到external memory space (flash)。
這樣code space就可以省下。
利用link script已經寫好的eeprom section.
因為eeprom自己管理,所以不用compiler管理。
借用eeprom section,將所有menu data移到 eeprom section.
(宣告時加 section space-specify word)
為external memory data寫read function (抄)
修改所有access menu的code,將read from progmem改為read from eeprom.
move font to 2nd sector.

OK! (p07)
原.text section size : 0x1c6a4
修改後 .text size : 0x1816c
program memory size是 20000.

遇到的問題
  1. password無法動作 : gcc的bug ? 將某function的register specifier刪掉ok.
  2. password無法動作 : 有些menu data access function用compiler的,不是用一般define的
  3. time可以修改,無法設定: 原source code的bug.
  4. 當機: 有些menu忘記先宣告eeprom的定義
......今天拿到camera.

後記:3/23 , merge w enos' latest verion ok : 2.0

星期四, 3月 17, 2005

New NB install Application

Firefox 1.01
MSN 7.0 beta
Marble Mouse (trackball) driver
TUGZIP zip/unzip tool
editor
ClocX
NVU
WinAvr - D:
SourceNavigator

問題:
touchpad的sliderbar不能和firefox配合。
marble mouse 的driver不能設定small button.
TUGZIP的shell extension導致explorer當機,將shell extension改少後OK。

星期三, 3月 16, 2005

今天領到.. Notebook ASUS A3100L

MIS已經裝好Win2000,因為公司只有win2000的授權。
SP4.
裝好output2002,設定mail account OK (exchange server)
裝好office。

原來這裡的password是不能自己改的,由MIS決定。
default password是識別證上的號碼。
==>所以只好改administrator的password (自己習慣的)。

因為沒有Win2000 install CD (和driver ?),所以還是先gost起來再安裝東西好了。
HD 36 (40?) G.
P1 : 6 G. NTFS.
P2: 30G. NTFS.

只裝了MSN 7.0b

Install printer driver - hp laserjet 1300

是用hp jet direct.
新增列表機--本地列表機--standard TCP/IP -- ip 192.168.192.133 (name隨便)
printer driver - 沒有,選windows update,會出現hp 1300 PS。
安裝完成,等1 min download and install driver。
print test page ok.

新的directjep有web interface,所以用
http://192.168.192.133 就可以access到jetdirect.

星期二, 3月 15, 2005

今天領到..and download procedure

DV_ 一台 : 借的,將來還要出貨。
Monitor一台 : 黑白
download cable.
80G HD.

install US232A driver : 使用uc232a_xp_15這個driver (from gmail file archieve)

38400.8N1.no flow control.
enter -> # prompt
help -> help messsage
login -> input password
load -> prompt
use kermit protocol, choose *.hfx.
once complete , it restart automatically.

為防止重複燒錄,會檢查版本日期,一樣的話就abort。

星期一, 3月 14, 2005

Memory Sections

Memory Sections

The .text Section

.text section內含所有instruction部分,這個section被區分為initN和finiN等幾個部分

Note:
avr -size並不會把.data 部分initialize data也加入flash size的計算,若是要之知道實際使用的flah大小,要自己將.text和.data兩個section的size加起來(.bss就不用加)。
sram的使用量則是.data和.bss的總合

The .data Section

這個section包含所有static,有初值的data。例如

char err_str[]="Your program has died a horrible death!";
struct point pt = { 1, 1};

如果要指定.data section的起始位置,可以在compile加上-Wl,-Tdata,addr 這個option,addr就是設定的data sector起始位置。要注意的是addr必須要加上0x800000的offset,這樣linker才知道.data是在RAM space。
說明
因為AVR是harvard架構,所以linker script將RAM的位址(virtual memory address)指定在0x800000-?,所以屬於RAM的資料都要加上0x800000的offset。
所以沒有加上0x800000的話,linker會把.data的.noinit部分放在flash (.text)區域,會產生錯誤。

The .bss Section

沒有初始化的變數

The .eeprom Section

安排eeprom的空間

The .noinit Section

是.bss section的一部分,和一般.bss內的變數不一樣的是,一般宣告,沒有初始化的變數在main執行前都會被初始為0。
但是宣告
int foo __attribut__((section(".noinit")));
的變數foo,會被放在.noinit,不會被初始為0。
所以這樣宣告
int bar __attirbut__((section(".noinit")))=10;
會產生link error。
一樣,可以用-Wl,--section-start=.noinit=0x802000指定這個section的起始位置。

The .initN Section

在main之前,各階段的init code。

.init0:
Weakly bound to _init(),如果user自己定義_init(),reset後到_init()執行
.init1:
未使用,user可以自己決定
.init2:
C program時,initialize stack
.init3:
未使用,user可以自己決定
.init4:
將.data section的初值由flash copy到ram,avr-gcc將出值放在.text之後,.init的function會作copy動作。
.init5:
未使用
.init6:
C+ +使用
.init7:
未使用
.init8:
未使用
.init9:
Jump into main()

The .finiN Section

類似.initN,不過是在main呼叫exit()後依次執行的部分。
由9開始執行

.find9:
未使用
.fini8:
未使用
.fini7:
未使用
.fini6:
C+ +的destuctors
.fini5:
未使用
.fini4:
未使用
.fini3:
未使用
.fini2:
未使用
.fini1:
未使用
.fini0:
infinit loop

Using Sections in Assembly Code

#include <avrio.h>

.section .init1,"ax",@progbits
ldi   rd0,0xff
out   _SFR_IO_ADDR(PORTB),r0
out   _SFR_IO_ADDR(EERB) ,r0

Note:
"ax"的a代表allocable, x是executable,@progbits代表有reference@progbits中的data.


Using Sections in C Code

#include <avrio.h.

void my_init_portb(void) __attribut__((naked)) \
     __attribut__((section(".init1")));

void my_init_portb(void)
{
    outb(PORTB,0xff);
    outb(DDRB ,0xff);
}
這個 function (my_init_portb)因為在.init1 section,所以在main()之前就會被執行。

Plane : on AVR . NCHP and DV_

  1. familiar w Atmega128
  2. familiar w gcc on AVR (winavr)
  3. simulavr and gdb

Job : 將MENU的定義由program memory移到external memory (目前是flash memory).

Atmega128的external memory address range : 64k(ad0-ad15).
所以目前用bank selector (以program io作高位址ad16-ad19).

問題:gcc的loader要修改,增加一個section,將這部分的data放到那裡。

星期五, 3月 11, 2005

Movie : 蒸氣男孩


steamboy : 好,這次一定要去看。

reading code, notes

看source code時最好能從function/variable name知道是local還是global variable.

memo . for video

intra frame coding
inter frame coding
RTP : Real Time Protocol
RTSP : Real Time Streaming Protocol
Full D1 : 720x480

Site Memo : GPL Video Server (and Client)

http://0x01.biz/tv.html
以下是他的說明
Video server is a streaming video server which feeds a Java applet/application for display. The updates are rather slow, somewhere in the 10 frames/second range on a PIII. The server is written in Bigloo scheme and C. The client is written in Java.

Site Memo : Video for Linux (V4l)

http://www.exploits.org/v4l/
Linux上有關Video的 resource.
以下是他的說明:

Welcome to the Video for Linux resources page. Here you will find links to programs and information about this API which actually handles more than just video these days. Video sources include TV cards and quickcams, but there are also audio sources like radio cards.

火星文翻譯器 and 軟體搜尋器(SNDB)

從 http://sys.idv.tw/inputurl.php co 來的...









軟體and SN搜尋
from http://www.sndb.net/




目前共累積23158筆資料


[TOP50] [NEW50] [新增到SNDB][Copyright Policy 著作權政策]




©SINCE 2001 SNDB

星期四, 3月 10, 2005

New job : network image playback..

Lu Sir問對AP有興趣可以做這個。

CCIR 已經不存在,改歸屬於ITU了

從 Video Demystified上看到:
The CCIR no longer exist - it has beed absorbed into the parent body, the ITU.
For a given "CCIRxxx" specification, see "BT.xxx"

星期二, 3月 08, 2005

Notes on Video

Video Signal 有三種形式(model)
Component video : RGB or luminance-chrominance 的同義型(YIQ or YUV)
Composite video : color (or luminance ) 放入載波( carrier wave)
S video :  ?

Analog Video
Analog video使用掃描線組成一個frame (一個螢幕)

NTSC
525 scan lines perframe. 30(29.97) frame per sec.
Aspect ratio  - 4:3
Interlaced, each frame is divided into 2 field, 262.5 lines/field.
20 lines reserved for control information at the beginning of each field.
    So the maximum of 485 lines of visible data
       每個frame分為兩個field,分兩次掃描,每個field只包含1/2 frame的掃描線,所以每個frame只有262.5個掃描線
       又每個field的前20 line用來儲存control information,所以兩個field總共用掉40 line的掃描線。
    Laserdisc and S-VHS have actual 420 lines.
    Ordinary TV - 320 lines.
Color representation
    NTSC 使用YIQ color model
    composite = Y + I cos(Fsc t) + Q sin(Fsc t)
          Fsc : frequency of color subcarrier.
    人眼對Y最敏感,依次是I,Q。 NTSC信號的Y使用4MHz,Q 1.5MHz,Y 0.6MHz。

PAL
625 scan lines per frame. 25 frames per sec
Aspect ratio - 4:3
Color representation
    使用YUV(YCbCr) colour model
    Composit = Y + 0.49 U sin(Fsc t) + 0.877 V cos(Fsc t)

Digital Video
Digital Video幾乎都使用component video


Chroma subsampling
為減少資料量,將人眼比較不敏感的信號的sampling rate降低(也就是說,使用較低解析度來表示),
因為人眼對Y最敏感,所以將Cb,Cr採用較低的解析度來表示。
一般subsampling的表示有:
4:2:2
    水平解析度降低微1/2,每兩點合併為一點。
4:1:1
    水平解析度降低微1/4,橫向每4點合併為一點。
4:2:0
    水平和垂直的解析度都降1/2,所以也是每4點合併為一點,但是是縱橫2x2的方塊。
* 一般JPEG和MPEG都使用4:1:1和4:2:0

Digitial Video的CCIR標準
CCIR (Consultative Committee for Internation Radio)

CCIR 601
525/60
CCIR 601
625/50
NTSC
CIF
PAL/SECAM
QCIF
NTSC
Luminance resolution
720 x 485
720 x 576
352 x 240
176 x 120
Chrominance resolution
360 x 485
360 x 576
176 x 120
88 x 60
Color Subsampling
4:2:2
4:2:2


Field/sec
60
50
30
30
Interlacing
Yes
Yes
No
No

* CIF ( Common Intermediate Format) is temporary standard, for about VHS quality.

Install Dictionary Plugin in Firefox

從Mozilla@Tw.. http://forum.moztw.org/viewtopic.php?t=2238
貼過來的
===========================================
安裝 DictionarySearch!!!

我們進去看看吧,通常套件的安裝,就在畫面上方的 resources 那行的 Installation 連結可以找到。點下去,我們就能看到:Install Dictionary Search (version 0.4).

用滑鼠點一下,就能裝了。裝好後,要重新啟動瀏覽器。
(如果有已經抓下來,或是人家收集好現成的,只要把 XPI 檔案拖拉進 Mozilla 視窗就可以安裝了)

重開後,去個英文網站,用滑鼠 Mark 一個英文單字,然後在上面右鍵,跳出選單中,是不是就有個「Dictionary search for "XXXX"」的功能?點下去,就會在新分頁中到 dictionary.com 查詢你指定的這個字。

「什麼啊?才dictionary.com一個站台啊?還英文的耶…」

現在教大家設定擴充套件的方法。通常擴充套件的設定會在幾個地方。
1.在「工具」功能表中
2.在「偏好設定」中

Dictionary Search 正是在「偏好設定」中…

我們可以自己設定要使用的線上字典,最多四個,本來是應該去自己看想使用的那個網頁的原始碼,去找 url 的,我在這裡提供幾個讓大家參考:

奇摩:
text: Search "$" in KIMO Dictionary
url: http://tw.dictionary.yahoo.com/word/$

顏氏線上字典:
text:Search "$" in Yan's Online Dictionary
url: http://www.onlinedict.com/servlet/MobiDictLookup14?WoRd=$

教育部國語詞典:
text: Search "$" in Chinese Dictionary
url:http://140.111.1.22/mandr/clc/dict/dict/newsearch.cgi?Database=dict&QueryScope=Name&QueryString=$

設定好後,試試看吧… [/url]

星期日, 3月 06, 2005

zaurus c700 all

這是所有的東西,當初的包裝盒,手冊,安裝光碟甚至保證書都在。
adaptor,sync cable.

已經中文化

已經安裝了
smbclient - 網路芳鄰
pdf viewer : pdf reader (中文)
zbedit : 字典
kmerine : msn
opera : browser
just reader : palm doc reader

C700的主體,有cf 假卡,伸縮筆和電池(沒拆出來拍)

c700

星期五, 3月 04, 2005

休假 - day 2

今天繼續昨天沒做完的是

看牙醫,洗牙,本來想順便補一補牙的,竟然還要約下一次。
因為健保卡刷一次只能作一次療程?
其實多付錢到沒關係,我怕的是沒有時間,停車位。

下午看了蝴蝶效應和記憶裂痕。
並不是故意挑的,想不到這兩部片還互相呼應呢,
一個是回到過去改變現在,
一個是看到未來所以從現在改變未來。

我絕得蝴蝶效應比較好看。

星期四, 3月 03, 2005

choice1



but googlr tell me...


今天(03/06)去看了,在桃園市復興路47號(安東街口)。
剩下16,17平的。
建地是三角型的,所以剩下的都角角的,
復裝潢,30萬。
總價可以壓到300萬-30。
但是角角的很可怕。
看了一下其他小平數的,都是格局正芳。
可惜。

STEVEN


steven..據說也要離開了,很對不起,當初(兩年前?)不應該留你下來的。
當時以為能自己能夠做主,讓你做些有趣的東西,大家一起做軟體的研究。
結果還是害你浪費了這段時間的生命。都作一些無聊的事。
現在只能w提醒你....是不是要用"落建",提早預防一下。

Max即將成為主力


Max. 剛進來(也快一年了)。
軟體的基礎還不錯,缺設計的觀念,剛開始我還有一步一步的希望由時作中讓他了解設計的方法。
但是他被要求作一些document後,我就沒興趣了,因為這要教要花很多時間,他被要求的文件可能沒辦法如期完成...

看他現自己摸索,應該也會進步吧。

Bye Bye 吳博士


吳博士,他的名子和清朝某皇帝的年號一樣。
將在美國成立工程部(對,pure software engineer主導的工程部)。
熟open source developement,他用vi寫程式。
寫makefile,用commmand cosole build program。
對windows IDE式的開發環境完全不熟。

喔,是他跟我說bye bye.

休假 - day 1

今天是休假第一天,還是下著雨的天氣。
下午終於將一直想看的神鬼認證看完了,
還算好看,雖然沒有預期的好看。
那個拍BMW廣告的好像也有演呢。

接著要作的是
到合庫開戶 --開好了,3:20去,4:00完,我是最後 一個。
看牙醫....沒去

一天真的是很快就過了。

剛剛把我所有的blog host都login了,剛剛藥記。
該去接老婆了。 7:10的自強號。

待在家真輕鬆:)

這是去開戶時停車的地方,畢竟臉皮薄,不好意思白停,所以進去找了一下翻譯機的電池。
很高興(也很可惜的),裡面的小姐叫我去7-11買。

星期三, 3月 02, 2005

Procedure to Quit

  1. 與主管談
  2. 到人資向阮先生拿離職單,他會向主管確認後再通知去拿。
  3. 實際上是在和主管談過後自己去拿,拿的時候阮先生會問一下為什麼想走。
  4. 離職單依照職級不同,要簽到不同的主管。
  5. 最後一天工作時,要交回離職單和識別證,並且準備兩個信封(一般的平信就可以),寫好收件人和地址,人資會將離職資料,健保單寄過去。
  6. 離職原因一般會寫”生涯規劃”。
  7. 離職單要寫”到職日”,在OA的"員工資料”可以查到。
  8. 離職單交老闆簽,簽過再交給下一個老闆(上一級),會有一級的老闆將離職單收走,放卷宗交到上面。
  9. 要確認老闆已經簽了,否則會一直押在那。
  10. Wait.助理會將簽完的離職單拿給你,並且有一個負責資產列表,問老闆要轉給誰,之後請助理移轉。
  11. OK後連同兩個信封,寫好收件人和住址,連同識別證交給人資阮先生旁邊的小姐。
離職單都有編號,我的是..506。
慘,老闆現在才說要延一個月。可是我已經延過一次,這樣一定會被認為沒誠意。
果然2005沒有一個好的開始。

要整理的東西

  1. 個人帶來的書和工具要寄得帶走
  2. Mail要寄得將Private和公事分開,如果有password保護,可以New一個個人資料夾without password,將原來的mail都移過去。
  3. 如果使用公司的PC,要寄得將所有非公司的軟體移除。
  4. 如果有account上的疑慮,將browser的temp file移除。
  5. 移除MSN。
  6. 注意一下,如果有用公司mail account註冊的resource,要改account。

Don't forget

  1. 滑鼠
  2. iPaq (OK)
  3. PDA cable - iPag & Palm (OK)
  4. PDA charger (OK)
  5. Books : building blocks (OK)
  6. Books : uC/OS
  7. palmpix (OK)
  8. 杯子
  9. 衣服
  10. 墊子 (OK)
  11. 維他命 (OK)
  12. 茶葉
  13. 小抽屜要檢查

星期二, 3月 01, 2005

這個很cool喔 - Ajax - Gmail大量使用的...

不好意思,因為很有趣,還是照co過來。
這原來是在 Jacky'sBlog
========================================================

Ajax 新浪潮

最近在 Adaptive Path 看到一個新的名詞:Ajax,究竟是什麼來的呢?原來在上一年漸露鋒芒的 XMLHttpRequest,也就是這一年來 Google 不停在玩的技術,用在 GMail , Google Suggests , Google Map 上。Ajax 的全寫是 Asynchronous JavaScript + XML,這個寫法是 Adaptive Path 所自創的縮寫,他們形容一個 Ajax 的網絡應用程式,有以下的特質:

  • XHTML + CSS 作合符標準的表達
  • 用 Document Object Model (DOM) 作動態顯示和互動
  • XML and XSLT 作為資料交換和操作
  • XMLHttpRequest 取得非同步資料
  • 用 Javascript 將以上種種結合在一起

ajax.jpg

這個技術的主角 XMLHttpRequest 的最主要特點,在於能夠不用重新載入整個版面來更新資料,也就是所謂的 Refresh without Reload。因為與伺服器之間的溝通,完全是透過 Javascript 來實行,也就沒有傳統網頁的表單發送而引至的整版重載的 overhead,帶給用戶很慢的感覺。又因為使用 XMLHttpRequest 本身傳送的資料量很小,所以反應會更快,也就讓網絡程式更像一個桌面程式。

Ajax 的技術表明了要使用 XML + XSLT 作為資料格式,其實並非必要, XMLHttpRequest 本身並沒有限制資料格式,可以是 XML 又或是純文字格式的文字,然後到 Javscript 的時候就可以隨自己的喜歡來操作了。例如在 Google Suggests 裏,回傳的資料其實本身就是 Javscript 。

其中一個 Ajax 的應用,可用於表單的資料核對。表單核對是每一個網絡應用程式必需一環,確保使用者輸入正確的資料後,才真正的進行動作。以往的做法是用 Javascript 或伺服器來做,如果兩邊都寫,那麼就會產生兩堆不同的核對程式碼,管理很不方便。用了 Ajax 的方法,就可以完全將核對邏輯放在伺服器端,客戶端的 Javascript 程式,則只是傳送用戶所輸入的資料給伺服器核對,如果有錯誤的話,則回傳錯誤訊息。

不過,用 Ajax 的方法究竟要如何傳送整個表單呢?如果只是單純的一、兩個輸入的話,則可以用簡單的 GET 的方法來傳送這一、兩個輸入資料。但如果表單上面有很多不同的輸入,可以有自動的方法去取得表單上的各個資料然後送出,而不是要逐個輸入值寫入 GET 的 url 裏?這要看看發展下去有沒有好用的 library 代勞。

另一個問題是,用戶可能基於安全的理由而將瀏覽器的 Javascript 關掉,所以設計時要考慮到此一點:究竟是要讓用戶必需開啟 Javascript 才可以用,還是設計到表單可以單獨的運作, Javascript 則只是增加實用性 ( Unobtrusive Javascript )?這當中又會有很多考慮,開發上有一定的難度。

雖然如此, 在這一年有關 Ajax 技術的發展會更多,我們會看到很多不同的網站,運用這種技術來增加頁面的互動性和實用性,大家拭目以待。

wxPython : getting started

wxWindow class是所有window元件的parent class,包括menu,button,toolbar,status... etc。
如果要產生一個windows application的物件,要用wxFrame(也是從wxWindow衍生的class)。
wxFrame實作了所有windows application需要的動作反應,像resize,move,get, lose focus.. etc。

所以最簡單的一個windows prorgram:

from wxPython.wx import *
app = wxSimpleApp()
frame = wxFrame(None,-1,"Hello World")
frame.Show(1)
app.MainLoop()


wxSimpleApp()是application的主體,
wxFrame是application的顯示(視窗)部分。

在Window中加入edit component (加入編輯的能力)

from wxPython.wx import *
class MainFrame(wxFrame):
def __init__(self,parent,id,title):
wxFrame.__init__(self,parent,wxID_ANY,title,size=(200,100),

py2exe : 將python script轉為EXE檔

讓人不需要安裝python也能執行你寫的程式。

Install py2exe:

download & execute py2exe-0.5.4.win32-py2.4.exe (for python2.4)
一樣的,安裝時會自動尋找python2.4的安裝目錄,並且自動安裝到python的目錄

開始

先將自己的application準備好(架設叫simple.py)
寫py2exe的setup script:

# setup.py
from distutils.core import setup
import py2exe

setup(console=["simple.py"])

執行

python setup.py py2exe

會產生一個build和dist目錄,dist裡面會包含所有需要的檔案。
目錄裡的simple.exe就是編輯過的執行檔。
build是編譯過程的暫存檔。

setup(console=["simple.py"]) 是用來編譯一個console program,
這樣的exe檔執行時會開啟一個console windows。
如果要編譯一個window program,不要開啟console,要寫
setup(windows=["simple.py"])

另一個說明

同文堂 firefox 1.0


原來的XPI限制firefox 0.9,有人將XPI解開,改成1.0提供下載。
但是因為下載的是XPI檔,所以要手動將XPI拉到上面的externsion windows中才行。
這樣重開firefox後,在custom toolbat中可以看到”同文堂”的tool icon,把他拉到toolbar就可以。