2015年4月15日 星期三

Multiple SSH keys on your computer

平常用慣了Git來管理程式, 但是
公司跟個人的開發環境應該分清楚一點比較好.

例如說我平常自己個人在github或是bitbucket上開發
一開始會follow教學, 先產生SSH key
cd ~/.ssh
ssh-keygen -t rsa -C "user_name@whatever.com"

然後copy 公鑰id_rsa.pub到server上, 像是:
pbcopy < ~/.ssh/id_rsa.pub
或是手動複製
cat ~/.ssh/id_rsa.pub

但是要新增另外一把SSH key在同一台機器上, 可以使用下面的方法:
ssh-keygen -t rsa -f ~/.ssh/accountB -C "user_name@whatever.com"

然後新增並編輯config:
touch ~/.ssh/config
vi config

config內容大概長得像這樣:
Host bitbucket.org
User git
Hostname bitbucket.org
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa

Host bitbucket-accountB
User git
Hostname bitbucket.org
PreferredAuthentications publickey
IdentitiesOnly yes
IdentityFile ~/.ssh/accountB

如果SSH遇到connection refused很可能是因為拿了錯的key去連.
這時我們需要指定SSH連線用的key:
ssh -vv -i ~/.ssh/accountB -p port username@server.com
-vv:如果有permission denied的話要加
-i ~/.ssh/accountB:指定SSH key的位置
-p:不指定通常是22 port

如果要操作git的話:
git clone git@bitbucket-accountB:username/project.git

還有還有,
要有多個git username以及email的話
在各個repo底下去設定:
git config user.name "your name"
git config user.email "your@email.com"

參考連結:
Evernote helps you remember everything and get organized effortlessly. Download Evernote.

2015年4月8日 星期三

VirtualBox設定Windows vm的網路

環境
host: Mac OS X 10.9.5
vm: Windows XP 32 bit

1. 設定網路
選擇NAT, 介面卡選Intel PRO/1000 MT Desktop這個, 然後按確定


2. 設定分享資料夾
指定分享的資料夾路徑, 確認Auto mount有勾選, 然後按確定.

有興趣可以參考youtube的教學, 到此為止應該都還順利,
但是教學影片中的作者電腦已經出現"網路磁碟機"(Network Drives).
我花了n個小時看了各種介紹, 有些要用cmd, 有些教說要新增"網路磁碟機", 但是都沒用!!!

3. NOTE! 非常重要的一步!
切換到windows vm畫面, 選擇視窗最上方一排Devices > Insert Guest Additions CD image…

安裝完一切都ok了!
快去看看"網路磁碟"終於出現啦.

那接下來才能把剛剛Intel官網下載的驅動程式給copy到桌面,並加以安裝.

呼~希望我浪費的時間, 可以省下你寶貴的時間, 嗚嗚...
Evernote helps you remember everything and get organized effortlessly. Download Evernote.

2015年4月7日 星期二

Android Studio使用Cling library顯示支援UPnP的裝置


Cling介紹
Cling的四大模組:
Cling Core
實作UPnP 1.0協議, 可以在網路上宣告其服務, 也可用來寫一個control point尋找附近的UPnP裝置並使用其服務. 值得注意的是, Cling 2.x 要求API 15以上, 舊版Cling 1.x 才支援更舊的OS版本.

Cling Support
擴展UPnP服務的模組, 像是media server, renderer, 或是NAT port mapping等等.

Cling Workbench
是一個for桌機的應用程式

Cling MediaRenderer
基於gstreamer的一個獨立的UPnP MediaRenderer.

我們只要list出附近有支援UPnP的裝置,
所以只會用到Cling Core的部分
source code可以參考Github的連結


gradle file裡設定"repositories"跟"dependencies"
可以參考Github上的文件說明

repositories {
     mavenCentral()
     maven {
          url "http://4thline.org/m2"
     }
}

dependencies {
     // Cling
     compile group: 'org.fourthline.cling', name: 'cling-core', version:'2.0.1'
     compile group: 'org.eclipse.jetty', name: 'jetty-server', version:'8.1.12.v20130726'
     compile group: 'org.eclipse.jetty', name: 'jetty-servlet', version:'8.1.12.v20130726'
     compile group: 'org.eclipse.jetty', name: 'jetty-client', version:'8.1.12.v20130726'
}



AndroidManifest.xml的設定
1. 要加入使用權限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

2. 聲明我們所使用的service 
<application
     ...
     <service android:name="org.fourthline.cling.android.AndroidUpnpServiceImpl" />
     <service android:name="com.wistron.wimira.testcling.BrowserUpnpService" />
</application>

source code import進來, 上述檔案設定完後, project應該就可以正常build了!
Evernote helps you remember everything and get organized effortlessly. Download Evernote.

2014年7月11日 星期五

[Android] 使用UIL套件並將網路資源儲存在手機端

來源:eleZeta@flickr, CC BY-ND 2.0

前言
Android的開發者一定都知道Universal Image Loader (UIL)套件
也一定知道套件初始化的一些基本設置

1
2
3
4
5
 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
                .discCacheExtraOptions(800, 800, CompressFormat.JPEG, 25, null)
                              .memoryCache(new WeakMemoryCache())
                              .threadPoolSize(5)
                              .build();

我這邊將預設圖片的長寬範圍在800x800以內, 壓縮率取到25%, 依據不同使用情況會有不同的設定.


問題
這樣子的設定並無法讓網路資源保存在手機上,
也就是說當app被關閉, 下次再開啟時又要再跟server要一次了.
如果這份資源不會有所變動,  我們又想節省server的負載以及手機的網路使用流量.
那就要考慮這樣的實作了.


實作
剛剛的config我們再增加一個discCache的設定
1
.discCache(new FileCountLimitedDiscCache(cacheDir, new Md5FileNameGenerator(), 500))

參數有cache路徑, file name, 以及cache資源的上限, 這裡設定500個項目.

好吧, 那cacheDir又要如何取得呢?
作者nostra13在github上有提到 (討論串)

1
2
3
4
5
6
7
8
9
File cacheDir;
if (Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
    // 偵測有SD卡
    cacheDir = new File(Environment.getExternalStorageDirectory(), "data/someapp/cache");
} else {
    // 偵測沒SD卡
    cacheDir = context.getCacheDir();
}
cacheDir.mkdirs();

在Activity中有 getFileDir() 和 getCacheDir() 這兩個方法
可以取得目前app在手機裡儲存空間的預設文件路徑
getFileDir() 對應到 /data/data/appname/files
getCacheDir() 對應到 /data/data/appname/cache

Returns the absolute path to the application specific cache directory on the filesystem. 
These files will be ones that get deleted first when the device runs low on storage
There is no guarantee when these files will be deleted. 
Note: you should not rely on the system deleting these files for you; 
you should always have a reasonable maximum, such as 1 MB, 
for the amount of space you consume with cache files, and prune those files when exceeding that space.

官方文件對 getCacheDir() 的使用也有溫馨的提醒
除存在cache的資料會在系統偵測空間不足時首先被移除,
所以系統不保證什麼時候會做刪除動作, 開發者也不應該依賴這個機制.
而是應該設置個合理的cache上限, 然後在超過時進行資料刪減的動作.

當然也要記得在project的Manifest檔裡面設定SD卡的存取權限
<!-- if you want to allow UIL to cache images on SD card -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Evernote helps you remember everything and get organized effortlessly. Download Evernote.

[Android] google-play-services_lib 的小問題

在Android的開發環境中, 設定google-play-service的library是滿稀鬆平常的事情.
不過我後來發現, 常常在Android SDK Manager做了update後, 這error又出現了!



如果又遇到Unable to resolve target 'android-x' (無論是8還是9還是什麼鬼數字)
不妨先將google-play-services的專案移除, 並重新import.
然後進入project的properties選單, 確認一下project build target跟我們自己的專案是不是有一樣!


我的專案使用的API level是14, 重新勾選後就正常啦!
Evernote helps you remember everything and get organized effortlessly. Download Evernote.

2014年7月10日 星期四

iOS7 UITableViewCell 分隔線偏移的問題

前言
除了先前文章提到過iOS7 的UITableViewCell如果想讓image貼齊靠左的技巧.
還有分隔線啦!


問題
我想這直接看圖片是再清楚不過了!



實作

1
2
if ([tableView respondsToSelector:@selector(setSeparatorInset:)])
    [tableView setSeparatorInset:UIEdgeInsetsZero];

夠簡單了吧 ;)
Evernote helps you remember everything and get organized effortlessly. Download Evernote.

救命的一行文 - MAC OS X使用Wireshark卻發現Interface找不到

在MAC OS X上想要使用Wireshark一定要有X11的環境,
可惜從Mountain Lion開始就被Apple給移除了.
因此要下載XQuartz來解決, 官方網站

不知打哪個版本開始, Wireshark只有user權限,
所以無法直接去選擇我們想要攔截的interface.
所以現在請打開command line, 並輸入
sudo chown  /dev/bpf*
這樣就會有權限可以選interface囉!

參考連結:justincarmony

內容回應