:::

用SQLite資料庫安裝Drupal 7 / Install Drupal 7 with SQLite database

用SQLite資料庫安裝Drupal 7 / Install Drupal 7 with SQLite database

image

目前Drupal 7(我用的是elms-7.x-1.x-dev-core.zip)安裝時選用SQLite資料庫會發生錯誤,導致無法正常安裝。我試著修正了一些程式碼之後,使用SQLite資料庫安裝Drupal 7就能夠順利進行。以下介紹如何順利安裝使用SQLite資料庫的Drupal 7。

If you want to install Drupal 7 (for example, elms-7.x-1.x-dev-core.zip) with SQLite database, the installation would have encountered an error and crash. I fixed some bug of Drupal 7 to let the installation completes successfully. I will show you how to completely install Drupal 7 with SQLite in this post.


更新程式碼 / Update Codes

2013-03-16_133906

用Drupal 7原始碼安裝的時候,我看到畫面上出現了很多錯誤。於是我照著這些錯誤去修正程式碼,然後安裝大致上就很順利。

要修正的程式碼如下:([elms7]表示Drupal 7的根目錄)

  1. [elms7]\includes\install.core.inc
  2. [elms7]\includes\database\sqlite\query.inc
  3. [elms7]\profiles\elms\modules\contrib\features\features.module
  4. [elms7]\profiles\elms\modules\contrib\spaces\spaces_og\plugins\space_og.inc
  5. [elms7]\profiles\elms\modules\elms_features\elms_site\elms_site.module

安裝完成之後會遇到登入錯誤,於是我又修改了兩個檔案:

  1. [elms7]/profiles/elms/modules/contrib/og/og.module
  2. [elms7]/profiles/elms/modules/contrib/entity/includes/entity.wrapper.inc

安裝環境 / Environment

  • PHP Version 5.4.7
  • SQLite Library 3.7.7.1

安裝Drupal 7 / Install Drupal 7

接下來我用圖文教學,教大家用SQlite資料庫安裝Drupal 7的方法。

2013-03-16_133609

我這邊要安裝Drupal的發行版之一ELMS,所以我選擇這個。

2013-03-16_133626

在此不要選擇其他語言,因為安裝的時候中文好像有點問題。

2013-03-16_133722

選擇SQLite資料庫安裝,其他選項都用預設。

以下就是最關鍵的一步了!

2013-03-16_133906

如果你的程式碼沒有更新,你會看這一堆警告。

2013-03-16_142331

如果程式碼更新過了,你就會看到正常安裝的畫面。

image

安裝過程非常久,但是沒有錯誤訊息的話就一切OK!

2013-03-16_144745

資料庫安裝完成!接著設定其他的資訊吧。

image

完成。

image

全新的Drupal 7,很穩。

登入 / Login

image

安裝完成之後,預設網頁上並沒有登入的按鈕。你只會看到「Access denied」的錯誤訊息。

image

登入網址為:http://localhost/elms7/user/login (請換成你自己的網站)

請用安裝時設定的管理者帳號登入吧。

至於要怎麼在首頁就顯示登入表單,請看看「Display login form for anymous users when 'access denied'」這篇或其他的教學,本篇就到此為止了。


結語:自己修Bug / Conclusion: Fix Bug by Yourself

安裝過程中很多的問題都是在於陣列裡面沒有對應的指標,例如:

$non_required[$module] = $files[$module]->sort; 

有時候$module出現的值不見得存在於$files陣列中,或著是$files可能根本就不是個陣列。所以我們要在之前加入判斷式。

if (is_array($files) 
&& isset($files[$module])
&& is_object($files[$module])) {
$non_required[$module] = $files[$module]->sort;
}

這樣就不會發生錯誤了。

靜下心來看系統顯示的錯誤,然後修正它,很多問題就可以迎刃而解。

共勉之。

(more...)

Zotero安裝自製的轉譯器 / Install custom translator on Zotero

布丁布丁吃布丁

Zotero安裝自製的轉譯器 / Install custom translator on Zotero

standalone

本篇教你如何在Zotero安裝自製的轉譯器(translator),讓你可以拿取別人設計好的轉譯器安裝在自己的Zotero上。

This guide will show you how to install custom translator to Zotero. If you get some special translator which used for your local database or website, you could install it to your Zotero by following steps.


Zotero的轉譯器 / Translator of Zotero

Zotero是一套書目管理工具。跟一般學術界常見到的EndNote不同,Zotero最特別的地方就是在於他可以直接從瀏覽器開啟的網站匯入書目資料。

image

舉例來說,可以直接把Google Scholar找到的論文直接存入Zotero,不僅保存完整的作者、題名、年份、出版品等書目資訊,如果Google Scholar連PDF全文都找得到的話,Zotero還能一併保存PDF檔案。

從網頁匯入資料的功能叫做「轉譯器(translator)」。你必須要有對應的轉譯器才能在該網站上使用Zotero匯入資料。Zotero安裝完成時預設就會載入各種常見資料庫網站的轉譯器,像是Google ScholarWorldCat都有對應的轉譯器。但是我國中文的資料庫網站,像是全國博碩士論文網、GRB智慧搜尋系統就沒有轉義器。

最近又因為寫計畫需要引用書目資料,於是再度拾起了研究Zotero轉譯器的動力。這次真的寫出來了,只是在安裝的時候卻遇到很多問題。所以這篇特別在講怎麼安裝別人寫好的轉譯器。

以下一步一步地講述作法。

環境說明 / Environment

以下我使用的Zotero跟瀏覽器的版本如下。

首先是Firefox與Zotero附加元件:

再來是Google Chrome跟Zotero Standalone:

目標測試網址是陳志銘老師的計畫「以試題反應理論為基礎建構具個人化學習機制之網路線上學習系統」。

Step.1 取得轉譯器檔案 / Get Translator File

這是我最近做的STPI Government Research Bulletin.js,請先下載這個檔案,然後我會教你要擺到哪邊。

Step.2 找出Zotero的儲存位置 / Find the Storage Location of Zotero

不論你是用Zotero附加元件還是Zotero Standalone,以下操作都一樣。在此是以Zotero附加元件來說明。

image

首先先按右下角「zotero」按鈕,打開你的Zotero面板。按下齒輪開啟選單,進入「偏好設定」。

image

進入「進階」頁籤,按下「顯示資料目錄」按鈕。

image

接著會打開一個檔案總管視窗,你可以看到這個路徑底下有著「translators」目錄,那就是你要擺放轉譯器(translator)的位置了。

Firefox至此安裝完成 / Installation completed for Firefox

image

對使用Firefox的使用者,只要把轉譯器擺到指定位置,他就可以正常運作。你可以看到網址列右邊出現了一個小圖示image(報告類型),點下他,Zotero就會把這網頁的資料匯入成為一筆報告的書目。

不過對Google Chrome等使用Zotero Connector的使用者來說,還需要多做一個步驟。

Step.3 (僅有Zotero Connector需要設定)更新轉譯器 / (For Zotero Connector) Update Translators

以下以Google Chrome來做說明。

image

首先是到Chrome擴充功能的頁面中找到Zotero Connector,按下「選項」。

image

進入左邊的「Advanced」頁籤,然後按下Translators底下的「Update Translators」按鈕。稍等一下,它就會把新安裝的轉譯器加入Google Chrome。

image

至此,Google Chrome也能使用自訂的轉譯器了。你可以測試一下這個網址。


結語 / Conclusion

最後Google Chrome安裝轉譯器的問題花了我很多時間,我看了好幾篇Zotero Forum論壇發現許多人都有跟我一樣的問題,大家都不知道還要去Zotero Connector做Update Translators的動作。但是大多時候論壇上其他人都以為是你自己寫的轉譯器有問題,而不是不會操作。

最後意外地找到這個設定,也讓Google Chrome能夠使用我自己寫的轉譯器,真的是鬆了一口氣。

接下來我有空時會放一些自己做的轉譯器,方便國人使用中文的資料庫時候能夠快速匯入Zotero。敬請期待。

(more...)

Google閱讀器的關閉與資訊傳播的退化 / Google Reader is going to be closed, and information dissemination will be more closed too.

布丁布丁吃布丁

Google閱讀器的關閉與資訊傳播的退化 / Google Reader is going to be closed, and information dissemination will be more closed too.

image

Google閱讀器(Google Reader,以下簡稱Reader)即將於2013年七月關閉的消息讓網路上許多人哀號遍野。但是在大家擔心不能用Reader只好看看能不能轉戰Feedly之餘,我擔心的卻不是服務本身,而是RSS這個開放的標準逐漸不受重視的隱憂──資訊傳播正在逐漸從公開分享退化成私人隱蔽了。

Yesterday (14 March) many people on the internet got into panic because of Google Reader is going to be closed on July 2013. Somebody try to find another feed reader service, like Feedly, to replace Google Reader. But compared with service, we should pay more attention on the decline of RSS using. It means information dissemination is going to degrade from public sharing to private concealing. 


Google Reader的價值在於RSS標準 / The value of Google Reader is using RSS standard

Google Reader是大家彙整RSS訂閱網址而使用的訂閱器,那這個RSS大家知道是什麼嗎?

RSS的全名叫做Really Simple Syndication,這是一個資料交換的標準,讓人們能夠用統一的格式訂閱網站的最新訊息。我們就不用特別打開每個網站、每個人的BLOG,就能夠在我們習慣的環境下閱讀這些訂閱來源的最新資訊。

而RSS有一個特徵,他是公開的,每個人訂閱的RSS都相同,可以看到﹑追蹤一樣內容的資訊。大多數RSS都沒有權限控管,你只要那得到RSS訂閱網址,你就有權利訂閱訊息。當然,權限控管仍然可能做得到,但是非常麻煩也不實際,這不是RSS專注的重點。

發明RSS的人非常偉大。他就是之前因為從JSTOR抓太多論文而被FBI盯到自殺的名人Aaron Swartz。我相信RSS的利用率絕對超過圖資界常用的Metadata交換標準Dublin Core好幾倍,可是諷刺的是,圖資界許多人並不知道也不重視RSS標準,大家的概念依然停留在「讀者應該來圖書館(網站)找資料」的層級,但RSS卻早已經做到「圖書館(網站)把資料送到讀者面前」了。

G+取代Google Reader的隱憂 / The problem about if G+ placing Google Reader

現在Google要用G+來取代Google Reader,這其實是限制了我們取得資訊的途徑。這限制來自於必需經過G+,也來自於人們獲得了選擇的自由──大家都可以限制散佈資訊的對象了。

後者是一種諷刺,也是我的悲觀心態。人們獲得了選擇散佈對象的自由,可是卻很容易傾向於限制對小範圍的人分享他們獨特的資訊。這是人之常情,人擁有了自由之後對於自己加設限制的常情。一旦大家習以為常地將資訊埋沒在你自身周遭的世界,而吝於分享給素未謀面的陌生人,那結果很明顯,最後只是助長Google或Facebook獲得更多資訊,大家依然只是活在自己的小世界難以成長。人們在自己的選擇之下加深了資訊落差的鴻溝,而且是幫別人累積更多資訊、把自己推下了谷底。別懷疑,這不是未來的擔憂,而是現在正在發生的事情。

前者就更嚴重了。現在Google Reader關掉,大家還可以跳槽到Feedly。這是因為Google Reader用的是標準格式RSS。未來如果大家都變成G+,就算Google可以讓你Takeout匯出服務,你又要到哪去找到一個跟G+一樣的平台?死對頭FB,可能嗎?

如果從這角度來看,你會發現你根本就沒得選擇──用了G+就必須要一直用G+,就像是用了Facebook之後就很難轉移到其他服務,是一樣的意思。

結語 / Conclusion

Google Reader關閉所帶來的問題並不只是要我們跳槽到其他服務就好。Google捨棄了標準但強制公開的RSS,而轉向權限細緻化但封閉的G+。

儘管我們還是可以稍微期待一下G+隱藏的RSS功能有朝一日會再被受到重視,或是像G+或FB這種社交網站有天會有共通的資訊交換標準出現,好讓我們隨時跳槽到我喜歡的服務上。但是可以確定的是,控管閱讀權限的資訊分享方式已經是勢不可擋的趨勢。

這是否意味著我們獲知的權利即將從自由開放退化到隱性封閉呢?這對追求資訊自由的圖書館從業人員來說,是相當值得深思的議題。

(more...)

如何下載「布丁布丁吃什麼?」的Google Docs投影片 / Guide for downloading slide from Google Docs

布丁布丁吃布丁

如何下載「布丁布丁吃什麼?」的Google Docs投影片 / Guide for downloading slide from Google Docs

image

「布丁布丁吃什麼?」上面有時候擺放投影片,這些投影片有時候會上傳到不同空間,但大多數都會以Google Docs(現在叫做Google Drive雲端硬碟)內嵌播放的方式呈現,讓人在閱讀Blog的時候就能夠觀看投影片。

然而許多人並不知道,這些內嵌播放的投影片就能夠直接下載成Power Point或PDF。最近我收到了許多分享投影片的請求,讓我覺得應該寫一下簡單的教學,讓大家知道如何從Google Docs下載投影片。

My blog has many slides. Must of slides are hosted in Google Docs (or Google Drive). Google Docs supports us to read the slides on webpage with a embed iframe player, and you can also download slides directly from the player.

This post will teach you how to download the slide as Power Point file from the Google Docs player.

Step.1 開啟內嵌網頁 / Open Embed Iframe

這篇以DSpace教學講座(四):修改實例之修正TextEditor為例來說明如何操作。

image

「布丁布丁吃什麼?」的內嵌網頁(iframe)都會先以這種樣式呈現。這是為了避免讓大家一開網頁就要載入許多內嵌網頁、拖慢了網頁速度的設計。

未來可以考慮應用「圖片延遲載入」的功能,當讀者捲軸讀到這個內嵌網頁時,就自動開啟內嵌網頁的原貌。

Step.2 開啟設定選單 / Open Setting

image

開啟內嵌網頁之後就會看到Google Docs的播放器。請按下下方工具列的齒輪圖示,開啟設定選單。

Step.3 下載為PPTX / Download PPTX file

image

設定選單中有一項就是「下載為PPTX」。點下去就開始下載了。

如何開啟PPTX? / Guide for Opening PPTX

pptx_win

因為寫這些有點太短了,不好意思只是來賺個稿費(?)。這邊額外再來說明如何開啟PPTX檔案。

PPTX是Microsoft Office PowerPoint 2007之後使用的格式,在PowerPoint 2003之前使用的則是PPT。儘管現在PPT的使用量逐漸下降,但是還是很多人使用著舊版的Office,無法直接開啟PPTX。

這邊我提供兩種作法,讓你可以開啟PPTX檔案。

使用自由軟體LibreOffice / Use LibreOffice

image

LibreOffice是從知名的OpenOffice分支而成的專案。現在開放原始碼界最常使用的辦公室生產力軟體應該非LibreOffice莫屬,它也可以開啟Office的檔案格式。因為是採LGPL3授權的自由軟體,所以你可以免費下載使用,當然也有正體中文版囉。

為Office 2003以前的版本安裝檔案格式相容性套件 / Install Microsoft Office Compatibility Pack

這是微軟推出的工具。只要安裝檔案格式相容性套件,就算是Office 2003以前的早期版本,也能夠直接開啟Office 2007之後的Open XML檔案格式囉。


結語:練習下載看看吧 / Conclusion: Exercise

現在就以「DSpace教學講座(四):修改實例之修正TextEditor為例」這篇的投影片來練習看看下載Google Docs的方法吧。

有什麼問題請在下面回覆喔。

(more...)

「布丁布丁吃什麼?」在GitHub上開放原始碼囉! / My Blog is now open source on GitHub!

布丁布丁吃布丁

「布丁布丁吃什麼?」在GitHub上開放原始碼囉! / My Blog is now open source on GitHub!

image

布丁布丁吃什麼?」這個Blog最大的特徵就在於網站上有著許多奇奇怪怪的小功能。從側邊欄上的「最近留言」、「最新文章」「留言板」,到文章本身的「自動摘要法」「圖片延遲載入」等各種小工具,都是Blogger沒有提供、我參考別人的寫法或自己撰寫而成的功能。

現在這些程式碼統一保存在GitHub上進行版本控制。對於改造Blogger有興趣的朋友、JavaScriptCSS有興趣的朋友,歡迎參考我的程式碼,彼此多多切磋交流吧。

Welcome to Pulipuli.blogspot.tw. My blog has many features which are not provided by Blogger, for examples, like “recent response list”, “recent post list”, “post auto digest”, etc.. Today, I released the code of these features on GitHub. You can use them freely. Enjoy it!

存放空間的遷移歷程 / History of Code Hosting

說真的,「布丁布丁吃什麼?」很早之前就是Open Source了。除了Blogger內建功能之外,大部分功能都是以JavaScript與CSS的程式碼來實作。這些程式碼本身都是必須讓你下載之後才能執行,換句話說,這些功能本身就是「開放」的程式碼了。

那麼這些程式碼是存在哪裡呢?這邊我就在簡單的回顧中記錄一下「布丁布丁吃什麼?」的這段歷史吧。

Google Page Creator

我印象中「布丁布丁吃?」時期一開始的時候,我是將程式碼擺放在Google Page Creator中。Page Creator是Google早期供人架站的空間。雖然它只有提供100MB的大小,在流量上也有諸多限制,但是擺放我這種小流量Blog使用的JavaScript與CSS程式碼已經很夠用了。

不過老實說它不太好用,沒有目錄功能(因為Page Creator是用來建立網頁、而不是網站),上傳介面也很難操作。幾年之後,Page Creator被關閉,成為歷史名詞。而原本在Page Creator上的程式碼則是被轉換到Google協作平台上繼續運作。

Google Sites協作平台

image

由於Google Page Creator被關閉,我的程式碼就順勢移到了Google協作平台上,叫做「布丁布丁吃?」wiki。協作平台搭上了當時流行的wiki風格,讓人容易在網頁上建立資料,也允許更複雜的網站架構。

協作平台是個穩定的架站空間,我一樣把它用來存放JavaScript與CSS程式碼。受惠於協作平台的功能,我可以將程式碼分門別類,每次上傳檔案也會記錄不同的版本。在「布丁布丁吃什麼?」介紹的功能中,有些是獨立出來讓讀者安裝使用的程式碼,這些程式碼就會放在協作平台中,跟「布丁布丁吃什麼?」專用程式碼分開保存。

可惜的是,協作平台的上傳功能依然很難用。點開網頁、選擇檔案、上傳的這幾個步驟雖然看起來很簡單,但是時常修改程式碼的話,這些步驟依然是相當地煩人啊!

Dropbox

image

「布丁布丁吃什麼?」的程式碼中,給讀者使用的程式碼是放在協作平台,而現在你所看到「布丁布丁吃什麼?」專用的JavaScript與CSS程式碼其實是架設在Dropbox的公開資料夾Public底下。

知名雲端硬碟Dropbox早在很久之前就提供了架站空間的功能,你可以把網頁程式碼放在公開資料夾上供他人瀏覽,也可以用DropPages之類的第三方應用輕易地架起專業網站。

雖然我的網頁內容寫在Blogger上,不過JavaScript與CSS卻也可以放在Dropbox中。我這次搭配Directory Junction整合了Aptana Studio 2 IDE與本機端XAMPP伺服器的運作環境。我不僅能在本機端開發與測試「布丁布丁吃什麼?」,也能夠用簡單地幾個步驟就能夠將JavaScript與CSS進行壓縮、上傳到Dropbox公開資料夾。

如果你對Dropbox有興趣的話,歡迎使用我的推薦連結來註冊Dropbox,順便幫我增加一點空間吧!

布丁邀請註冊Dropbox連結

GitHub

6a00d8341c767353ef016762f7c808970b-800wi

Dropbox提供了我的程式碼穩定的運作環境,而GitHub則是提供了查看我的程式碼的社交平台。

之前我開始研究起GitHub,這是因為最近看到幾篇新聞都在討論GitHub。GitHub是許多開放原始碼專案存放的保存庫,近年來也逐漸成為公司招聘程式設計師的管道。因為公司能在GitHub上看到每個人實際上寫的程式碼,而不是像LinkedIn只能看到幾行經歷。

雖然說光看程式碼也不見得夠看到實際上運作的平台,就像是「布丁布丁吃什麼?」的GitHub也是要搭配Blogger才能運作,不過光是為這個社群貢獻程式碼的精神,我覺得就具有令人值得去做的意義。

我想藉由「布丁布丁吃什麼?」的程式撰寫來練習GitHub與Git的用法,這也是「布丁布丁吃什麼?」作為讓我實驗程式碼的用途之一啊。

近期「布丁布丁吃什麼?」的調整 / Recent Changes in Pulipuli.blogspot.tw

image

除了用GitHub與Dropbox改進「布丁布丁吃什麼?」的功能調整流程之外,最近也做了幾個小地方的修改。

英文標題與摘要 / Writing Title and Abstract in English

image

作為博士生,英文寫作是必須要去面對的課題。我希望能夠在日常生活中就常常使用英文來寫作,所以現在就從寫Blog開始。我寫的英文應該會有很多錯誤,歡迎大家用留言回覆來幫我糾正一下喔!

至於為什麼只有標題跟摘要是英文,這是因為光是寫標題跟摘要就花了好多時間,等更能上手之後再來考慮全英文的Blog吧。不過我寫這Blog一部分就是為了給華人地區的讀者看,所以仍然會以中文版本為主喔!

QR Code

image

有人發現到了嗎?這是今天才剛出來的新功能喔!「布丁布丁吃什麼?」每篇全文文章最後都加上了QR Code的名片,讓讀者方便知道這篇文章的來源。

對我來說,因為我很常查閱「布丁布丁吃什麼?」的文章,有時候在電腦上看一看想要轉移到手機上的時候,在手機輸入網址總是太過麻煩。現在我只要在手機上用QR Code Scanner之類的App掃描一下QR Code,就能在手機上直接開啟文章內容喔!

image

在列印的時候,也會出現這個名片的樣子。就算將「布丁布丁吃什麼?」印成紙本,也能夠透過QR Code方便地回到網頁上喔。

這個功能是以jquery.qrcode.js為基礎,我自己建立了它的分支並進行改造,在加上適用於Blogger環境的包裝器(wrapper)來實作。如果有人也想要安裝QR Code到你的Blogger的話,請回覆在下面,我有時間會再另外寫一篇QR Code的安裝教學。


結語 / Conclusion

藉著調整Blog的契機,這篇介紹了「布丁布丁吃什麼?」的JavaScript與CSS原始碼存放空間選擇的歷程,目前是用以下規則來擺放程式碼:

然後聊了一下最近「布丁布丁吃什麼?」的變動,也順便宣傳自己加入的QR Code功能。

最後我想閒聊一下QR Code。我認為QR Code不僅僅只是讓人在廣告上開啟網頁而已,它可以是連結實體與數位(從印出紙本開啟Blog)、數位到數位(從螢幕掃描到手機),也可以藉由加入特殊參數讓它用於開啟指定的應用程式。而這個簡單的轉換,卻能夠連結不同時空的人與物。

想像一下,公車的乘客不需要在座椅上塗鴉了。他們可以掃描這台公車專屬的QR Code,然後在這台公車專屬的線上討論版聊天;圖書館的讀者不僅僅是在書上從別人的筆記來認識與這本書內容相關的事情,他能掃描QR Code來到這本書專屬網站上來取得相關資訊,更能在討論版上認識同樣閱讀這本書的愛書者。

QR Code只是簡單的技術,重點在於要如何應用。這也是我們作為研究者應該去思考的問題。共勉之。

(more...)

Symbolic Link Creator建立結合目錄

布丁布丁吃布丁

Symbolic Link Creator建立結合目錄

image 

Windows使用的NTFS檔案系統具備了結合目錄(Directory Junction)功能,可以建立一個連結目錄直接指向另一個目的目錄。連結目錄操作時就跟一般檔案操作一樣,實際上卻是操作目的目錄的資料。這篇是教你如何使用Symbolic Link Creator讓一個資料夾同時出現在Windows不同路徑上,他們的內容檔案共通,而且操作起來跟一般檔案總管內的操作一模一樣──就連其他軟體運作時不會感到差異。這可不是捷徑(Shortcut),而是結合目錄功能的優點喔!


結合目錄應用於雲端同步工具

在現在雲端空間的時代,我們可以用Dropbox來同步、備份電腦上的各種文件,這也包括了軟體的設定檔,例如IDE開發環境、遠端伺服器的連線設定。但是Dropbox之類的雲端空間通常會將同步範圍限定於特定的資料夾中,你要同步,就必須把檔案放入這個資料夾。對於必須安裝在特定路徑才能夠使用的軟體來說,設定檔不能放在Dropbox指定的資料夾,就難以享受雲端同步的好處。

Dropbox Folder Sync是利用建立結合目錄的方式,先將資料移到Dropbox資料夾,然後建立一個資料夾的結合目錄,擺放到原本的位置。這能讓原本位置的路徑仍能正常使用、實際的檔案內容又可以在Dropbox備份。但是Dropbox Folder Sync只能用於Dropbox,其他的軟體像是Google DriveSugarSyncbox之類的軟體就得另尋他法。

其實Dropbox Folder Sync也只是將指令junction弄成讓人簡單操作的GUI介面,不過可選擇的參數比較少。而Symbolic Link Creator也是一樣是利用指令列做成的GUI介面,但是你就可以任意建立符號連結到你要的地方了。
舉例來說:

Directory Junction跟Symbolic Link的差別

這一篇雖然介紹的是Directory Junction,但是用的工具卻是叫做Symbolic Link Creator,到底這兩者之間有什麼差別呢?
網路上也有人問過這個問題。最簡單的區別就是Directory Junction建立出來的連結點是一個「目錄」,而Symbolic Link則是建立一個「檔案」(類似捷徑的感覺)。另外,Directory Junction通常只能連結到本地端的資料夾,而不能透過網路上的芳鄰之類的網路技術連結到遠端資料夾。這大概就是他們最大的差別了。

下載Symbolic Link Creator

image

這是免安裝的工具,開啟之後就能夠直接使用了。

建立結合目錄資料夾

首先,我們要規劃連結資料夾(Link Folder)目的資料夾(Destination Folder)的路徑。

image 

在這個例子中,我想要在桌面上擺一個連結資料夾,路徑是「D:\Desktop\」底下,資料夾名字叫做「demo」。這個資料夾會連到目的資料夾,路徑為「D:\Desktop\Dropbox\demo」。

image 

打開Symbolic Link Creator,各別在以下幾個地方輸入我們的規劃設定:

  • Link Folder
    • Please select the place where you want your link:
      輸入連結資料夾所在路徑「D:\Desktop\」
    • Now give a name to the link:
      輸入連結資料夾名稱「demo」
  • Destination Folder
    • Please select the path to the real folder you want to link:
      輸入目的資料夾路徑「D:\Desktop\Dropbox\demo」
    • Select the type of link: 選擇「Directory Junction」

按下Create,符號連結很快就會建立完成。

image 

完成之後會跳出這個訊息。

image 

桌面上就會出現一個資料夾「demo」,內容就跟Dropbox底下的「demo」一樣。在裡面新增、修改資料,也同樣會影響到另一個資料夾喔!

移除結合目錄

你可以注意到桌面的「demo」資料夾跟一般資料夾不太一樣,有個類似捷徑的圖示,表示他是結合目錄。

image

如果不需要結合目錄,那就直接刪除掉桌面的「demo」資料夾就好。這個動作並不會影響到Dropbox底下的「demo」囉。


結語:寫備忘也學一些東西

因為我常常在不同電腦與手機之間工作,檔案同步對我來說非常重要。而且我也想要備份花了很多時間配置的軟體設定,Dropbox一向是很穩定的備份工具。所以最近常常使用Symbolic Link Creator來建立結合目錄。

不過每次使用Symbolic Link Creator的時候都會忘記怎麼設定,到底Link Folder要寫來源還是目的?type of link又要選哪一種好?為了怕下次又忘記,這次我乾脆寫在blog上就好了。(其實我Blogger大多數文章都是操作備忘錄,方便未來我忘記的時候再回頭查閱而已啊。)

這次在寫的時候也一併搞懂了Directory Junction跟Symbolic Link的差別,意外地又學到一些知識,真不錯啊。

(more...)

水果店老婆婆的香蕉

布丁布丁吃布丁

水果店老婆婆的香蕉

DSC_0549

今天我也一如往常地,拖著一身剛從實驗室離開的疲憊身子(以及一身做不完的工作),在半夜12點多的時候踏入了24小時營業的水果店。

超過12點之後,水果店的水果架會蓋上一層布,彷彿要打烊一般。通常只會有一位顧店的店員,以及我與零零星星的幾位顧客而已。

今天也跟以前一樣,半夜的水果店沒什麼人。然而不同的是,卻有一位老婆婆站在攤位旁吃著一根熟透的香蕉。

(她是店員的熟客嗎?正在試吃香蕉?)雖然有點好奇這位老婆婆的身分,不過我的注意力終究是被拿根香蕉吸引了。是的,熟得剛好的香蕉是很少出現在水果攤的。水果攤大多都擺的是稍微青澀的香蕉,以便顧客買一串回家慢慢吃。於是看到熟透的香蕉,讓我油然興起想吃香蕉的念頭。

「香蕉~香蕉~香蕉在那兒?」一邊喃喃自語的我,抱著期待地經過了老婆婆,走向擺香蕉的位置。可惜,攤位上剩下的幾串香蕉都還很青,不適合現買現吃。

好吧,我還有其他水果可以選呢!椪柑39元與19元、芭樂10元、7元與1元、蘋果一顆10元、小蕃茄29元、黑珍珠39元……到底要吃什麼好呢?

 

「你要吃香蕉嗎?」

 

正當我在猶豫的時候,背後有個聲音呼喚了我。

一轉頭,老婆婆站在我後面,似乎的確是對我講話。

「啊我喔,是啊,想吃香蕉呢。」我點了點頭。

老婆婆說道:「我這有一根熟到裂開的香蕉,你拿去吃吧。」

聽到這句話我十分開心,高興地回道:「是喔,真是太好了,我好喜歡熟的香蕉呢。」

老婆婆緩慢地從手上的袋子中摸索幾番,然後拿出一根旁邊裂開的香蕉。「拿去吧,」老婆婆好心地提醒我:「記得要把旁邊裂開的部份切掉喔。」

「好的!我想現在就吃,沒有刀可以切,不過應該沒關係吧?」」看到黃橙橙的香蕉,我迫不及待地開始剝起了皮。

「店員那邊有水果刀可以借。」老婆婆指指櫃檯。

「原來如此,謝謝喔。」

 

跟老婆婆道了聲謝,我從店員借了把水果刀,然後再旁邊處理水果的地方切起香蕉來。

嗯……到底要切多少呢?隨便吧,好像也沒熟到爛掉啦。

 

「這根也給你吃吧。」

咦?老婆婆突如其來地又拿了一根香蕉放到我的面前。

我有點驚訝地回道:「這怎麼好意思……」

「哇跨例馬西就儉ㄟ狼……我看你也是很節儉的人,」老婆婆用臺語講到一半,似乎以為我聽不懂,所以又換成了國語。

「我也是很省著吃,我們很像。我已經好幾年都沒收入了。」

對著老婆婆的語重心長,我一時間不知道該怎麼回應才好。

 

只見老婆婆點了點頭,補充了一句:「這根就給你明天吃,一天不要吃太多啊。」然後就轉身慢慢地離去。

「是,謝謝您。」我一手拿著播到一半的香蕉,一手拿著水果刀,目送老婆婆離開。

 

我到底該怎麼回應老婆婆才比較好……

我不是沒有錢,我錢包裡面也有幾千元……是要拿來繳學分費的就是。

比起我想吃香蕉這件事情,總覺得老婆婆應該更需要這根香蕉。

可是我還是傻傻地接受了老婆婆的好意,收下了兩根香蕉。

我到底該怎麼報答老婆婆,怎麼報答願意施捨給陌生人的這個社會呢?

 

在這邊,我只能還是謝謝老婆婆的心意。

DSC_0554

香蕉很好吃,我明天的早餐就靠它了。

(more...)

使用Minify壓縮JavaScript跟CSS範例

使用Minify壓縮JavaScript跟CSS範例

image

Minify是用來壓縮JavaScritp跟CSS的PHP 5應用程式。跟我之前介紹的YUI Compressor壓縮器功能類似,但是YUI Compressor是Java程式,沒有Minify原生整合PHP來得方便。Minify目前最新版本為2.1.5,你可以在GitHub找到它全部的原始碼。

Minify功能很多很複雜,但是它自己的使用手冊中卻沒有提到怎樣簡單地在PHP使用。這篇就是簡單地寫個範例,讓大家知道要怎麼用Minify來壓縮JavaScript跟CSS。


下載檔案

image

你可以在GitHub找到Minify的所有原始碼,請按下「ZIP」下載檔案。

壓縮範例

我這篇的用法中,JavaScript跟CSS都是以PHP變數的形式儲存再來進行壓縮。Minify主要的用法是壓縮既有的JavaScript與CSS檔案,但是我比較常將各個檔案整理、組合、排列,然後再壓縮,這也是這兩個範例的主要作法。

壓縮JavaScript
<?php

/**
* --------
* JavaScript Compressor
* --------
*/

$js = "
/**
* This is a demo script
*/
function test() {
var _test_ms = '1';
alert(_i);
}
"
;

require_once './min/lib/JSMinPlus.php';

$packed_js = JSMinPlus::minify($js);

echo $packed_js; //function test(){var _test_ms='1';alert(_i)}

?>

壓縮CSS
<?php

/**
* --------
* CSS Compressor
* --------
*/

$css = "
/**
* This is a demo css
*/
body hi {
font-size: 3em;
/* font-weight: bold; */
color: #666666;
}
"
;

require_once './min/lib/CSSmin.php';

$cssmin = new CSSmin();
$packed_css = $cssmin->run($css);

echo $packed_css; //body hi{font-size:3em;color:#666}

?>

注意:不是任何JavaScript都能壓縮

然而,Minify壓縮法跟YUI Compressor還是不一樣。如果JavaScript已經是壓縮好的程式,那麼Minify再壓縮之後通常就會發生錯誤。

另外,有些程式碼是專門寫好給YUI Compressor壓縮的,所以用Minify壓縮時就會發生錯誤。這時候要嘛就是找線上的YUI壓縮服務,要嘛就是自己裝個YUI Compressor來壓縮。


結語:原生的Minify比Java的YUI Compressor好用

我之前改用YUI Compressor壓縮的時候常常會發生錯誤,這是由於PHP並非多線程設計,一旦網站大量對PHP請求的時候,PHP就會傻傻地去呼叫YUI Compressor的Java程式,然後Java就會快速地吃光伺服器的CPU跟記憶體,最後伺服器當機。即使我之前用PHPLock跟設計快取機制,這個問題還是很難根治。

然而跟使用Java的YUI Compressor相比,Minify原生於PHP的運作效率並不差,甚至可以說更好。到目前為止運作都蠻順暢的。而大量請求網頁的時候仍會出錯,那也是PHP自身設定就能夠搞定,不用像是使用YUI Compressor的時候還要去研究Java的環境設定。

最後發個牢騷,我還是覺得Java太容易當機了,不論是這邊用Java跑YUI Compressor,還是Tomcat上運作DSpace,Java太容易吃光記憶體跟佔用大量CPU,這讓我感到非常困擾。(即使設定了Xms跟Xmx還是很容易當機!)即使如此,用Java開發Servlet網站服務的專案還是很多,大家到底是怎麼面對這種問題的啊?我很好奇!

(more...)

NetBeans儲存RSA key fingerprint

NetBeans儲存RSA key fingerprint

image

我編輯PHP專案的時候主要使用NetBeans.org這個IDE,之前不僅發現他內建了Git,也可以用SFTP上傳修改後的檔案,不需要另外在開TortoiseGit或是FileZilla,非常方便。

只是在SFTP上傳的時候每次都要對照RSA key fingerprint,它不會儲存在電腦中,每次都會跳出來詢問我是否要確定,這讓我有點困擾。後來找到NetBeans論壇上stephanmitchev的教學,終於成功設定,讓NetBeans儲存RSA key fingerprint。

以下用圖文來介紹作法。

1. 建立一個空檔案儲存RSA Key Fingerprint

image

首先我先在NetBeans的專案目錄底下新建一個空白檔案,叫做rsa.key。我用「新增 –> 文字文件」的功能來新增,檔名任意即可,檔案內容不需要填寫。

image

NetBeans專案目錄通常是在你程式碼目錄底下的「nbproject」目錄。

2. 開啟專案設定 Open Project Properties

image

開啟「File」 > 「Project Properties (專案名稱)」

3. 管理遠端設定 Manage Remote Connection

image

在Categories中進入「Run Configuration」,然後在Remote Connection右邊找到「Manage…」進入。

4. 設定Known Hosts File

image

在Known Hosts File那一欄位後面的Browse選擇剛剛新增的rsa.key。

5. 第一次測試,儲存RSA Key Fingerprint

image

按下下面的「Test Connection」,NetBeans會跳出Warning視窗,要你確認RSA key fingerprint。按下「Yes」,RSA key fingerprint就會儲存在rsa.key檔案中。

6. 第二次測試,不會再跳出詢問

image

第二次再按下「Test Connection」時已經不會跳出詢問視窗,這就是RSA key fingerprint已經儲存了。

這樣每次上傳就不會再詢問你囉。

(more...)