這陣子想要加強英文能力,於是在網路上找了一些軟體輔助,後來找到了Anki這套軟體。這是一套用單字卡輔助記憶單字的軟體,可以紀錄學習狀況,達成更有效率的學習,可以在看一下別人寫的Anki簡介。另外已經有人整理好極品GRE紅寶書(繁體中文)+聲音檔這一份資料,只要下載並import進anki就不用煩惱如何自行加入卡片或是設定英文發音等細節了。最後附上Anki的Github網址,原來Anki是用python寫的啊…
這陣子想要加強英文能力,於是在網路上找了一些軟體輔助,後來找到了Anki這套軟體。這是一套用單字卡輔助記憶單字的軟體,可以紀錄學習狀況,達成更有效率的學習,可以在看一下別人寫的Anki簡介。另外已經有人整理好極品GRE紅寶書(繁體中文)+聲音檔這一份資料,只要下載並import進anki就不用煩惱如何自行加入卡片或是設定英文發音等細節了。最後附上Anki的Github網址,原來Anki是用python寫的啊…
有道词典Mac版 http://cidian.youdao.com/mac.html
裝了之後還不能在chrome選詞翻譯,要再加裝有道词典的chrome plugin,plugin從這裏下載。
裝好plugin之後,打開有道词典Mac版,重新開啟chrome,圈選單字就會出現翻譯了。
主要參考這篇讓編輯器支持 Go 語言。
需要下載帶有vim7.4版以上的MacVim。MacVim不是使用$PATH,而是使用/usr/libexec/path_helper,參考记录遇到的零碎问题。
在etc/paths.d
下面新增一個go檔案,內容為/usr/local/go/bin
。
裝Vundle https://github.com/gmarik/vundle
如果是MacOS在裝vim-gocode前需要先brew install coreutils
裝vim-gocode https://github.com/Blackrush/vim-gocode
在vim裡下:BundleInstall
更多資訊可以參考hSATAC的 Golang Vim 配置
Cocoa Samurai的 Singletons: You’re doing them wrong 這篇文章提到了一種良好的singleton建構方式。
+(MyClass *)sharedInstance {
static dispatch_once_t pred;
static MyClass *shared = nil;
dispatch_once(&pred, ^{
shared = [[MyClass alloc] init];
});
return shared;
}
這個寫法的優點有三
1. 在整個app生命週期裡只會被執行一次
2. thread safe
3. 比用@synchronize()快
現在想像有一個class用到了這個singleton,而當我們要對這個class做unit test,測試是否如我們預期般運作的時候問題就來了。在做unit test的時候,受測物件必須隔離與其他物件的相依性,否則就變成integration test了。我們通常會用mock達成這個目的。
例如我們有下面這段code
- (void)doSomething
{
[[ArticleManager sharedInstance] doSomethingElse];
...
}
顯然的,它只會取得唯一存在的instance,沒有讓你mock的機會。這時可以採用 Objective-C Singleton Pattern Updated For Testability 這篇文章提到的方法,把singleton做一點變形。
@implementation ArticleManager
static ArticleManager *_sharedInstance = nil;
static dispatch_once_t once_token = 0;
+(instancetype)sharedInstance {
dispatch_once(&once_token, ^{
if (_sharedInstance == nil) {
_sharedInstance = [[ArticleManager alloc] init];
}
});
return _sharedInstance;
}
+(void)setSharedInstance:(ArticleManager *)instance {
once_token = 0; // resets the once_token so dispatch_once will run again
_sharedInstance = instance;
}
@end
在做測試的時候
id mockManager = [OCMockObject mockForClass:[ArticleManager class]];
[ArticleManager setSharedInstance:mockManager]; //把instance換成我們的mock
/*
在這裡做測試
*/
[ArticleManager setSharedInstance:nil]; //還原
這樣就可以使用自己的mock了。
這是從Github explore上面發現的project,入門教學在https://medium.com/p/20c82a904164。
主要目的是讓designer不寫code就可以做出動畫效果,只要在storyboard裡面對UIView設定幾個runtime attribute就搞定了。
背後的開發者是Meng To以及Jamz Tang。Meng To的個人網站非常值得一看,從中可以學習到很多UX的技巧。