搜尋此網誌

載入中...

2010年9月18日星期六

解決 Mounting HGFS shares: [FAILED] 錯誤訊息

在 Linux 下安裝完 VMware Tools 之後,在重新開機的過程中,常常會看到 Mounting HGFS shares: [FAILED] 的錯誤訊息。

Shared Folders 的目的是要在 Host OS 和 Guest OS 之間建立可以互相共用的資料夾,方便彼此的檔案交換。而在 Guest OS 為 Linux 時, Shared Folder 會被掛載在 /mnt/hgfs/ 下。

會出現這個訊息,是因為預設情況下 Shared Folder 功能是關閉的,但是 Linux 下的 VMware Tools 在開機時都會試著去連結 Shared Folder ,所以才會產生這樣的錯誤訊息。

這個訊息本身並不會對系統運作造成影響,但是如果你想知道如何讓他正常運作的話,請接著看。

  1. 首先必須在 Host OS 建立一個資料夾,作為 Shared Folder 之用。
  2. 接著在虛擬主機點選 VM / Settings / Options / Shared Folders ,按右下角的 Add 把剛剛新增的 Shared Folder 加入。
  3. 完成之後啟動虛擬主機,就不會再出現煩人的 Mounting HGFS shares: FAILED 了。

開機後,在 Linux 的 /mnt/hgfs/ 應該也能夠看到剛剛建立的共用資料夾。

2010年9月3日星期五

在 Sahana Eden 中嵌入 plurk 動態訊息

Sahana 官方版本其實就可以直接讀取 Twitter 和 Plurk 的 RSS Feed ,基本上只要支援 RSS 標準格式的 XML 檔案,應該就都可以讀取,甚至是部落格的 RSS 也行。

Sahana 首頁下方的即時訊息,include 自 eden/views/rssviewer.html ,其中使用了 Google 提供的 GFdynamicFeedControl.js 。整個實做由 Browser 的 Javascript 進行,而不是使用 web2py 的 Controller 來完成。

任何 views 裡面的頁面只要嵌入 {{include "rssviewer.html"}} 就可以載入 RSS Reader。

調整 RSS Reader 的方法,只要編輯 eden/views/rssviewer.html ,將 Twitter 或是 Plurk 甚至 Blog 的 RSS 網址,貼上 url: 之後就可以了。

固定格式為 {title: '標題名稱', url:'rss網址'}

另外,var options 中的 title 屬性可以設定整個動態元件的主標題。

範例

假設要在首頁顯示 sahanatw 的 twitter 訊息,首先要取得 sahanatw 的 rss 網址

http://lh4.ggpht.com/_PZxaEKr2nZg/TIBsblRhlxI/AAAAAAAAAUc/TaCd-DpkYxc/s800/twitter%20rss.png

接著修改 eden/views/rssviewer.html 檔案成如下內容:

var feeds = [
  {title: 'sahanatw',
   url: 'http://twitter.com/statuses/user_timeline/123442822.rss' 
  }
  ];
var options = {
  stacked : true,
  horizontal : false,
  title : "Sahana News" 
};

存檔後重新瀏覽頁面,就可以看到自訂的內容了。

http://lh6.ggpht.com/_PZxaEKr2nZg/TIBsbRdIl1I/AAAAAAAAAUY/2ahf2uNBT-I/s800/sahana%20eden%20rssviewer.png

2010年9月1日星期三

如何在 Sahana Eden 統計資料筆數並顯示在頁面

此處實作方法為統計 db.pr_person 的筆數,db.pr_person 為存放 missing person 的 table。

步驟為先定義一個 query 變數作為查詢 db.pr_person.id 的結果,然後將查詢結果透過 db().count() 計算筆數並指定給 misspeople。

記得要 return dict(misspeople=misspeople),因為這裡時常忘記,前面都寫好了沒問題,東西卻一直出不來,請務必確認是否有加進 return ,這樣變數才能傳給 view 。

另外提醒,如果 Internal error 的訊息是 xxx not define ,但是 controller 裡面都有 xxx = 的話,就很有可能是 return 裡面沒有加到,以上經驗提醒。

Controller:

query = db.pr_person.id
misspeople = db(query).count()
return dict(misspeople=misspeople)

接著在 view 新增如下,即可動態抓取統計數據。

View:

{{=misspeople}}

基本上,其他欄位的統計數據也可以利用這樣的方式獲得,只要 Table 已經存有資料,透過修改如上 query 中的查詢語法,再送到 count() 就可以進行數量的統計了。

Sahana Eden 如何嵌入地圖模組

最近一直在研究 Sahana Eden 的客製化,以下整理出如何在頁面嵌入地圖模組的心得,分享給大家。

嵌入地圖模組的方法

Sahana Eden 中本來就已經有地圖模組可供運用,要使用的話直接在 Controller 中定義 map = gis.show_map() 並且在 return 增加 return dict(map=map) 即可。

map = gis.show_map()
return dict(map=map)

接著在 View 中定義 {{=XML(map)}} 即可顯示地圖。

{{=XML(map)}}
http://lh5.ggpht.com/_PZxaEKr2nZg/TH3PJZqe32I/AAAAAAAAAUE/FoAmtE_sAP4/s400/sahana%20eden%20map.png

gis.show_map() 提供很多種參數可以進行細部調整,相關參數設定參考 http://eden.sahanafoundation.org/wiki/DeveloperGuidelinesGIS

要開啟其他圖層(如 Google Map)的方法,可以由本機的 http://127.0.0.1:8000/eden/gis/map_service_catalogue 進行修改,將想要使用的圖層打勾並 Update 後,回到地圖畫面的圖層選單就會出剛剛新增的圖層了。

2010年8月26日星期四

如何進行 Sahana Eden 首頁樣式的修改

這裡將說明如何協助 Sahana Taiwan Team 進行 Sahana Eden 首頁樣式的修改

使用 FTP 軟體連線測試主機

FTP Client 軟體推薦使用 FileZilla(http://filezilla-project.org/)

  • Host DN:test.sahana.tw
  • Host Port:21
  • 帳號/密碼:由 Sahana Taiwan Team 配發

登入之後即進入 test.sahana.tw 的測試站台主目錄。

http://lh3.ggpht.com/_PZxaEKr2nZg/THZmapya2EI/AAAAAAAAAUA/cRcgDa3UKtE/s400/eden_ftp.png

修改那些檔案

Sahana Eden 採用 MVC 架構,要調整首頁樣式可針對下列檔案進行修改:

Template: /applications/eden/views/default/index.html

這個 index.html 儲存著 Sahana Eden 的首頁樣板,裡面會看到許多由 {{}} 框起來的區塊,這些 {{...}} 就是 Sahana Eden 專用的樣板標籤。

{{}} 區塊經由樣板引擎處理後,會被代換成一般的 HTML 內容,然後傳送給瀏覽器。

只有在需要對網頁內容進行修改(比如修改 html tag )的時候才需要動到 index.html 。

CSS: /applications/eden/static/styles/S3/sahana.css

Sahana Eden 的首頁及其他頁面樣式,除了一些比較特殊的頁面會引用其他的 CSS 以外,絕大部分都透過這個 sahana.css 去控制。所以從 sahana.css 下手,就可以進行首頁的樣式修改。

觀看修改後的效果

在測試階段 sahana.css 的變更需要進入 debug 模式,才能夠觀察到修改的情況。

以首頁為例,原本連結的網址如下

http://test.sahana.tw/eden/default/index.html

但是就算修改了 sahana.css ,從這個網址還是不會顯示新的樣式結果。

我們需要在像下面例子一樣,在網址後方加入?debug=true,才會讀入最新的 sahana.css 。

http://test.sahana.tw/eden/default/index.html?debug=true

換句話說,可以透過這種方式進行修改前與修改後的比較。

參考資料:

http://eden.sahanafoundation.org/wiki/DeveloperGuidelinesCSS

2010年8月18日星期三

Plone 的 Event Item 中各項日期設定說明

Plone 的 Event Item 提供了幾個不同的日期設定欄位,這些欄位實質上都有其存在的作用,下面會跟大家介紹各個日期欄位的作用與注意事項,幫助大家釐清觀念,並且在適當時機使用。

Publishing Date 及 Expiration Date

http://lh3.ggpht.com/_PZxaEKr2nZg/TGvHtZUeD4I/AAAAAAAAATE/jKE85c6vtXo/s800/Plone_Dates.png

作用:

  • Publishing Date 用來指定發布開始日期,一旦系統日期到達 Publishing Date 時 Plone 就會自動顯示該 Item 。
  • Expiration Date 用來指定發布截止日期,一旦系統日期到達 Expiration Date 時 Plone 就會自動隱藏該 Item 。

注意事項:

  • 當 Item State 第一次被設定為 Published 時, Plone 也會自動填入當時時間至 Publishing Date 。
  • 尚未到達 Publishing Date 前,無論是否符合任何搜尋條件,在匿名模式下均不會顯示出來。
  • 過期的 Item ,在管理者模式可以看到顯示 紅色 expired 字樣。
  • 系統不會自動填入 Expiration Date ,預設為永不過期。
  • 一旦到達 Expiration Date 所設定的日期,無論是否符合任何篩選條件,在匿名模式下均不會顯示出來。

所以 Publishing Date 與 Expiration Date 擁有決定顯示與否的最高優先權,只要尚未到達發布時間或是已達截止時間,無論用什麼搜尋條件,都不會在匿名模式下出現。

Event Starts 及 Event Ends

http://lh3.ggpht.com/_PZxaEKr2nZg/TGvIRItvb_I/AAAAAAAAATY/wzWjHaBuF2A/s800/Plone_Event_Dates.png

作用:設定 Event 活動的開始與結束日期,能夠作為其他功能執行時的篩選或排序參考,如 collection 中的搜尋條件及排序欄位。

在沒有任何搜尋條件的情況下 Event Starts 及 Event Ends 並無作用且不影響發布與否,換句話說不會因為 Event Starts 的日期還沒到或是 Event Ends 的日期已經超過,所以就不顯示。

2010年7月29日星期四

Ubuntu 10.4 建置 Sahana 搭配 MySQL 測試環境說明

Sahana 使用 SQLite 作為預設資料庫,但面對災區的大量資訊時,MySQL 將更能夠從容應付。

以下範例將說明如何在 Ubuntu 10.4 建立 Sahana 搭配 MySQL 的使用環境。

這與之前介紹過的 Mandriva 2010.0 建置 Sahana 搭配 MySQL 測試環境說明 建置方式大致雷同,主要是修正一些套件名稱,以符合 Ubuntu 的套件命名規則,節省大家在 Ubuntu 搜尋套件的時間。

安裝及設定 SAHANA 資料庫

  1. 安裝 MySQL
$sudo aptitude install mysql-server

PS.同時會詢問資料庫 root 密碼

  1. 執行安全性設定
$sudo mysql_secure_installation

變更 root 密碼

移除 anonymous user

禁止 root 帳號遠端登入mysql

移除 test db

重新載入 privilege table

  1. 建立 Sahana 資料庫
$mysql –u root -p
CREATE DATABASE sahana;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER ON sahana.* TO 'sahana'@'localhost' IDENTIFIED BY 'mypassword';
FLUSH PRIVILEGES;
quit
  1. 安裝 phpmyadmin
$sudo aptitude install phpmyadmin

安裝 Python 及相關套件

  1. 安裝 Python
$sudo aptitude install python
  1. 安裝各類套件
$sudo aptitude install python-setuptools python-lxml python-reportlab python-mysqldb
$sudo aptitude install libgeos-3.1.0 libgeos-dev libgeos-c1 python-xlwt python-shapely
$sudo easy_install geraldo pyserial pytz
  1. 安裝 bzr
$sudo aptitude install bzr
  1. 安裝 web2py
$bzr export web2py lp:~mdipierro/web2py/devel
  1. 安裝 sahana eden
$cd web2py/applications
$bzr branch lp:sahana-eden eden

設定 SAHANA

  1. 修改權限
$sudo chown www-data web2py/applications/admin/cron
$sudo chown www-data web2py/applications/admin/cron/crontab
$sudo chown www-data web2py/applications/admin/cache/
$sudo chown www-data web2py/applications/admin/databases/
$sudo chown www-data web2py/applications/admin/errors/
$sudo chown www-data web2py/applications/admin/languages/
$sudo chown www-data web2py/applications/admin/sessions/
$sudo chown www-data web2py/applications/admin/uploads/
$sudo chown www-data web2py/applications/eden/cron
$sudo chown www-data web2py/applications/eden/cache/
$sudo chown www-data web2py/applications/eden/databases/
$sudo chown www-data web2py/applications/eden/errors/
$sudo chown www-data web2py/applications/eden/languages/
$sudo chown www-data web2py/applications/eden/sessions/
$sudo chown www-data web2py/applications/eden/static/img/markers
$sudo chown www-data web2py/applications/eden/static/scripts/tools
$sudo chown www-data web2py/applications/eden/static/styles/S3/sahana.css
$sudo chown www-data web2py/applications/eden/static/styles/S3/sahana.min.css
$sudo chown www-data web2py/applications/eden/uploads/
$sudo mkdir web2py/applications/eden/uploads/gis_cache
$sudo mkdir web2py/applications/eden/uploads/images
$sudo mkdir web2py/applications/eden/uploads/tracks
$sudo chown www-data web2py/applications/eden/uploads/gis_cache
$sudo chown www-data web2py/applications/eden/uploads/images
$sudo chown www-data web2py/applications/eden/uploads/tracks
  1. 修改 000_config.py
$vi web2py/applications/eden/models/000_config.py
deployment_settings.database.db_type = "mysql" 
deployment_settings.database.username = "sahana" 
deployment_settings.database.password = "mypassword" 

執行 web2py

~web2py$sudo ./web2py.py