聚會時間公告: 因應COSCUP 2011, Kalug 8月份休會一次

四月 22, 2014
» 自己的手機自己修 – 換 Nexus 5 破裂螢幕

FIX iPhone 3GS

身為一個宅宅,自己的手機自己修也是很合理的事情。曾經自找麻煩修過難搞的 iPhone 3GS 電池、Home Button。

面板破裂的 Nexus5

最近 Nexus5 不小心在路邊摔到柏油路上,結果螢幕破裂。由於此手機手機是從日本 Google 直購回台,查了一下發現維修的費用大約在 TWD5000-5500. 把心一橫,乾脆自己更換面板看看。

拆機工具

 

所需裝備

  • 替換螢幕 – 網路上有螢幕總成與螢幕面板兩種。建議買總成。純換螢幕很麻煩, 只換面板需要用熱風槍拆下螢幕,再換上新的觸控螢幕,這需要比較精細的工藝技術,往往會在觸控面板間留下空隙。嫌麻煩的話可以買已加裝好電池的總成,省下重新拆解電池的功夫。
  • 塑膠開殼工具 – Nexus5 只用卡榫固定外殼,開殼工具可以方便把外殼撬開。技巧是找到卡榫位置,以扁平的塑膠板手推開卡榫。
  • T5 Torx Screwdrive 星形螺絲起子
  • Tri-point Screwdriver. Y型螺絲起子

拆掉外殼天線模組主機板天線

許多的賣家再銷售面板的時候會一併附上工具,不過我的型號使用 Y 型螺絲,與網路常見美版不同。因此額外加買了 Y 型螺絲起子。網路上有許多教學文件,這裡不多說明,以下是更換過程中所得到的經驗,僅供參考

  • 拆解的時候,有幾處電磁屏蔽膜是用膠水黏死,無法撕下來移到新面板總成上。新的總成上也沒有預留電磁屏蔽膜,可能會造成干擾。
  • 日本的 Nexus5 使用的螺絲是 Y 型與內六角兩種。
  • 雖然電池不是用膠水黏死,但是依然用了膠帶固定。移除時請小心,可稍微用熱風融掉黏膠。我不小弄破電池外殼,只好順便換一組。

電池外殼破裂

費用

  • 螢幕總成 3400+175 運費
  • Y型螺絲起子 300
  • 電池 500+55 =  550

以上費用為台幣。

更換完成

參考資料

 

四月 18, 2014

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» Linode VPS 全面升級 Double RAM & SSD

linode_logo_gray

Linode 又來了驚人的舉動,現在開始支援 SSD 以及小時計費服務,可以參考官網最新發表的 The New Linode Cloud: SSDs, Double RAM & much more,內容講到硬碟現在全面升級為 SSD,而且是 native SSD servers。網路頻寬部份每個 Linode Host 都連接 40 Gbps 的頻寬,對外總頻寬為 160 Gbps,對內頻寬為 40 Gbps,當然根據個人買得 VPS 而有不同的對外頻寬。記憶體則是全面 Double 升級,原本最低的 1G 記憶體,現在都改為 2G 了,每個月才 20 美金,看起來又是被 DigitalOcean 刺激到,最小的 Linode 流量也改為 3 TB。來看看現在新的方案

小時計費服務最低為 0.03/hour,一個月 20 美金,蠻便宜的,對外頻寬也有到 250 Mbps。現在除了倫敦以外,都可以使用新的 Plan 了

最後可以參考最近 Linode 升級了哪些硬體或服務

四月 14, 2014

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» OpenSSL CVE-2014-0160 (Heartbleed) 漏洞攻擊手法

heartbleed

DEVCORE 資安公司寫了一篇 OpenSSL Heartbleed 全球駭客的殺戮祭典,你參與了嗎? 內如介紹如何透過工具攻擊及測試現有網站,也提供如何修正 OpenSSL 漏洞,Debian,Centos,FreeBSD 等。要檢查機器是否更新到正確版本,可以透過底下指令

$ openssl version -a

如果看到底下結果

OpenSSL 1.0.1e-fips 11 Feb 2013
built on: Tue Apr  8 02:39:29 UTC 2014
platform: linux-x86_64
options:  bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx)
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -DTERMIO -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
OPENSSLDIR: "/etc/pki/tls"
engines:  dynamic

更新時間為 4/7 號以後代表已經修正。透過 Heartbleed test page 可以查詢測試網站是否修正 Heartbleed,最後請記得重新產生 certificate signing request (CSR)。

$ openssl req -new -nodes -days 365 -keyout www.mydomain.com.key -out www.mydomain.com.csr

底下是 DEVCORE 錄製的攻擊手法 Demo 影片

四月 12, 2014

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» OSDC 2014 Talk: Introduction to Percona XtraDB Cluster and HAProxy

percona

很高興可以參加今年 2014 OSDC,投了一篇 Introduction to Percona XtraDB Cluster and HAProxy,主要介紹 Percona XtraDB Cluster 這套 open source 軟體搭配前端 HAProxy,底下是 Slides

四月 11, 2014

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» StartSSL 關閉註冊 OpenSSL CVE-2014-0160 Heartbleed Security

heartbleed

這幾天 OpenSSL 發出很嚴重的 CVE-2014-0160 Bug 叫做「Heartbleed」,台灣資安公司 DEVCORE 也直接發布了一篇文章,請大家儘快升級系統,並且通知全部會員修改密碼,目前看到 Github 等大型網站都已經先將使用者 Session 資料清除,另外個人憑證部份也必須要更換,所以這幾天免費提供申請的 StartSSL 服務,被大量的使用者來申請,目前看到官方網站直接關閉註冊給個暫時的 warning 訊息 XD 如下圖

startssl

四月 7, 2014

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» 用 Go 語言寫的 Github Git 服務

null

最近看到大陸那邊用 Go 語言寫了一套類似 Github 服務叫做 Gogs(Go Git Service),目前個人裝起來速度方面相當快,跟 GitLabRuby 寫的 Git Service 速度有差,以功能完整性來說,GitLab 還是大勝 Gogs,安裝方式則是 Gogs 勝於 GitLab,如果最後要推薦用 Gogs 還是 GitLab,我個人還是會選 GitLab 因為畢竟還是要搭配 Jenkins 等 CI 服務才能發揮作用,這次來筆記如何在 Ubuntu 上安裝 Gogs。

安裝 Go 環境

如果用 Ubuntu / Debian 系列,請不要透過 apt 方式安裝,因為安裝完成的 Go 版本會非常舊,請使用 tarball 方式安裝,首先到官方網站下載最新檔案

$ wget https://go.googlecode.com/files/go1.2.1.linux-amd64.tar.gz
$ export PATH=$PATH:/usr/local/go/bin

也可以把 $PATH 寫到 .bashrc 檔案內,這樣下次開 Shell 就不用重新打一次,接著下 go version 看到底下結果表示安裝成功

$ go version
go version go1.2.1 linux/amd64

最後將 $GOROOT$GOPATH 設定上去

$ export GOROOT=/usr/local/go
$ export PATH=$PATH:$GOROOT/bin
$ export GOPATH=/home/git/gocode

安裝 Gogs service

安裝非常容易,只要透過底下兩個指令就安裝完成了

# Download and install dependencies
$ go get -u github.com/gogits/gogs

# Build main program
$ cd $GOPATH/src/github.com/gogits/gogs
$ go build

原始目錄會在 /home/git/gocode/src/github.com/gogits/gogs 接著可以看到 conf/app.ini 原始設定檔,官方建議不要修改此檔案,使用者可以自行建立 custom/conf/app.ini 來取代原始設定內容。最後執行 ./gogs web

$ ./gogs web
Server is running...
2014/04/07 15:19:07 [conf.go:309]  Log Mode: Console(Trace)
2014/04/07 15:19:07 [conf.go:310]  Cache Service Enabled
2014/04/07 15:19:07 [conf.go:311]  Session Service Enabled
2014/04/07 15:19:07 [install.go:53]  Run Mode: Development
2014/04/07 15:19:07 [command.go:73]  Gogs: Go Git Service 0.2.0.0403 Alpha
2014/04/07 15:19:07 [command.go:73]  Listen: :3001

打開 http://localhost:3001 就可以看到下面畫面,代表安裝成功

Install - Gogs  Go Git Service

三月 28, 2014

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» html5-boilerplate 打算不支援 IE8 瀏覽器

html5 boilerplate 是一套免費前端 Html5 模板,裡面支援 Normalize.cssjQuery (透過 Google CDN 或本地端讀取) 及 Modernizr,目前支援 IE 8 以上瀏覽器,但是最近看到官方正在討論是否該拿掉 IE 8 支援,原因是 Microsoft 今年宣佈 2014 年 4 月 8 日以後將不再支援 Windows XP,討論中也提到目前 IE 8 的市占率,其實還不小,雖然大部分使用者可能來自亞洲

討論列也有人提到,是否可以跟 [Google 一樣直接捨棄 IE8 及 IE9],可以看到

As previously announced, Internet Explorer 11 launched on October 17, 2013, and as a result, we’ve discontinued support for Internet Explorer 9.

Google 的做法相當棒

At Google, we’re committed to developing web applications that go beyond the limits of traditional software. Our engineering teams make use of new capabilities available in modern, up-to-date browsers. That’s why we made the decision last year to support only modern browsers, which also provide improved security and performance.

三月 19, 2014

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» Using Capistrano to deploy current branch

CapistranoLogo

Capistrano 是一套用 Ruby 語言所寫的 Deploy Tool,可以用來管理多台伺服器自動化流程,在 Rails 專案內都會使用這套 Deploy Tool,也方便管理遠端機器。這次有個問題是,假設我們在 Staging 或 Production 設定檔分別定義了 :branch 變數如下

set :branch, "master"
set :env, "production"

這時候可以透過底下指令來 Deploy 到遠端伺服器

$ bundle exec cap production deploy

假設這次想要 deploy 不同 branch 到 Production Server,就必須修改 production.rb 設定檔,每次不同 branch 就要改一次,會比較麻煩,要解決此問題只需要將上述程式碼改成可以用 command line 方式管理

set :branch, fetch(:branch, "master")
set :env, fetch(:env, "production")

將指令換成

$ bundle exec cap -S branch="my-branch" production deploy

也就可以達成目的了。多人同時在開發專案時,一定會有很多 feature 或 issue branch,開發者會希望目前在哪個 Branch,程式碼 commit 後,就直接用 cap deploy,將現在的 Branch 程式碼 Deploy 到伺服器,方便其他人測試,要達成此功能,請修改 deploy.rb 加入底下程式碼

# Figure out the name of the current local branch
def current_git_branch
  branch = `git symbolic-ref HEAD 2> /dev/null`.strip.gsub(/^refs\/heads\//, '')
  branch
end

# Set the deploy branch to the current branch
set :branch, fetch(:branch, current_git_branch)

完成後,請將 config/deploy/*.rb 內的 set :branch 全部拿掉,這樣切到任何 Branch,就直接下 cap deploy 即可,,當然也可以透過 command line 方式指定 Branch 來 Deploy。最後附上 Capistrano 的目錄架構圖

├── Capfile
├── config
│   ├── deploy
│   │   ├── production.rb
│   │   └── staging.rb
│   └── deploy.rb
└── lib
    └── capistrano
            └── tasks

參考文章:

三月 18, 2014
» 以 Leaflet 濫用^H^H呈現開放街圖資料

OpenStreetMap Taiwan 的第六場 Webinar,輪到我分享整合 OpenStreetMap 資料與 Leaflet 的應用。

以下是簡報與影片

以 Leaflet 濫用^H^H呈現開放街圖資料 from Rex Tsai

三月 15, 2014

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» 在 Local 端處理 Github 專案 Pull Request

github-logo

這篇會筆記如何將 Github 上專案內的 Pull Request 拉到 Local 端電腦,雖然現在大部分的 Open Source 都會寫 Unit Test 並且搭配免費的 Travis CI 自動化測試,但是有時候也是需要把別人的 Pull Request 拉下來測試後再進行 Merge,而 Github 官方有提供一篇說明文件 Checking out pull requests locally,底下紀錄操作步驟。

clone 新專案,修改設定檔

gulp-compass 專案來測試

$ git clone https://github.com/appleboy/gulp-compass.git

接著打開 .git/config 可以看到底下設定檔

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://github.com/appleboy/gulp-compass.git
[branch "master"]
        remote = origin
        merge = refs/heads/master

請增加一行 refspec 紀錄,修改狀態後為底下

[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://github.com/appleboy/gulp-compass.git
        fetch = +refs/pull/*/head:refs/pull/origin/*

抓取遠端 Pull request

接著請執行 git fetch origin,可以看到底下結果

$ git fetch origin
remote: Counting objects: 79, done.
remote: Compressing objects: 100% (46/46), done.
remote: Total 79 (delta 38), reused 59 (delta 28)
Unpacking objects: 100% (79/79), done.
From https://github.com/appleboy/gulp-compass
 * [new branch]      refs/pull/1/head -> refs/pull/origin/1
 * [new branch]      refs/pull/10/head -> refs/pull/origin/10
 * [new branch]      refs/pull/12/head -> refs/pull/origin/12
 * [new branch]      refs/pull/16/head -> refs/pull/origin/16
 * [new branch]      refs/pull/21/head -> refs/pull/origin/21
 * [new branch]      refs/pull/23/head -> refs/pull/origin/23
 * [new branch]      refs/pull/26/head -> refs/pull/origin/26
 * [new branch]      refs/pull/28/head -> refs/pull/origin/28
 * [new branch]      refs/pull/5/head -> refs/pull/origin/5
 * [new branch]      refs/pull/6/head -> refs/pull/origin/6
 * [new branch]      refs/pull/7/head -> refs/pull/origin/7
 * [new branch]      refs/pull/8/head -> refs/pull/origin/8
 * [new branch]      refs/pull/9/head -> refs/pull/origin/9

請注意 refs/pull/ 是唯讀狀態,你無法 commit 任何程式碼上去

讀取特定 pull request

上述步驟完成後,可以直接執行底下指令,來讀取特定的 Pull request

$ git checkout -b 28 pull/origin/28
Switched to a new branch '28'

最後我們來看看線圖

*  d0b3fc1 clear css folder before testing. (origin/master, origin/HEAD, master)
|  
*  22b6362 update readme.
|  
*  eaf0cdb add test import_path array option.
|  
*  9bc303c bump version. (1.1.6)
|  
*  7e94db6 fixed coding style.
|    
*    f9f0350 Merge branch '28'
|\  
| |   
| *  3fa510d Fix garbled output. (HEAD, refs/pull/origin/28, 28)
| |   
* |  c3d8c18 update jshin to 1.5.0 and remove default parameter ".jshintrc".
|/  
|    
*    0e87ccf Merge pull request #26 from theblacksmith/multiple-import-paths

我們可以看到現在專案內的 HEAD 已經指向 #28 的 Pull request,請注意 (HEAD, refs/pull/origin/28, 28),如果測試沒問題,就可以透過 git merge 回 master 分支

$ git checkout master
$ git merge pull/origin/28
$ git push origin master

Github 上面預設是使用 git merge,當然你自己也可以用 git rebase 方式讓分支不要這麼亂。完成後上傳回 Github,你會發現該 pull request 就會被關閉並且 merge 完成。

三月 11, 2014

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» Ruby Compass and Sass Auto Testing Environment

Compass Home   Compass Documentation

Compass 是一套 CSS Authoring Framework,也是基於 Sass 語法的一套 Framework,先前寫了 GulpCompass Plugin,在針對自動化測試時候出現版本相依性不同,造成無法自動測試成功。自動化測試目前跟 Github 最常搭配的就是 Travis CI 或者是 Codeship,當然如果非 Open source 專案可能就要自己架設 CI 伺服器,個人推薦就是 Jenkins。這次遇到的問題其實跟 Ruby Gem 版本相依性有關,由於要測試 Compass 所有 Command 語法,所以使用了 Susy + sass + compass,如果在 .travis.yml 內直接寫

language: node_js
node_js:
    - "0.10"
before_install:
    - gem update --system
    - gem install sass
    - gem install compass
    - gem install susy
    - gem install modular-scale

這樣編譯出來的結果會噴底下錯誤訊息

/home/rof/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:55:in `require’: cannot load such file — sass/script/node (LoadError) from /home/rof/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:55:in `require’ from /home/rof/.rvm/gems/ruby-1.9.3-p327/gems/compass-0.12.2/lib/compass/sass_extensions/monkey_patches/browser_support.rb:1:in `‘ from /home/rof/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:55:in `require’

會造成這樣的原因就是目前 sass、compass、susy 都不能安裝最新版本。Compass 目前版本是 0.12.3 只有支援 Sass 3.2.14 版本,但是 Sass 前幾天剛推出 3.3.1 版本,另外 Susy 也是一樣問題,由於 Susy 推出 2.0.0 版本需要 Sass 3.3.0 版本以上才可以使用,所以針對 Compass 變成只能指定版本測試,否則會得到上述錯誤訊息,請將 .travis.yml 修正為

language: node_js
node_js:
    - "0.10"
before_install:
    - gem update --system
    - gem install sass --version 3.2.14
    - gem install compass --version 0.12.3
    - gem install susy --version 1.0.9
    - gem install modular-scale

這樣就可以正常跑出測試結果。

三月 9, 2014
» 用 1932 年的嘉義地圖看「KANO」

英雄戰場天下嘉農

觀看嘉農的時候,總會有些細節想弄清楚,例如

  • 北海道札幌隊投手錠者博美 (青木健飾)下了嘉義駅車站,要在兩小時內完成嘉義市立公園野球朝拜之旅,這段距離大約 2.5 公里。
  • 近藤兵太郎教練 (永瀬正敏飾) 第一次集合的嘉義神社,位於臺灣嘉義市嘉義公園射日塔,光復後改為忠烈祠,1994年4月24日失火燒燬。
  • 位於嘉義市北門町五丁目104番地的吉川山陽堂書店在現今嘉義市的中山路,距離中央噴水池非常近。

這些情報都在地圖上,台灣政府許多機關藏有許多寶貴圖資,各縣市、中央單位不只保存每一階段的量測成果,許多更早以前的紙本圖資也已經被數位化。像是中央研究院、人社中心地理資訊科學研究專題中心的台灣百年歷史地圖系統,即藏有日治時代堡圖、地形圖等。臺北市都市發展局的臺北市歷史圖資展示系統也提供了寶貴的歷史圖資。

很可惜的,有更多的寶貴圖資被藏在政府機關中,許多圖資的品質比商業圖資更佳,即便有像是國土資訊系統或中華民國交通部公路總局資訊室 Safe Taiwan 單位積極整合,但卻因為授權不明,造成民間難以存取使用。

前陣子發掘了一些潛在的資訊,整理於 台灣開放街圖 社群筆記中。

其中一個發現是中央研究院嘉義百年歷史地圖 WMTS 服務,它包含了五筆重要的歷史地圖

為了方便使用,我做了一份線上疊圖,並標註幾個電影中重要的景點,歡迎指教。程式碼可於 github 免費下載

 

參考資料


csw-dawn
csw-dawn
» ubuntu 12.04 install apache/phpmyadmin


1.  sudo apt-get install apache2
2.  sudo apt-get install php5 libapache2-mod-php5
3.  sudo apt-get install mysql-server
4.  sudo apt-get install libapache2-mod-auth-mysql php5-mysql phpmyadmin
5. cd /var/www
6. sudo ln -s /usr/share/phpmyadmin .
7. sudo /etc/init.d/apache2 restart
open web browser http://127.0.0.1/phpmyadmin

» Ubuntu 安裝 Java JDK

1. 先到 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
    下載 jdk
2. 解壓縮
    $ tar zxvf jdk-7u51-linux-i586.tar.gz
3. 建立jdk目錄
    $ sudo mkdir /usr/lib/jdk
4. Copy jdk 到 /usr/lib 目錄下
    $ sudo cp -r jdk1.7.0_51 /usr/lib/jdk
5. 設定環境變數
    $ sudo vim /etc/profile
    加上以下內容:
        export JAVA_HOME=/usr/lib/jdk/jdk1.7.0_51
        export JRE_HOME=/usr/lib/jdk/jdk1.7.0_51/jre
        export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
        export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
6. 置換系統默認 jdk
    $ sudo update-alternatives --install /usr/bin/java java /usr/lib/jdk/jdk1.7.0_51/bin/java 300
    $ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jdk/jdk1.7.0_51/bin/javac 300
    $ sudo update-alternatives --config java
    $ sudo update-alternatives --config javac
7. 確認安裝
    $ java -version
     java version "1.7.0_51"
     Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
    Java HotSpot(TM) Client VM (build 24.51-b03, mixed mode)

8. 完成

» Ubuntu Install Tomcat

1. Install Tomcat
$ sudo apt-get install tomcat7
2. Check Status
$ sudo /etc/init.d/tomcat7 status
* Tomcat servlet engine is running with pid 13249
3. Install mysql-connector-java
$ sudo cp mysql-connector-java-5.1.22-bin.jar /usr/share/tomcat7/lib/
4. Restart Tomcat
$ sudo /etc/init.d/tomcat7 restart
* Stopping Tomcat servlet engine tomcat7 [ OK ]
* Starting Tomcat servlet engine tomcat7 [ OK ]
5. Test
$ cd /var/lib/tomcat7/webapps/ROOT
$ sudo vim test1.jsp
test1.jsp:
<%
out.println("Hello World!");
%>
6. Open browser
http://<your_server_ip_address>:8080/test1.jsp
will show
Hello World!
7. cd /usr/share/tomcat7/lib
8. $ sudo cp servlet-api.jar jsp-api.jar el-api.jar /usr/lib/jdk/jdk1.7.0_51/jre/lib/ext/

» Ubuntu Install Tomcat (src)



1. Install JDK
reference here:
http://csw-dawn.blogspot.tw/2014/02/ubuntu-java-jdk.html
2. Download tomcat7
https://tomcat.apache.org/download-70.cgi
3. $ tar zxvf apache-tomcat-7.0.52.tar.gz
4. $ sudo cp -r apache-tomcat-7.0.52 /usr/local/tomcat7
5. $ cd /usr/local/tomcat7/lib
6. $ sudo cp servlet-api.jar jsp-api.jar el-api.jar /usr/lib/jdk/jdk1.7.0_51/jre/lib/ext/
7. Install mysql-connector-java
$ sudo cp mysql-connector-java-5.1.22-bin.jar /usr/local/tomcat7/lib/
8. $ sudo vim /etc/rc.local
Add : sudo sh /usr/local/tomcat7/bin/startup.sh

三月 8, 2014

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» Sublime Text 2 在 Ubuntu 中文輸入問題

Sublime_Text_Logo

Sublime Text 是一個非常好用的文字編輯器,如果不喜歡 Vim Console 介面,我強烈推薦這套,因為可以透過 Package Control 安裝實用的 Plugin。安裝好 Sublime Text 軟體後,發現切換輸入法跟 Sublime 預設的快捷鍵衝突,所以將 gcin 切換的快捷鍵也換掉,但是似乎沒有作用,網路上找到此篇解法 Sublime Text 2 如何在 Ubuntu+iBus 下输入中文?,解法就是安裝 InputHelper Plugin 當然這方法是治標不治本,但是至少解決無法輸入中文的問題,底下是安裝方式

安裝方式

首先要先安裝 Package Control,兩種方式安裝,可以用 ctrl + ~ 或是透過 View > Show Console 選單打開 Console,將底下程式碼貼入並且按下 Enter

import urllib2,os,hashlib; h = '7183a2d3e96f11eeadd761d777e62404' + 'e330c659d4bb41d3bdf022e94cab3cd0'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); os.makedirs( ipp ) if not os.path.exists(ipp) else None; urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler()) ); by = urllib2.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); open( os.path.join( ipp, pf), 'wb' ).write(by) if dh == h else None; print('Error validating download (got %s instead of %s), please try manual install' % (dh, h) if dh != h else 'Please restart Sublime Text to finish installation')

最後在 Preference 找到 Package Control 選擇 Install Package,輸入 InputHelper 這樣就安裝完成,使用方式很容易,Ctrl + Shift + z 可以叫出 Input 視窗就可以輸入中文了。

三月 6, 2014

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» Percona Cloud Tools for MySQL 介紹及安裝

percona

Percona 去年推出一套 Cloud Tools for MySQL,藉由這套雲端服務可以幫忙分析 MySQL 系統內全部 Slow Query,並且計算出時間,畫出統計圖,此套系統目前還在 Beta 版,並且有些限制,只能開 3 個 organizations,每個 organizations 只能有 5 agents,最後資料只會保留 8 天,超過就會清除。這套系統後端是由 GO Language 完成,前端則是由 AngularJS 串起來,上個月 Percona 還在 MySQL Performance Blog 徵求 GO 的開發者,可見 Percona 也看好此服務,大膽使用 Google 推的 GO Language。

Percona Cloud Tools 由三個部份組成,分別是 Slow log filesPercona ToolkitPercona CloudSlow log files 就是系統要將 slow query 紀錄到檔案,經由 Percona Toolkit 將檔案分析好,最後透過 https 上傳到 Percona Cloud。所底下安裝就是這三個部份。

安裝方式

CentOS 安裝方式如下:

$ yum install percona-toolkit perl-JSON

請用 Google 帳號登入 https://cloud.percona.com/ 取得 API Key,畫面如下

Percona Cloud Tools 2014-03-06 15-42-34

接著用 pt-agent 指令安裝 Daemon

$ pt-agent --install --user={mysql username} --password={password} --api-key={API Key copied from web site}

也可以簡化成

$ pt-agent --install

執行後可以看到底下結果

$ pt-agent --install
Step 1 of 12: Verify the user is root: OK
Step 2 of 12: Check Perl module dependencies: OK
Step 3 of 12: Check for crontab: OK
Step 4 of 12: Verify pt-agent is not installed: OK
Step 5 of 12: Verify the API key:
Enter your API key: 631f9cc0c54a41248300cbc16a047ad6
Step 5 of 12: Verify the API key: OK
Step 6 of 12: Connect to MySQL: OK
Step 7 of 12: Check if MySQL is a slave: NO
Step 8 of 12: Create a MySQL user for the agent: OK
Step 9 of 12: Initialize /etc/percona/agent/my.cnf: OK
Step 10 of 12: Initialize /root/.pt-agent.conf: OK
Step 11 of 12: Create the agent: OK
Step 12 of 12: Run the agent: pt-agent has daemonized and is running as PID 22791:

  --lib /var/lib/pt-agent
  --log /var/log/pt-agent.log
  --pid /var/run/pt-agent.pid

These values can change if a different configuration is received.
OK
INSTALLATION COMPLETE
The agent has been installed and started, but it is not running any services yet.  Go to https://cloud.percona.com/agents#xxx to enable services for the agent.

最後到 cloud.percona 看執行結果,就算大功告成了,只要等個半小時就會有資料進來了

Percona Cloud Tools 2014-03-06 15-47-13

Percona Cloud 成功收到資料就會變成綠色標記

Percona Cloud Tools 2014-03-06 15-50-39

點選 Report 可以看到執行效率很慢的 Query 結果

Percona Cloud Tools 2014-03-06 15-52-04

二月 27, 2014

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» Ruby 安裝 debugger package 發生 No source for ruby 錯誤

Ruby_logo

當您在特定 Ruby 版本下安裝 debugger gem 套件,會碰到底下錯誤訊息

Using debugger-ruby_core_source (1.2.4) 
Installing debugger-linecache (1.2.4) with native extensions 
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native
extension.

checking for vm_core.h... no
checking for vm_core.h... no
Makefile creation failed
**************************************************************************
No source for ruby-2.0.0-p451 provided with debugger-ruby_core_source
gem.
**************************************************************************

會發生此錯誤的最大原因是在 debugger-ruby_core_source 原始碼內,只有包含特定少數的 Headers,解決此錯誤也非常簡單,可以直接將目前的 ruby 版本 headers 安裝到 debugger-ruby_core_source 目錄內即可,透國 rake 就可以完成

$ cd /usr/local/rvm/gems/ruby-2.0.0-p451/gems/debugger-ruby_core_source-1.2.4/lib/debugger/ruby_core_source
$ rake add_source VERSION=2.0.0-p451 --trace

執行完成後,就可以回到原專案目錄透過 bundle install 繼續安裝套件。

二月 24, 2014

小惡魔AppleBOY
AppleBOY
is about »

tag cloud

» Laravel 搭配 Memcached Cross Domain Session

Laravel PHP Framework

Laravel 提供了 filecookiedatabasememcachedarray 五種方式來存取 Session,預設的使用方式會是 file 存取,如果要跨 Domain 存取 Session 基本上只要設定 php.ini 裡面的 Session 相關參數即可,請注意底下 3 個參數。

完成後,只要是相同主網域內的 sub domain session 都可以互相存取,然而在 Laravel 內該如何設定,請先打開 app/config/session.php 檔案,Laravel 預設使用 Native File Session Driver,看看原本設定

'files' => storage_path().'/sessions',
'cookie' => 'laravel_session',
'domain' => null,

這三個參數都必須修改成底下

'files' => 'your session folder path',
'cookie' => 'PHPSESSID',
'domain' => '.domain.com',

PHP 預設 Session cookie name 是 PHPSESSID,另外 Laravel Session 存放位置請跟 php.ini 內設定位置一樣。到這邊設定倒是沒有什麼問題,如果改成使用 Memcached 來存放 Session,會發生無法存取同一個 Session。請先將 php.ini 改成底下設定

php_value[session.save_handler] = memcached
php_value[session.save_path] = "192.168.1.102:11211"
php_value[session.cookie_domain] = ".example.com"

另外 Laravel Session 設定請改成

'driver' => 'memcached',
'cookie' => 'PHPSESSID',
'domain' => '.example.com',

要設定 Memcached Server 請修改 app/config/cache.php

'memcached' => array(
    array('host' => '192.168.1.102', 'port' => 11211, 'weight' => 100),
),

但是這樣是不會通的,因為如果改成 Laravel Memcached Session Driver,那麼寫入跟讀出的 Session handle 將會被 Laravel Driver 取代,所以永遠拿不到一樣的 Session,此解法就是將 Session Driver 調回 Native Driver,並且修改 HttpFoundation/Session/Storage/Handler/NativeFileSessionHandler.php 檔案,此檔案放在 vendor/symfony/http-foundation/Symfony/Component/ 將底下兩行程式碼註解掉即可。

ini_set('session.save_path', $savePath);
ini_set('session.save_handler', 'files');

這不是很正規的解法,不過提供給有需要搭配 Memcached 的開發者一個方向。

A Feedjack powered Planet
A Django site.