1. wwdc 比較貴
2. google是凱子爹,會給禮物
3. io找的到貼紙
4. wwdc 到哪都排隊,而且要提早排,連lab也在排!io看主題熱不熱門
5. io有一堆sandbox攤位,wwdc有一堆lab
6. wwdc 中場休息時間比較長
7. wwdc每層樓都有午餐可以拿,Google io得走到一樓
8. wwdc餐點飲料比較健康點,但io的比較好吃一點
9. wwdc不會有android!
10. wwdc到處可以看到一堆mac,google io上,到處也是一堆mac,差別的是wwdc上看到的mac比較少人有貼貼紙


wwdc day 2 - 真的都得提早半個小時來排隊,ㄧ不小心就長長的人龍了,真是恐怖,Google IO大概只有非常熱門的才會這樣,參加這種developer conference 最大的好處是,吸收到的能量都很正向,常常看到很多很開心的到處跟人聊天介紹自己做的東西,交換心得和技術,看到一堆happy developers是很開心的事,大家似乎對自己身為developer都很驕傲呀!

到美國買Amazon上的東西, 除了寄到旅館外, 還有Amazon Locker 這個好東西, 它是一個Amazon放在某地方的置物櫃, 你可以把東西寄到那邊, 再到那邊領取, 對於沒有美國住址的人, 還算蠻方便的

首先你需要挑一個你方便領取的Locker把地址設成那邊:

像我設定這家就在一家7-11裡面, 像是這樣:

當貨品送到後, 你會收到一封e-mail, 裡面有開鎖密碼, 到那個螢幕上, 輸入這個密碼, 就會有某個門開起來了, 你的商品就是在裡面:


不過它也是有限制的, 只有直接從Amazon發貨的東西才能夠寄到這邊, 另外, 兩天內就必須取走, 所以要算好時間喔

基本上, 應該不算完全完成, 所以還沒打算真正的寫README, 不過實際上看起來應該是有點效果了

https://github.com/julianshen/SWPalette

這個lib主要是由Android support lib v7 那邊porting過來的, 它應該是屬於material design設計上的一個元素, 關於Android版本的Palette可以參考:

https://developer.android.com/reference/android/support/v7/graphics/Palette.html https://www.bignerdranch.com/blog/extracting-colors-to-a-palette-with-android-lollipop/ http://baoyz.com/android/2014/10/21/android-palette-use/

它的用途就是從Image裡面取得一些顏色, 讓你融入UI配色之中, 不過現在也好像沒看到幾個Android app目前有用這個設計, 它原理也不難, 就是做historgram quantization 而已, 我一開始照著原本的邏輯照po並不是用同樣的演算法重寫, 導致需要花很多時間debug, 到目前應該也還有很多bug, 不過主要的目的是練習Swift, 想說從一個很熟悉的語言的東西出發用新的東西來改寫可能更容易上手, 還蠻有趣的就是Swift一些語言上的特性, 讓一些地方簡化了不少 以下是目前的結果(有請Lena小姐示範一下):

Imgur

API基本上跟原本差不多, 分sync (swp_generatePalette)跟async (swp_generatePaletteAsync)兩種型態, 只是把method附掛到UIImage:

let p = image.swp_generatePalette(maxColors: 32)
        
if let s = p.lightMutedSwatch {
   self.textView?.textColor = s.bodyTextColor
   self.textView?.backgroundColor = s.color
}

目前產生的結果可能跟Android版本的結果會有落差, 可能還需要很用力的debug吧….

在寫我的週末習作時, 為了抓取bitmap上所有的pixels時, 碰到這問題, 找了整個晚上才找到答案

首先, 要抓取bitmap上所有的pixel必須要使用到CoreGraphics裡的CGBitmapContextGetData, 想當然爾, 這是老舊的API, C API, 那用Swift可以去取用嗎? 參照Interacting with C APIs 這篇裡面有相關的Swift與C之間的對照

回到取pixels這目的, 我希望取到的值是一個整數陣列, 精確來說是[UInt32]的陣列, 但CGBitmapContextGetData回傳的是什麼呢? 查文件可知是UnsafeMutablePointer<Void> ,依照上面的文件來說, 對照到C則是"void *“, 文件裡面有提到:

When a function is declared as taking an UnsafeMutablePointer<Void> argument, it can accept the same operands as UnsafeMutablePointer<Type> for any type Type.

意思就是, 它也可以是整數陣列指標, 但, 怎麼轉回去呢? 這就是讓我整個晚上超崩潰的, 幹, 這文件沒寫!

搞半天, 才終於讓我找到答案:

let data = CGBitmapContextGetData(context)
    
let intData = UnsafeMutablePointer<UInt32>(data)
let intArray = Array(UnsafeBufferPointer(start: intData, count: bitmapByteCount))

原來必須先把它轉型成UnsafeMutablePointer<UInt32>, 然後再用UnsafeBufferPointer轉存到實際的陣列中(因為UnsafeBufferPointer是SequenceType, 才可以轉成Array), 當然也要給它陣列大小

但實際上這樣做對不對, 安不安全…還不知道, 找到答案寫下來先