python 在安裝 MysqlDB 時,出現找不到 mysql_config 的錯誤

使用 python 在操作 Mysql 時,會需要用到 MySQLdb 這個 library,如果你在安裝時,出現找不到 mysql_config 的錯誤,可能的原因是當初在安裝 Mysql 時,是使用 apt-get 的方法安裝,這樣就不會有 mysql_config 這個檔案。

解決的方式是安裝 dev 版本,分別執行下面的指令:

這樣就解決了。

保持 WinSCP 與 Server 之間的連線不中斷 (Keep WinSCP alive)

如果想要保持 WinSCP 和 Server 之間的連線不中斷,可以在 Connection 的時候去設定 Keepalives 的參數:


Playframework - Run application in the background


  • play run : Run the application in the current shell
  • play start : Start the application in the background


【相關閱讀】
Play Manual

在 Ubuntu 12.04 LTS 下安裝 Playframework (@ Amazon EC2)

在 Ubuntu 下要安裝 Playframework 也不是很困難,大致上就是下載 playframework 的壓縮檔,解壓縮之後,放到自己喜歡的位置,接著再設定一下 bashrc ,把 path export 出來。 

如果還沒有安裝 java jdk 的人,可以先執行以下的指令安裝:

1. sudo add-apt-repository ppa:webupd8team/java 
2. sudo apt-get update
3. sudo apt-get install oracle-java7-installer 

申請 Amazon EC2 Cloud 主機,並利用 putty 登入(Step by Step, 圖多!)

最近將嘗試Amazon EC2的雲端主機服務,在這裡記錄一下過程,分享給大家。網路上也有不少文章有紀錄,不過有些介面和步驟略有不同。

1. 前往 Amazon EC2 服務頁面,點選右方的 Sign Up Now 按鈕進行註冊動作:http://aws.amazon.com/ec2/


Amazon EC2 使用 Ubuntu 11.10 64bits 預設帳號與轉換成 root 方式

最近嘗試把專案 deploy 到 Amazon EC2,使用的作業系統是 Ubuntu 11.10 64bit 版本。預設的帳號是 ubuntu,不需要輸入密碼。如果要轉換到 root ,只要在 bash 中輸入 sudo su 指令即可。

設定 Eclipse 程式碼提示(Content assist auto activation)功能

一般的 IDE 大多都會有【程式碼提示】的功能,幫助開發者能夠快速的取得相關的屬性、方法,而不需要花腦袋去記憶。



在 Ubuntu 下設定 path 環境變數


  1. Go to home directory
  2. 用編輯器開啟 .bashrc 檔案
  3. 在文件最下方增加 export PATH=$PATH:/xxx/yyy/zzz
  4. 存檔之後,設定即可生效

第三步驟中,紅色字部分即為欲設定的路徑位置。


Twitter Bootstrap 視覺化 UI 拖拉介面

Jetstrap 是一個針對 Twitter Bootstrap 的視覺化 UI 介面,你可以透過拖拉,將一些 Bootstrap 的基本元件組合成一個 HTML 頁面。左上方的按鈕也可以讓你 preview response design 在不同解析度下的一些成果。更改完畢之後,右上方的 Export 按鈕可以讓你很快的把這個頁面的 HTML Code 拿去用。

Playframework Dependencies Management

在 Playframework 中,dependencies 是由 conf/dependencies.yml 檔案所管理。在這個檔案中,你可以設定相關的 dependencies 是來自不同的 repositories。像是在下圖中,我的 project 分別從 play 官方的 repository 吃了 play 和 fbgraph;另外其他的 dependencies 是吃我放在 local 的 jar file。在設定自己的 repositories 時,格式如下圖所示。

Heroku Project 中,取得mysql(clearDB)的位置與帳號密碼

在 Heroku 中,如果你用 MySQL 作為專案的資料庫,可以用 heroku config 指令來查看目前專案的一些設定檔:


會有這樣的需求,是因為我想要用常用的 MySQL 管理工具(MySQL Workbench, MySQL Query Browser...etc)來管理我在 Heroku 上的資料庫。當你執行上述的指後,就可以看到該朱案的資料庫連線字串,其中上圖紅色的部分就是 MySQL DB 的位置,以我的專案來說,是放在 us-cdbr-east.cleardb.com 這裡。

至於 username 和 password ,可以在資料庫 Dashboard 裡面的  Endpoint information 中得知。



將git push heroku master時,發生no such app問題

最近在將 project 丟到 heroku 時,會發生 no such app 的問題。原因是我將 heroku 上的 app 更名後,會發生 remote 的名稱和目前的 master 不相符合。這時候可以按照下列的步驟解決。

Deploy Playframework application on Heroku - using ClearDB(MySQL)

最近在把一個用 Playframework 開發的 application deploy 到 Heroku,並且後端資料庫想要使用 MySQL ,在部屬的過程中,遇到一些小問題,不過也順利解決了,把整個步驟記錄下來。

在JPA中,將createNativeQuery的結果轉換成其他物件

在JPA中,當你使用createNativeQuery去下SQL語法時,你可能會用getResultList來取得查詢出來的結果:

但是當你執行時,會出現無法轉換的錯誤:ClassCastException occured : [Ljava.lang.Object; cannot be cast to models.Post

五種 Social Media Startups 獲利的 Business Model

偶然看到一篇【5 Business Models for Social Media Startups】的文章,稍微整理如下。

Freemium Model

基本版的服務是免費的,但是如果想要進階功能,就要額外收費。採用此 model 的服務必須要思考,【有什麼誘因】可以讓使用者從免費版升級到進階付費版。如果免費版就可以提供大部分目標客群所需要的功能,那付費的比例就會很低了。

原文中指出使用這種模式的服務有:UserVoice、Flickr、LinkedIn 和 PollDaddy。其中,UserVoice的使用者有16,652人(至2009/05),付費的比例大約是5%。

軟體品質的三個面向

根據 David Chappell 在 The Three Aspects of Software Quality: Functional, Structural, and Process 中指出,軟體品質可以用三個面向來檢視:Functional、Structural 和 Process,而這三個面向分別會有對應的群體來關注:User、Developer、Sponsor。

Functional 面的軟體品質指的是軟體如何達到 User 的要求,分別有下列四個維度來描述:

  • The software meets the specified requirements (軟體達成特定的需求)
  • It has few defects (軟體的缺陷很少)
  • It has reasonable performance (軟體具有良好的性能)
  • It is easy to learn and use (軟體很容易學習及使用)

Tomcat 出現 JDBC Driver has been forcibly unregistered 錯誤

在deploy application的時候,偶爾會遇到 "SEVERE: A web application registered the JBDC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered." 這樣子的錯誤訊息。

查了一些資料後,發現在Tomcat 6.0.24之後增加了防止memory leak的feature,有幾個作法可以避免:

  • 忽略他
  • 使用6.0.23之前的版本
  • 將 JDBC Driver 的 library 放到 tomcat 下的 lib 目錄
  • 繼承 BasicDataSource,自己 close connection



【相關閱讀】
To prevent a memory leak, the JDBC Driver has been forcibly unregistered
Memory Leak Protection
MySQL create memory leak in Tomcat

Spring Bean Scope 學習

在Spring中定義一個Bean時,可以針對其scope加以設定。在新版的Spring中,共有五種不同的scope可以設定,分別為:

Spring Bean Definition

在Spring中,Bean是一個物件,藉由Spring IoC Container來初始化(instantiated)、管理組裝(assembled)。

Bean會由定義的設定檔(configuration metadata)來建立。例如,藉由在XML檔案中,<bean>的設定來建立。

設定檔(configuration metadata)需要瞭解下列事項:

  • 如何建立Bean
  • Bean的生命週期
  • Bean的相依關係(dependencies)

在一個Bean的設定檔中,透過下列的properties來進行設定:

  • class:必定存在。定義用來建立此顆bean的class
  • name:用來建立Bean的識別(identifier)
  • scope:定義Bean的Scope,包含:singleton、protopype、request、session和global-session
  • constructor-arg:用來注入dependencies
  • properties:用來注入dependencies
  • autowiring mode:用來注入dependencies
  • lazy-initialization mode:用來告知IoC Container在第一次request這個bean的時候再建立instance,而不是在startup時
  • initialization method:一個callback。在所有必要的properties被呼叫後執行
  • destructor method:一個callback。在bean被destroyed時後被呼叫

一個典型的Bean設定檔大致如下所示:

在該設定檔中,有一個HelloWorld的Bean,分別在初始和結束時,會去呼叫init和destroy方法。同時把message這個參數注入Hello World!的值。

設計良好的Web API

最近由於工作的關係,需要設計API提供給User使用,我們採用的是HTTP + RESTful + JSON Response的方式,剛好和近期讀到的一篇文章所建議的方法相同,在這邊稍微記錄一下。

這篇文章是:Designing robust web API

根據作者過去的經驗,提供幾個在設計API的Best Practice或個人經驗。分別為:

  • Use a RESTful Model:使用HTTP + RESTful + JSON作為API的開發架構
  • Stabilize your API:Expose the API as minimal as possible. 保持API的穩健,不應該有大量變動。已經釋出的功能很難被刪減。
  • Version your API:在API的Request URL中加入版本資訊方便使用者做區別。
  • Asynchronous Invocation:如果你的response需要很長的時間,採用asyn的方法。實作上有兩種模式可以參考:(1) Client在request之後,server response是一個receipt,用來向server詢問response是否已經處理完畢。(2) Client提供callback address,當server處理完response之後,會丟回callback的位置讓client接收。

【相關閱讀】

數個JSON Library效能比較

今天看到一篇比較各種不同JSON library performance的文章:Json Java parsers / generators microbenchmark

文章中比較了八種常見的JSON Library用來 parse/generate JSON的效能,分別是:

  • FlexJson (2.1) 
  • GSon (2.1) 
  • Jackson (1.9.4) 
  • JsonLib (2.4) 
  • JsonMarshaller (0.21) 
  • JsonSmart (2.0-beta2) 
  • Protostuff JSON (1.0.4) 
  • XStream (1.4.2)

ColorHexa 教你如何配色

如果你不太會配色,不清楚紅色和什麼顏色配在一起比較協調好看,除了參考其他網站的搭配外,還可以試試看ColorHexa這個服務。

ColorHexa:http://www.colorhexa.com/

ColorHexa也能自動生成與顏色對應的配色方案,比如互補/對比色(complementary)、分散的互補色(split complementary)、相似色(analogous)、三色(triadic)、四色(tetradic)、單色(monochromatic)等。

RESTful URL Design 準則

要設計RESTful URL,有一些準則可以參考,以下列出一些我覺得比較重要的部分,剩下的可以參考相關閱讀的兩篇文章,寫的都不錯。
  • Short
  • Lowercase, without mix-cases
  • Use plural path for collections, ex : /cars for all cars
  • Put individual resource under plural path. ex: /cars/car-1 or /cars/1
  • Use URL parameters ONLY with form-driven queries. ex: /cars/car/1, NOT /cars/car?id=1
  • Readable, Hierarchical, Simple.
  • Meaningful, ex: /cars/toyota/cr-z, NOT /cars/brand1/1
  • Hackable URL, ex: /cars/toyota/cr-z should have /cars/toyota/ and /cars
【相關閱讀】
Common REST Design Pattern
REST-ful URI design | RedRata

Ready2Open - 開放組織/政府自我評量表

Ready2Open問卷是由德國慕尼黑的IT策略部門(IT strategy of the City of Munich)和德國開放知識組織(Open Knowledge Foundation Germany)所共同設計,用來讓組織或公部門自我評量對於【開放資料】、【開放政府】的整備狀態。

問卷共分為【參與/社群(Participation/Community)】、【技術/資料(Technology/Data)】、【領導能力(Leadership)】、【單位(Organization)】和【學習能力(Learning Capacity)】五個維度,每個維度包含八個問項,總共40個問題。

Open Data project - AccessTaiwan

AccessTaiwan是我最近正在進行的一個Open Data Project,主要的目標是希望讓台灣的旅遊資料更透明且開放,讓各地的開發者可以透過共通的protocol來方便取得這些data。

為了這個目標,寫了一個簡單的網頁來蒐集大家對於此議題的需求性,如果大家有興趣,歡迎到下面的官方網站和部落格參觀,


留下Mail的朋友不用太擔心會收到垃圾郵件或個人資料被公佈,這部分個資的保護我們還有一些堅持。蒐集E-Mail的目的在於確認此計畫對於大眾的需求,讓我們的團隊有一些基本的信心來確認我們是否走在正確的道路上。

另外,為了和社群的朋友加強互動,同時交換意見,我們也同時申請了Facebook和Twitter帳號,歡迎大家與我們交流。


【轉】不要自稱程式設計師,老鳥的 9 個職涯建言

資料來源:不要自稱程式設計師,老鳥的 9 個職涯建言

使用Maven時出現 Unable to find the mojo 'generate-sources' (or one of its required components) in the plugin 'com.jayway.maven.plugins.android.generation2:android-maven-plugin' 問題

最近在使用Maven來build Spring Android的Sample Project時,在mvn clean install的階段時,會出現Unable to find the mojo 'generate-sources' (or one of its required components) in the plugin 'com.jayway.maven.plugins.android.generation2:android-maven-plugin'這樣的問題。

第一個問題是,Spring Android的Sample Project需要使用Maven3.0.3以上,請參考issue220

接著,當你在使用maven 3去install時,如果出現java.lang.NoClassDefFoundError: org/codehaus/plexus/classworlds/launcher/Launcher的錯誤,請先檢查原本的作業系統中,是否有安裝maven2,如果有,要去環境變數中,把相關的path給拿掉,如果有設定M2_HOME,也要一併移除。

Youtube影片連續撥放服務

Tsung's Blog的這篇文章中看到了兩個可以連續撥放Youtube影片的服務,覺得還不錯,另外還有一個叫作Youtube Disco的網站,是由Youtube自己本身提供連續撥放影片的服務。

大家有興趣可以到以下這三個服務去試試看,還蠻簡單方便使用的:


【相關閱讀】

好站 - 搜尋 YouTube MV 並自動播放

UML類別圖中的聚合(aggregation)與組合(composition)關係

在UML類別之間的關係當中,聚合(aggregation)和組合(composition)的區別讓我一開始很疑惑,後來查了些資料後,比較可以分得出這兩個的差別。

Aggregation和Composition都是表達一個物件包含另外一個物件的關係(has-a)。比如說:一個公司包含一些員工、一艘船中包含幾個引擎、一個飛機場中包含數架飛機等等。

  • Aggregation

Aggregation是Association的一個特例(specialization),用來表達兩個物件之【整體和部分(whole-part)】的關係。當B物件與A物件之間是Aggregation的關係時,代表A物件消失時,B物件還可以給C物件繼續使用。

舉例來說,機場與飛機之間的關係就是Aggregation。A機場裡面會有很多台飛機,當A機場不再存在時,裡面的飛機還可以屬於(停靠在)C機場,不會因為A機場消失了,本來停靠的飛機也跟著消失。

  • Composition

Composition所表達的是更進一步的aggregation。除了代表兩個物件之間的whole-part關係之外,還代表這兩個物件之間是有相同的生命周期(life-cycle)。白話一點的說,若是B物件與A物件之間是composition的關係時,代表當A物件消失的時候,B物件也要跟著消失。

舉例來說,一個員工和員工薪資資料就是composition的關係,當A員工離職後,它所對應的員工薪資資料也會跟著無效。