前天要上去自己的EC2上的某台機器,
但發現access key 放在另一台筆電上,剛好那台筆電在公司......
又有急切需求要上去看一些config,
偏偏EC2的access key只能被download一次 (就是一開始建立intance的時候)
所以當下我根本無法上到我的機器看!
只好把目前的instance 複製一份image出來,
然後在利用那份image建立一個新的instance!
利用這個方法來取得新key,又可以存取到一模一樣設定的機器!
操作如下!
1. 首先先把自己的正在running的instance stop!
接著點選該instance -> 點選menu bar上的Instance actions -> 選擇Create Image
如下圖所示
2. 填寫Image名稱 - >點選Yes, Create
如下圖
3. 完成上述步驟以後,就複製完成了!
接著就要建立一個新的instance!
這邊的流程跟建立一般的instance沒什麼不同!
只不過要選擇自己複製好的image,如下圖所示.
4. 到了Create Key Pair這步驟以後,記得建立一個新的Key Pair!
不要使用舊的key pair! (因為沒辦法下載了!)
所以要選擇建立新的,就可以下載這支新的key!
如下圖所示!
完成上述步驟就有一台和先前舊的那台一模一樣的機器了!
恩,最近在寫Objective-C,
遇到了memory的一些問題,
也好險我有個好mentor可以問!
從Java跳過來這讓我有點點小混淆!
還記得我先前講過
Java複製物件的問題嗎?
在Java中直接將instance化的物件,直接給予另一個物件!
這樣的情形中,這兩個物件是指向同個物件的!
假設我有兩個物件,分別為A、B!
如果A裡面的attribute變了!那麼B也會變!
當然這樣的情形在Objective C也是一樣的!
但是Objective C有個method,就是retain!
還有一個特殊的機制叫做reference counting
retain也是把原本的物件給另一個物件!
這兩個物件也是指向同一個物件!
而reference counting就是當這個物件被copy或者retain時,
他的reference count都會加1!
(retain 是原有物件會+1,copy是新的物件+1,copy就類似java的clone)
但我一開始遇到了一個寫法上的confused,一開始一直在想這兩種差別!
code如下
Book *b1 = [[Book alloc]init]; // retain count=1沒問題
Book *b2 = b1; // retain count還是1,這我大概理解,就是把b2指向b1
Book *b3 = [b1 retain]; // retain count變2
[b1 setVal:20]; // 如果把b1物件中的value設值20,b2, b3也都會變
這時候如果把b2, b3的Val都印出來,也都會是20!
那麼我就在思考了這兩種的差異!
最後也大概知道了!
因為b2和b1算是共享同個物件!
如果這時候developer把[b1 release]掉!
b2也不能使用了!!
很容易發生bad access的問題!
所以大部份時候都要使用retain來進行物件的存取!(目前還想不到使用b2的方法用途)
以避免原有物件被release出來以後,現有的新物件才不會crash掉!
最近剛拿到了mba, 開始在進行ios & mac的study!
所以一定要用到xcode!
xcode真的是蠻強大的,像是analysis memory leak的工具!
但一直用習慣eclipse的我,還是有點點小小不習慣,
例如在eclispe可以刪除目前游標所在的一整行或者是複製一整行!
在eclispe可以透過hot key去操作!很方便! 在Eclipse裡面就有這些選項可以讓開發者設定!
但是在Xcode沒有預設的hot key可以“直接”做到!
得透過一連串的hot key去做到,例如先按下cmd+d -> cmd+x (隨便舉例的)
簡單的說無法透過一個步驟就去做到(例如cmd+d)
但好險我們可以自行設定一個combine的組合鍵來完成上述的動作!
首先先開啓terminal!
然後切換到下面的目錄
cd /Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/
然後可以下ls -al看一下該目錄底下的目錄結構,
你會看到如下圖的結構!
你會發現有兩個Link指向Versions這個資料夾!
你的資料夾的權限應該是r--r--r--x!
只有讀的權限!
但我們等等要修改該目錄底下的檔案,所以先把權限設777吧!
指令如下:
chmod 777 Versions
改變以後我們在進到裡面的目錄!
如下:
cd ./Current/Resources
然後Xcode的預設key binding設定檔就在該目錄底下
接著就用vim去修改設定檔案吧!
sudo vim ./IDETextKeyBindingSet.plist
打開以後會看到一大串的xml格式,基本上只要在下面dist中間加入入即可!
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
</dict>
</plist>
所以加入以後,就會變成下面的樣子!
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<dict>
<key>DeleteCurrentLine</key>
<string>moveToBeginningOfLine:, deleteToEndOfLine:</string>
</dict>
</dict>
</plist>
這個例子是刪除目前游標行,
裡面就是這個指令的名稱 (別亂取,待會 要在Xcode裡面進行這個指令的快捷鍵)
裡面就是這個指令的一連串指令,我們可以看到有下面兩個
- moveToBeginningOfLine(意思是移到這行的最前面)
- deleteToEndOfLine(意思是從游標位置開始刪除,刪除到這行的最後面)
透過上述的指令就可以進行刪除一整行,
接著就打開Xcode吧!
1) 先進到Preferences裡面!
2) 選擇Key Binding!
3) 然後在搜尋筐中輸入你剛剛上面xml檔案中填入的key名稱
4) 基本上你就可以找到你剛剛設定的檔案!就可以修改他的快捷鍵了!像下圖的案例就是以cmd+d來進行刪除一整行