2009年12月30日 星期三

匯入CSV檔 到 Rails SQLite3 資料庫

require 'csv'

#每一行都是的一個按照順序儲存各個欄位的陣列,並且順序跟CSV檔案中的一樣
#匯入myfile.csv,分割符號'|'
CSV.open('myfile.csv', 'r','|') do |row|
# 從 CSV 檔匯入,假設欄位順序為 a, b, c, d
# 為每一欄位建立並儲存一個 Trunk model
Trunk.create!(:a => row[0], :b => row[1], :c => row[2], :d => row[3])
end


其他參考資料ruby-doc.org/CSV

2009年12月29日 星期二

Open Source 的免費排版軟體

http://cclien.net/phpBB2/viewtopic.php?t=358

WYSIWYG 幕前排版軟體

說起電腦桌面出版系統 (DTP:DeskTop Publishing) 用的這類排版軟體,很多人就想到 QuarkXPress、Adobe PageMaker、Adobe InDesign 等當前知名專業的商業排版軟體,或是數理與 UNIX 界老牌資深的 TeX/LaTeX 幕後排版系統 (雖然說是 UNIX 界,其實目前幾乎所有的作業系統平台都已經有移植的版本可以使用囉!數理界會知名主要就是 LaTeX 在數學運算式與數學符號上有著非常好的顯示表現,有興趣的朋友可參考這篇 iT 自救術的介紹。另外搭配 LyX 可以達到類似 WYSIWYG 的幕前排版效果。若有中文處理的需求,可以參考這裡,或是試試 cwTeXchiTeX/chiLaTeX 等套件),甚至早期中文界常見的莎士比亞、畢昇、新翰藝等幕前排版軟體,有興趣的朋友可以參考 iT自救術─排版軟體簡介的介紹。

其實就簡單的功能與定義來說,OpenOffice.org Writer 跟 Microsoft Word 都可算是基本的排版軟體,但它們在版面上已經預設了些限制 (頁面好像還有輸出的上限),圖文控制功能也不夠細膩,要花較多的時間才能達到像海報、報章雜誌的封面與內容那樣的排版效果 (有些效果還沒有功能來提供,花再多時間也排不出來 Orz),比較起來,OpenOffice.org Impress 和 Microsoft PowerPoint 拿來基本排版還比較簡單迅速 (只要把頁面格式設成要輸出的版面大小再編排)!另外在 Microsoft Office 中有個成員叫 Publisher,就是用來排版的,不過據說似乎還好 (我是沒用過啦),而且必須是 Office 專業版和中小企業版才有,一般購買的標準版中並有附上這個軟體。當然如果你想要的話,用向量繪圖軟體也是可以做出類似的效果的,但是要編排一整本書籍的話又太費工夫了。除了上述提到的軟體之外,難道就沒有更好更專業的選擇了嗎?說到這裡,還講沒有的話就太不負責任啦 XD!接下來要稍微介紹兩套 Open Source 的排版軟體囉!第一套是 Passepartout,支援 UNIX like 作業系統,使用 GTK 撰寫完成,排版引擎則是基於 XML 的 xml2ps,支援多種點陣圖檔與 PostScript、EPS (Encapsulated PostScript) 檔案格式;第二套就是知名的 Scribus,它除了原本就支援的 UNIX like (包含 Linux、FreeBSD 和 Mac OS X),最新版已經有 Windows 的原生執行版本 (之前都是要在 Cygwin 下執行,現在不用囉!要安裝前請先安裝 Ghostscript。另外目前不支援 Windows 9x 系列) 可下載安裝使用囉!而且中文使用沒問題喔!有興趣的朋友可以到官方網站看看,或逛一下下面幾個相關的中文討論資料與使用介紹:
http://www.linuxhall.org/modules.php?name=News&file=article&sid=351
http://ooo.tnc.edu.tw/modules/newbb/viewtopic.php?topic_id=1597&forum=1
http://freesf.tnc.edu.tw/modules/newbb/viewtopic.php?topic_id=3989&forum=13
http://freesf.tnc.edu.tw/modules/newbb/viewtopic.php?topic_id=4118&forum=13
http://www.openfoundry.org/index.php?option=com_content&Itemid=362&id=2139&lang=en&task=view



LINUX上 PDF 編輯 閱讀 相關軟體

http://cclien.net/phpBB2/viewtopic.php?t=358

PDF (Portable Document Format 可攜式文件格式) 是由 Adobe 公司所開發推出的檔案格式,最大的特色就是能夠跨平臺顯示並保留文件的原始格式 (因為它本身是 Page Layout format 而非 Document format),加上檔案規格公開 (目前只有加密的部分未公開),所以在網路上被大家廣泛的使用,印刷廠也已經開始支援 PDF 格式的排版書籍輸出。

目前閱讀 PDF 檔案的瀏覽器都是可以免費取得的,像 Adobe 原廠所提供跨平台的 Adobe Reader、小巧且跨平台的免費軟體 Foxit Reader、提供在 PDF 上面增加註解/文字/框線/線條/圖形/戳記等功能的免費軟體 PDF-XChange Viewer (Free)、開放原始碼且支援非常多種作業系統平台的 XpdfMuPDF、支援 Windows 2000 以上的 Open Source 綠色軟體 Sumatra PDF (只有瀏覽與列印這兩個功能,可記憶最後瀏覽的頁面,體積不到 1 MB,可惜官方版的中文字型會有破碎的問題,需要的可以下載論壇提供中文支援的自編版,不過版本比較舊)、使用 Poppler 與 Gtk+ 撰寫出來的 ePDFView (相關資料可以參考這裡這裡,顯示效果比較可以參考這裡)、GNOME 桌面環境的 Evince 與 KDE 桌面環境的 KPDF ... 等 (PDF 相關軟體列表可以參考維基百科的 "PDF 軟體列表" 與 "List of PDF software" 這兩篇。另外歐洲自由軟體基金會建立了 pdfreaders.org 這個網站,列出了不同平台上的 Adobe Reader 替代軟體,有興趣的可參考看看)

要產生 PDF 檔的話,也有不少免費的軟體可使用,像前面提到的 OpenOffice.org 就有內建這個功能,Windows 平台上的免費軟體 CutePDFPDF reDirect (它還有合併與加密的功能)Bullzip PDF Printer 與小巧的 doPDF、開放原始碼軟體 PDFCreatorCC PDF converterPrimoPDF (它還有加密與合併的功能喔!) 也行,但這些軟體都是利用列印的方式產生,要做修改的話就必須先修改原始檔案再重新列印一次。

如果有合併與分割 PDF 文件的需求,除了上述的 PrimoPDF 外,還可試試 PDF Split and Merge 這個 Open Source 的 Java 跨平台軟體,它分為 Basic version 跟 Enhanced version,兩個版本都有原始碼可以自行編譯,二進位檔只有 Basic version 有提供,Enhanced version 則是要贊助才能下載。Linux 平台上還有 PDF Mod 可選擇,使用 Mono、Gtk#、Cairo ... 等技術、透過 C# 撰寫而成的,藉由拖拉的方式,提供了檔案的合併 / 切割、頁面的抽取 / 重排 / 旋轉以及 metadata 資訊的編輯修改等功能。而在 Windows 平台上則有 PDFill PDF Tools (Free) 這個免費軟體提供了合併、切割、加密解密 (可解決由密碼保護不被列印/複製文字/修改/抽取/組合或合併的問題喔!有這個需求也可以試試 FreeMyPDF.com 提供的線上解密服務,上傳的 PDF 檔案大小不能超過 7 MB 喔)、增加浮水印、增加頁首頁尾、重設頁面格式、PDF 與圖檔互轉等功能,特別的是 PDF 與圖檔互轉不是使用列印的方式,對於沒有權限安裝 PDF 印表機軟體的使用者來說應該是個不錯的選擇。

基本上來說在一般的環境下 PDF 檔幾乎等於唯讀文件無法修改,想要直接修改 PDF 文件內容的話,最出名的就是 Adobe 原廠的 Adobe Acrobat Professional,但價格不斐,若平常需求不大的話可以試試 Foxit PDF Editor 的,它可以無限期使用且沒有任何的功能限制,只是在每一頁都會有個浮水印,說明這份文件是用 Foxit PDF Editor 編輯的,不然也可以參考這篇的做法來達到簡易的編輯功能。想要免費擁有完整功能的話,目前 Windows 平台上只有 Free PDF Editor 這個小巧免費軟體可以直接建立與編輯簡單的 PDF 檔,Linux 平台上的解決方案分別為 Ipe (Ipe 是一個 GUI 的繪圖軟體,可以輸出編輯 PDF 與 PostScript 檔案格式,還能搭配 LaTeX 使用,相關介紹可以參考這裡)PDFeditKWord (Open Source 界的辦公室套裝軟體中在功能上可與 OpenOffice.org 比美的就是 KOffice 了,KOffice 是 KDE 桌面整合環境計畫中的大將,包含了許多的軟體成員,其中 KWord 便是 KOffice 裡面的文書處理軟體。目前 KOffice 支援了 GNU/Linux 與 Mac OS X 平台,有興趣的朋友可以下載 KOffice Live CD 來試試),另外也可以參考這幾個軟體的官方網站與這篇討論喔!

有將 PDF 檔轉成其他格式的需求可以試試 SomePDF.com 推出的幾個免費軟體,包括:Some PDF to Word ConverterSome PDF to Html ConverterSome PDF to TXT ConverterSome Text to PDF ConverterSome PDF Image Extract (可將 PDF 檔內嵌的圖片匯出,支援 TIF / JPEG / BMP / GIF / PNG / TGA / PBM / PPM / PCX 這幾種圖片格式與中文檔名),支援 Windows NT 以上。而 PDF Text Reader 這是個瀏覽 PDF 檔文字的軟體,則是可以直接把 PDF 檔轉成 TXT 檔,個人使用免費,系統需求為 Windows 98 以上。免費的線上 PDF 轉成 Word 有 PDF OnlineConvert PDF Document to WordPDFtoWord beta (還有轉成 Excel 檔的 PDFtoExcel beta 喔),重點是這幾個網路服務轉中文的檔案都沒問題喔!

最後這裡整理一下 nitro 這家公司所推出的幾款免費 PDF 相關軟體與線上服務。軟體方面除了前面提到的 PrimoPDF 外,還有支援多種瀏覽器的外掛 PDF Download,它提供了 "網頁轉成 PDF 檔 (可直接 e-Mail 轉寄 PDF 檔)"、"PDF 檔轉成 HTML 檔 (可直接瀏覽轉好的 HTML 檔,避免在瀏覽器裡面嵌入 PDF Reader 來開啟 PDF 檔,拖慢速度)"、"管理書籤 / 我的最愛裡面的 PDF 檔" 等功能,而且有正體中文語系喔!線上服務方面除了 PDFtoWord betaPDFtoExcel beta 外,還有 PDF HammerPrimoOnline 這兩個。PDF Hammer 提供的功能有合併/ 刪除 / 重排 PDF 頁面 、新增密碼與修改 metadata 資訊,PrimoOnline 則是提供線上轉 PDF 檔的功能,支援的檔案格式可參考這裡的列表,上傳檔案大小的限制為 5 MB。

OpenOffice.org 資料總整理

OpenOffice.org 資料總整理 (含排版與 PDF 編輯)

寫在前頭:目前 OpenOffice.org 3.1.0 已經 Release 囉!有需要的朋友請到官方網站下載 ^_^


經過連日來在各個 OpenOffice.org 相關的網站掃描,"OpenOffice.org 2.0 中文正式版" 它來了!它∼終於來了 (今年十月真是個重要的月份啊!好多我所期待的事情都實現了!除了 OOo 2.0 以外還有 NP 與機車 ^_^)!本來這篇要回在 "Microsoft Office Viewer" 的主題之下的,不過想想,這麼重要的事情,當然是要獨立出一個主題,在第一時間內搶先報導才對啊!好了,廢話不多說,先簡單介紹一下 OpenOffice.org 傳奇的歷史與重要的功能特色囉 (這裡有一篇寫的不錯的介紹,另外還有這裡的討論可以參考看看)

OpenOffice.org 的前身是德國軟體公司 StarDivision 從 1995 年開始基於 StarWriter 所擴充發展出來的 StarOffice,1999 年該公司被 Sun Microsystems Inc. 收購。Sun Microsystems Inc. 於 2000 年將近 780 萬行程式 (號稱世界上最大的 Open Source 專案) 的辦公室套裝軟體 StarOffice 5.2 的絕大部分原始碼 (刪掉有版權的部分) 與相關開發的技術移交給自由軟體組織 OpenOffice.org 使用,而這套軟體也稱為 OpenOffice.org (由於 OpenOffice 這個商標名稱已經被註冊了),縮寫為 OOo,在往後所出現的 Sun StarOffice 版本 (在亞洲則稱為 StarSuite,因為該商標名稱在日本也已經被註冊了) 便是以 OpenOffice.org 為基礎所增強、開發而成的。OpenOffice.org 1.1 正式版主要的功能包含:文書處理 (Writer)、試算表 (Calc)、簡報 (Impress) 及繪圖 (Draw) ...等幾項。這套辦公室套裝軟體除了能讀寫 Microsoft Office 的檔案格式外,還可以直接將文件匯出成 PDF 檔,以及將簡報與圖檔轉換成 Flash (.swf) 格式,最重要的是支援新一代以延伸性標記語言 (XML:eXtensible Markup Language) 為基礎的開放文件格式 (OpenDocument format:ODF,想了解目前有哪些軟體支援 ODF 格式的話可以參考這裡,想將檔案轉成 ODF 格式的話可以參考這裡),此格式是由標準組織 OASIS (Organization for the Advancement of Structured Information Standards:結構化資訊標準推動組織) 所認可的 (這個開放的標準全名為 OASIS Open Document Format for Office Applications,OpenOffice.org 於 1.1.5 版後開始支援)。由於開放原始碼的關係,所以目前支援的平台有 GNU/Linux (有 x86 和 PowerPC 的版本)、FreeBSD、Mac OS X (官方網站提供的版本需要安裝 X11,支援原生 Aqua GUI 系統的版本目前還在 alpha 測試中,有些功能還未完全移植完成,預計 2008 年 9 月推出正式版,這也是 OpenOffice.org 3 所會支援的最新平台,需求為 10.4 以上。另外已經有軟體廠商移植完成 Mac OS X 原生的執行版本了,叫 NeoOffice/J,使用 Carbon 和 Java 來完成的,可以到這裡這裡看看詳細資料)、Solaris (有 x86 和 SPARC 的版本) 及 Windows (國外的網友開發了 Windows 版的 Portable OpenOffice.org,直接解壓縮出來就可以使用,對於隨身碟的使用者來說實在是個好消息,不過這個版本沒有包含 Java Runtime Environment,若電腦裡有安裝可以透過手動方式設定來使用。該站還有許多 OpenSource 軟體的可攜式版本可以下載使用,中文語系要自己覆蓋來使用,或是到這裡下載,同樣的,這個網站也有其他中文化過或修改過的 OSS 版本喔!另外,最新的 OS/2 版本 - eComStation 可以執行 Windows 的版本,不過 Serenity Systems International 似乎準備移植出 OS/2 原生執行版的 OpenOffice.org),另外在世界各地社群的努力下也已經翻譯成三十六種的語言了 (多國語言介面的安裝方式可以參考這裡)

隨著 Sun StarOffice 8 (想安裝免費的 Sun StarSuite 8 中文版嗎?現在可以透過 Google 軟體集來 下載喔!若要取得安裝檔,在下載完成時到 C:\Documents and Settings\All Users\Application Data\Google Updater\cache 這個暫存資料夾將 207 MB 的安裝檔 installers_ci_so_zh-tw_8.0.9189.0_setup.exe 複製出來即可,或是在安裝過程中到 C:\Documents and Settings\User Name\Local Settings\Temp 這個暫存資料夾把解壓縮出來的 "StarSuite 8 Installation Files" 資料夾 <大小為 211 MB、共 24 個檔案> 直接備份出來也行) 的問世,也預告著 OpenOffice.org 2.0 正式版即將完成,本來工作團隊要在 OpenOffice.org 五週年紀念日時同步推出,不過工程師在最後的緊要關頭剛好發現一個需要約一星期左右才能修正完成的 Bug,為了正式版的完美與穩定,因此決定延後推出的日期。在英文正式版推出十天後,中文正式版終於完成囉 (本來還以為會拖到 11 月初說,想不到趕在月底出爐 ^_^)!想下載的朋友歡迎到下列站點下載:
http://ftp.stardiv.de/pub/OpenOffice.org/localized/zh-tw/ (雖然檔案的日期怪怪的,不過目錄的日期是 30-Oct-2005 23:35,我下載下來安裝也是正確的,所以請安心服用)
ftp://ftp.rz.tu-bs.de/pub/mirror/OpenOffice.org/localized/zh-tw/
http://ftp.stardiv.de/pub/OpenOffice.org/localized/zh-tw/
ftp.isu.edu.tw/pub/OpenOffice/localized/zh-tw/ (台灣義守大學 mirror,使用 HTTP 或 FTP 這兩種協定都可以下載)
http://oootranslation.services.openoffice.org/pub/OpenOffice.org/ (OpenOffice.org 各個最新版發布的原始站台)
http://mirror.switch.ch/ftp/mirror/OpenOffice/extended/ (OpenOffice.org 各個最新版發布的原始站台)
http://ftp-1.gwdg.de/pub/openoffice/extended/ (OpenOffice.org 各個最新版發布的原始站台)
※ 下載的檔案分兩種,其中檔名結尾有出現 _wJRE 字樣的表示有包含 Java Runtime Environment 的安裝程式,若已經有安裝或不需要使用到依賴 Java Runtime Environment 的功能,可以下載另一個較小的安裝檔,OpenOffice.org 中依賴 Java Runtime Environment 的功能可以參考這裡
※ 若 Windows 平台有安裝 Microsoft 的 AppLocale,可能會導致 OpenOffice.org 中文版的安裝畫面出現亂碼,解決方法如下:將 C:\WINDOWS\AppPatch\AppLoc.tmp (這路徑是預設值,視個人 AppLocale 的安裝路徑而有可能會不同) 這個檔案刪除或移到其他位置即可,其他相關資料可以參考這裡

OpenOffice.org 2.0 有什麼特色呢?可以參考 "OpenOffice.org 2.0 Features" 及 "Complete OpenOffice.org 2.0 Feature List",我想其中最大的改變,就是新增了 "資料庫管理 (Base)" 這個軟體成員 (對應 Microsoft Office 的 Access,其實以前 1.x 的版本就有資料庫的功能,不過是被隱藏在 Writer 跟 Calc 之中用動態資料源作法來取代,詳細資料可以參考這裡), 當然使用的介面看起來也比較華麗好看了。對中文使用者而言,新增了繁簡互換的功能,不過 Linux/FreeBSD 版在中文粗體字的部分好像還是要使用網友 Firefly 螢火飛的 patch 才能解決。在開啟 Microsoft Office 文件的相容性上,由於我手邊的文件格式都還蠻簡單的,所以開啟來版面格式幾乎都很正常 (有極小部份會有問題,但相較於 1.1.x 版絕對好上許多!在 此要特別提醒一下,由於 Microsoft Word 跟 OpenOffice.org Writer 在行高的定義上單位不一樣,例如:Word 的雙倍行高,是 Writer 的固定行高 1.5 公分,其餘類推。所以有時候將行高調整後版面即可正確顯示,相關資料可參考這裡這裡這裡。不然也可以參考如何讓 OpenOffice.org 最近似 MS-Word 版面設定,這個 Blog 還有幾篇不錯的文章值得參考,像:邏輯工具列的新設計OpenOffice.org 邏輯符號工具列OpenOffice.org 啟動及應用加速技巧等。),比較複雜的就得請網友來多多測試囉!目前我個人在操作上大概只有遇到一個問題,就是在 Writer 裡面的表格要畫斜線時沒辦法處理 (Calc 倒是沒這個問題,在 "邊框" 的選項裡 "使用者自訂" 的部分有提供斜線的功能),在 Microsoft Word 裡是用 "手繪表格" 來解決,目前用 Writer 只能先將表格處理完,再使用 "繪圖功能" 選 "線條",然後畫出斜線。最後這裡要說一聲,OpenOffice.org 2.0 的系統需求比 OpenOffice.org 1.1.5 還要高,所以建議用 Pentium !!! 以上等級的硬體來執行會有較好的表現,不然像小弟我宿舍這台爛爛的 K6-2 400 MHz CPU + 192 MB RAM,在沒有預先載入的情況下,開啟一個 50 KB 的 .doc 檔 OpenOffice.org 2.0 需要一分半的時間才能完成 (因此我在考慮是否該換回 1.1.5)這裡有人提議也許可以像 Mozilla 一樣將每個程式獨立出來,也許會有更好的執行效率 (不過整合性也許會降低吧)


PS 1. 想了解 OpenOffice.org 還有哪些在開發的專案嗎?可以到這裡來瞧瞧!看來群組軟體 OpenOffice.org Groupware (OOoGW)圖書編目軟體 Bibliographic (相關討論)專案管理軟體 OpenOffice.org Project Management 都有可能是之後版本會新增的功能或軟體成員喔!順便提一下,書目管理編輯軟體非常多,常用且支援 OpenOffice.org 的書目編輯軟體有 Firefox 的附加元件 - Zotero (還要安裝 OpenOffice.org 的 extensions 喔)Bibus (資料庫可選擇使用 MySQL 或 SQLite)JabRef (使用 Java 撰寫而成,採用的格式為 BibTeX,蠻多 LaTeX 的使用者都用這個,在 OpenOffice.org 上使用可參考官方說明)Mendeley,它們都是跨平台的軟體,Zotero (改安裝 Microsoft Word plug-in)、Bibus 與 Mendeley 還支援 Microsoft Office 呢!熟悉它們的操作,不需要想辦法弄到 EndNote 也可以加速論文的產生喔!如果有意願想使用 OpenOffice.org 完成論文的話一定不可錯過下面幾篇文章:論文工具用 OpenOffice.org Writer 寫論文的基本技術[哈啦三下] 使用 OpenOffice.org Writer 寫論文請教:如何在 OOo 2.0 使用圖書編目軟體 Bibus經驗分享:談談我用 OpenOffice.org 寫畢業論文JabRef 和 OpenOffice.org 的結合自由軟體鑄造場源碼秘技的淺談長文件的製作~以 Writer 為例 (1) / (2) / (3) / (4)

PS 2. 目前 Firefly 已經推出 OpenOffice.org 中文加強版 (基於 OOo 2.0.4 版以前的稱為 OpenOffice.org 中文加強版,基於 OOo 2.3.1 版的改名為 OSSII Office,基於 OOo 3.1 版的則改名為 OXOffice這裡是安裝精靈的 screenshots),因為 Microsoft Visual C++ 7.1 Library 版權可能有散佈的問題,所以目前只開放 Linux 版的檔案來下載,至於 Windows 版的有需要的使用者可以到晟鑫科技股份有限公司所成立的 OpenOffice.com.tw 免費索取 Windows 版安裝光碟。有興趣像螢火飛前輩一樣進行 OpenOffice.org 相關開發工作的話可以參考 Huihoo 這個專門收集 Open Source 軟體相關文件的網站,裡面關於 OpenOffice.org 的項目,特別是 "深入了解OpenOffice.org﹝二﹞OpenOffice.org技術架構",當然官方網站提供的 Universal Network Objects Development Kit ProjectOpenOffice.org BASIC 編程指南OpenOffice.org API 簡介,以及 OpenOffice.org 常見問題等內容都是不錯的入門資料喔!

PS 3. 介紹幾套基於 OpenOffice.org 所修改出來的分支版本:
(1) OpenOffice.org 2.0.4, Novell EditionOpenOffice.org 3.1 Novell Edition for Windows e-Media Kit 是由 Novell 跟 Microsoft 結盟並簽署合作協議後所修改出來的特殊版本,特色是支援 Microsoft VBA 巨集指令與其他能夠跟 Microsoft Office 互通的功能,不過目前只有 Windows 2000/XP 的版本可以下載使用。
(2) OpenOffice.org Premium (又名 OxygenOffice Professional) 是由 OpenOffice.org 的愛好者所開發的,特色就是加入了 90 款字形、2400 種 ClipArt 及大量範本,讓使用者也能同樣感受到 Microsoft Office 般的豐富範本及圖片資源,有 Linux 與 Windows 平台的版本可以下載喔!
(3) Go-oo 同樣也是基於 OO.o 來加強的,擁有更快的啟動速度、支援 Microsoft 的 OpenXML 與 VBA、支援 Mono 與 GStreamer (Linux 版)、 支援 SVG / EMF+ / WordPerfect Graphics / 602PC Suite / MS-Works / Rich fields 等等的檔案格式,重點是同時支援 Linux 與 Windows 喔!有興趣的話可以看一下開發者的資料,可發現不少開發者都跟 Novell 有些關係呢!據說由於這些新功能的原始碼品質還不夠好,因此一直沒辦法進入 OpenOffice.org 的原始碼裡,不過一般家用與商用的要求沒有這麼高,所以很多 Linux 套件都是直接預設安裝使用 Go-oo 囉!

PS 4. 介紹幾個 OpenOffice.org 的小工具:
(01) 需要快速的點選來輸入全形符號可以使用 OOo 中文拼點包 (不過只能在 Writer 裡使用,在在大圖示下無法顯示的話可參考這裡解決)
(02) 如果覺得 OpenOffice.org 預設的圖示與 Gnome 環境格格不入的話,可以試試 Tango OpenOffice 來修改。
(03) 想幫肥大的簡報檔瘦身嗎?不用像使用 Microsoft Office 那樣得花 29.95 歐元請 PPTminimizer 來幫忙,只要使用 Sun 開發的 Open Source 軟體 Sun Presentation Minimizer 就可以達成囉!軟體需求為 OpenOffice.org 2.3 或 StarOffice 8 Update 8。
(04) 如果有需要將 OpenOffice.org 的文件檔案轉成純文字檔,可以試試 ooo2txt
(05) 如果有需要匯入 SVG 向量圖檔,可以試試 SVG Import Filter for OpenOffice 2.0
(06) 如果有需要匯出加密與書籤的 PDF 檔,可以使用 extendedPDF 這個 Open Source 的軟體 (專案在 freshmeat),它分為三個版本,其中 Universal 這個跨平台的版本功能最齊全,但是需要手動更改設定來安裝。
(07) 覺得 OpenOffice.org Math 用不太順手嗎?可以參考 "將 LaTeX 的數學式子借給 OO.o 一用" 這篇喔!
(08) 若有公文製作的需求,可以另外安裝中山科學研究院配合 OpenOffice.org 所開發的公文製作套件 (目前以 Windows 平台為主,最新版這裡雖然顯示不再提供下載,但透過搜尋還是可以在網站裡找到下載位置,舊版也可下載得到這裡有提供公文範本檔與公文製作套件的 mirror 下載) 或 OpenDesktop.org 開發的 "公文通" 來使用 (這個是跨平台的,兩者間的差異請看這裡,最新版則可到這裡這裡註冊並下載,這裡可以直接下載,下載完將副檔名由 .zip 改成 .oxt 即可匯入。注意要使用的話系統必須安裝 JRE)
(09) 羨慕 Apple iWork 中的 Keynote 擁有許多酷炫的過場效果嗎?沒關係,可以試試 OpenOffice.org Ninja 使用 OpenGL 所開發出來的幾種過場特效 (詳細資料可參考這裡這裡), 不過目前限定是 Linux 版的 OpenOffice.org 2.4 才能使用喔!Ubuntu 要安裝的話在終端機輸入 "sudo apt-get install openoffice.org-ogltrans" 即可,如果因版本的關係無法安裝的話沒關係,可以試試 Impressive 這個 Open Source 的幻燈片播放軟體,它擁有絢麗的 OpenGL 過場效果與幾種不錯的簡報功能,像:按 tab 鍵可迅速瀏覽所有播放頁面的縮圖、按 Enter 鍵可顯示聚光燈效果,用滑鼠滾輪或 + - 鍵可改變聚光燈照亮的範圍、直接用滑鼠拖曳圈選就可以將圈選範圍顯示成高亮度,除了支援多種常見的圖檔格式外還支援 PDF,執行平台為 Linux、Mac OS X 與 Windows,有興趣的可以試試。
(10) 如果想把 ODF 跟 Microsoft 專屬的 XML 格式 (雖然微軟為了消除大眾對 OOXML 為公開格式的疑慮也一併公開了舊版的 Microsoft Office Binary (doc, xls, ppt) File Formats,但這些格式可是非常複雜的啊 Orz) 做轉換,可以參考這裡,並下載 Novell 跟 Microsoft 結盟並簽署合作協議後推出給 OpenOffice.org 使用的 OpenOffice.org OpenXML Translator (OpenOffice.org 3.0 正式版已經原生支援 OpenXML 的檔案格式囉!早期的 Microsoft Office 版本想讀寫微軟自家的 OOXML 檔案格式可以到這裡這裡下載,使用 Office Viewer 的話可以參考 "如何使用 Word Viewer 2003 和 Excel Viewer 2003 檢視 Word 2007 和 Excel 2007 檔案",使用 Firefox 的話可使用 "OpenXML Document Viewer" 這個外掛軟體來瀏覽。另外想在 Microsoft Office 中讀寫 ODF 檔案格式嗎?可以試試由 Sun 推出的 Sun ODF Plugin 1.1 for Microsoft Office 或舊版的 StarOffice 8 Conversion Technology Preview plug-in application for Microsoft Office 2003,其他還有由微軟贊助的開放原始碼軟體:OpenXML/ODF Translator Add-in for Office,後者還可在 SourceForge.net 下載!由於手邊並沒有安裝 Microsoft Office 所以沒有測試轉換效果如何,根據說明檔可得知前者支援 Word、Excel 跟 PowerPoint 對 ODF 格式的輸出與輸入,安裝好後 Microsoft Office 對 ODF 格式就有一定的支援能力,而後者的轉換效果可以參考這篇描述。Office 2007 SP2 雖然宣稱支援 ODF 檔,很遺憾的是根據試算表測試結果顯示,Office 2007 SP2 只能輸出與開啟 Open XML/ODF Translator Add-ins for Office 產生的 ODF 檔,也就是說 Office 2007 SP2 所支援的 ODF 檔完全不相容於其他的軟體,這裡有更多資訊)

PS 5. 相較於 Microsoft PowerPoint,OpenOffice.org Impress 的範本資源似乎不算多,這裡這裡這裡有幾個不錯的 OpenOffice.org 簡報範本 (全部打包下載與其英文介紹可參考這裡,而這些範本的製作方法可參考這裡),感覺很棒、很有質感;The Linux Box 也釋出了五個不錯的範本,使用 LGPL v. 2.1 授權,頁面上的文字可以參考這裡的方法來修改;而 OpenOffice.org Extensions 裡的 "Modern Impress Templates"、"Professional Template Pack II - English"、"An OxygenOffice Extra - Templates" 也都是不錯的選擇。這邊的六個範本很簡潔很有質感,有 Mac 的風格喔!這裡則可下載到 Mac 簡報軟體中的高質感背景圖,當然有範本還要學一下簡報的製作風格囉!有興趣可參考:跟 Steve Jobs 學簡報 (3) 設計一張有 Apple 味道的簡報;Presentation Helper 也提供了許多蠻有質感的免費簡報範本,除了 PowerPoint 格式以外還有部份提供 Impress 格式喔!這裡這裡有蠻多的 Impress 範本,這裡這裡這裡這裡的就是零星的幾個範本。另外有不少網站有提供 Microsoft PowerPoint 格式的簡報範本,這也可直接匯入轉成 OpenOffice.org Impress 範本來使用!像 Microsoft 的官方網站有提供 PowerPoint 範本套件,下載後不想安裝的話只要使用 7-Zip 之類的解壓縮軟體就可取得範本檔案,至於提供給 Office 2004 的範本就比較大方了,可以直接到這裡下載。HP Small & Medium Business 有提供一些商務用的簡報範本,這裡有提供一些質感不錯的免費簡報範本,而 Free Powerpoint TemplatesPowerbacks 則提供了一些免費簡單的簡報範本,有需要的都可以下載試試。另外 OpenOffice.org Templates 也有許多 OOo 愛好者所上傳提供的各類範本可下載使用喔!

PS 6. 不會安裝與操作的話可以參考下載 OpenOffice.org 官方網站提供給 OOAuthors 社群們共同編寫的英文手冊,對英文不熟悉的使用者可以參考 OpenOffice.org 線上教學OpenOffice.org 2.0 應用手冊 - 中小學教師篇,以及 OpenOffice.org 補給站線上書籍 - 自由軟體與 OpenOffice.org澎湖人 NO.1 影音教學網 - OpenOffice 課程 (這個網站還有很多不錯的軟體錄影教學喔)。另外,由於 Sun StarOffice 是基於 OpenOffice.org 所改良的商業軟體,基本上操作不會有太大的差異,因此有需要的朋友也可以下載 StarOffice 的說明文件來參考喔!有任何 OpenOffice.org 相關的疑問,可以到 OpenOffice.org 補給站OpenOffice.org 中文加強版OpenOffice.org 試用手記查詢發問喔 ^_^

PS 7. 對於 Microsoft Office 的印象,除了價格高昂、功能眾多外,最讓我感到興趣的,就是內藏的復活節彩蛋,像 Word 97 的彈珠台、Excel 97 的 3D 模擬飛行、Excel 2000 的賽車遊戲...等,都非常知名。但讓我感到訝異的,就是連 Open Source Software 的 OpenOffice.org 也有!大概是因為以前商業版本的 StarOffice 就有所以變成傳統保留下來吧 ^_^,在 OpenOffice.org Calc 裡的儲存格內輸入 =Game("StarWars"),就會有一個像以前 "小蜜蜂" 的小遊戲可以玩喔!有興趣想知道更多的話可以參考這裡這裡這裡,另外在 OpenOffice Calc Tips 這個專門介紹 Calc 使用上小撇步的網站則有提到在 Calc 儲存格內輸入 =starcalcteam() 會秀出開發團隊的照片喔!

PS 8. IBM 在宣佈加入 OpenOffice.org 開放原始碼社群沒多久後便推出採用 Eclipse 開放原始碼框架開發的 Java 免費辦公室套裝軟體 IBM Lotus Symphony (基 本上可以說是披著 Eclipse 外衣的 OpenOffice.org 啊!從 "C:\Program Files\IBM\Lotus\Symhpony\framework\shared\eclipse\plugins\com.ibm.prodnctivity.tools.base.app.win32_3.0.1.20080130-2132\" 裡看到 soffice.exe 的存在就可以發現端倪。不過多了一些功能,像 "藝廊"、"手繪表格"、"圖文框" 等,相關資訊可參考這裡),包含了 Documents (文書處理)、Spreadsheets (試算表) 與 Presentations (簡報) 這三個軟體成員,可原生支援 OpenDocument Format (ODF)、Lotus SmartSuite、Microsoft Office 等檔案格式與 PDF 檔案輸出,執行平台為 LinuxWindows XP/Vista。目前 Beta 4 版中有提供中文介面,其操作介面有點類似 Microsoft Office 2007 Ribbon (據說接觸過 IBM Lotus Notes/Domino 的使用者會感到十分熟悉,因為這三個軟體成員原先也包含在 Lotus 8 中,不過我尚未接觸過 Lotus 的辦公室套裝軟體,倒是 Microsoft Office 2007 有稍微把玩過,所以有這樣的感覺),而且可以使用 Tab 或縮圖的方式來切換瀏覽所開啟的多個檔案!可惜硬體需求有點高,最少需要 1 GB 的記憶體與 900 MB 的硬碟空間 (大概是因為使用 Java 撰寫的關係吧),有興趣可以參考看看!除了 IBM Lotus Symphony 跟 Microsoft Office 2007 提供了新個操作介面外,OpenOffice.org 也順應潮流發佈了 Project Renaissance,呼籲社區開發者提供新的使用者介面設計方案來改進,其中 FLUX UI 是呼聲很高的一個設計,還獲得 Sun Microsystems 的社群創新奬!目前已經釋出 Impress 的版本提供試用,有興趣的朋友可以在這裡下載,系統需求為 Java 6 以上版本。

PS 9. 相較於 Microsoft Office,OpenOffice.org 的體積已經算小了,不過對於只想預覽沒有編輯需求的人來說還是很大。沒問題,畢竟連 Microsoft Office 的專屬檔案格式都有 Microsoft 自家推出的 Microsoft Office ViewerAbdio, Inc. 推出的 Word Reader 可以開啟檢視 (也可以透過 Windows 平台上功能較簡單的免費軟體 PolyEdit Lite 來讀寫 Word 的 .doc 檔案,它可算是功能加強版的 WordPad),開放的 OpenDocument format 自然也有解決方案囉!Visioo-Writer 是支援 Linux 與 Windows 平台的 Open Source 軟體,可以開啟 .sxw 和 .odt 的檔案。ODF Viewer 則是支援 Linux、Windows 與 Mac OS X 平台的 Open Source 軟體,可以開啟 OpenDocument Text files、Spreadsheets 和 Presentations 的檔案。另外 SoftMaker 除了有自家的跨平台辦公室套裝軟體 SoftMaker Office 2008(免費下載使用的 SoftMaker Office 2006 for Windows),也提供了一個免費的 Viewer 軟體 - TextMaker Viewer 2009,能開啟自家的專屬格式外,也支援 .doc、.odt ... 等多種檔案喔!不過只支援 Windows 平台。有這方面需求的朋友可以試試這幾個軟體。

windows ROR 安裝,使用 Mongrel

Mongrel跟Webricks 一樣,是一個方便我們架設 Ruby on Rails 環境的網頁伺服器,但比 Webricks 快速。

安裝
gem install mongrel


使用方式
基本跟 Webrick 差不多。
到想掛載的網頁根目錄,打入
mongrel_rails start

你就會發現網頁已經可以在127.0.0.1:3000打開了。

其他
如果要用 deamon 模式來使用的話
打入

mongrel_rails start -d

即可

如果要使用特定的 port

mongrel_rails start -p 1234

即可

用不同環境啟動

mongrel_rails start -e production/development/test

即可

指定log file

mongrel_rails start -l log/mongrel_log

即可

有啟動的問題

mongrel_rails start -h

即可

重起 Mongrel

mongrel_rails restart


停止 Mongrel

mongrel_rails stop


資料來源:Lighty RoR: Mongrel 使用方式

在Windows上安裝建立 Ruby on Rails 環境

安裝 Ruby and RubyGems

取得最新版本One-Click Ruby Installer, 目前版本為rubyinstaller-1.8.6-p383-rc1.exe。下載後執行, 安裝時勾選「add Ruby excutables to PATH」,然後全部用預設安裝, 此安裝程式會在C:\ruby 安裝Ruby, 且會順便安裝RubyGems。 安裝到最後可以選擇開啟README文件,會顯示剛裝的所有程式的版本。完成安裝後你需要更新gems
gem update --system


安裝 Rails

Rails 非常容易安裝,這要謝謝RubyGems。
在命令提示字元用gem指令來安裝:(執行完指令會停住一段時間,不是當機喔。)
gem install rails


安裝 SQLite(資料庫)

SQLite Download Page下載 Precompiled Binaries For Windows中兩個檔案

以下是目前最新版本
sqlite-3_6_21.zip A command-line program for accessing and modifying SQLite databases.
sqlitedll-3_6_21.zip This is a DLL of the SQLite library without the TCL bindings.
把裡面的檔案解壓縮到 C:\ruby\bin

執行
gem install sqlite3-ruby

會出現一些 No define for xxxx 的訊息,不用理他。

就此完成!!

預設環境是 Ruby on Rails + SQLite3 +WEBrick

參考資料:在Windows上安裝Ruby on Rails => Rails Wiki

ROR佈署方案 - Nginx + passenger + thin / mongrel

Phusion Passenger/mod_rails令Rails部署变得更容易

Lighty RoR: Passenger :Mod_rails for Apache 終於出世
Phusion Passenger for Nginx - Ruby编程 - JavaEye新闻
一直以來,Lighttp+fastCGI是rails各種部署方式中性能最好的一種,而passenger和前者比較的話,在處理能力上的差距還算可以接受,一直被詬病的是在內存等資源消耗上存在巨大差距.但是隨著passenger2.2.0的發布,在資源消耗方面,Nginx+passenger的方式完全不輸給 Lighttp+fastCGI,而由此提升的性能也會使得passenger和Lighttp+fastCGI之間處理能力更加接近.


由此看來,效能不錯。

可到這邊下載安裝
Install — Phusion Passenger™ (a.k.a. mod_rails / mod_rack)

配合Ruby Enterprise Edition更是厲害。

windows和 Linux下建立 Ruby On Rails 環境 Thin 篇

windows下安裝 Thin A fast and very simple Ruby web server
gem install rack

gem install eventmachine

如果出現
ERROR: could not find gem eventmachine locally or in a repository
請到RubyForge: Ruby/EventMachine: 專案檔案列表下載最新的eventmachine.gem檔案
此處我下載的是eventmachine-0.12.10-x86-mswin32-60.gem

如果下載後存到c:\,請到c:\輸入
gem install eventmachine-0.12.10-x86-mswin32-60.gem


結果最後還是跟我說缺少cl.exe
查詢後才知道,需要安裝visual studio才有內含此檔
然後我又去Downloads visual studio 2008 express

結果下載三次都失敗!!!

弄了一上午,網上也有人說要用 Thin還是在Linux下,Windows無法安裝。
無論如何,我最後決定放棄這個方案了……去他媽的微軟!!!
實在想在WINDOWS下安裝的人可以自行參考這邊
http://groups.google.com/group/mack-framework/browse_thread/thread/767e005a944b1400?pli=1

Ubuntu下安裝Thin,只需要一個步驟就完成!
sudo gem install thin


到你的網頁目錄,啟動
thin start

完成!!

各種Ruby on Rails部署方案 的性能比較表

前後端搭配的測試

各種前端的,我在這裡要測試的性能主要是對於動態請求的響應速度,所以本案中的某些配置既沒有考慮使用Rewrite或其他方式對靜態文件進行單獨處理 (除了Passenger和Swiftiply默認配置便實現了這個功能),也不考慮測試到前端的KeepAlive請求。主要測試以下的組合:
  • Apache + Passenger
  • Nginx + Mongrel
  • Nginx + Evented Mongrel
  • Nginx + Thin
  • Swiftiply + Swiftiplied Mongrel
  • Swiftiply + Thin
  • HAproxy + Mongrel
  • HAproxy + Thin
  • Lighttpd + Mongrel
  • Lighttpd + Thin
  • Lighttpd + FastCGI/Socket
  • Lighttpd + FastCGI/TCP
做服務器的被測試機器為ThinkPad T43,Intel Pentium M 1.86G,1.5G RAM,系統為Ubuntu 8.04。發送請求的是無線局域網中的另外一台筆記本,運行Vista。兩台機器通過TP-Link WR340G+ 801.11g 54MB的無線局域網相連。
前端和後端處於同一台機器上,所有的後端都設為10個進程,綁定於30000-30009端口,Passenger設置為最大生成10個進程,Swiftiply則是綁定於4000端口監聽。FastCGI的socket路徑為/tmp/rails[0-9].sock。


各種部署方式的性能排個名次,以下是後各種方案在並發量>=10的情況下的平均值(去掉出現0值的情況):

前端
後端
平均每秒響應數 最大鏈接限制
Lighttpd
FastCGI/TCP
215.33
64
Lighttpd
FastCGI/Socket
214.65
64
Lighttpd
Thin
196.16
64
Swiftiply
Swiftiplied Mongrel
191.33
N/A
HAproxy
Thin
188.73
10
Swiftiply
Thin(Swiftiplied)
178.96
N/A
Apache2.2/Prefork
Passenger
173.02
N/A
HAproxy
Mongrel
170.4
1
Apache2.2/Worker
Passenger
163.9
N/A
Lighttpd
Mongrel
149.85
64
Nginx
Evented Mongrel
149.78
N/A
Nginx
Thin
143.88
N/A
Nginx
Mongrel
138.86
N/A

在這個表中,Lighttpd的三種方案佔據了前三位,Lighttpd+FastCGI是性能最高的部署方式。這種方式比另一種流行方案Nginx+Mongrel的方式性能提升了高達50%!
FastCGI的好處在此體現出來:
  • 二進制協議,無需HTTP的解析
  • 與前端可以建立持久鏈接
  • 沒有鎖和上下文切換的開銷
另外Lighttpd相對於Nginx的優勢在於請求和響應的接收緩衝區很大,省去多次接收和發送的開銷。
Lighttpd+Thin的方式的性能列第三位,這點似乎出乎意料之外,但實際上是因為Lighttpd 1.5支持對HTTP後端建立HTTP KeepAlive鏈接。在第一部分對後端單獨的測試中,小並發下的Thin的KeepAlive測試性能並不比FastCGI差,同時Thin實現了非 阻塞IO,而FastCGI則是阻塞式的。相反,HAproxy和Nginx則都不支持HTTP KeepAlive。
而Swiftiply的方式也顯示出了強勁的性能,應該是得益於它的「讓後端主動連接到Swiftiply」的這種特殊的結構。
當前備受關注的Passenger的部署方式在本案中並沒有顯示出特別的性能上的優勢,不過如果將並發鏈接數放在300以內,則 Apache2.2/Prefork + Passenger的部署方式的平均每秒響應數上升為204.03,這樣看來,倘若為Apache進行一些優化配置,依然不失為一種高效的部署方案。而同 時Passenger又是最容易配置的一種方案,能達到這種效果已經非常令人滿意。
HAproxy + Mongrel並限制鏈接數為1,則是一種穩定、保守的部署方式,雖然在這裡性能不出眾,但是穩定性非常好。
最後,與Nginx相關的三種方案都排在了該榜的末尾,由於Nginx的反向代理負載均衡缺少一些高級的特性以及Rails本身的特性而導致其不適合單獨應用在Rails程序的部署上:
  • 缺少到後台服務器端的鏈接數限制的能力,這導致了Mongrel在接受大量請求時將時間消耗在上下文切換和鎖的爭用上。
  • 缺乏建立到後台服務器端的持久鏈接的能力,這導致了在鏈接的打開、建立、關閉上花費了額外的開銷。
更詳細的分析過程和資料請看浅析Ruby on Rails部署方案

2009年12月28日 星期一

SQLite 教學

* 1 建立資料庫檔案
* 2 在sqlite3提示列下操作
* 3 SQL的指令格式
* 4 建立資料表
* 5 建立索引
* 6 加入一筆資料
* 7 查詢資料
* 8 如何更改或刪除資料
* 9 其他sqlite的特別用法
* 10 小結

建立資料庫檔案

用sqlite3建立資料庫的方法很簡單,只要在shell下鍵入(以下$符號為shell提示號,請勿鍵入):

$ sqlite3 foo.db3

如果目錄下沒有foo.db3,sqlite3就會建立這個資料庫。sqlite3並沒有強制資料庫檔名要怎麼取,因此如果你喜歡,也可以取個例如foo.icannameitwhateverilike的檔名。

在sqlite3提示列下操作

進入了sqlite3之後,會看到以下文字:

SQLite version 3.1.3
Enter ".help" for instructions
sqlite>

這時如果使用.help可 以取得求助,.quit則是離開(請注意:不是quit)

SQL的指令格式

所有的SQL指令都是以分號(;)結尾的。如果遇到兩個減號(--)則代表註解,sqlite3會略過去。

建立資料表

假設我們要建一個名叫film的資料表,只要鍵入以下指令就可以了:

create table film(title, length, year, starring);

這樣我們就建立了一個名叫film的資料表,裡面有name、length、year、starring四個欄位。

這個create table指令的語法為:

create table table_name(field1, field2, field3, ...);

table_name是資料表的名稱,fieldx則是欄位的名字。sqlite3與許多SQL資料庫軟體不同的是,它不在乎欄位屬於哪一種資料型態:sqlite3的欄位可以儲存任何東西:文字、數字、大量文字(blob),它會在適時自動轉換。

建立索引

如果資料表有相當多的資料,我們便會建立索引來加快速度。好比說:

create index film_title_index on film(title);

意思是針對film資料表的title欄位,建立一個名叫film_title_index的索引。這個指令的語法為

create index index_name on table_name(field_to_be_indexed);

一旦建立了索引,sqlite3會在針對該欄位作查詢時,自動使用該索引。這一切的操作都是在幕後自動發生的,無須使用者特別指令。

加入一筆資料

接下來我們要加入資料了,加入的方法為使用insert into指令,語法為:

insert into table_name values(data1, data2, data3, ...);

例如我們可以加入

insert into film values ('Silence of the Lambs, The', 118, 1991, 'Jodie Foster');
insert into film values ('Contact', 153, 1997, 'Jodie Foster');
insert into film values ('Crouching Tiger, Hidden Dragon', 120, 2000, 'Yun-Fat Chow');
insert into film values ('Hours, The', 114, 2002, 'Nicole Kidman');

如果該欄位沒有資料,我們可以填NULL。



查詢資料

講到這裡,我們終於要開始介紹SQL最強大的select指令了。我們首先簡單介紹select的基本句型:

select columns from table_name where expression;

最常見的用法,當然是倒出所有資料庫的內容:

select * from film;

如果資料太多了,我們或許會想限制筆數:

select * from film limit 10;

或是年份比較早的電影先列出來(預設為 asc):

select * from film order by year limit 10;

或是年份比較晚的電影先列出來:

select * from film order by year desc limit 10;

或是我們只想看電影名稱跟年份:

select title, year from film order by year desc limit 10;

查所有茱蒂佛斯特演過的電影:

select * from film where starring='Jodie Foster';

查所有演員名字開頭叫茱蒂的電影('%'、'_' 符號便是 SQL 的萬用字元,前者代表任意長度字元,後者代表任意一個字元):

select * from film where starring like 'Jodie%';

查所有演員名字以茱蒂開頭、年份晚於1985年、年份晚的優先列出、最多十筆,只列出電影名稱和年份:

select title, year from film where starring like 'Jodie%' and year >= 1985 order by year desc limit 10;

有時候我們只想知道資料庫一共有多少筆資料:

select count(*) from film;

有時候我們只想知道1985年以後的電影有幾部:

select count(*) from film where year >= 1985;

(進一步的各種組合,要去看SQL專書,不過你大概已經知道SQL為什麼這麼流行了:這種語言允許你將各種查詢條件組合在一起──而我們還沒提到「跨資料庫的聯合查詢」呢!)
[編輯]
如何更改或刪除資料

瞭解select的用法非常重要,因為要在sqlite更改或刪除一筆資料,也是靠同樣的語法。

例如有一筆資料的名字打錯了:

update film set starring='Jodie Foster' where starring='Jodee Foster';

就會把主角欄位裡,被打成'Jodee Foster'的那筆(或多筆)資料,改回成Jodie Foster。

delete from film where year > 1970;

就會刪除所有年代早於1970年(不含)的電影了。



其他sqlite的特別用法

sqlite可以在shell底下直接執行命令:

sqlite3 film.db "select * from film;"

輸出 HTML 表格:

sqlite3 -html film.db "select * from film;"

將資料庫「倒出來」:

sqlite3 film.db ".dump" > output.sql

利用輸出的資料,建立一個一模一樣的資料庫(加上以上指令,就是標準的SQL資料庫備份了):

sqlite3 film.db < output.sql

在大量插入資料時,你可能會需要先打這個指令:

begin;

插入完資料後要記得打這個指令,資料才會寫進資料庫中:

commit;

原始出處

2009年12月11日 星期五

excel csv資料檔案匯入MySQL phpmyadmin中文字看不到?

excel csv資料檔案匯入MySQL phpmyadmin中文字看不到問題?

如果MySQL資料庫伺服器安裝預設編碼為UTF 8(Unicode),那麼用Excel將資料轉存成CSV檔內容中文字會無法成功匯入,會出現空白…..



原因是因為Excel將資料轉存成CSV檔是以BIG5去儲存的,所以直接匯入MYSQL,當然會有問題,可以使用以下方式進行匯入:
1.將Excel資料轉存成CSV檔
2.使用notepad開啟剛剛轉存的CSV檔
3.再將這份文件另存檔案,注意編碼要選擇UTF-8
4.至phpmyadmin載入CSV檔即可

2009年12月9日 星期三

在Ubuntu9.10 利用Totem播放PPStream(PPS)和sopcast

首先是安裝PPS插件
在終端中執行
sudo gedit /etc/apt/sources.list

加入
deb http://ppa.launchpad.net/portis25/ppa/ubuntu karmic main
deb-src http://ppa.launchpad.net/portis25/ppa/ubuntu karmic main

之後在終端中依次執行
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 27F5B2C1B3EAC8D9

sudo apt-get update

sudo apt-get install totem-pps


若要安裝sopcast(看P2P電視),請安裝
sudo apt-get install totem-sopcast


要看PPS時,在 Totem 裡啟用 totem-pps 插件:
打開 Totem(電影播放器),選「編輯 –> 插件」
在所打開的窗口裡勾上 「PPS 瀏覽器」

要看sopcast的話,方法同上。


附註:PPS Totem 插件的PPA(一開始安裝的來源)
這個ppa裡還包含以下軟件: (Karmic下沒有問題, Jaunty等其他版本可能存在依賴問題)
gst-plugins-sopcast: 0.0.4
totem-sopcast: 0.0.3
sopcast: 命令行的網絡電視, karmic裡已經沒有libstdc++5庫了, 需要自行安裝該庫。
lib32stdc++5: 32位的libstdc++5庫,64位karmic系統需要安裝, 不然sopcast無法運行, 為了照顧jaunty系統去掉了sopcast對lib32stdc++5的依賴,因此需要自行安裝。
sopcast-player: 一個python寫的GUI前端


flashplugin-nonfree: 這個主要針對64位系統,安裝原生64位flash插件
gmlive: 0.22.2 (沒有測試)
ibus-qt4: ibus的qt4支持
jde: emacs的java支持包,修正了一個錯誤
lib32ibus: 我自己打的64位系統上的支持32位程序的ibus庫,包含gtk和qt4支持。有了它,64位系統上qq, googleearth, skype等32位程序也可以用ibus輸入法了。
linuxqq: 主要針對64位系統
monkeys-audio: ape無損格式編解碼器
reciteword*: 好像叫黑客背單詞?
另有更新後的pymacs, rope, ropemacs等

2009年12月1日 星期二

[好文]Writer V.S. Word — 排版、設定雙管齊下讓文件交換不失真

Writer V.S. Word — 排版、設定雙管齊下讓文件交換不失真

使用 OpenOffice.org Writer 編輯的文字檔在 Microsoft Word 裡開啟時,無可避免地一定會有格式不相容的問題,例如:文字間隔不正確、段落首字縮排不正常、標點符號位置不正確等,其實這些格式問題只要透過簡單的設定 和正確的排版格式即可解決,讓文件在不同平台也能保持排版的一致性。 除了排版的正確性之外,為了確保文件的一致性,我們還需注意每個平台上文書軟體的預設設定都各有不同,因為這也會影響文件最終顯示的格式,例如 Writer 的頁面邊距預設設定就和 Word 不同,會讓使用者產生不熟悉的閱讀感受。因此除了注重排版格式外,我們還需注意每個軟體的設定,是否符合我們的需求,只要掌握了這兩個元素,即可以製做出 在各種平台都不致產生太大變動的文件。

當 然這些方式仍有其限制,例如對於超級複雜的 Word 表格,OpenOffice.org 仍然無法完全支援,這是即使再注重排版和設定也無法解決的問題,但對於一般申請表等常見表格,OpenOffice.org Writer 的表現完全足以勝任。除了上述的特殊狀況,目前 OpenOffice.org Writer 對於 Word 的支援以足以覆蓋百分之九十的使用狀況。

交流利器之一 — 正確的排版方式

要保持格式的一致,採用正確的排版方式是非常重要的一部份,設定正確的文件能在轉換平台時,將格式不相容的情形減到最低。常用的段落格式有以下數項:

◎ 標題設定

一份文件中最重要的部分之一當然就是文件的標題,設定標題的段落格式不但可以保持轉換平台時的格式正常,也讓文件在轉換平台後,能夠輕易地更改格式,除此之外,如果你需要產生目錄,標題格式設定也可以幫助你在轉換平台後自動調整目錄中的頁數。

設定標題格式非常簡單,只要將想設定的部分反白,選擇【格式】➔【樣式與格式】叫出「樣式與格式」視窗,接著選擇希望設定的標題樣式即可。



◎ 內文段落設定

除此之外,由於不同平台間的文件交換,可能使不正確的空白設定出現問題,因此一般在跨平台的文件排版時,我們儘量不使用空白鍵和〔Enter〕鍵定位,也就是不使用空白鍵輸入段首空白;也避免利用〔Enter〕鍵輸入段落間隔,我們可以利用段落設定來達成這些功能。

要調整段落設定,首先我們先將預更改設定的部分反白後,再選取【格式】➔【段落】叫出「段落」視窗。



在段落視窗中,我們可以在「縮排」區域中設定段落的前後縮排,和段首空白;在「間隔」區域中設定段落間隔,並可以在「行距」區域中設定選取段落中每一行的間隔。



◎ 修改預設段落格式

如果要讓你所設定的樣式成為預設的常用樣式,你可以在「樣式與格式」視窗中欲修改的樣式上按一下滑鼠右鍵,並選擇【修改】。



進入「段落樣式」視窗後,即可用前述方式調整所需的設定,修改完成後按一下〔確定〕按鈕即可儲存修改。



儲存後,你就可以看到所有對應的段落格式套用到你剛才的設定,如此一來,我們就不需要使用空白鍵和〔Enter〕鍵也可以清楚地區分段落,而且欲修改時,只要再次修改段落格式,即可將變更套用在所有對應的段落上。



◎ 使用手動換行功能強制分頁

一 般使用者除了常用〔Enter〕鍵留下段落間隔外,也常連續使用〔Enter〕鍵以達到分頁的效果,這正是造成不同平台間格式不一致的原因之一,因為不同 的文書軟體對排版的預設設定常不相同,使得行距、頁緣等排版設定在不同軟體間顯示的方式不會一致。因此遇到需要分頁的時候,我們最好使用較不受文書軟體影 響的 「手動換行」功能來分頁。

在遇到需分頁的情形時,我們可以將游標置於要換到下一行的段落最前緣,並選擇【插入】➔【手動換行】。



然後選擇「換頁」後,按一下〔確定〕按鈕,如此一來,在游標後的段落即會自動換到下一行,讓不同軟體開啟文件時,能有相同的分頁設定。



交流利器之二 — 軟體設定的變更


◎ 頁面設定


用 習慣 Microsoft Word 的使用者,可能仍然會覺得 Writer 所產生的文件拿到 Word 上開啟時,怎麼看怎麼不順眼。這可能是由於 Word 和 Writer 對於頁面邊距的預設設定不同所致,我們可以修改 Writer 的預設頁面邊距以讓文件更符合使用者的習慣。

我們可以按一下【格式】➔【頁面】來修改頁面邊距。



Writer 所預設的頁面邊距是上、下、左、右各 2 公分,而 Microsoft Word 的預設設定是上、下各 2.54 公分;左、右各 3.17 公分。打開「頁面樣式:預設」視窗後,我們可以在「頁面邊距」區域中將設定更改成我們所習慣的方式。



◎ 標點符號的設定


由於 Writer 原本就是西方文字的文書軟體,因此在處理中文排版時總會有些不相容的狀況,例如標點符號與文字重疊、標點超出內文邊界等,讓使用 Writer 所編輯的文件在一般使用者眼中顯得有些雜亂,不過這些問題都可以透過簡單的設定解決。

這份用 Microsoft Word 編輯的文件使用 Writer 開啟後,會發生標點超出內文邊界的問題。



這時我們只要先反白全文,然後選擇【格式】➔【段落…】。



並在「段落」視窗的「亞洲語言排版式樣」活頁標籤中,取消勾選「行末附加標點符號」,並按一下確定。



這時我們可以看到整份文件中的標點已大致大內文邊界中,但仍有一些標點因為壓縮和避頭點的關係無法換行,因而超出了邊界;另外,也有一些標點符號和字重疊。



這時我們只需在【工具】➔【選項…】中,調整字元間隔的壓縮設定,就可以解決這個問題。



進入「選項」視窗後,選擇【語言設定】➔【亞洲語言版面配置】,然後在「字元間隔」區域中選擇「不壓縮」。



然後回到編輯頁面,你可以發現所有的問題都經由這個簡單的設定解決了。



結語

基 本上,只要掌握前述兩項利器,那麼你的文件無論拿到 Windows、Linux 或是 Mac 平台下,用任何相容於 Microsoft Word 的文書軟體開啟,都應該可以將格式的變動維持在最小,甚至拿到 Google Docs 下也不會有太多問題。從此以後文件的不相容性不再是問題,即使你必須和別人交流文件,也可以選擇任何文書軟體,不論是 OpenOffice.org、Microsoft Word、iWork Pages、TextEdit 都任你使用。當然,以 OSSF 的立場來看,我得說支援強大、完全開放源碼的 OpenOffice.org Writer 是你最佳的選擇,最重要的一點是:它是完全免費的(是的,免錢當然是重點,因此我們就別提什麼「自由」了)。

2009年11月16日 星期一

UBUNTU如何上傳網路磁碟機中的檔案

例如寄信時,
若想附加網路磁碟機中的檔案,會發現選項中沒有網路磁碟機
有光碟機,有隨身碟,就是沒有網路磁碟。

沒關係,可以到家目錄(/home/登錄者ID)下,有個隱藏的檔案夾~/.gvfs
已掛載的網路磁碟機就在裡面

只要事先將.gvfs 目錄加入書籤
以後就可以簡單的附加或上傳網路磁碟機中的檔案了

2009年11月10日 星期二

優化PHP執行效率的40條技巧

優化PHP執行效率的40條技巧


1.如果一個方法能被靜態,那就聲明他為靜態的,速度可提高1/4;

2.echo的效率高於print,因為echo沒有返回值,print返回一個整型;

3.在循環之前設置循環的最大次數,而非在在循環中;

4.銷毀變量去釋放內存,特別是大的數組;

5.避免使用像__get, __set, __autoload等魔術方法;

6.requiere_once()比較耗資源;

7.在includes和requires中使用絕對路徑,這樣在分析路徑花的時間更少;

8.如果你需要得sexinsex到腳本執行時的時間,$_SERVER['REQUSET_TIME']優於time();

9.能使用字符處理函數的,儘量用他們,因為效率高於正則;

10.str_replace字符替換比正則替換preg_replace快,但strtr比str_replace又快1/4;

11.如果一個函數既能接受數組又能接受簡單字符做為參數,例如字符替換,並且參數列表不是太長,可以考慮多用一些簡潔的替換語句,一次只替換一個字符,而不是接受數組做為查找和替換參數。大事化小,1+1>2;

12.用@掩蓋錯誤會降低腳本運行速度;

13.$row['id']比$row[id]速度快7倍,建議養成數組鍵加引號的習慣;

14.錯誤信息很有用;

15.在循環裡別用函數,例如For($x=0; $x < count($array); $x), count()函數在外面先計算;

16.在方法裡建立局部變量速度最快,97xxoo幾乎和在方法裡調用局部變量一樣快;

17.建立一個全局變量要比局部變量要慢2倍;

18.建立一個對象屬性(類裡面的變量)例如($this->prop++)比局部變量要慢3倍;

19.建立一個未聲明的局部變量要比一個初始化的局部變量慢9-10倍;

20.聲明一個未被任何一個函數使用過的全局變量也會使性能降低(和聲明相同數量的局部變量一樣),PHP可能去檢查這個全局變量是否存在;

21.方法的性能和在一個類裡面定義的方法的數目沒有關係,因為我添加10個或多個方法到測試的類裡面(這些方法在測試方法的前後)後性能沒什麼差異;

22.在子類裡方法的性能優於在基類中;

23.只調用一個參數並且函數體為空的函數運行花費的時間等於7-8次$localvar++運算,而一個類似的方法(類裡的函數)運行等於大約15次$localvar++運算;

24.Surrounding your string by 『 instead of 」 will make things interpret a little faster since php looks for variables inside 「…」 but not inside 『…』. Of course you can only do this when you don't need to have variables in the string.

25.當輸出字符串時用逗號代替點分割更快些。注意:這只對echo起作用,這個函數能接受一些字符串作為參數;

26.在apache服務器裡一個php腳本頁面比相應的HTML靜態頁面生成至少要多花2-10倍的時間,建議多用些靜態HTML頁面和少量的腳步;

27.除非你的安裝了緩存,不然你的php腳本每次被訪問都需要被重編譯。建議安裝個php緩存程序,這樣通過去除一些重複的編譯來很明顯的提高你20-100%的性能;

28.建議用memcached,高性能的分佈式內存對象緩存系統,提高動態網絡應用程序性能,減輕數據庫的負擔;

29.使用ip2long()和long2ip()函數把IP地址轉成整型存放進數據庫而非字符型。這幾乎能降低1/4的存儲空間。同時可以很容易對地址進行排序和快速查找;

30.使用checkdnsrr()通過域名存在性來確認部分email地址的有效性,這個內置函數能保證每一個的域名對應一個IP地址;

31.如果你在使用php5和mysql4.1以上的版本,考慮使用mysql_*的改良函數mysqli_*;

32.試著喜歡使用三元運算符(?:);

33.在你想在徹底重做你的項目前,看看PEAR有沒有你需要的。PEAR是個巨大的資源庫,很多php開發者都知道;

34.使用highlight_file()能自動打印一份很好格式化的頁面源代碼的副本;

35. 使用error_reporting(0)函數來預防潛在的敏感信息顯示給用戶。理想的錯誤報告應該被完全禁用在php.ini文件裡。可是如果你在用一個共享的虛擬主機,php.ini你不能修改,那麼你最好添加error_reporting(0)函數,放在每個腳本文件的第一行(或用 require_once()來加載)這能有效的保護敏感的SQL查詢和路徑在出錯時不被顯示;

36.使用 gzcompress() 和gzuncompress()對容量大的字符串進行壓縮(解壓)在存進(取出)數據庫時。這種內置的函數使用gzip算法能壓縮到90%;

37.通過參數變量地址得引用來使一個函數有多個返回值。你可以在變量前加個「&」來表示按地址傳遞而非按值傳遞;

38.Fully understand 「magic quotes」 and the dangers of SQL injection. I'm hoping that most developers reading this are already familiar with SQL injection. However, I list it here because it's absolutely critical to understand. If you've never heard the term before, spend the entire rest of the day googling and reading.

39.使用strlen()因為要調用一些其他操作例如lowercase和hash表查詢所以速度不是太好,我們可以用isset()來實現相似的功能,isset()速度優於strlen();

40.When incrementing or decrementing the value of the variable $i++ happens to be a tad slower then ++$i. This is something PHP specific and does not apply to other languages, so don't go modifying your C or Java code thinking it'll suddenly become faster, it won't. ++$i happens to be faster in PHP because instead of 4 opcodes used for $i++ you only need 3. Post incrementation actually causes in the creation of a temporary var that is then incremented. While pre-incrementation increases the original value directly. This is one of the optimization that opcode optimized like Zend's PHP optimizer. It is a still a good idea to keep in mind since not all opcode optimizers perform this optimization and there are plenty of ISPs and servers running without an opcode optimizer.

在WINE中安裝 .net 環境

建議使用 winetricks 這個方便的東西


好工具winetricks---安装Windows有关库和软件的小程序
介绍一下使用方法:

1、打开终端,输入
wget http://www.kegel.com/wine/winetricks

2、再输入
sudo apt-get install cabextract

3、再输入
chmod +x winetricks

4、最后
./winetricks

在打开的窗口中,可以看到程序所支持的一个软件列表


art2kmin 微软 Access 2000 运行时.
colorprofile 标准 RGB 颜色配置文件
comctl32 微软 common controls 5.80
comctl32.ocx 微软的comctl32.ocx 和comctl.ocx,VB6的comctl32外壳
corefonts 微软 Arial, Courier, Times 字体
dcom98 微软 DCOM, 替换Wine所自带的
dirac0.8 the obsolete Dirac 0.8 directshow filter
directx9 微软 DirectX 9
divx divx 视频编码
dotnet11 微软 .NET 1.1
dotnet20 微软 .NET 2.0
ffdshow ffdshow 视频编码
flash Adobe Flash Player ActiveX 与 firefox 插件
fontfix Fix bad fonts which cause crash in some apps (e.g. .net).
gdiplus 微软 gdiplus.dll (须安装powerpoint)
gecko HTML 渲染引擎(Mozilla)
icodecs Intel 媒体编码 (Indeo)
jet40 微软 Jet 4.0 Service Pack 8
liberation Red Hat Liberation 字体 (Sans, Serif, Mono)
mdac25 微软 MDAC 2.5: 微软 ODBC 驱动, etc.
mdac27 微软 MDAC 2.7
mdac28 微软 MDAC 2.8
mfc40 微软 mfc40 (Microsoft Foundation Classes from Visual C++ 4)
mfc42 微软 mfc42 (包含于下面的vcrun6)
mono19 mono-1.9.1-gtksharp-2.10.4-win32-2
msi2 微软 Installer 2.0
msls31 微软 Line Services 3.1 (needed by native riched?)
msxml3 微软 XML version 3
msxml4 微软 XML version 4
msxml6 微软 XML version 6
ogg ogg 过滤器和编码器: flac, theora, speex, vorbis,

pdh 微软 pdh.dll (Performance Data Helper)
quicktime72 苹果 Quicktime 7.2
riched20 微软 riched20 and riched32
riched30 微软 riched30
tahoma 微软 Tahoma 字体 (not part of corefonts)
vb3run 微软 Visual Basic 3 运行时
vb4run 微软 Visual Basic 4 运行时
vb5run 微软 Visual Basic 5 运行时
vb6run 微软 Visual Basic 6 运行时
vcrun6 微软 Visual C++ 6 sp4 运行库 (包括mfc42.dll, msvcp60.dll, msvcrt.dll)
vcrun2003 微软 Visual C++ 2003 运行库 (包括mfc71.dll,msvcp71.dll,msvcr71.dll)
vcrun2005 微软 Visual C++ 2005 运行库 (包括mfc80.dll,msvcp80.dll,msvcr80.dll)
vcrun2005sp1 微软 Visual C++ 2005 sp1 运行库
vcrun2008 微软 Visual C++ 2008 运行库 (包括mfc90.dll,msvcp90.dll,msvcr90.dll)
vjrun20 微软 Visual J# 2.0 运行库 (需要安装 dotnet20)
wmp9 微软 Windows Media Player 9
wmp10 微软 Windows Media Player 10
wsh51 微软 Windows Scripting Host 5.1
wsh56 微软 Windows Scripting Host 5.6
wsh56js 微软 Windows scripting 5.6, 只有jscript,没有cscript
wsh56vb 微软 Windows scripting 5.6, 只有vbscript,没有cscript
xvid xvid 视频编码

autohotkey Autohotkey (open source gui scripting language)
firefox3 Firefox 3
kde KDE for Windows installer
mpc Media Player Classic
vlc VLC media player

allfonts 以上所有字体 (corefonts, tahoma, liberation)
allcodecs 以上所有媒体编码 (xvid, ffdshow, icodecs)
fakeie6 在注册表中写入IE6已安装信息
native_mdac Override odbc32 and odbccp32
nt40 Set windows version to nt40
win98 Set windows version to Windows 98
win2k Set windows version to Windows 2000
winxp Set windows version to Windows XP
vista Set windows version to Windows Vista
winver= Set windows version to default (winxp)
volnum Rename drive_c to harddiskvolume0 (needed by some installers)

其中,要安装QQ2008的话,只需安装flash gecko msls31 riched20 vcrun6即可

UBUNTU下 flash 中文亂碼解決方案

原因是 /etc/fonts/conf.d/49-sansserif.conf
這個檔案裡的字型設定有錯

方案一 直接刪除 (Ubuntu - 解決 firefox 的 Flash 亂碼、無聲情況

先備份
sudo cp /etc/fonts/conf.d/49-sansserif.conf /etc/fonts/conf.d/49-sansserif.conf.bak

接著,把它砍掉~
sudo rm -f /etc/fonts/conf.d/49-sansserif.conf


方案二 修改檔案(解決 Flash 裡頭中文顯示亂碼問題
sudo gedit /etc/fonts/conf.avail/49-sansserif.conf

把最後一段「sans-serif」的 sans-serif 改成你要的中文字型就可以了,或是將中間橫線拿掉,改成 sans serif 也可以。

ubuntu 如何解壓縮 .RAR

打開「附屬應用程式」的「終端機」

打入sudo apt-get install rar

完成

2009年10月26日 星期一

在 fedora 11 安裝 openoffice

在終端機打上
su

以root身份登入

然後打上
yum groupinstall "Office/Productivity"

即可自動安裝

2009年8月29日 星期六

jQuery: append <script> element

var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.src = url;
$("#someElement").append( script );

2009年8月16日 星期日

[jQuery]用jQuery控制 iframe 內的元素

How to access iframe in jQuery

jQuery( function() {
$('#frame1').load( function(){
$(this.contentDocument).find('body').html('This frame was modified with jQuery!')
});

2009年8月15日 星期六

CSS Position Fixed for IE6

CSS Position Fixed for IE6
修正IE6不支持position:fixed的bug

/* 除了IE6的主流瀏覽器通用的方法 */
.fixed-top /* 頭部固定 */{position:fixed;bottom:auto;top:0px;}
.fixed-bottom /* 底部固定 */{position:fixed;bottom:0px;top:auto;}
.fixed-left /* 左側固定 */{position:fixed;right:auto;left:0px;}
.fixed-right /* 右側固定 */{position:fixed;right:0px;left:auto;}



/*讓position:fixed在IE6下可用! */
* html,* html body /* 修正IE6振動bug */{background-image:url(about:blank);background-attachment:fixed;}
* html .fixed-top /* IE6 頭部固定 */{position:absolute;bottom:auto;top:expression(eval(document.documentElement.scrollTop));}
* html .fixed-right /* IE6 右側固定 */ {position:absolute;right:auto;left:expression(eval(document.documentElement.scrollLeft+document.documentElement.clientWidth-this.offsetWidth)-(parseInt(this.currentStyle.marginLeft,10)||0)-(parseInt(this.currentStyle.marginRight,10)||0));}
* html .fixed-bottom /* IE6 底部固定 */{position:absolute;bottom:auto;top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0)));}
* html .fixed-left /* IE6 左側固定 */{position:absolute;right:auto;left:expression(eval(document.documentElement.scrollLeft));}


或是簡單的
Fixed Positioning in Internet Explorer 6

1. * {
2. margin: 0;
3. }
4. html, body {
5. height: 100%;
6. overflow: auto;
7. }
8. .wrapper {/*正常的*/
9. position: relative;
10. width: 100%;
11. height: 100%;
12. overflow: auto;
13. }
14. .box {/*固定的*/
15. position: fixed;
16. left: 10px;
17. top: 180px;
18. }
19. * html .box {
20. position: absolute;
21. }

2009年8月14日 星期五

mysql 裡 utf8_general_ci 跟 utf8_unicode_ci 連線校對的差異

mysql 裡 utf8_general_ci 跟 utf8_unicode_ci 連線校對的差異

有用過 mysql 的 UTF-8 編碼的人可能都會對這件事感到疑惑:

連線校對(collation)裡面的

utf8_general_ci

utf8_unicode_ci

到底有什麼差異呢?
在 phpMyAdmin 裡面的說明看起來通通一樣:

utf8_general_ci 統一碼 (Unicode) (多語言), 大小寫不相符
utf8_unicode_ci 統一碼 (Unicode) (多語言), 大小寫不相符

實在是看不出什麼刁來。

所以前一陣子在搞 mysql UTF-8 化的時候,谷歌了一番,
發現這篇文章裡有詳盡的說明:(其實就是把 mysql reference manual 翻譯而已)

utf8_general_ci 在轉換時速度比較快
utf8_unicode_ci 在轉換時比較精準

轉換?怎麼講呢?
簡單說就是當資料要從一個編碼換成另外一個編碼時,
mysql 要在兩個 codepage 裡面找出來相對應的字元位置在哪裡。
對 utf8_general_ci 來說,來源 codepage 裡面的一個字元只能對應到目標 codepage 裡面的一個字元,
而 utf8_unicode_ci 則可以把來源 codepage 裡的一個字元對應到目標 codepage 裡的多個字元(或反過來)。
例如德文裡的 ß 要轉換成英文的時候如果是用 utf8_unicode_ci 轉換會變成正確的 ss ,
但是如果用 utf8_general_ci 的話則會變成單一的 s 而已。

所以如果可以的話請盡量用 utf8_unicode_ci 而不要用 utf8_general_ci ,
雖然對 multibyte 字元來說這兩個都沒差,
但是 utf8 的網頁誰也不知道哪天會不會有這種字元出現在你的網頁上,
所以如果設成 utf8_unicode_ci 你就不需要擔心貼上去之後資料在轉換間遺失了。

2009年8月4日 星期二

在jQuery如何判斷頁面元素存在與否呢?

if ( $("#someID").length > 0 ) {
$("#someID").text("hi");
}

2009年7月29日 星期三

PHP cURL 中 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 的關聯

PHP cURL 中 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 的關聯

PHP cURL 有兩個 option - CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT ,在 PHP: curl_setopt - Manual 的介紹分別是︰

CURLOPT_CONNECTTIMEOUT

The number of seconds to wait whilst trying to connect. Use 0 to wait indefinitely.

CURLOPT_TIMEOUT

The maximum number of seconds to allow cURL functions to execute.

我看完在想的是,那這兩個 option 彼此之間有沒有關係?會不會互相影響?

順手測了一下,答案是會

CURLOPT_TIMEOUT 要比 CURLOPT_CONNECTTIMEOUT 大,不然設定 CURLOPT_CONNECTTIMEOUT 就沒有意義了。 CURLOPT_TIMEOUT 設定的秒數一到,就算 CURLOPT_CONNECTTIMEOUT 設定的秒數還沒到, cURL 也會被強制中斷。

我測試的方法是設定 CURLOPT_URL 連往不存在的 IP 。設定連往不存在的 Domain 沒法測,因為 cURL 去 DNS 查不到 IP 就不會繼續跑了,還用不到 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 。

MS SQL日期處理方法

--檢查是否為SQL SERVER合法日期格式

SELECT ISDATE('2004-03-01')

--1 (int)正確

SELECT ISDATE('2004-02-33')

--0 (int)錯誤

--取得現在時間GETDATE()

select GETDATE()

--2008-04-26 03:25:31.900

--取得現在UTC 時間 (國際標準時間或格林威治標準時間)GETUTCDATE()

select GETUTCDATE()

--2008-04-25 19:30:23.650

--取得年.月.日及其它時間單位值

select year(getdate())

select datepart(yyyy, getdate())

select datepart(yy, getdate())

--2008 yyyy(int)年

select month(getdate())

select datepart(mm, getdate())

select datepart(m, getdate())

--4 mm(int)月

select day(getdate())

select datepart(dd, getdate())

select datepart(d, getdate())

--26 dd(int)日

select datepart(qq, getdate())

--2 qq(int)第幾季

select datepart(dw, getdate())

--7 dw(int)星期幾

其它datepar的參數參考下表:

Datepart

Abbreviations

year

yy, yyyy

quarter

qq, q

month

mm, m

年的第幾天 dayofyear

dy, y

day

dd, d

年的第幾週 week

wk, ww

星期的第幾天 weekday

預設1=日 2=一....7=六

dw

hour

hh

minute

mi, n

second

ss, s

毫秒 millisecond

ms

--取得指定日期部分的字串DATENAME()--使用參數同上表datepar參數

SELECT DATENAME(month, GETDATE())

--四月 今天是四月所以傳回=四月,系統地區若為英語系傳回April

SELECT DATENAME(dw, GETDATE())

--星期六

--取得星期幾的單一中文字(日,一,二,三,四,五,六)

SELECT Right(datename(weekday,getdate()),1)

--六 今天是星期六所以傳回=六,系統地區語言必須為中文地區

SELECT CASE datepart(dw, getdate())

WHEN 1 THEN '日'
WHEN 2 THEN '一'
WHEN 3 THEN '二'
WHEN 4 THEN '三'
WHEN 5 THEN '四'
WHEN 6 THEN '五'
WHEN 7 THEN '六' END

--六 今天是星期六所以傳回=六

--設定一星期的開始日為哪天--影響datepart,datename使用參數weekday,dw的回傳值

SET DATEFIRST 7 --設定星期天為一星期的第1天 (預設為7)

select @@DATEFIRST

--7 (int)

Value

First day of the week is

1

Monday

2

Tuesday

3

Wednesday

4

Thursday

5

Friday

6

Saturday

7 (default, U.S. English)

Sunday

--取得10天前或10天後日期(參數請看上面datepar參數表)

SELECT DATEADD(day, -10, '04/30/2008')

--2008-04-20 00:00:00.000

SELECT DATEADD(day, 10, '04/30/2008')

--2008-05-10 00:00:00.000

--計算兩時間差(參數請看上面datepar參數表)

SELECT DATEDIFF(day,GETDATE(),'04/30/2008')

--4 (int)

--轉換時間格式

不帶世紀數位 (yy)

帶世紀數位 (yyyy)


標準


輸入/輸出**

-

0 或 100 (*)

預設值

mon dd yyyy hh:miAM(或 PM)

1

101

美國

mm/dd/yyyy

2

102

ANSI

yy.mm.dd

3

103

英國/法國

dd/mm/yy

4

104

德國

dd.mm.yy

5

105

義大利

dd-mm-yy

6

106

-

dd mon yy

7

107

-

mon dd, yy

8

108

-

hh:mm:ss

-

9 或 109 (*)

預設值 + 毫秒

mon dd yyyy hh:mi:ss:mmmAM(或 PM)

10

110

美國

mm-dd-yy

11

111

日本

yy/mm/dd

12

112

ISO

yymmdd

-

13 或 113 (*)

歐洲預設值 + 毫秒

dd mon yyyy hh:mm:ss:mmm(24h)

14

114

-

hh:mi:ss:mmm(24h)

-

20 或 120 (*)

ODBC 規範

yyyy-mm-dd hh:mm:ss[.fff]

-

21 或 121 (*)

ODBC 規範(帶毫秒)

yyyy-mm-dd hh:mm:ss[.fff]

-

126(***)

ISO8601

yyyy-mm-dd Thh:mm:ss:mmm(不含空格)

-

130*

科威特

dd mon yyyy hh:mi:ss:mmmAM

-

131*

科威特

dd/mm/yy hh:mi:ss:mmmAM

select convert(char, getdate(), 100)

--04 26 2008 2:04AM mon dd yyyy hh:mmAM(PM)

select convert(char, getdate(), 101)

--04/26/2008 mm/dd/yyyy
select convert(char, getdate(), 102)

--2008.04.26 yyyy.mm.dd

select convert(char, getdate(), 103)

--26/04/2008 dd/mm/yyyy
select convert(char, getdate(), 104)

--26.04.2008 dd.mm.yyyy
select convert(char, getdate(), 105)

--26-04-2008 dd-mm-yyyy
select convert(char, getdate(), 106)

--26 04 2008 dd mon yyyy
select convert(char, getdate(), 107)

--04 26, 2008 mon dd, yyyy
select convert(char, getdate(), 108)

--02:04:53 hh:mm:ss
select convert(char, getdate(), 109)

--04 26 2008 2:04:53:583AM mon dd yyyy hh:mm:ss:mmmAM(PM)
select convert(char, getdate(), 110)

--04-26-2008 mm-dd-yyyy
select convert(char, getdate(), 111)

--2008/04/26 yyyy/mm/dd
select convert(char, getdate(), 112)

--20080426 yyyymmdd

select convert(char(6), getdate(), 112)

--200804 yyyymm

select convert(char, getdate(), 113)

--26 04 2008 02:04:53:583 dd mon yyyy hh:mm:ss:mmm
select convert(char, getdate(), 114)

--02:04:53:583 hh:mm:ss:mmm(24h)
select convert(char, getdate(), 120)

--2008-04-26 02:04:53 yyyy-mm-dd hh:mm:ss(24h)

select convert(char(7), getdate(), 120)

--2008-04 yyyy-mm
select convert(char, getdate(), 121)

--2008-04-26 02:04:53.583 yyyy-mm-dd hh:mm:ss.mmm

資料類型

範圍

精確度

datetime

1753 年 1 月 1 日到 9999 年 12 月 31 日

3.33 毫秒

smalldatetime

1900 年 1 月 1 日到 2079 年 6 月 6 日

1 分鐘

--取得這個小時開始的時間
SELECT DATEADD(hh,DATEDIFF(hh,0,getdate()),0)
--2008-04-26 06:00:00.000 (datetime)

--取得下個小時開始的時間
SELECT DATEADD(hh,1,DATEADD(hh,DATEDIFF(hh,0,getdate()),0))
--2008-04-26 07:00:00.000 (datetime)

--取得今天開始的時間(凌晨12點)
SELECT DATEADD(dd,DATEDIFF(dd,0,getdate()),0)
--2008-04-26 00:00:00.000 (datetime)


--取得本週的星期日,星期一(本週開始日為星期日)
SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),-1)
--2008-04-20 00:00:00.000 (datetime)

SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0)
--2008-04-21 00:00:00.000 (datetime)

--取得上週五,上週六
SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),-3)
--2008-04-18 00:00:00.000 (datetime)

SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),-2)
--2008-04-19 00:00:00.000 (datetime)

--取得本月的第一天
SELECT DATEADD(mm,DATEDIFF(mm,0,getdate()),0)
--2008-04-01 00:00:00.000 (datetime)

--取得下個月的第一天
SELECT dateadd(mm,1,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))
--2008-05-01 00:00:00.000 (datetime)

--取得本月的最後一天
SELECT dateadd(dd,-1,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))
--2008-04-30 00:00:00.000 (datetime)
SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))
--2008-04-30 23:59:59.997 (datetime)

--取得上個月的最後一天
SELECT dateadd(dd,-1,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))
--2008-03-31 00:00:00.000 (datetime)
SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))
--2008-03-31 23:59:59.997 (datetime)

--取得本月天數
SELECT Day(dateadd(dd,-1,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)))
--30 (int)

--取得本季的第一天
SELECT DATEADD(qq,DATEDIFF(qq,0,getdate()),0)
--2008-04-01 00:00:00.000 (datetime)


--取得下一季的第一天
SELECT DATEADD(qq,DATEDIFF(qq,0,dateadd(mm,3,getdate())),0)
--2008-07-01 00:00:00.000 (datetime)


--取得本季天數
SELECT DATEDIFF(dd,DATEADD(qq,DATEDIFF(qq,0,getdate()),0),DATEADD(qq,DATEDIFF(qq,0,dateadd(mm,3,getdate())),0))
--91 (int)

--取得今年的第一天
SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()),0)
--2008-01-01 00:00:00.000 (datetime)

--取得明年的第一天
SELECT DATEADD(yy,1,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))
--2009-01-01 00:00:00.000 (datetime)

--取得去年的最後一天
SELECT dateadd(dd,-1,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))
--2007-12-31 00:00:00.000 (datetime)
SELECT dateadd(ms,-2,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))
--2007-12-31 23:59:59.997 (datetime)

轉摘至:http://openmyhand.com/cms/index.php?option=com_content&task=view&id=62&Itemid=39

網誌存檔