iOS 8 vector UI sample

大概兩個月前,iOS8 正式版剛出的時候,我們知道了出圖可以用向量圖,目前xcode可以吃的向量圖只有pdf一種,所以下面就來示範用pdf出圖跟之前有什麼差別。

我把範例檔放在github

首先你要有個pdf,如果是用sketch的話,export的地方改一下就好了,這份檔案在這裡
然後加入圖片的時候要選說是Vectors,不設的話default是bitmap



來一些數據比較:

一張398*439的圖(我隨便亂畫的),png的大小是178k,輸出成pdf的話則是205k。
看似pdf會比較大,但是不要忘了,一樣長相大小不同的圖可以用pdf一個檔案搞定,png的話要出好多種。

最後來驗證看看是不是真的支援vector UI,我故意把png的大小放得比原圖還大,所以仔細看會看到邊緣有些鋸齒,相反的,左邊的vector不管怎麼放大邊緣都還是很平滑。





How to debug in run script


Answer:use echo!


echo "warning: 開始log"
filePath="$(pwd)"
echo "warning: CURRENT_DIR= $filePath"
echo "warning: PROJECT_DIR= $PROJECT_DIR"
echo "warning: PROJECT_NAME= $PROJECT_NAME"
echo "error: meh"
就會出現這些warning

xcode run script 可以使用的環境變數

    剛剛不小心試出來的,常用的是PROJECT_DIR,PROJECT_NAME 看看現在在哪裡
SDK_NAME用來看現在的device是實機還是模擬器。
下面是所有可以用的variable跟範例值

How to cheat jb detector and detect cheating

這個月的cocoaheads講了一個比較冷僻的題目,這個題目如果平常沒有在做jb防範應該是不會注意到的。我也是剛好前陣子有這個需求,才去找了一下資料,看了一下stackoverflow,發現大部分都是檢查檔案架構,還有url schema呼叫看看有沒有cydia。然後發現xCon這個tweak,看了幾篇文章後,才有後面這一連串檢查,這一串其實是個冤冤相報何時了的概念。

會寫這一篇的出發點,是在第二頁,列出一些app沒有做保護時會洩漏的資訊還有常常使用的攻擊手法。因為我平常都用這些方法在分析競業app,才會想要找一下防範方法。

在第二頁稍微寫的工具還有他們會造成的什麼影響,我故意沒有細講,我想如果想踏入iOS security研究的人,第二頁那邊的工具可以去玩玩看,留給有興趣的人去發掘,算是個出發點,然後有什麼心得可以加我好友一起來討論XD。想直接看答案的人可參考我之前寫的一篇 iOS app security




reference有這幾篇:
IOS Application Security Part 24 – Jailbreak Detection and EvasionxCon
xCon-Issues
iOS安全攻防(二十):越狱检测的攻与防


影片也出來了,這幾個月都在比快的



問題

在QA的時候田單單有問:我寫的那個check method如果被hook了,那不就白保護了。
我當時的回答是可以寫成block,讓他檢查不只做一次。回家的路上想想這樣還是不夠完整,
其實還可以再做三階段的加強:
  • 第一個是寫成inline block,或者是寫成c的function 宣告,這個目的是為了防止class dump,讓他看不到method name,也就不知道要怎麼hook
  • 第二個是把method name變得很長很長,我在sample裡面是取叫isJailBreakCheck,反正objC的method name都是在比長的,寫成isJailBreakCheckIfYouWantToProtectYourApp_ImSwiftSeniorEngineer也是可以,hook的時候打錯一個字就hook不到了,連我自己也覺得這蠻北爛的。
  • 第三個是回傳的比對值千萬不要用boolean,一定要用object,先定義好兩個object代表有jb跟沒有jb,最簡單的作法是用string。複雜一點的話可以再加一些加密解密的檢查。
在看這些文章的時候常常會想這些寫security的人是不是神經病,哪來這麼多攻擊跟偵測方法可以一層層的疊上去,然後文章看多了自己似乎也變得疑心病很重。真是沒事不要做security。

其他收穫

在晚上活動一開始的時候,主持人(David)有讓大家分成幾組自我介紹。每次去聚會都會看到很多熟面孔,但每次也都會一些第一次來的人。在我那組自我介紹的時候,有兩個是學生或剛畢業的新鮮人,其中一個說是老師介紹他來的,所以我們問他

「你老師有來過喔?」
「對啊」

眾人大驚。

從來都不知道有學校老師來過,這實在有點可惜。
沒有辦法促進產學交流,這更可惜。
我跟幾個朋友在聚會結束之後都會去吃宵夜聊天,如果有新朋友想加入的,不要害怕,伸出友誼之手就對了,我們可以告訴你很多工程師升級經驗談。

像這個月是一群人在國父紀念館旁邊的公園看OOBEsuperbil玩ingress打變電箱。



Apple Design Award app簡單分析

透過reveal.app可以很簡單的看到app的view hierachy,跟頁面使用了哪些class item,就這次Apple Design Award得獎作品簡單分析一下,扣掉幾個遊戲我沒什麼興趣以外,我覺得幾個有象徵意義的如下:

Sky Guide
原本以為很炫,打開後發現沒什麼好分析的,主要UI是用OpenGL實作看不到,除此之外只剩幾顆button不值一提。



Yahoo News Digest

身為連續兩年得獎的公司,yahoo 在news digest上面把視差滾動又玩得更上一層樓。
有很多去年得獎作品Yahoo Weather的影子。



Storehouse
滿滿的客製化UI compoment,細節一大推,我心目中的最大獎就是他





iOS8 beta 降級成iOS7步驟

為了測試現在寫的app在iOS8會有什麼問題,把自己的手機升成iOS8,把一些發現的問題都寫完了。大概有用到螢幕旋轉或判斷keyboard size的都會有些問題出來,還遇到AFNetworking在iOS8的會crash的問題。最難過的是一些常用的app都有大大小小的災情:像是skype不能傳訊息,Line進對話視窗會直接crash。

反正該修的都修完了,也該降回來了。以下是降級步驟:


  1. 把iPhone/iPad關機
  2. 打開iTune,連接iPhone/iPad
  3.  按住Home鍵,直到出現連接iTune的畫面為止。
  4. 然後會進入回覆模式,選「回覆與更新」
  5. 開始下載最新版的ipsw,如果你已經有的話可以按住option再按「回覆與更新」
等他跑完一直按下一步就好了。

看device上的SSL連線

前幾天才知道這招是隔壁部門的新人教育訓練之一,雖然工具不太同,不過作法一樣,都是要安裝自己sign過的cert。


我習慣用的工具是Charles,步驟如下:

在還沒有成功以前,Charles雖然可以看基本的http連線,但是沒辦法看到https的內容。



其實只有兩步就可以搞定了,第一步是在手機上安裝charles提供的cert,只要在手機上打開
http://www.charlesproxy.com/assets/legacy-ssl/charles.crt 就可以,然後輸入密碼點安裝就可以了,完成後如下所示


再來到Charles的proxy setting,SSL那欄,Enabled SSL Proxying打勾,下面增加一個要監聽的位置,像我是看所有連線的443 port





再看一次畫面,已經可以看到裡面傳什麼囉。
就是這麼簡單!




coscup 遊記

今年搶票的時候還在國外出差,搶票的時候是凌晨三點,完全忘記要搶票這件事。
就算記得應該也是很難在10秒內點到。

還好今年公司有贊助,分到一張門票,潮爽der。

現在出來的資料大概有這些:

IRC log
hashtag,回味一下當時發了甚麼文章
coscup 共筆
比較熱門的幾個題目都有錄影,好有幾場都在台下聽完,再看一次還是覺得很棒。

題目實在太多了,7軌再會聽最多也只能聽完1/7而已,講一下幾個我聽到覺得蠻有趣的:


Maker精神+大學教室

講者是元智的老師,這場session其實就是講他在課堂中帶學生用Aundrino做了甚麼應用,很有成果展的意味。完完全全就勾起了學生的興趣,期中期末做完學生還要求加碼,到Fab Lab去玩了一下3D printer,我想這場講完,這老師的課應該會變得超難搶的。

The Noto Sans CJK Font and Its Making

全世界第一場講Noto San 字型的session,講製作CJK (殘體、正體中文、日文、韓文)時發生的一些事,當然不能錯過,放棄前一場session先去搶位置果然是對的。幾個有趣的key point:
  • Noto 意思是No Tofu的意思,也就是讓所有字都不會出現方塊字
  • 從2010開始討論,和Adobe的小林劍先生一起設計
  • 製作時盡量符合當地的書寫習慣
  • 之前有許茹芸吃蓋飯的故事,現在有辣妹吃排骨飯的故事
  • 直書時不需要再另外轉換
  • 在教育部的標準字體裡面發現6個錯,已經回報
  • 中文叫做思源黑體,是葉平取的

在豆瓣的这两年 - CODE系统开发之旅

作者是豆瓣前技術總監,看著豆瓣從10幾個工程師到300多個工程師,這場介紹了很多豆瓣公司內的文化,像是新人網頁上面會有自己給自己的標籤,也有別人給你的標籤;自己給的都很正經、別人取的都很惡搞。CODE是豆瓣自己內部用的git平台,約三年前開發,當時因為github還不成熟,gitlab還很難用。所以自己做了一個git平台取叫CODE,一些細節像是非常鼓勵pull request,為了鼓勵大家pull request,做了獎勵機制:如果pull request被接受有merge到master上,加100分,如果給pull request下comment,加5分。然後工程師們就會為了虛無飄渺的分數瘋狂的作pull request,有一句話講得很好「工程師是靠著榮譽感活著的」。

CODE的基本要求是github有的功能CODE都要有,連UI也一模一樣,有個詞叫「像素級拷貝」,有一天github的人到豆瓣交流,完全沒有看出來有甚麼不一樣。看到範例後突然覺得小米、Samsung抄Apple也沒甚麼大不了的 =.=。這場錄影出來一定要再看一遍。

Skymizer 雲端編譯 / Skymizer: Build Software Better and Faster On The Cloud

講者Luba ,這場其實是佈道大會。舉了幾個實作compiler時會遇到的問題,最後介紹公司福利招生。不過講者很有心,特別穿恐龍裝拿一把劍。因為compiler聖經本的封面是騎士屠龍。






重點是Luba跟這次公司派出去的講者長得好像,我在上傳照片的時候facebook還問我要不要tag我同事XD


How KKBOX use mrjob to bring python, hadoop, AWS together

強者我同事,一個白天都在開會晚上才在趕作業的工程師主管。

其實他會寫的我都不會,所以我沒有聽這場XD 只有在公司內預講的時候有聽過,如果跟預講一樣的話這場主要講的是三個東西:
  1. 如何把要算的指標map成程式
  2. 如何reduce運算量
  3. 在AWS開機器的時候,要怎麼開才比較划算
是很實戰的經驗分享,如果有在做big data的人這場一定要聽,我只有在第3點如何選機器那邊比較有聽懂而已,前面兩點都在講語法自動忽略。

以下跟session無關

看上面我跑的議程這麼少就知道我是來交朋友的,COSCUP前一天公司剛好請林義傑來演講,不小心坐在這次公司要派出去的講師旁邊,他很煩擾晚上的講者晚宴要去幹嘛,其他講師沒半個認識的,剛好去年當主持人的時候有去過,也有認識幾個人,就三個人一起去逛一逛。然後吃一吃接通電話就不小心多拿到一張票了XD,還好coscup票還算搶手,馬上就送出去了。

對我來說coscup 根本就是業界八卦交換中心,遇到很多業界友人,聊天都聊到忘記有session,遇到了很久不見的大學同學,人多到可以開小型同學會也是蠻厲害的,雖然都是一樣北爛沒甚麼變。話說ubuntu的名片背面空白這麼多根本就是拿來畫畫的吧。(還有兩張沒入鏡XD)


去了幾年coscup,第一次參加Bof,去了電腦機房大腸花論壇逛一下,聽了很多.....恩,我忘了。感覺也不算是八卦的八卦,應該算是常識吧。

雖然看似做了很多事,但是結束以後一點都不會累。大概是注意力一直有在切換的關係吧,sesion聽膩了就開始寫code,趕場趕到一半遇到朋友聊一聊天就不小心過一個小時,聊膩了再跑回去聽session。累的時候不是要休息,切換模式恢復比較快。









台灣經緯度TWD97

昨天跟朋友去hackthon,做的題目裡面有一關是要做TW97轉WGS84。找了一下資料,有很多朋友都寫過各種語言的轉換function。
至於為什麼要有這麼多格式要轉換我想下面連結裡面隨便點一篇就知道了。

python
經緯度轉換TWD97

C#
WGS84經緯度與TWD97(TM2)投影坐標轉換程式

Ruby的
[Note] 二度分帶座標轉換爲經緯度

可惜我找不到objC版的(連C的也沒有),就順手寫了一個。
在github,寫好後聽朋友說這個寫法只有在本島會準,在蘭嶼澎湖需要再微調。


如何防止class dump

要防的東西分為三類:
  1. class
  2. variable
  3. method
最簡單法,通解,讓別人看不懂這些東西是在幹嘛的,Obfuscating(混淆),把平常口語話看得懂的所有東西混淆成看不懂的亂碼,但是邏輯依然存在,發現邏輯了以後還是可以輕鬆愉快的找出來。



比較正規的作法,根本不要出現:

variable:如果是property,改用@dynamic 而不是@synthesize,@dynamic 意義在於不會建立setter getter 也沒有建立個local variable,也就dump不出來了。可以用method swizzling在拿setter getter的時候轉給其他名字上聯想不到的method處理。

method:有很多種保護法,比如說在runtime的時候才註冊method、
把method寫成INLINE function、或者把method用c寫。


PIXNET Hackathon

以往國內的hackthon大多集中在下半年,上半年比較少。這次看到三月有一個活動,就很高興的找同事報名,因為不期待會有太多同事有興趣,就只問了一兩個....我的原則是不推坑,要推人下去的時候自己也會跳下去。其實我是用心良苦阿!!

剛好pixnet要辦個半天的hackthon,第一次參加這種的剛剛好,傷腦細胞不傷身。

這邊有些會後報導:
推廣開放資料 痞客邦辦黑客松
報導稿:PIXNET Hackathon 2014 Powered by Code for Tomorrow

這次一起去的同事(謝清帆)以前完全沒有去過hckthon的經驗,反正我想這個pixnet hackthon沒有篩選沒有獎品沒有獎金,連時間也只有7個小時,應該快樂寫就好了,所以就沒有特別跟同事討論題目,只要他提出來的就可以,這一個月來我大概每天都會戳他一下:「阿是想好了沒啦!」

一直到兩個禮拜前都還沒有動靜,想說這樣下去可能要開天窗了,就修改別人的code做一個flappy bird的小遊戲,說你再不給我題目我就要demo這個。
於是我這兩個禮拜每天都會聽到「不要阿」「救命阿」「我一定要阻止你」「我快想出來了」這種話。

終於在活動前兩天做出了一頁像是旅遊規劃的東西。那就用這個題目吧!

報到後10分鐘活蹦亂跳的模樣

大概90%的功能都是在當天寫出來的。

我分到的工作是要做旅遊規劃完成後po到網誌上的api,然後試了一下,要用OAuth,大概試了兩個小時,一直鬼打牆,才發現有一堆隱藏的參數散落在教學文件的各角落,要把他們拼在一起才會有正確的回應,然後OAuth給的參數命名跟我之前用的不完全一樣,光是在做文字轉換就花了大量時間。所以大概在下午一點的時候做了兩個決定:
  1. 改spec,改成旅遊規劃儲存在local,所以就不需要po文的功能了
  2. 承上,因為我要做的事突然不用做了。所以
我就自立門戶,把flappy bird 做完整,順勢改名叫pixnet fly
不過時間離demo只剩四小時。能做些什麼呢
大概只做了這些
  1. fork一個別人已經寫好的flappy bird
  2. 加上iOS7才有的TTS(Text to speak)功能
  3. 在第一頁加上了選pixnet使用者的畫面,然後拿大頭照,這也是我唯一串的api
  4. 承上,把拿到的大頭照拿來當flappy bird的鳥
  5. 把背景圖換成活動會場,把gameover的圖換成pixnet的logo


如我所料的寫完以後謝清帆已經虛脫了,才7個小時而已

我絕對不會說他就是KKTIX作者
拍這張照片的時候很囂張的說他今天的工作量就像是重寫了半個KKTIX

demo的時候他雖然發生一些問題,像是雙螢幕設錯、忘記iOS模擬器裡面沒有中文輸入法,用手寫國字花了很久、live demo crash之類的~~
不過我覺得這都是上台經驗不足的關係,多來幾次應該就可以克服了。


要回家吃晚餐前有雜誌編輯來採訪





那篇採訪也出來了,花蓮旅遊規劃那段就是在講他寫的


兩三個月後再來一場吧~~~,下次找有獎金的認真寫,
認真寫不叛逃

PS2:結束隔天就到東京出差,附上一張到剛剛在東京牛角吃到的灑金箔和牛,超好吃的!



open and fire

最近下班後的晚上一直都在看各家公司open出來的資料,上一篇列了幾家music相關平台的,這兩家是video 相關的

hulu,偏向研究報告跟framework介紹。

Netflix,很多活動介紹,比hulu更進一步,因為要講的東西實在太多,所以看到很多篇文章都是講我們辦了什麼主題的活動,有多少人參加。
很懶惰,竟然是用blogspot

相較起來我比較喜歡大陸的作法

相較於HULU跟Netflix單純是商業化副產品的展示區。騰訊對於不同的觀眾有規劃了不同的區域,像是學生、合作業者、競爭對手都有整理好的內容。阿里校園就是專攻校園,由學校為出發點,再對每個主題細分。
阿里開放平台就很普通,給開發商串API的玩意。

對比這四個平台,我看到的是每家公司在對於「open」這件事背後的深度,hulu跟netflix很明顯就是一般的思考:火力展示,也就是標題寫的open and fire,對於一般公司來說,open幾乎就等於炫耀,昭告天下「這就是xx」,從公開的資料可以看得出來這家公司平常是怎樣運作的,工程師面對的文件是怎麼樣的、甚至可以知道這家公司的技術能力到什麼程度。進而洗腦觀眾,認同公司的文化,強化對這家公司的印象,吸引一樣理念的人來投履歷。

相反地,如果東西太爛那還不要拿出來好了,會達到反效果XD
Gracenote那什麼api,爛爆了。如果東西很爛還是不得不拿出來那還是偽裝一下吧,這種東西完全不想用阿。

open的目的

似乎每家科技公司,成長到某種程度後,都會考慮做open data,不管是API/Framework/Library,或者分析報告。在做任何決策的背後都一定有個目的,我猜有這幾種:
  1. 最常見的目的是自己的應用已經做膩了,不知道還能做什麼,open出來讓想玩的人來應用
  2. 寫SDK讓其他合作夥伴串接(這個是為了賺錢而開放,不想討論)
  3. 吸引相同理念的人加入
我只想討論第三種:吸引相同理念的人加入。
作法很多種,最徹底的作法當然是深入校園,但這個成本應該也是最大的,也就是阿里校園的作法:直接以學生為主要觀眾,稍微想一想就可以知道為什麼要這樣做:如果公開出去的資料是連學生都看得懂的話,那一般在業界打混過的人就一定可以看懂,甚至會有種培養我們下一代的崇高使命感。有這種格局的公司,台灣不知道,沒看到哪家公司有這個想法可以想到學生這一層的。

最近也在規劃open data的事,如果可以一開始就看到這件事的影響力,把影響對象延伸到學生族群,那麼這個平台的影響力應該會比平常在conference擺攤兩天還要大很多。

有了open data,接下來要怎麼推廣、怎樣保持open的動力,那就是另一件事了。


music streaming open api

spotify
Rdio
Echo Nest

pandora 找不到,看起來是沒有
KKBOX 沒聽說過有

都要有付費帳號才能申請application key。這幾家台灣目前聽得到的只有spotify,其中spotify跟Rdio都把api寫成framework給iOS和Android用,只有Echo Nest 是用json,用session id來控制播歌權,看他spec更新的頻率,感覺他的client也是用這套api來寫的。

Gracenote的api竟然是用XML,這是什麼歷史共業嗎?


有提供api的幾家樣式都很不一樣,不管是document的格式或者從spec裡面,大概可以看出來每家公司設計的風格。比較起來我比較喜歡Rdio的。


申請apple 企業帳號step by step

最近有朋友的朋友在申請企業帳號卡關,
剛好前陣子有幫公司申請過,以下是我的步驟(比較詳細的版本):

1.查詢DUNS碼
DUNS碼最重要也最難過,不知道自己公司有沒有申請過可以到這邊查詢,找到的話請跳到步驟3,找不到繼續步驟2

找到的話按下那顆就會顯示你們公司的DUNS Number


2.申請DUNS碼
雖然這步驟很奇怪,但是請到apple 提供的DUNS lookup打一遍,申請前要先查詢

之前一篇所說,你可能會遇到這個問題:
如果是偽分公司,像是英屬維京群島商台灣分公司這樣的,千萬不要寫Taiwan Branch,不然會失敗。
原因是apple會請你用母公司的名義去申請,但是母公司就是一家空殼公司,怎麼可能會有辦法申請勒。


解法很簡單,有兩招,一是換一家母公司在台灣的申請,基本條件是在內政部商業司有登記有統編,那就可以了。另一招是就用這個名字跟他拼了,英屬xx公司又怎麼樣,也是有負責人的阿,就用負責人的名字照實填寫,地址也寫國外。

之後你可能會跟apple還有鄧百氏台灣窗口無盡的鬼打牆,電話如上一篇,親愛的同學你一定要有耐心,這步要成功的重點是拿到公司充分的授權。當對方問你:「請問您是否能代表貴公司提出申請呢?」,不要懷疑,apple的客服都外包給大陸,全部都是大陸人了,這個時候大聲的給他回答當然可以就對啦。


3. 申請apple 企業帳號
歷經痛苦的申請鄧百氏碼後,終於可以開始跑要申請的東西了。
apple申請網站開始跑流程了

沒有看錯,一年就是要299

一直填下一步就可以了,其中聯絡地址可以填台灣的沒關係,最後你應該會停在資格審核中的畫面,並且收到這封信:

再來你就等吧....等到apple的客服聯絡你。我上次申請的時候大概是等了3個禮拜,他會打電話到你申請時填的那隻電話,客服都是祖國同胞,所以不用擔心語言不通。

我申請時遇到一個問題,改掉後才讓我申請,就是我的名字申請時是寫Hokila Jan,客服打電話過來說不可以用藝名,一定要用漢語拼音才可以,到Apple ID後台修改就可以了。哼

最後也是最好玩的步驟來了,你要跟客服玩人工NPC的遊戲,他會問你四個問題,通過了以後才讓你申請:

1.請問您是否可以代表您們公司提出申請?
   當然要說可以!!

2.你的Person ID
   寫了這麼一陣子iOS,我聽到這個問題也是楞了一下,我後來才知道是在Member Center,Your Account裡面,似乎要先有一般開發者帳號才會有的樣子,這我不確定。


3. 請問申請這個帳號是用來幹嘛的,會不會拿去上架?
    一定要說是內部測試用的
 
4.請問這個帳號產生的app是給誰使用的
   一定要說是公司內同事使用,不給外人用

以上,有很多問題細節是iOS開發者才知道的,我的建議是授權給公司內的工程師去處理,不要想說給PM或秘書去跑流程,一定申請到天荒地老還出不來的啦。我當時是拿到主管的主管授權後才去申請的,誰在意誰辛苦,我覺得這是最有效率也是最實際的作法。



然後就可以刷卡申請帳號了,任何人的卡都可以,我的作法是先自己刷卡,再填請款單請款。



刷卡完馬上就會收到這封信,拿到帳號後就可以去申請In House的Provision了。


進去後台看到這個畫面就功德圓滿啦,接下來應該就不用再教了吧~~~

白色的力量


聽柯P演講,想不到還有好幾個醫師在各個領域裡面努力。加上以前看到的好幾個醫師,革命好像是醫師的宿命。

楊斯棓醫師的反核演講,雖然網路上可以找到很多批評的文章,但是對照今天的演講,看得出來他都有聽進去,不停在投影片裡面修正。

其實我也覺得楊醫師的演講,技巧大於內容,不過他講得真的很認真,也是我第一個看到這麼年輕台語講得這麼好的,像是裝錯靈魂的說書人,TED上面的演講跟今天聽到的全部都不一樣。




柳林瑋醫師之前參與過公民1985行動聯盟,現在跟g0v合作做出市長、給問嗎,這類公民參與的網站在台灣是第一個,但是美國已經推很久了,美國的watchout上還有「可不可以建死星」、「可不可以把小賈斯丁趕出美國」這些跟政治完全沒有關係的問題。

雖然網站現在掛掉了,但是明天就要重新上線,期待到年底選舉能發揮什麼作用。





回家,想了想今天的收穫,再想了想柯文哲今天的內容有什麼問題。

聽柯文哲演講,大家好像很激動,但是我沒什麼感受。我一直在想:
之前聽過好幾次政治人物演講、也參加過好幾次公民運動遊行,柯P講話的口氣跟我之前聽過其他人的完全不一樣,一般來說講到激動的時候應該會帶動群眾氣氛,來個七言絕句,或說個「對不對」、「好不好」、「是不是」之類的,他上台的時候,完全沒有這類句子。

一開始我看到柯文哲要出來選市長的新聞時,我只覺得他頭腦壞掉了,但是今天聽完,才知道他真的是認真的,他的目標其實不是台北市長、選台北市長只是因為這個職位對台灣的影響很大,他要做的是投影片上面那句「思想、文化、制度變革之公民運動」。



仔細想一下今天的內容,有很多主題都只點出大方向,但是沒有指出解決方案,只有解釋他為什麼要出來選台北市長這個問題,到年底還有非常長的一段時間,他現在的資源看起來也非常匱乏,蠻懷疑他能不能處理好接下來的挑戰的。

慢慢看吧。

jenkins

最近在架jenkins,對於要build哪些東西、怎麼build、什麼時候build、build完要幹嘛,都有蠻多事可以做的,越後端會影響到的人越多,也越來越多細節要處理。

目前做了這些,發現寫一支app起碼要跑2~4支的test process,比我原本想像的還要多
  • iOS  auto build after commit +發佈 +通知
  • data (api)  module hourly test

感謝同事幫忙,遇到的細節記錄一下:

  • 會吃打開jenkins的user的設定檔,也會創一個權限很低的user叫jenkins,設成jenkins(user)登入後自動開jenkins(service)比較方便
  • 乾脆先創一個帳號叫jenkins,把jenkins這個帳號加到root file裡,省下一直sudo的時間 
  • 要把p12和provision加在jenkins user的keychain裡,或者指定keychain path
  • 用XCtest寫的測試一定要用iphone simulator 7.0以上跑,不然會卡住
  • process建置步驟:那個帳號用IDE可以build -> 用command line可以build-> 用那個帳號開的jenkins可以build。其他platform也要照這步驟
接下來然後要努力的方向:
  • UI monkey test
  • UI script test
  • UI 測試報告,自定格式
  • 多機測試
  • 其他平台測試
  • 自幹testflight,or testflight extension
還蠻多事要做的,尤其是自幹testflight,可以拖很多人下水XD




ReactiveCocoa reference

在學ReactiveCocoa的過程中找到的資料

Functional Reactive Programming on iOS
要更深入的話,可以去學lisp scala Haskell 這些functional programming 的語言。

想練習MVVM的話,iOS可以用ReactiveCocoa,朋友說windows phone的話是本來就是那樣寫了,Android還不知道有什麼。

app變身系統

我不懂,這麼簡單又看起來很厲害的一個招式怎麼沒有流行起來。
步驟如下:
  1. 要變身的app叫做app A,利用url schema觸發
  2. 觸發的來源可以是其他app 或者web
  3. app A收到url schema後打開變身flag,改變rootview
  4. 同上,也可以這樣作,app A收到url schema後從裡面的參數知道是哪個來源,給使用者一些獎勵,可以是coupon或者遊戲幣
實際操作起來會像這樣:
情境一:特別節日,使用者點下業者給的連結,會打開app A,看到那個節日才有的佈景主題,或者收到app提供的coupon,時間過了就消失
情境二:app A平常用得好好的,在打開app A的狀況下,在app B 輸入認證,成功後會跳到app A,開始使用兩個app合作提供的功能
情境三 :觸發url schema,進入app A,什麼事都沒發生,但是在後台紀錄點了那個url schema的使用者有哪些,可以帶更多參數,來作廣告追蹤。
這些招式我除了第一個沒用過外,後面兩個都在某些app裡實作過。
第一個情境明明就是看起來最厲害的,app會變身耶,為什麼最少看到,我不懂啊!!!!

開始作乾濕分離

其實已經持續一段時間了,只是最近才開始面對。
一直以來Art都很喜歡推出看起來很厲害的UI,有很多PM+其他team的朋友+路人+隔壁啊罵,看到其他對手,不管是競業還是異業,都會問一句:「我們可不可以改UI」。

以前在接案公司的時候,我甚至還會鼓勵Art PM設計一些希奇古怪的畫面讓我去實作,我以前都覺得刻那些奇怪的效果很好玩。現在也是。

參與過一些多人合作開發時間很長的案子以後才發現,一樣是加新功能or改UI,在一個只有10個頁面的案子中加跟在一個40個頁面的案子裡加,要花的時間是完全不能比的。(雖然聽起來很像是常識,不過真的是痛過才知道QQ)

以我最慘痛的經驗來說,當時負責的是要把一個tableView上面的item從大雜燴一個section變成分好幾個section分類,我當時接到的時候想說,「這個功能應該兩天就作完了吧,改不好今天下班前就可以做好」。

事實上我做了三個禮拜才把它完成,忽略了80%以上沒看到的data handler,幾乎是改寫了底層2 3000行code,而且後續還有很多沒想到的bug,全部解完加起來時間就差不多一個月了。唉,嚴重的時程規劃錯誤。

會發生這種問題,是因為我只看到UI要處理的問題,沒有想到data +api那邊要處理的問題,甚至沒想到兩邊都改變的時候會不會扯出更多問題。

一開始我在寫code的時候,都是用別人寫好的api module,MVC全部寫在一起,後來想到這樣很難reuse,才漸漸的把一些data + api hadler另外寫,有些壞習慣沒有清除乾淨,現在寫prototype的時候一直出現。


晚上看到facebook 最近出的paper,還有長久持續以來的希奇古怪UI 設計,像是Evernote、Yahoo Weather,來自UI的挑戰一定只會更多不會更少。 所以問題就變成:怎麼樣讓每次改UI的時候不那麼痛苦 我也很想知道答案,這些是我大致想到的:
  1. UI 跟data handler要分得乾淨
  2. 用寫SDK的心情來寫data manager
  3. 盡量不要用storyboard,要用也不要在 storyboard上面疊床架構
有道是「過早最佳化是罪惡的淵藪」,第一招UI 跟data handler要分得乾淨是一直都知道但是一直沒作完整的,壞習慣再不清除乾淨以後一定會要人命。

所以要用寫SDK的心情來寫data manager,我心中一直有一個期望,有一天我可以把我負責app的SDK放出去,裡面只有connect跟disconnect兩個method,其他的UI層都不用管,只要呼叫跟釋放就可以用了,剩下的時間,可以讓想接我SDK的人自由發揮其他怪招式,要讓更多人用我SDK的前提一定是要寫得夠簡單。所以這點也是個自我期許。

剩下的是單論UI部分,刻UI是每個client從業人員一定會遇到的課題,不管是web、iOS、Android還是Windows,基本功一定是刻UI,就iOS來說,在創建一個UI的時候,有三種方式:用code寫、xib或storyboard。storyboard在頁面很少功能不多的時候是神兵利器,但是隨著案子慢慢變大,就會發現越來越多的功能需要用xib或code才做得到,再繼續用storyboard只是會越難維護而已,這個時間點因案子跟個人忍受度而異,不過最晚應該不會超過app裡有超過10個view controller才是。


之前在RayWenderlich上面的文章,爭論這三種作法的利弊。
storyboard 的強項是清楚顯示view controller之間的關係,至於view controller裡面的客製化,還是交給xib或直接用code寫吧。


不用logdown的幾個理由

最近logdown很紅,附近有在寫部落格的朋友幾乎都跑去logdown了,
我也申請了一個domain,在 http://end.logdown.com/

之前把blogspot的文章都匯進去,的確排版變好看,寫新聞張的時候也很簡單,很直覺很好用。

但是這些我需要的功能都沒有,像是:

  • 文章瀏覽數,造訪人數追蹤
  • widget
  • 側邊欄展開/縮小 整個月的文章
這幾點解決的話應該就會跳過去了

Rayark Live Concert 2013

前陣子去了雷亞今年的音樂會,去年不是很期待遊戲app的演唱會,只有在家裡看轉播,看了才發現超有趣的阿。今年完全不用想,剛發售就買下去啦~



今年跟巴哈姆特合作轉播,最高1080P,如果看過去年的錄影就可以發現演唱會品質大幅。

站在一個玩家的角度

當然是要現場聽過一次、回家以後再看好幾次阿,像我現在就是邊看replay邊打網誌。一邊看一邊回想起當天的心情,真是享受。遊戲裡面歌那麼多,我也不是每首都喜歡,大概只有4~8首是很期待聽現場的,當然如果能再聽到remix就更好了。看到平常遊戲裡面的音樂一首一首出現,看到編曲者or演唱者本人,大部分的想法是:「原來他就是作者喔」,然後就會重新想起遊戲畫面,腦海中自動出現手指在滑滑滑。當然有幾個會出現「甚麼,他竟然是作者」這種驚訝,不過聽到歌以後就無感了。

演唱會把音樂遊戲的黏滯性又更提升了。回家以後,把遊戲當作原聲帶播放器一樣,重聽了大部分的歌,也才發現有很多樂師在今年的音樂會還沒出現,明年或許吧?

站在一個app開發者的角度

我不是要講程式寫得不好,怎麼破解cytus和deemo的IAP之類的。那不是重點,身為一個app開發者,也接觸了很多跟我一樣的開發者,大家都知道一款app要獲利,比例小到要哭出來,我記得好像是2%還是5%,不過同時也要知道有6成以上的app都是不再更新被開發者放棄了。

在做app的時候,不,應該是說在設計任何東西的時候,都必須讓使用者跟現實生活做連結,如果我們只有想到在螢幕範圍內的應用,那其實是個失敗的app。我覺得我去的不只是一場音樂會,而是一個app走出螢幕外,連結現實生活的一個優良範例。

接下來

我在玩cytus的時候,一直覺得很可惜的是這遊戲的社群互動太少了,只有分享分數到facebok或twitter的功能而已。應該要做個對戰或者排行榜之類的。IAP也還蠻佛心的,只有做買歌的功能,沒有做買特殊背景,特殊音色的選項。

之前也做過兩個音樂遊戲app,也蒐集了市面上大部分音樂遊戲的資料來發想。當時我就覺得cytus應該會出一個鋼琴或交響樂的章節,沒想到後來變成另一個遊戲Deemo ,我想應該是因為cytus的玩法跟鋼琴完全不一樣的關係,交響樂的話其實就還蠻適合放在cytus裡面的,如果是電子或金屬的話那還是不要放的好。

在音樂會的中間有播放cytus 5.0,還有另一個交響樂遊戲的預告。還蠻期待的,雷亞最近推出的作品,很多細節都處理得很精緻,不會躁進的推出,要寫一個新作品很容易、要一直推出讓玩家驚豔的作品很難。看到這等級的預告,等新遊戲出來一定會支持的。