2010/09/29

Google Spreadsheet 的應用 query filter 及簡單的 API

Google 有個 Google Live Form 的表單可以快速建立讓使用者輸入的表單。後端資料儲存在 spreadsheets,但是資料通常是一個很大的 table 不能只秀出我們要得資料。



通常這功能用來做訂便當系統是很方便的。






透過 publish to web  可以將網頁的內容輸出到網頁,讓使用者可以透過網頁觀看結果。但資料會太多,所以需要過 filter 的功能。



但現在有了 spreadsheets 有了 sql query 的功能可以讓我們自訂撈出想要的資料即可。

 Google Spreadsheet  提供類似 SQL query  的查詢工具,可以透過簡單的 SQL 語法撈出我門想要的資料。 他是透過 Google Visualization API Query Language.  的語法來做簡單的影用,在 youtube 上面有影片介紹如何使用:
 

http://docs.google.com/support/bin/answer.py?hl=en&answer=159999

範例:
Full example: =QUERY(A1:E6, "select avg(A) pivot B")
說明:
A1:E5 表示資料蘭範圍,"select avg(A) pivot B" 是 sql select 查詢句, from 預設值為 A1:E5 當然也可以指定不同的 sheets 來做查詢。

Select語法說明如下,和標準的 sql 很雷同:
http://code.google.com/intl/zh-TW/apis/visualization/documentation/querylanguage.html#Setting_the_Query_in_the_Data_Source_URL


看裡面的 select 及 where 兩個部份的 example 說明

於是我開了一個新的 sheet R0033 並作成這樣的查詢句
 其中 week_check_list 指的是表單 sheet 名稱,week_check_list!A:S 是說
這個表單的A~S欄位為資料來源。

select * 這裡代表顯示所有的欄為,當然也可以單獨指令欄為 ex: select B,C,D

where D like 'R0033' 指的是 D欄位的字串符合 R0033 的顯示出來

order by A desc 資料依照 A 欄位的排序,新的在上面

於是這段 sql query 我寫在 R0033 這個 sheet 內,就顯示了這樣的內容....

所以擴大輸出 all sheets 到 web 就變成這樣,使用者點選上面的編號就可以依照 sql 查詢句工作撈出的結果顯示在 web 上面。



如果還要進一步的運用資料,可以參考關於 Setting the Query from JavaScript

這裡直接提供一個 code sample 可以直接修改並且線上測試
http://code.google.com/apis/ajax/playground/?type=visualization#using_the_query_language

首先要餵給它 data source : Setting the Query in the Data Source URL

這裡用它原始的 data source 測試,我把它改成 table 的格式,可以讓每個人只要換 key 就可以套用。

測試網址(純html可以下載使用):http://code.jangmt.com/googleapi/test.html



詳細請看 google 說明: http://code.google.com/intl/zh-TW/apis/visualization/documentation/reference.html#queryobjects
 參考:http://blog.ericsk.org/archives/1417

補充說明:
剛剛測試完成後,本來可以的表單功能,送出竟然出現錯誤....^^!!!! 這是 bug 呀....google 你出來公塊賣...

2010/09/28

PHPLIST 使用及設定 - 發信設定

phplist 是一套功能很強大的發信工具,但他的製報功能不是很強.....
http://www.phplist.com/

這是他的特色(官方網站說明)
  • phplist is a one-way email announcement delivery system. It is great for newsletters, publicity lists, notifications, and many other uses. (It is different from group mailing list systems like mailman.)
  • The Web Interface lets you write and send messages, and manage phplist over the internet.
  • phplist keeps sending messages from your web server, even after you shut down your computer.
  • 100 000 + subscribers. phplist is designed to manage mailing lists with hundreds of thousands of subscribers. phplist is excellent with smaller lists too!
  • No duplicate messages. No 'forgotten' messages. phplist manages message delivery with a message queue, ensuring that every subscriber gets the email message, and that no subscribers receive two copies, even if they're subscribed to more than one list!
  • Open/View Tracking tells you how many users opened your email message. This provides a minimum statistic, as many email clients with privacy or security policies block images (gmail, thunderbird, and others).
  • Click Tracking tracks links and URLs. Statistics can be viewed by message, URL or subscriber.
  • Multiple Subscribe Pages allow you to choose many different combinations of templates, languages, user attributes and lists.
  • Templates are completely customizable, and make site integration a breeze.
  • Multiple Templates on different subscribe pages can integrate phplist with several different web sites.
  • Subscriber Attributes like 'name', 'country', and other personal information, are completely customizable. You can specify what information you need to get from users when they subscribe.
  • User Specific Content. You can use Subscriber Attributes in message content to make each and every email message personalized with the subscribers name, country, or any other attribute.
  • HTML email messages. Subscribers can be given the choice between text or html email messages. You decide whether subscribers can choose, what the default choice is, and what format a message is sent in: text only, html only, or both!
  • The HTML Editor allows you to edit html messages from phplist using FCKeditor. TinyMCE is also available.
  • Internationalization. phplist is available in English, French, German, Spanish, Portuguese, Traditional Chinese, Dutch, Vietname and Japanese and translation work is in progress for other languages.
  • Easy Install via Fantastico, FTP upload, or SSH.
  • Multiple List Administrators. The super-admin can assign lists to List Managers, who can manage their users and lists. The super-admin user can 'prepare' messages that can be sent by list managers to their lists.
  • Subscriber Preferences. Every email message contains personalized URLs for subscribers to update their preferences or unsubscribe. Subscribers can update their own information and keep your database up to date. Unlike most other mailing list managers, in phplist subscribers can change their email address.
  • The User Management tools are excellent to manage and maintain large databases of subscribers.
  • Bounce Processing keeps your database clean of unused and non-existent email addresses.
  • Advanced Bounce handling let's you teach phplist to distinguish between permanent and temporary message-delivery errors. You can define automated actions on receipt of bounce messages according to matches with your regular expressions.
  • CSV Import and Export. Use CSV and tab delimited files to import your existing list of users or to export the users on the phplist system for use in your in-house database. phplist's database has a 'foreign key' to help keep multiple copies of databases synchronized without duplicating users.
  • Attachments can be uploaded and included in messages for download.
  • Send a Web page. Tell phplist the URL of a web page you want to send to your users, and phplist will fetch it and send it. You can even put subscriber-specific parameters in the URL.
  • RSS feeds can be automatically sent to a mailing list weekly, daily, or monthly.
  • PDF messages can be automatically created and sent as attachments to ensure that your message is seen the way it was designed by all your subscribers, regardless of their email message reader.
  • Batch Processing is useful in shared hosting environments. Set the maximum number of sent messages in a given time period.
  • Throttling can limit the load on your server so it doesn't overload.
  • Domain Throttling limits the number of emails to specific domains to keep on the friendly side of their system administrators.
  • Scheduled Sending let's you tell phplist when the message is to be sent.
  • Repetition. A message can be repeated automatically to send updated dynamic content and attachments.
  • Text from HTML. Text email messages are managed fluently in phplist. phplist will automatically create a text version of an html message. Optionally the message composer can create it manually.
  • PGP signing and encrypting (soon).
    Send your message digitally signed or encrypted, or both.
  • Email to Fax (soon).
    Configure the details of your favourite email 2 fax gateway and phplist will send the HTML version of the message as a PDF attachment to your fax gateway. The fax will include the images in the HTML.
  • Integration with other tools. Several systems exist on the internet that integrate phplist with your favourite CMS or blogging tool. Check out the Documentation for a list.

連台大的的電子發報平台都是用它改寫的
http://epaper.ntu.edu.tw/


他的安裝請參考官方網站的說明,中文有空我在來寫
http://docs.phplist.com/PhplistInstallation

我要備註的是這一段,關於 README.commandline 的設定方式
官方的文件是這樣寫的
Running PHPlist from the commandline

Commandline processing requires PHP 4.3.0 or higher

A few pages in the PHPlist system can now, as of version 2.7.0 be run with
a simple command from the commandline.

the script to use is called "phplist" in the "bin" directory. You will have to edit
this script to fit your system

The normal PHPlist access restrictions are bypassed, but the Unix users who are
allowed to run the script should be mentioned in the "commandline_users" config
variable. The identity of a user is determined by the USER environment variable, which
may not always match your system.

The "p" parameter is the page that needs to be run.
Currently you can use "send", "processqueue" and "processbounces"

phplist -psend

This will require some more arguments:

-l list
-s subject
[-f from]

and you need to "pipe" the message into the script.

The -l parameter can have two types of values, the name of the list or the number of the list.
You can added multiple lists or multiple -l parameters
The subject can have spaces
The from is optional. It will default to the system administrator as set up in your config.

So the full "send" command line would be:

phplist -psend -s This is the subject -l test 1 2 3 -f me@server.com < messagefile




* 於是我在我的命令列下這樣的指令 /bin/phplist -p processqueue (處理電子報queue 的信件),它執行了一段時間,因為我設定發 300 封信後,需要休息 300 秒才可以繼續在工作,免得被當成廣告信件。如果這個動作在網頁上執行,它就會把該網頁綁住,然後一直的用 javascript 跑一個執行寄信的畫面,並且鎖住 browser 避免你關掉。但是如果可以把這一段寫成 cron(排成) 放在系統中讓他自己跑就會方便許多了。
epaper@www:~$ /home/epaper/bin/phplist -p processqueue
PHPlist version 2.10.12 (c) 2000-2010 Tincan Ltd, http://www.phplist.com
Started
Sending in batches of 300 emails
Script stage: 6
Finished, Nothing to do
Finished, All done
epaper@www:~$ /home/epaper/bin/phplist -p processqueue
PHPlist version 2.10.12 (c) 2000-2010 Tincan Ltd, http://www.phplist.com
Started
Sending in batches of 300 emails
Processing has started, 1 message(s) to process.
Processing message 66
Looking for users
Found them: 778 to process
batch limit reached: 300 (300)
Script stage: 5
300 messages sent in 335.89 seconds (3215 msgs/hr)
1 invalid emails
Finished this run
Reload required
You have mail in /var/mail/epaper

* 但是有想到另外一個問題,就是當一個發信的工作跑了很久可能需超過 24 hr 以上的時間發信,系統的處理是等待.....,所以這樣就不會有搶工作佇列的問題。
epaper@www:~$ /home/epaper/bin/phplist -p processqueue
PHPlist version 2.10.12 (c) 2000-2010 Tincan Ltd, http://www.phplist.com
A process for this page is already running and it was still alive 1 seconds ago
Running commandline, quitting. We'll find out what to do in the next run.

* 所以如果第二次發信的時候,phplist 會把剛剛發過得扣除,然後在發一次然後在等待 300 秒才會結束程式。所以看起來如果要自動跑的話寫 5min 跑一次,看起來是可以接受的。
epaper@www:~$ /home/epaper/bin/phplist -p processqueue
PHPlist version 2.10.12 (c) 2000-2010 Tincan Ltd, http://www.phplist.com
Started
Sending in batches of 300 emails
Processing has started, 1 message(s) to process.
Processing message 66
Looking for users
Found them: 477 to process

* 如果你有設定好的話,它應該會發一封信到你的信箱去,告訴你大概做了什事....
To: epaper@epaper.cm.nsysu.edu.tw
Subject: PHPlist Maillist Processing info
Recieved:
From: EpaperWebmaster
X-MessageID: systemmessage
X-ListMember: epaper@epaper.jangmt.com
X-UID: 4790


Started
Sending in batches of 300 emails
Processing has started, 1 message(s) to process.
Processing message 66
Looking for users
Found them: 778 to process
batch limit reached: 300 (300)
Script stage: 5
300 messages sent in 335.89 seconds (3215 msgs/hr)
1 invalid emails


* 但是你知道發信總是有人的 email 會是錯誤的,所以要定時的收取退件清單。這些清單會被收進系統的資料庫內,並且予以紀錄。只要修正這些原始的資料,就可以排除了
epaper@www:~$ /home/epaper/bin/phplist -p processbounces
PHPlist version 2.10.12 (c) 2000-2010 Tincan Ltd, http://www.phplist.com
110 bounces to fetch from the mailbox
Please do not interrupt this process
25 done
50 done
75 done
100 done
Closing mailbox, and purging messages
Identifying consecutive bounces
Identifying consecutive bounces
0 of 355 users processed
Identifying consecutive bounces
10 of 355 users processed
Identifying consecutive bounces

* 於是乎加上了排成,我寫成這樣的方式,使用這 epaper 使用 crontab -e 編輯 crontab ,每 20 min 收一次退信,每 5 min 處理信件佇列。
# m h dom mon dow command
*/5 * * * * /home/epaper/bin/phplist -p processbounces
*/20 * * * * /home/epaper/bin/phplist -p processqueue

* BUT 人生就是因為有那麼多的 but 才顯得有趣,系統會告訴你某個變數沒有定義,不讓你跑....錯誤訊息如下
Error: USER environment variable is not defined, cannot do access check. Please make sure USER is defined.
PHPlist version 2.10.12 (c) 2000-2010 Tincan Ltd, http://www.phplist.com

* 那怎麼辦勒,只好自己手工產生變數了...於是我修改了 cron 並自己改寫了一個 shell script
epaper@www:~$ vim epaper_cron.sh
#!/bin/bash
# 手工把變數輸出,應該只是要 USER 這個變數而已...
SHELL=/bin/bash
USER=epaper
MAIL=/var/mail/epaper
PATH=/home/epaper/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
PWD=/home/epaper
LANG=zh_TW.UTF-8
HOME=/home/epaper
LANGUAGE=zh_TW:zh
LOGNAME=epaper
export SHELL
export USER
export MAIL
export PATH
export PWD
export LANG
export HOME
export LANGUAGE
export LOGNAME
/home/epaper/bin/phplist -p processbounces
/home/epaper/bin/phplist -p processqueue

* 排成改了變成這樣
epaper@www:~$ crontab -e
m h dom mon dow command
*/5 * * * * /home/epaper/epaper_cron.sh >> /home/epaper/epaper_cron.log
* 然後就一切正常了, 可以到 /home/epaper/epaper_cron.log 看系統產生的 log


* 另外系統為了避免你一直 try 錯誤的信箱,於是有個文件 README.bounces 可以設定當遇到多少次退信後就不再嘗試寄信了。
In the admin pages, you can now load the bounces in the PHPlist database. Some bounces are not
always really bounces, but they can be "Message delayed" or "Out of Office" messages. Therefore
PHPlist will not immediately unsubscribe a user when a message has bounces, but it will determine
a treshold of messages which will identify a bounce.

You set the threshold with the variable

$bounce_unsubscribe_treshold = 3;

This variable will be used to returns of normal messages. If "systemmessages" return, a user will
be unsubscribed immediately. Unsubscribed means that their email will be marked unconfirmed, which
will cause the system to stop sending emails to this user.

In the future it will become possible to "probe" the unconfirmed emails with a renewed request for
confirmation, which will be dealt with seperately, most likely by simply deleting the user.

If a message to a user bounces, the threshold will be used to determine the previous number of
message that have bounced. A user will only be marked unconfirmed once a row of consecutive messages
as many as your threshold have occurred.

If you run in TEST mode, the emails in the bounce system will not be deleted from the mailbox. If you
have set TEST to 0, it will delete the emails it has dealt with, according to the settings

$bounce_mailbox_purge = 1;
and
$bounce_mailbox_purge_unprocessed = 1;

$bounce_mailbox_purge can be 1 or 0, and 1 means that messages that have been processed and identified
will be delete from the mailbox. $bounce_mailbox_purge_unprocessed can be 1 or 0 as well, and
1 means that also unprocessed messages, which are messages that could not be matched with a user in
the system, will be deleted. This is fairly safe, because you can still look at the messages
in PHPlist.
.

* 關於 bounces 的處理,需要建立一個帳號,來收取信件處理。設定檔一樣在 config.php 內
=========================================================================

Settings for handling bounces

=========================================================================

*/

# Message envelope. This is the email that system messages come from
# it is useful to make this one where you can process the bounces on
# you will probably get a X-Authentication-Warning in your message
# when using this with sendmail
# NOTE: this is *very* different from the From: line in a message
# to use this feature, uncomment the following line, and change the email address
# to some existing account on your system
# requires PHP version > "4.0.5" and "4.3.1+" without safe_mode
$message_envelope = 'listbounces@epaper.jangmt.com';

# Handling bounces. Check README.bounces for more info
# This can be 'pop' or 'mbox'
$bounce_protocol = 'pop';

# set this to 0, if you set up a cron to download bounces regularly by using the
# commandline option. If this is 0, users cannot run the page from the web
# frontend. Read README.commandline to find out how to set it up on the
# commandline
define ("MANUALLY_PROCESS_BOUNCES",1);

# when the protocol is pop, specify these three
$bounce_mailbox_host = 'epaper.jangmt.com';
$bounce_mailbox_user = 'listbounces';
$bounce_mailbox_password = '1234567890xxxxxx';

# the "port" is the remote port of the connection to retrieve the emails
# the default should be fine but if it doesn't work, you can try the second
# one. To do that, add a # before the first line and take off the one before the
# second line

$bounce_mailbox_port = "110/pop3/notls";
#$bounce_mailbox_port = "110/pop3";

# when the protocol is mbox specify this one
# it needs to be a local file in mbox format, accessible to your webserver user
$bounce_mailbox = '/var/spool/mail/listbounces';

# set this to 0 if you want to keep your messages in the mailbox. this is potentially
# a problem, because bounces will be counted multiple times, so only do this if you are
# testing things.
$bounce_mailbox_purge = 1;

# set this to 0 if you want to keep unprocessed messages in the mailbox. Unprocessed
# messages are messages that could not be matched with a user in the system
# messages are still downloaded into PHPlist, so it is safe to delete them from
# the mailbox and view them in PHPlist
$bounce_mailbox_purge_unprocessed = 1;

# how many bounces in a row need to have occurred for a user to be marked unconfirmed
$bounce_unsubscribe_threshold = 5;

* 關於批次處理信件的設定,在設定檔 epaper@www:~/public_html/lists/config$ vim config.php ,可以避免你發信太快被人一直退信或當成垃圾。
# batch processing
# if you are on a shared host, it will probably be appreciated if you don't send
# out loads of emails in one go. To do this, you can configure batch processing.
# Please note, the following two values can be overridden by your ISP by using
# a server wide configuration. So if you notice these values to be different
# in reality, that may be the case

# define the amount of emails you want to send per period. If 0, batch processing
# is disabled and messages are sent out as fast as possible
# define("MAILQUEUE_BATCH_SIZE",0);
define("MAILQUEUE_BATCH_SIZE",300);

# define the length of one batch processing period, in seconds (3600 is an hour)
# define("MAILQUEUE_BATCH_PERIOD",3600);
define("MAILQUEUE_BATCH_PERIOD",300);

2010/09/25

[轉]你一定很難相信

轉貼:(因為某人的facenbook貼的太隱密,所以改貼到blog)


你一定很難相信

by 李阿起 on Saturday, September 25, 2010 at 11:55am
你一定很難相信
災難從無到有只是這城市人民一場午睡的時間。

你一定很難相信
不到24小時,全世界環保人員、志工、軍警消人員就立刻頃巢而出塞滿大街小巷的畫面。 

你一定很難相信
大部分的人民都安安靜靜地灑掃,並且知足惜福的轉換各種形式來執行計畫中的團圓夜,說什麼也不缺席... 

你一定很難相信
團圓夜後,每天垃圾車來的次數幾乎跟公車班次不相上下...!

你一定很難相信
經歷不到一周,城裡的市容竟然已經恢復的差不多了。 

你一定很難相信
一場災難,讓人民既是團聚又是凝聚,還深刻體認自己跟城市無法分割的關係。

--
自古以來,
這個城市的人們大都沒有什麼水災的觀念,
畢竟旱災才是他們從小到大的課題,
五十年一次的大水,
就足夠他們去講一輩子..... 

可是水災以來這幾天,
我在城市的郵局裡,看到遲緩的老翁奮力把買來的童裝包好準備寄給他在外地的孫兒;
也在巷口聽見資源回收車的司機,再開往下個街口前,大聲叮嚀隨車的環保人員要抓緊扶手;
還在早餐店看到一大早返鄉要幫忙的年輕人,杵在店裡等待天亮,不忍驚動好不容易熟睡的家人.... 

如此這般災難後,這個城市知道自愛,人民亦是停不下來的付出大愛小愛....

就像城市裡的太陽一樣熾熱!
你說醬不是很曬嗎?翻雲覆雨也無法澆熄啊.....

就像城市裡的路樹一樣生生不息!
你說樹不是倒了很多嗎?屹立不搖的是更多更多阿.....





僅以此文及拙作數張,獻給養育我、教育我的美好城市,高雄。


新堀江

駁二特區

壽山公園

左營車站

四維路

城市光廊周邊


西子灣

美麗島

2010/09/05

google trends 好好玩....

一張很有戰力的大學排名....


可是為何沒有台大勒....因為他要戰的應該是哈佛大學....


^^!!! 真是有趣的 google trends , 不知道還可以怎樣玩 ???

http://trends.google.com/trends?hl=en

macbuntu 快速將你的ubuntu 更換為 mac 的佈景

macbuntu 快速將你的ubuntu 更換為 mac 的佈景

昨夜再睡夢中,不小找到了這個東西....可以直接把 ubuntu 變成 MAC 的桌面環境
http://sourceforge.net/projects/macbuntu/
本來要測試安裝完成後要發文的,但是發現他在 2.0 版有 bug 且有中文使用者去抱怨...
然後在 2.1 他有針對中文介面做調整....

下載 macubuntu

* 請將壓縮檔解開後執行 install.sh 檔案
mtchang@cccm-laptop:~/Downloads/Macbuntu-10.04$ ./install.sh

Macbuntu - Mac OS X Transformation Pack
The Macbuntu installation script automatically installs and configures
all necessary system components to mimic Mac OS X appearance on Ubuntu Linux

Macbuntu-10.04 v2.1

Include
* Macbuntu-10.04 theme based on GTK Leopard
* Macbuntu-10.04-Icons based on Mac4Lin_Icons_v1.0
* Macbuntu-10.04-Cursors based on Mac4Lin_Cursors_v1.0
* Mac OS X backgrounds
* Mac OS X fonts

Installation
* Compiz Extras
* Global Menu
* Docky
* Ubuntu-Tweak

Configuration
* Login screen
* Metacity
* Compiz effects
* Window theme
* Backgrounds
* Cursors
* Icons
* Top panel

Attention!
Script significantly changes the desktop.
If a previous version of Macbuntu-10.04 is installed it will be overwritten.

Checking Ubuntu version...
Passed

Checkin script user...
Passed

Checking currently installed version of Macbuntu-10.04...

This script will install and enable Macbuntu-10.04 now
You must have root privileges to be able to install listed components
Do you want to continue [Y/n]?
y

Checkin for a root access...

Preparing backup...

Please, take a breath and answer a few questions
- Which font you want to install, otherwise a default (*) will be selected?
* 1. Latin
2. Chinese
# 請注意,選錯會導致你的系統字型很奇怪
1
- Do you want to enable wobbly windows [Y/n]?
y
- Enable bottom left corner to show desktop [Y/n]?

- Enable bottom right corner to show all windows [Y/n]?

Setting up repository

... 省略一萬字...
... 接下來你會看到你的桌面陸續的產生變化,
... 然後會要求確認安裝一些沒有裝得套件
... 然後就完成了...

* 但是個人覺的還是有問題,因為不是很完整。有些地方還是有錯誤,如果硬是要用的話還是是可以的.


如果不喜歡,系統有各 uninstall.sh 的反安裝,執行後就可以回到原本的ubuntu了....

2010/09/04

用 google 學英文 English

用 google 學英文 English

最近 google 翻譯的網站悄悄的改版了,感覺加強了更多翻譯的細節。
根據官方的解釋,google 利用很多文章計算出最適合的翻譯文字....
http://translate.google.com.tw/about/intl/zh-TW_ALL/
官方還做了一段影片說明....



並且加入了手機轉用的翻譯,並且讓各段句子都可以發音,這實在很方便,帶著手機配合 google 翻譯,都可以直接讓手機說著該國的語言.....


翻譯的頁面


for 手機android使用者的翻譯頁面

有這個功能再搭配原本的 google chrome 及發音、單字、翻譯相關的功能就可以準備齊全學習英文的工具了...


* 順便學英文 use google chrome 套件及輔助相關套件
google chrome browser [http://www.google.com/chrome 各種版本下載]


擴充套件:全網頁翻譯Google Translate by chrome.translate.extension
https://chrome.google.com/extensions/detail/aapbdbdomjkkjkaonfhkkikfgjllcleb

簡單說明:點下取後就可以整篇翻譯


擴充套件:即時翻譯 bubble-translate
http://code.google.com/p/bubble-translate/downloads/list

簡單說明:先設定要翻譯的語系,設定完成後選取文字的同時按 Ctrl 按鍵,就會立即翻譯.

擴充套件:即時發音use google tts,  Chrome Page Reader by Austin.BUAA
https://chrome.google.com/extensions/detail/jbldhmenlfmbooleglopeplanhpmhmje
簡單說明:滑鼠選取文字後,點選發音的按鍵就可以發音。


擴充套件:字典查詢 Google Dictionary (by Google)
https://chrome.google.com/extensions/detail/mgijmajocgfcbeboacabfgobmjgjcoja?hl=en 


簡單說明:需要先設定翻譯的語系,選取網頁上的單字連續點擊兩次即可.

擴充套件:更多google extensions https://chrome.google.com/extensions/?hl=en



* Google字典 [http://www.google.com.tw/dictionary ],可以方便紀錄生字並且查詢細節



* Google 譯者工具包,可以方便的整理之前翻譯過得句子,也容易重複的使用
http://translate.google.com/toolkit/list?hl=zh_TW#tms