$ sudo vim /etc/ssh/sshd_config
#PasswordAuthentication yes # default
RSAAuthentication yes
PubkeyAuthentication yes
Match User user1,user2
PasswordAuthentication no
$ sudo service ssh reload
2014年3月26日 星期三
[Linux] 限制使用者只能用 public key 登入 @ Ubuntu 12.04
原先是要用在 mysql 之 rsync 的備份方式,雖然最後不用了,也順便記一下:
2014年3月21日 星期五
[PHP] 使用 Memory Cache (php://memory) 加速 File Handle 操作
最近使用 maxmind / MaxMind-DB-Reader-php 時,發現大量處理很慢,研究一下 src / MaxMind / Db / Reader.php 後,發現 DB 沒有一口氣讀進記憶體使用,就找一下如何將檔案搬進 Memory 後,一樣用 File Handle 對 memory 操作,如此可以降低 source code 的更動。
用法(以 src / MaxMind / Db / Reader.php 為例):
使用的結果,在 Linode 2048 的機器上,測試 20k 筆資料,未加時約 65 秒,加了可以進步到 40 秒附近,稍微失落 Orz 此外,可以用 memory_get_peak_usage() 來的知記憶體的增減。
用法(以 src / MaxMind / Db / Reader.php 為例):
$this->fileHandle = @fopen($database, 'rb');
if ($this->fileHandle === false) {
throw new \InvalidArgumentException(
"Error opening \"$database\"."
);
}
$this->fileSize = @filesize($database);
if ($this->fileSize === false) {
throw new \UnexpectedValueException(
"Error determining the size of \"$database\"."
);
}
// Add by changyy
$fp = fopen("php://memory", 'rb+');
if(is_resource($fp)) {
fputs($fp, fread($this->fileHandle, $this->fileSize) );
rewind($fp);
fclose($this->fileHandle);
$this->fileHandle = $fp;
}
使用的結果,在 Linode 2048 的機器上,測試 20k 筆資料,未加時約 65 秒,加了可以進步到 40 秒附近,稍微失落 Orz 此外,可以用 memory_get_peak_usage() 來的知記憶體的增減。
2014年3月20日 星期四
iOS 開發筆記 - 在 Compiler Time 使用 __has_include 偵測 Framework 是否存在
以 FacebookSDK 來說,之前一直都用 github.com/facebook/facebook-ios-sdk 來使用,最近發現 source tree 預設有一些 bug 無法在 Xcode 5.1 編譯成功,自行修又容易碰到維護問題,於是就跑去下載 Facebook 官方打包好的 facebook-ios-sdk-current.pkg 來用了。
之前用 Facebook source code 來編譯時,在 header file 的使用:
#import "Facebook.h"
然而,現在改用 FacebookSDK 時,則該使用
#import <FacebookSDK/FacebookSDK.h>
因此想要在 Compiler Time 來確認,因此來增加彈性。
所幸有找到類似堪用的方式(Include File Checking Macros):
#if defined(__has_include)
#if __has_include("FacebookSDK/FacebookSDK.h")
#import <FacebookSDK/FacebookSDK.h>
#else
#import "Facebook.h"
#endif
#endif
此外,在 Project 的 Build Settings,就可以這樣通用設定:
- Framework Search Path: /path/sdk/FacebookSDK
- Library Search Paths: ${SRCROOT}
- User Header Search Path: /path/sdk/facebook-ios-sdk
2014年3月18日 星期二
[PHP] CodeIgniter 處理多層子目錄 Routing 問題
[PHP] CodeIgniter 處理多層子目錄 Routing 問題
過去使用 CodeIgniter 一直以為在 application/controller 裡的目錄結構可以無限延伸使用,如:
當瀏覽 hostname/ 可以由 conotrollers/welcome.php 處理,瀏覽 hostname/service/welcome 則由 conotrollers/service/welcome.php 處理,一切正常。
但瀏覽 hostname/service/api/product 和 hostname/service/dashboard/product 時,卻噴 404 Page Not Found 訊息。
一開始以為 nginx rules 設定錯誤,追一下 CodeIgniter 的 source code 後,發現 CodeIgniter 的程式碼沒有用遞迴或等價方式去搜尋子目錄,再透過相關關鍵字才發現,關於多層子目錄的需求,則只能透過指定 routing 的設定方式進行,但對應到還是一層目錄結構:
例如 hostname/service/dashboard/product 用法:
而目錄結構更新為:
簡言之,就是以 application/controllers 為基準,頂多再加一層 subdir 而已,而想要 uri 有多層的含義,只能自定 route 來達到。
過去使用 CodeIgniter 一直以為在 application/controller 裡的目錄結構可以無限延伸使用,如:
application/conotrollers/service/dashboard/product.php
application/conotrollers/service/api/product.php
application/conotrollers/service/welcome.php
application/conotrollers/welcome.php
當瀏覽 hostname/ 可以由 conotrollers/welcome.php 處理,瀏覽 hostname/service/welcome 則由 conotrollers/service/welcome.php 處理,一切正常。
但瀏覽 hostname/service/api/product 和 hostname/service/dashboard/product 時,卻噴 404 Page Not Found 訊息。
一開始以為 nginx rules 設定錯誤,追一下 CodeIgniter 的 source code 後,發現 CodeIgniter 的程式碼沒有用遞迴或等價方式去搜尋子目錄,再透過相關關鍵字才發現,關於多層子目錄的需求,則只能透過指定 routing 的設定方式進行,但對應到還是一層目錄結構:
例如 hostname/service/dashboard/product 用法:
$ vim application/config/routes.php
$route['service/(:any)/(:any)'] = 'service_$1/$2';
而目錄結構更新為:
application/conotrollers/service_dashboard/product.php
application/conotrollers/service_api/product.php
application/conotrollers/welcome.php
簡言之,就是以 application/controllers 為基準,頂多再加一層 subdir 而已,而想要 uri 有多層的含義,只能自定 route 來達到。
2014年3月16日 星期日
[OSX] Xcode 5.1 - Unused Entity Issue: Unused Variable @ Mac OS X 10.9.2
上次手滑更新 Xcode 後,發現新版 Facebook SDK 3.13 (2014/03/06 15:39:14) 編譯時會出現 Unused Entity Issue: Unused Variable 的錯誤,且看到有人提出了,暫時就先自己處理一下吧 :P
訂閱:
文章 (Atom)