這陣子想要加強英文能力,於是在網路上找了一些軟體輔助,後來找到了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的技巧。
http://nshipster.com/xcode-snippets/
首先Fork https://github.com/mneorr/snippie 到自己的repository,然後
git clone https://github.com/*******/snippie.git xcode-snippets
星號部分請代換成自己的使用者名稱
cd xcode-snippets
bundle install
rake backup
然後Push到github上,這樣就完成初次的備份了。你可以在自己的snippie fork上看到指令列表。
如果之後換新電腦,這些備份的snippet就可以派上用場了。只要把snippet從git上clone下來,然後
rake import
就成功匯入Xcode了
知名的Objective-C開發者Mattt Thompson分享了他的snippet,就用這個來當練習吧。
https://github.com/mattt/Xcode-Snippets
git clone下來之後把全部的.m檔都放到readable_snippets資料夾底下。
但是snippie的rake import只吃.codesnippet檔,所以要先把.m檔轉換成.codesnippet。
好險有熱心網友做了一個ruby script幫助我們做這件事。
https://gist.github.com/subdigital/4463440#file-convert_to_codesnippet-rb
首先把這個gist載到readable_snippets資料夾底下。
然後下指令
find ./*.m -type f -maxdepth 1 -exec ruby ./convert_to_codesnippet.rb {} \;
注意:若有cannot load such file -- nokogiri-plist
的錯誤就是缺少plist gem
必須gem install nokogiri-plist
才能順利執行。
接下來
cp ./*.codesnippet ../backup/
rake import
rm -rf ./*.codesnippet
現在重新打開Xcode,就可以看到新增的snippet囉。 然後再次做備份 rake backup 再上傳到github,就完成這次的匯入工作了。
前一陣子看到罗马尼亚程序员的幸福生活這篇文章,我開始好奇如果台灣iOS開發者選擇出走,到國外是否能獲得更好的生活品質?
在文章裡有提供一個網站numbeo比較城市之間消費與收入訊息。
You would need around 6,038.47
(178,738.69NT ) in San Francisco, CA to maintain the same standard of life that you can have with 83,000.00NT$ in Taipei (assuming you rent in both cities). This calculation uses our Consumer Prices Including Rent Index.
如果要在San Francisco達到在台北有83,000 NTD月薪的生活水準,必須要有6,000 USD的月薪,也就是72,000 USD的年薪。
再看Indeed的資料,iOS developer在San Francisco的平均年薪大約座落在121,000 USD左右,根據網路上找到的加州税后工资与税前收入对照表,稅後收入約84,000 USD。聽起來很美好,但是願意幫忙申請工作簽證的公司似乎不好找就是。
You would need around 3,706.02€ (147,921.12NT) in Amsterdam to maintain the same standard of life that you can have with 83,000.00NT$ in Taipei (assuming you rent in both cities). This calculation uses our Consumer Prices Including Rent Index.
如果要在Amsterdam達到在台北有83,000 NTD月薪的生活水準,必須要有3,700 EUR的月薪,也就是44,400 EUR的年薪,換算成美金大約是59,928 USD。 iOS developer在阿姆斯特丹的平均年薪大概在95,000 USD左右,稅後為55,100 USD。但是從網路上的心得分享來看,在荷蘭的工作較為穩定,加班時數較少。順便附上荷蘭的稅率計算方式
因為我平時會閱讀大量的技術文章與技術書籍,透過e-ink技術,可以模擬出接近紙張的體驗,長時間閱讀時比電腦螢幕或iPad舒服很多。另一個優點就是可以直接買國外電子書,價格比實體書便宜,也不用等書飄洋過海。如果平常需要閱讀大量的文章,買這台絕對值得。關於Kindle Paperwhite對於科技工作者的幫助,可以參考 我是如何使用Kindle, 以及我在使用Kindle過程中學到什麼? 。
請參見日本亞馬遜以及美國亞馬遜Kindle Paperwhite網頁。日本只有無廣告版可以買,但是美版只有2G空間,日版有4G硬碟空間,猜測是日本電子書以漫畫為大宗所以需要較高的容量。
目前台灣可以直接從美國亞馬遜下訂送到台灣來,從Google前幾筆查到的購買網址到了確認地址那個步驟會告訴你不能送到台灣,畫面上方會顯示另外一個購買網址給你,這個就可以正常結帳送到台灣了。購買機子加上保護套以及運費還要先預扣三百多塊的關稅(沒用完會退),整體花費大概在六千多。
Items (2): TWD 5,560.41
Shipping & handling: TWD 837.83
Total before tax: TWD 6,398.24
Estimated tax to be collected: TWD 0.00
Import Fees Deposit TWD 359.74
Order total: TWD 6,757.98
日版於2013/10/22正式販售,而且只送日本國內。有許多人成功透過JShopper或Tenso等業者轉送到海外,之前原本也是考慮走這條路,不過剛好有日本朋友願意鼎力相助,幫我預購以及寄送,我才能在這麼短的時間內拿到我的Kindle Paperwhite,真的十分感謝。
Kindle Paperwhite ¥9980
原廠保護套 ¥3980
EMS運費(2天) ¥1660
合計 ¥15620 大約是台幣47xx吧
箱子
從日本來的
打開長這樣
裡面還有日本的報紙
報紙拿開之後,主角出現了
這是保護套的磁鐵,可以讓外蓋牢牢吸住,另外還有像iPad一樣蓋上即休眠的功能
Kinlde Paperwhite盒子外觀
撕掉這條才能打開盒子
打開囉
說明書
內附一條USB線,可連接電腦充電
保護套的質感很不錯
教你怎麼把Kindle放進去
霧面不容易留指紋
放進保護套
下面有USB插槽以及電源鍵,說明書上寫說插上電腦,按下電源鍵就可以開始使用了
開機讀取中
有很多語言可以選擇,但就是沒有繁體中文,哈哈哈…
那就選個英文吧
再度讀取…
好有震撼力的畫面啊!
要連接WiFi才能繼續哦~
登入帳號
設定好了!
我一設定好之後打開Kindle Store,我的天啊~怎麼會是Amazon.cn呢?這其中一定有什麼誤會。
啊~原來是要去Amazon網頁啦~選Manage Your Kindle
更改Contry Setting
原本是Unknown,把它改成台灣的地址
Kindle按下回到首頁,再進一次Kindle Store,就可以進入美國Kindle Store囉
今天要讓一個舊專案支援Cocoapods,先把project file升級,然後執行
pod setup
修改Podfile
pod install
結果發生error...正當我在考慮怎麼樣把issue內容寫成符合GitHub markdown時,定睛一看
不得不說Cocoapods真的很貼心,你可以發現Error Message都已經幫你寫好markdown格式了
new issue之後直接貼上去就可以了,真是太感動啦~
――― MARKDOWN TEMPLATE ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
### Report
* What did you do?
* What did you expect to happen?
* What happened instead?
### Stack
```
CocoaPods : 0.22.1
Ruby : ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-darwin11.4.2]
RubyGems : 1.8.24
Host : Mac OS X 10.7.5 (11G63)
Xcode : 4.6.3 (4H1503)
Ruby lib dir : /Users/shenkevin/.rvm/rubies/ruby-1.9.3-p327/lib
Repositories : master - https://github.com/CocoaPods/Specs.git @ 90f0243d52ccc1db58f12108fb4a9b9e00cc0a22
```
### Podfile
```ruby
platform : ios
pod 'FPPopover'
```
### Error
下略...
PDDebugger *debugger = [PDDebugger defaultInstance];
[debugger connectToURL:[NSURL URLWithString:@"ws://localhost:9000/device"]];
[debugger enableViewHierarchyDebugging];
[debugger setDisplayedViewAttributeKeyPaths:@[@"frame", @"hidden", @"alpha", @"opaque"]];
開始Debug模式。最近在寫一個Mac OS X App,雛型完成之後還不能馬上放出來。為什麼呢?因為在讀過精實創業之後,我們知道需要設計一些指標追蹤使用者數據,並依此做群組研究。所以這幾天嘗試找了一些市面上有的產品來用,不過很多都是設計給mobile用的,給desktop用的真是少之又少啊。
如果是針對iOS或是Android,Quora上的這篇把一些常見的產品優劣介紹的不錯。
話說回來,那在Mac上的App有什麼產品可以用呢?
Deskmetrics:有SDK直接支援Mac,不過收費似乎不便宜
Usermetrix:提供C/C++支援,調整一下似乎可以整進Xcode
GAJavaScriptTracker:Github上好心人提供的Google Analytics的Objective-C wrapper,可以用Objective-C呼叫Javascript版的Google Analytics
另外偶然發現這個pull request,也許mixpanel可以支援Mac OS X?!