在前往日本留學的路上 part 3 – 線上報名繳費

Image Credit

書面資料交出去之後,接下來就要交報名費(20000 + 2500 yen)給學校,這個時候就要登入https://www3.univ-jp.com/ 這個線上網站來繳費,接下來就記錄一下整個註冊/繳費的流程還有一些要注意的事情。

 

登入網站

螢幕快照 2017-09-10 下午7.51.48.png

2

3

看起來應該是很多學校都用這個系統來處理註冊/繳費的事情,所以點進去之後會同時看到很多個學校也在「受付中」,像關大就有三、四個,記得選「関西大学(留学生別科)」別選錯!然後就開始瘋狂的下一步。

4

5

因為關大有「春學期」還有「秋學期」兩個時期,所以別選錯入學時間!

6

7

然後接下來要註冊一個個人的帳號,之後有需要的話還可以再登入進來看資料,所以要認真打別打錯 XD。

8

這邊比較麻煩的就是個人姓名的假名拼音,因為各個線上網站翻譯的結果可能不一樣,所以這邊記得寫和書面申請資料一樣的假名拼音!其他的就是個人的基本資訊~

9

10

全部確認之後就是準備來繳錢了,這邊要注意的地方就是學校有提供「日本國內外匯款」還有「線上刷信用卡」兩個方法。不過對我來說去銀行匯款還蠻麻煩的,又要填單又要排隊,真心推薦大家直接線上刷下去就好了,方便又簡單!

11

12

13

14

15

最後點那個付費證明的按鈕之後就可以拿到這個付費證明的檔案!大家就記得把他印出來剪下去再貼在書面資料上就大功告成了!

16

大概就是這樣,只要沒手殘打錯字順順的一個一個填就可以搞定線上報名系統來繳費啦,基本上應該是不會有什麼太大的問題才對!記錄一下供大家參考參考 😛

P.S. 如果對我在櫻花國的生活感興趣的話,也不妨看看一下我有在持續更新的社交平台 FacebookYouTubeInstagram!有任何問題或是想要討論的東西也歡迎直接留言給我一起討論 😛

 

在前往日本留學的路上 part 2 – 準備申請資料

Image Credit

在決定要去讀「關西大學別科」之後,我就開始準備申請時需要的各種文件,細節可以參考下面的連結:

http://www.kansai-u.ac.jp/ku-jpn/b5/about/download/index.html

準備的資料

以我申請關大別科為例,我個人最後準備了以下這些文件:

  1. 入學志願書(四張)
  2. 學歷相關證明(三張)
    2.1 大學的畢業證明書
    2.2 大學的畢業證書影本(彩色)
    2.3 大學的歷年成績單
  3. 日語能力認定書
  4. 留學生別科入學志願理由書和別科結業後的預定說明書
  5. 護照影本
  6. 個人照片6張
  7. 「入學考報名費匯款憑證」粘貼紙
  8. 經費支付相關資料
    8.1 經費支付證明・保證書
    8.2 存款餘額證明
    8.3 在職證明【請看 9.4、9.5】
    8.4 年收入證明或所得證明
    8.5 報名者與保證人(經費支付者)關係之證明文件【請看 9.3】
    8.6 如果支付經費的人是自己的話,還要另外付上「保證書」
  9. 其他(以我個人為例)
    9.1 TOEIC 成績單彩色影本
    9.2 JLPT 成績單彩色影本
    9.2 日本出入境紀錄證明
    9.3 英文戶籍騰本
    9.4 營利事業登記證中文影本(加翻譯社的英文版翻譯並蓋上社章)
    9.5 營利事業所得稅稅單中文影本(加翻譯社的英文版翻譯並蓋上社章)

沒錯就是這麼多!!!沒想到申請個學校竟然要這麼多資料,而沒有代辦的下場就是什麼都要自己來(慘)這中間有太多太多要注意的事情,寫下來希望可以幫助到有需要的大家。

入學志願書(四張)

這四張基本上都是要填個人資料,所以應該是沒什麼太大問題,不過有幾個小地方要注意的是:

  1. カタカナ:這裡要寫的是「用日文片假名表記的中文姓名」,雖然網路上有很多類似的轉換工具,不過我發現和我最終從日文老師那邊得到的拼法都不太一樣,所以為了保險起見,可以先用工具翻好之後再拿去和日文老師比對一下會比較好!
  2. 日本語學習經歷:因為我有去東吳還有師大的進修推廣部上課,所以我這邊的學經歷是寫我在這兩個地方上課的時數,大概算一下就好。
  3. 英語學習經歷:因為我們從國小/國中就開始有英文課,所以我的學習年數就從那個時候開始推個大概,寫 16 年這樣。然後也因為有考過 TOEIC,所以我有寫上當時考試的分數。(記得要附上你的成績單證明影本)

學歷相關證明

這邊有個很迂迴的地方就是,「畢業證明書」和「畢業證書」是不一樣的東西!我也是從學校網站上申請英文文件的時候才發現這兩個是不同的,前者比較像是用來證明『你有畢業』這個事實,而後者則是證明『你有拿到這個學位』。

上面是我個人對這兩個文件的解釋,畢竟我從以前都只知道「畢業證書」這個東西,也是第一次聽到還要另外申請「畢業證明書」。不過不管怎樣,這些應該都可以在學校的網站上申請到, 只要記得這兩個是不一樣的東西就好!

日語能力認定書

demo1

這個認定書是申請資料裡面蠻特別的一樣,因為這張表不能自己填!!表的最前面有講到,這張表是要「具有日文教學資格的人」才能填,在某個程度上,它等於是要求你需要有日文的底子才可以申請學校,而且是要有一定學習時數才可以!!

還好我有在東吳、師大進修推廣部持續上了兩年多的日文,所以我就各請一位老師幫我寫一張認定書,總共交了兩張上去。

P.S. 如果是自學的同學,不知道會不會被這張表影響到…因為這張表是必填資料的其中一項就是了。

留學生別科入學志願理由書和別科結業後的預定說明書

demo2

這張就是寫你為什麼想要來這間學校留學,是有什麼動機或是原因,然後結業後有沒有打算要在原學校繼續升學或是有什麼其他打算。

依照我在網路上爬文後的結果指出,這邊寫的內容有可能之後在 Skype 面談的時候會是聊天的內容之一,如果日文不好的人(像我一樣),就盡量寫簡單一點不要太浮誇,要不然被問到答不出來就慘了 xD。

「入學考報名費匯款憑證」粘貼紙

demo3

依我了解,這裡就是要交報名費的部份,因為我是透過 https://www3.univ-jp.com/ 他們的線上繳費系統刷信用卡繳費的,所以只需要在那個「Credit Card」的框框畫圈,並填上付費時的資訊就好。(我之後會再寫一篇文章介紹一下那個系統是怎麼使用的)

如果是從日本國內轉帳或是從國外轉帳進去學校的帳戶的話,就要如上圖所示,要把那個付費的收據或是證明付在這個表上寄回去。我是建議大家找張不錯的信用卡來付就好,資料填完刷個卡就結束了,就不用再去銀行處理那些麻煩的手續,真心建議!

經費支付相關資料

這一部分的資料真的搞死我,也是我花最多時間的部份。

如果你是正在上班的人而且要自己支付所有學費,那你要準備「公司在職證明」、「年收入證明或所得證明」及「保證書」給學校。

這邊有一個很關鍵的部分就是「正在上班」!!在我準備這些資料的時候,我剛好還在前公司,所以所有的資料都是寫前公司的,但是在準備要交資料的時候我剛好從前公司離職了,所以這些資料能不能拿來使用就變得很尷尬。

在交資料之前為了保險起見我還是特別的再問了一次學校我個人的特殊狀況,果不其然,因為學校說我如果沒有辦法「依照他們規定提供資料」,就算我的存款足夠應付一整年在日本的開銷,我就必需要找「保證人」然後付上保證人的這些收入證明…等資料才可以申請!!!

換言之就是我無法以個人身份來當做經費支付者…(直接體會到為什麼很多人都說日本人只會照 SOP 做事…)_(:з」∠)_

好吧,沒辦法,只能改請我媽當我的經費支付者,但是問題又來了,我媽不是在任何公司上班的職員,而是我們店的經營者(我們家有開間小店),所以需要的資料特別麻煩,需要:

  1. 營利事業登記證中文影本(加翻譯社的英文版翻譯並蓋上社章)
  2. 營利事業所得稅稅單中文影本(加翻譯社的英文版翻譯並蓋上社章)
  3. 英文戶籍騰本(證明我和我媽之間的關係)

demo4demo5

網路上找的參考資料

雖然營利事業登記證有英文版,不過如果要去政府機關申請的話超麻煩的,需要多準備一些資料才能申請而且需要一週以上的時間,我就放棄直接拿我家的中文版去影印,再拿去翻譯社翻譯了。

而稅單則是要拿來證明這間店是真的有在營業然後有繳錢給政府的,所以我也就拿了一張去影印,再拿去翻譯社翻譯。

而英文戶籍騰本可以去政事務所申請,大概三個工作天就可以拿到,算是這三個文件中最簡單的東西,而且也只需要100元!

以我的情況來說,光是稅單還有營利事業登記證的翻譯就花了我1500元,所以我建議能夠拿到英文版的資料的就盡量靠自己去申請,要不然這一部分會花你很多錢。

P.S. 寫完這篇文章之後,為了上面這個「保證人」相關的資料就花了一個多月和學校來來回回超過 15 封信以上…直接講重點就是如果你的狀況和我一樣的話(自己無法申請收入證明,家裡開的是一間小店然後也無法開收入證明),千萬不要選這個方法!!!因為我之後還需要請第三方公證人(代書 or 律師)另外開一些證明之後,學校才合准我的申請資料。

所以,請找熟識並且在一般公司上班的親朋好友當你的保證人就好(之所以我會說「一般公司」的原因是因為這些資料只要在公司內部向人資申請就可以拿到了)真的會簡單非常多。切記切記切記!!

日本出入境紀錄證明

報名資料上有說到,如果有出入境日本的話,要把護照上有蓋上日本出入境章的頁面印下來!但是因為我出入境日本還蠻多次的,所以我直接去申請「入出國日期證明書」

https://www.immigration.gov.tw/ct_cert.asp?xItem=1107892&ctNode=32600&mp=1

map

Google Map : https://goo.gl/maps/2LCu2hpKvRB2

如上圖 Google Map 所示,我是直接到「內政部移民署」(在小南門站附近)的現場去申請這個證明書的,通常他會問你要申請從什麼時候到什麼時候的出入境,而且無法只選出「日本」的出入境,會直接把這個時間區間內的所有出入境記錄一次列出來。

因為我是參考他們工作人員的建議,列出從出生到申請當下的所有出入境記錄,然後直接把整份資料附給學校就好!


為了申請這間學校,我光是申請文件就準備了24張!大學報告也沒這麼多內容阿…真的快搞死人了,沒有代辦的幫忙就是什麼都要自己跑所有的申請文件,真的很累 LOL

不過雖然累,我覺得還蠻值得的,至少自己從無到有把所有的東西都準備好真的還蠻有成就感的!

以上,就是這次申請學校時我覺得比較值得記錄下來的部份,希望對也想去日本留學的朋友有所幫助!有什麼意見或是想法也歡迎寫信或是留言給我 🙂

P.S. 如果對我在櫻花國的生活感興趣的話,也不妨看看一下我有在持續更新的社交平台 FacebookYouTubeInstagram!有任何問題或是想要討論的東西也歡迎直接留言給我一起討論 😛

 

2018 僕にもできる

Image Credit

時間過的真快,一下子就告別了 2017,告別了昨天的自己。

在著手寫這篇文章之前,意外的發現自己少寫了 2016 – 2017 回顧及展望的部份,不過我想也不重要了,逝去的過往就讓他成為回憶中美好的一部份就好。

回到 2018,在一月的時候,意外地在囧星人的 YouTube 頻道上面聽到她在推薦一本叫做「斜槓青年」的書。當下其實沒有很在意,因為也只是隨手點開她的頻道聽到的東西,直到某次經過書局看到這本書的時候,就想說抱持著好奇心來看看到底這本書是在寫什麼,又為什麼囧星人還會幫她推薦。

ilohrki_460x580

Image Credit

一看就發現這本書講的內容有大部分的內容都和我的想法一致,講到了朝九晚五的工作型態已經無法滿足這個快速變化的社會,特別是在網路的推波助瀾之下,人們開始轉型成數位游牧民族。除此之外,人們開始不再滿足於特定職業及身分,並開始經營著多重身分的人生。

原來,我才發現我早已是作者口中的「斜槓青年」,打從學生時代開始,不知道為什麼我就是喜歡去做一些和本業無關的事情,經營著不同面向的自己(在傳統社會框架的定義下,學生應該是對應到讀書、社會人士對應到的就是工作)

講到這就讓我回憶起以前學生時代做過的幾個瘋狂事:

  1. 參加了英文演講社還和朋友設計了全英文的海報桌遊,做了一整天結果 20 分鐘內玩不完,整場 talk 只能卡掉 xD
  2. 和不同科系的朋友參加行銷比賽打到總決賽(其實是整合了資訊專業在招搖撞騙,還騙到了幾場出遊的機會 xD)
  3. 和朋友寫程式大量註冊假帳號實現線上洗錢卻玩壞了模擬投資的比賽(過幾天全部帳號都被 ban 掉還被系統公告有大量違規行為 xD 我事後的反省是應該要多加入更多隨機的因子去混淆系統)
  4. 覺得系上畢業專題真心無趣,都是一群學生在展示自己的結果給教授評分而已,每年都一樣沒什麼變化,於是就私下邀請了當年超紅的 Plurk 團隊(真的是所有核心人物都來了)來看我們這組的專題(因為我們做的東西是基於他們的服務),結果驚動了整個資訊系的教授和同學們,連系主任都出馬迎接還有安排學術交流 xDD
  5. 大四畢業的某場通識課的最後一個作業,就是要做一部和課程內容相關的影片,身為隊長就和組員寫好腳本一起合拍了一部有關於服務業工作辛酸的感人七分鐘短片,還找了別系的朋友當導演以及同學當音樂製作。總共用了兩、三天取景拍攝,然後和導演朋友花了一個週末剪片後製,真的超累。hqdefault
    我永遠都會記得最後一堂課老師說的話「這部片,是我看完所有學生的作品之後,就直接選為壓軸的作品」。這部片,是我真正拍的第一支影片,也開始讓我對影像創作產生了好奇心。當然,這也是我大學四年通識課中分數最高的一門課 xD(附上在 YouTube 上面的劇照縮圖,不過網址就等以後再分享啦 xD)
  6. 畢業後要當兵了,當兵前不太會游泳,又很屎的抽到了海軍,心想整個慘了進去一定會被電,結果旁邊的教練朋友看不下去把我拖去接受紅十字救生隊受訓,那個入訓測我連 100 公尺都游不到就中途放棄了,於是我朋友就把我抓過去和總教練掛保證說「這個(人),交給我來處理」。雖然連續 30 天的地獄訓練(平日至少四小時,假日至少八小時)真的讓一個旱鴨子超想死,但最後還是沒有讓我朋友丟臉,撐了過去變成一名救生員,也意外的加入了志工組織。

 

而畢業出社會之後,我也在工作之外開始了許多不同的嘗試:

像是和朋友組了一個 背包客團隊 – TwoBackSurfers 到處旅行,一年至少出國兩到三次,沒錢就買最便宜的機票或是用 CouchSurfing 去住陌生人的家裡。然後開始學習自己經營一個粉絲團、開始寫文章、開始學習怎麼用 Photoshop、開始自己做文宣、做旗子、印書籤、印 Tshirt …

又或是最近開始和當時大學一起拍影片的導演朋友重拾相機,開始試著經營我們 共同的頻道 – 龍怪 ,所以開始去了解一些攝影相關的知識、寫劇本、拍影片、學習怎麼用 Premiere 後製、研究如何遠距線上分工(台灣/中國)…

如果你問我,為什麼要做這麼多有的沒有的事情,我想我的答案很單純,就是「有趣」而已。不過不得不說,這些所有的事物造就了現在的我,也讓我意識到這個世界是如此的寬廣,充滿著許多未知的人事物等著我們去們去探索。

在 2017 年中,我做了一個很勇敢的決定,就是申請去日本大阪的關西大學。

回想起我大學準備要畢業的時候,因為我找不到原因說服我自己和大家一樣去讀研究所,所以我就直接去當兵,同時也默默在我心中留下了兩年的時間給自己,心想,如果未來有任何原因需要動用到這兩年的話,就勇敢的去做吧。

就在昨天, 2018 年 2 月 13 日,我終於跑完了所有的準備、面試、申請流程,順利的從日本台灣交流協會那邊拿到了學生簽證,可以合法的以學生身份在日本待上一整年了。

不過雖說如此,要能夠勇敢的和老闆辭職、告別熟悉的台灣、告別身邊熟悉的人事物真的是一件不容易的事情,因為這一年,必定充滿著挑戰,不論是文化、語言、禮儀…各個方面一定都相當衝擊。但,未知與挑戰,也是人生之所以精彩的重要元素吧。

「人一輩子,最可怕的不是死亡,而是當死亡來臨時,你突然發現自己從未用想要的方式活過」

斜槓青年

人生,只要不後悔,就夠了。

2018 年 3 月 27 日,在前往日本留學的路上,啟程。

P.S. 如果對我在櫻花國的生活感興趣的話,也不妨看看一下我有在持續更新的社交平台 FacebookYouTubeInstagram!有任何問題或是想要討論的東西也歡迎直接留言給我一起討論 😛

 

[Memo] 數位游牧的生活 Part End

Image Credit

13lkg0agi0.jpg

時間過的真快,這兩年的游牧生活在最近算是告了一個段落。兩年的時間說長不長說短不短,中間也發生了各式各樣的事情,所以想把這兩年做一個總結記錄下來。

喜好、堅持、技術偏執

我覺得有時候技術人通常都會有這個問題,不論哪方面的技術、哪個領域的專家,通常都有自己擅長的工具,輕微可以稱為喜好,嚴重點可以稱為堅持或是技術偏執。如果今天是個一人團隊,你想要用什麼就用什麼沒人可以管你,不過如果是在一個團隊裡面,勢必需要做出一定的妥協。

對於 startup 來說最有限的就是資源,有時候團隊空耗了很多時間在這些不重要的事情上面(從團隊能否存活下去,或是對使用者來說有沒有感的角度來看的話),最慘的莫過於都已經達成團隊共識了,最後還被推翻打掉重練…這真的不只是浪費資源,還嚴重的打擊了成員的士氣呀!

技術選擇

這是前一點的延伸。很多時候公司們的技術決策者會因為自己的喜好或是堅持而選擇了特定的工具或是技術,這可以理解,但是我覺得一個技術團隊還是需要擁抱開源軟體,要不然這對於日後的開發或是維護甚至是人才招募會有很關鍵性的影響。

為什麼這樣說呢?以我們為例,我們真的太專注在造輪子這件事情上面了。造輪子不是不好,在某個程度上他讓你對於使用的技術上有更多的掌控與理解,而且可以做許多更客制化的擴充。但是比起 startup,這件事情應該發生在有足夠資源的大公司會比較好,因為通常要維護這種輪子(特別是基礎建設的輪子)會花費大量心力,有時候為了業務需求還要做許多改變,所以如果你們是 startup ,光是專注在開發產品的資源都不夠了,更何況是這些對用戶無感的輪子呢?

第二個問題是社群的力量,就是因為沒有足夠的資源來做這些事情,所以如果選擇了知名的開源軟體當做基礎建設的輪子,那就可以搭著社群的力量前進,更專注在自己的產品上。

第三個問題就是招募還有職涯發展,一來是這類型的私有輪子會造成成員投注了太多時間在其之上,而沒有去研究或是了解市面上比較流行或是大家比較常用的技術(不是要一昧跟風,但是至少要花點時間了解大家在幹嘛),造成了未來職涯發展上的受限。而這個的另一面就是招募也會是一大問題,如果需要找新血來參與開發,基本上他們所擁有的能力是無法在第一時間帶來幫助的,通常還是需要經過一個不短的學習期才能實際上場,真的很傷。

所以如果可以的話,在捲起袖子開手寫第一行程式碼之前,想想這個問題,找找看網路上有沒有什麼現成的解決方案,真的可以幫團隊走得更遠,要不然中途才做改變帶來的成本真的很高很高很高!(真的很重要,所以要說三次)

權力下放

我想各個團隊的 CEO/CTO/C?O 應該都不是一開始就是做這些事情出身的,通常一開始都是專精於設計、資訊…等各個領域的專家,但是是因為公司編制的關係才掛上了這樣的頭衘。

如果初期團隊小,就只有這幾位創始人,那當然沒什麼太大問題,反正每個人還是繼續專精在自己的領域上。但是如果人數開始成長,開始招募了非核心團隊的成員之後,問題就開始了。

有時候上位者並沒有意識到自己職位的改變,沒有辦法適度的把權力下放給同樣領域的成員做決定(像是 CTO 授權給架構師、CDO 授權給設計師…等),而還是把決定權保護的好好的,就會造成上面的人因為要參與的事情太多所以忙得要死,而下面的人因為沒有辦法決定事情所以會浪費很多溝通的成本在說服能做決定的人,甚至是要花很多時間持續改動 spec 直到同意為止。大公司就算了,但是對 startup 來說真的是一大傷,通常這樣一來一往也過了好幾天了。

所以如果可以,請適度的鼓勵下面的人自我嘗試並授權給他們!

持續主動揭露訊息

對於一起在 startup 工作的大家來說,與其說是同事,不如說是戰友還比較貼切一點。比起穩定的大公司,要選擇在種不穩定的環境工作真的是需要拿出勇氣的,更不用說是那些有揹負家庭責任的人。

在海軍當兵的時候常聽到「同舟共濟」這個詞,我覺得也蠻適合用在 startup 這樣的環境。

不管是好的或是壞的消息,為了要讓大家不要有各種過度的想像或是猜測,最好的做法還是持續並主動地揭露訊息。真心覺得這對於實行遠端工作的團隊來說特別重要!

語言落差

我覺得這是在參與過由台灣人及非台灣人組成的團隊之後得到的感觸。以前在大公司上班的時候,同團隊成員之間一定會有著比較深厚的友誼,一定都會自己私約各種吃喝玩樂的活動,然後比較不熟的同事們就比較不會有什麼特別交集,也更不用說是和管理階層之間的互動了。

想想,光是講中文的我們之間都有著這樣子的落差了,更何況是和那些不是講中文的同事們呢?所以如果團隊是由講不同母語的人們所組成,最後通常就會變成兩個獨立團體,吃飯或是聊天都是各聊各的,大吐不快!!

所以如果今天你是老闆而你真的想要了解團隊成員之間最真實的內心話,或是想要和他們有最真實的互動,能夠了解他們所使用的語言真的是一大加分。

任務分配

身為一位工程師,解 bug 對我來說是比較乏味的一件事情。不過不可避免的是程式難免都會有 bug,所以這一定是日常工作的一部分,但是如果持續解 Bug 超過一兩個月而無法開發其他有趣的功能,那真的是會是讓人心情低落!

startup 的 CEO 有時候為了資金的問題而忙得焦頭爛耳,如果團隊裡又沒有相對應的管理階層可以決定未來產品方向,很容易就會陷入這樣的困境,因為沒有方向的話就代表暫時沒有新的功能可以開發,但是又不能讓整個團隊空轉,所以唯一的解法就是要求大家修 bug 或是改善效能,如此而已。

現在往回看,這件事情在當時真的實實在在的影響了團隊的士氣呢。

最後

很快的兩年就這樣過去了,2017/08/01 是在一個團隊兩年的里程碑,我們有歡笑、有爭吵,但是不管怎麼樣還是很高興認識了這群有趣的人,未來的路還很遠,還有各種無限可能。老樣子,想說的話太多,還是找個時間大家約出來喝喝酒聊天比較實在!

謝謝你們 🙂

(+Mehgan, Ratih, Vlad, Pomin, Lucien … etc)

vectr-2

數位游牧的生活(未?)完

[iOS] Compilation time goes crazy when using `+` in Swift

Image Credit

slow-656x330

Recently I have been working on one of my side project in Swift. Originally, everything looked fine, but not sure starting from when, the whole compilation process started to be slowed down a lot from 20s to more than 5 mins!!

Originally I was thinking it’s mainly caused by some of my 3rd-party libraries because I did install some new ones during that period. So as an engineer, I started to bisect and see what’s going on. But after uninstalling / reinstalling those libraries, things are not going well though.

Ok so it looks like this way is not working and not the root cause, so what’s next ? After thinking a while, I started to check codes line by line and see what’s the most suspicious part that can cause the problem.  TBH, there was no any piece of codes looking suspicious to me… Ok no ways to go again, the only thing I could do is to narrow down variables and started to comment out methods from entry point.

After a while, boooooom, I finally found the part which would cause the problem !!!!

螢幕快照 2017-08-03 下午2.31.27.png

What the hell, it’s all about + !! Because I mainly work things in JavaScript, it’s really not intuitive to me that this can be the problem! After googling around, here comes some comments about this problem :

Reference

 

It has to do with type inference. Each time you use the + operator, Swift has to search through all of the possible overloads for + and infer which version of + you are using. I counted just under 30 overloads for the + operator. That’s a lot of possibilities, and when you chain 4 or 5 +operations together and ask the compiler to infer all of the arguments, you are asking a lot more than it might appear at first glance.

That inference can get complicated – for example, if you add a UInt8 and an Int using +, the output will be an Int, but there’s some work that goes into evaluating the rules for mixing types with operators.

And when you are using literals, like the String literals in your example, the compiler doing the work of converting the String literal to a String, and then doing the work of infering the argument and return types for the + operator, etc.

If an expression is sufficiently complex – i.e., it requires the compiler to make too many inferences about the arguments and the operators – it quits and tells you that it quit.

I think I am too familiar with languages like JavaScript, so all the details like this are all hidden and not exposed to us. No matter how, it’s still surprising though. Hope in Swift 4, this kind of basic operations like Array concat can be optimized and boosted up.

在前往日本留學的路上 part 1

Image Credit

雖然離目標還有一些距離,不過我覺得該是時候開始動筆把一些過程記錄下來了。


認識我的人都知道其實我還蠻愛到處去旅遊的,其中還組了一個專門出國旅遊的團體,有了一群專業旅咖。而每次當我們討論到要去哪邊玩的時候,日本總是在我們的選項之外,因為我們總是一致認為日本是一個等我們五六十歲之後再去的地方,所以每次出遊的時候也都一直沒有把這個地方排在我們的目的地裡面。

不過好景不常,就在我們都交了日文系的卡諾揪之後,這個想法就立馬被推翻了 xD 日本反而變成是我們最常去的國家之一!也是因為這樣,為了想要有一些共通的話題,所以我就想說來去師大上個日文課好了。

 

師大日文幫

還記得是兩年前大概是 2015 年的四月左右的某個星期日,跟著 張淑惠 老師開始在師大上了第一堂日文課 D1。還記得那個時候的教室幾乎是暴滿的。整間教室坐滿了一群對日文充滿著興趣的學生,一起從五十音還有發音開始學習日文,然後還搭配著大家的日本語第一本當做教材交錯使用,整個超像回到大學時期的那段青春裡呀 இдஇ

兩年過去了,來到了 2017 年的三月多,同樣的老師,同樣的教室,唯一變的是身邊的同學們,整個 D 班從當時的 D1 到今天的 D9,只剩下我一個人是跟著老師從頭上到最後的,同學們來來去去,就像是人生中的過客們一樣,在大家有限的生命中留下了些什麼,同時也帶走了些什麼。而現在的班級雖然經歷了多次的關班危機(因為人數不足),不過最後都還是活下來了,連老師自己都很意外還能夠開班成功就是了!

Photo 14-05-2017, 4 14 12 PM (1)

「大家的日本語」這本教材,也不知不覺來到了進階二的最後一本,如果沒有意外,當 D10 上完最後的第 50 課的那一天,應該也就是告別老師還有師大的時候了吧!

東吳日文大隊

還記得上到 D5/D6 左右的時候吧,那個時候班上有個女同學和我分享了她同時在東吳(西門的城中校區)上課的事情,上的是一三五的三日班,然後假日再跑來師大上日文,過著超拼的生活。那個時候我也不知道哪根筋不對,就跑出了「師大一週上一天的進度比較慢,那我也來東吳上看看」的想法。

那個時候剛好很熟的高中同學平時也有在自學日文,就邀他一起來去東吳上課,我們就一起開始了東吳二四班的生活。每次都是一下班就狂趕捷運 =͟͟͞͞( •̀д•́) 然後走去西門的東吳上課,為了平日上課不知道放棄了多少原本休息的時間,然後兩個人就互相 cover 作業或是上課的筆記。然後不知道是從哪個時候開始,我們就另外再找了也很熟的高中同學組成了日文/程式讀書會,每週三固定會去板橋的某間 Louisa 集合,我就同時邊和兩個人切磋日文還有程式,整個超充實阿阿阿 (☉д⊙)

就這樣在東吳也上了約一年的二四班,在主要兩位老師 許育惠(會話)/丁思湖(讀本)的摧殘之下,日文真的是有很大的進步。在會話的方面呢,因為老師是台日混血的關係(日文是母語等級),所以和他上課就像是和日本人在講話一樣,教了我們很多只有日本人才會使用的口語用法、單字…等等。老師也很愛來一個隨機 cue 人,被 cue 到就要立馬講一個句子出來才可以,然後會一直糾正你的發音,這真的是超棒的!不得不說在火線上真的學特別快… (つд⊂)

而讀本的丁老師也有自己另一套的教法,最特別的就是老師會叫大家回家背讀本的課文然後上課抽背,要你把學過的東西唸出來給全班聽。不得不說這真的真的真的超有壓力,因為早就過了背課文的年紀了,所以要和年輕人拼記憶力真的是累阿 (´c_`) 但是也就是因為要背課文,所以很多你讀過就會忘的一些句子就會因此記在腦海內,你真的不知道為啥這個句子是這樣但是你就是用的出來,像我現在就可以很流利的背出「百聞不如一見」的日文就是「百聞は一見に如かず」呢,wwwwww 這什麼鬼啦 ( ˘•ω•˘ )

Photo 15-03-2017, 8 18 42 PM

不過說快真的很快,再一期,東吳的二四班也要來到了尾聲,如果沒有意外,在這結束之後應該會轉去專攻口說的特別班了,總不能用爛爛的口說能力出國吧哈哈,只能咬緊牙根繼續拼下去了!加油!

在前往日本留學的路上,未完待續。

P.S. 如果對我在櫻花國的生活感興趣的話,也不妨看看一下我有在持續更新的社交平台 FacebookYouTubeInstagram!有任何問題或是想要討論的東西也歡迎直接留言給我一起討論 😛

 

[Nonsense] Just back!

Image Credit

lonely-man

Finally, after 1 year, I am back! It’s been a while not updating my own blog due to so many reasons. I did try to write down some words but always forgot to finish it. In addition to this, there are also some problems in the blog system itself so that I can’t even publish the post or update plugins.

Few days ago, I made a decision to migrate all my self-hosted blog to WordPress.com and pay for it. It’s nice to leave all weird problems behind to someone else and focus on writing contents. I am sure from now on, I’ll start to write more words down and share to the world 🙂

Although it’s kinda late, but I still need to say, goodbye 2016 and welcome, 2017 !

[Electron] How to codesign your Mac app

Image Credit

codesign

Introduction

Recently, Electron desktop application gets hot and popular among developers. It’s easy for developers to quickly mockup a desktop application and distribute it to three different platform with zero efforts ! (This is really a lie after I made another popular open source project called Kaku with the same tech.)

Ok back to topic, for companies who want to distribute their desktop apps to the world, they must codesign the application first ! The reason why this is important is because if you don’t do so, if the user enable gatekeeper by default, the application will be blocked due to unidentified developer and users will not be able to open it !

unidentified_developers

security_preferences_options

So in this article, I’ll try to share some my experiences about how to do the codesign for Mac app and what’s going on behind the problems.

TL;DR

Thanks to Marco Pracucci who wrote some useful details in his post, you can just follow these simple steps to do codesign :

  1. Get a Developer ID certificate from Apple and install it into your Mac’s Keychain
  2. Sign your application bundle codesign --deep --force --verbose --sign "<identity>" Application.app
  3. Verify the signature codesign --verify -vvvv Application.app and spctl -a -vvvv Application.app

Note: The identify here is the id wrapped inside the parentheses that you can get from keychain like the screenshot below:

keychain

But … the world sucks

The first problem I have encountered is version problem.

After codesign the app on my laptop (running 10.11.4) and share this app to my team members to test with, for those who are using 10.10.x, they will not be able to use the app and the gatekeeper’ll keep complaining something like the image below : 

vectr_damaged

But for the others who are using 10.11.4, the app is working well on their laptops (WTF???)

After googling a while, I finally found a discussion thread here on GitHub talking about this ! If you codesign your application on 10.11.4 , you’ll successfully get it codesigned and usable BUT for users who are using 10.10.x (to be specific those who use laptops <10.11.3) will have problems when opening that app.

From the discussion thread, we can learn that there are something changed from 10.11.3 to 10.11.4. If you want to hack that around by yourself, you’ll need to follow the steps here. But for me, I use electron-packager, so if you are using that too, you can just upgrade to 6.0.0+ because they already handle that for you on that version with zero efforts !

How to verify your app

  • codesign
    • This tool is not only for doing the codesign, but also you can use it to verify whether it’s well signed or not. After running it, you can get things like this :

https://gist.github.com/EragonJ/cc16613280384b0bf4bda36f1e761171

  • spctl
    • For this tool, this is mainly used to see whether your codesigned application will be blocked by gatekeeper or not, if you didn’t get anything wording like accepted, your application will always be blocked or treated as damaged by gatekeeper, so it’s really important to use this tool to do the check every time when you create the new application.
    • Note: If you are using Apple Developer ID certificate to build you application and be distributed by yourself, Remember to change your [System] > [Privacy] to “Mac App Store and Identified developers. Otherwise, you will keep getting rejected information.

https://gist.github.com/EragonJ/36f31b2b1f0659e95ef4fdab6b2e9a02

How to test

You can check details here from Apple’s documentations, but I’ll still copy some here.

  1. To disable Gatekeeper using the spctl command
    • $ sudo spctl --master-disable
  2. To confirm that Gatekeeper is enabled using the spctl command
    • $ spctl --status
      • If enabled, you will get assessments enabled
      • If disabled, you will get assessments disabled
  3. To test your Developer ID-signed app
    1. Make sure your gatekeeper is enabled by follow above ways.
    2. Email your Developer ID–signed app to yourself and use the copy that Mail downloads to trigger the dialog.
    3. Host your Developer ID–signed app on your own local or remote server and use the copy that Safari downloads to trigger the dialog.
    4. By doing so, your gatekeeper will be triggered correctly !

Troubleshooting

A) My certificate on keychain keeps showing expired

This problem is critical and annoys developers who are not familiar with Apple certificate things (like me !) When working on the codesign feature, I noticed that no matter how hard I re-install the certificate that I download from Apple, it will keep showing expired with no reason !

After trying and discussing this with one of my iOS friend, we finally realized it’s related to this notice ! For someone (not sure who, but including me), the Apple Worldwide Developer Relations Certification Intermediate Certificate is going to expire on Feb 14, 2016 which will cause the problem to make your certificate keeps expired.

What you need to take action here is to renew the this core certificate and try to re-install (or re-create) your developer certificate again and things will be solved … WTF !!

B) Where to find my certificate ?

For most of people, if you are writing desktop application by Electron, normally you’ll distribute your application by yourself (like us). But, I noticed that it’s really frustrating to figure out how to get that Developer ID Certificate !!

I have tried several times from https://developer.apple.com, but there is nothing related to Developer ID Certificate (or maybe it’s mainly because I am using different role, so it’s not showing up ?) ! After reading tons of articles, I finally realized that it’s inside Xcode !! You can check the screenshot below :

issue_certificate

But you can notice that the buttons are grey and is not clickable. That’s mainly because the role is wrong !! Even if you are admin role, you still can’t generate that ! Only Team Agent can do that ! So if you are developer or admin, Go ask your leader for that and tell him/her to press the button above to create the certificate for you.

After getting the certificate (it will be name like this xxxxxxx.p12), you can just double-click the file and install into your keychain. Remember, always keep them private 🙂

Note: Only the first one who made the certificate and uploaded to Apple Developer can have this .p12 file. This will only exist on his own keychain and you can’t even get it from Apple Developer. So remember to ask him to export that p12 file and share with the whole team ! Remember, if you lost this .p12 file, no one can save you and you need to regenerate another certificate again.

Last few words

It’s really a hard time to fight with codesign stuffs especially there are less resources talking about this. But whatever, I wrote them down already !! If this article does help you, please feel free to share !

And also, if there is anything wrong or missing in the article, feel free to tell me and I’ll update it ! See you guys next time 🙂

Reference

  1. https://pracucci.com/atom-electron-signing-mac-app.html
  2. https://github.com/electron/electron/issues/4899
  3. https://goo.gl/ZgKXr1
  4. https://developer.apple.com/support/certificates/expiration/

[Javascript] Something about pinch gestures

Image Credit

pinch-gesture

最近一直在研究如何在 Browser 上支援 Mac touchpad 的 Pinch 手勢,所以有一些心得想要記錄一下。

3rd party libraries

一開始的想法就覺得這種事情應該有什麼 3rd party 套件有支援了,只要簡單的把 event 和現有的程式接上就可以了。不過找了一陣子後,實在是沒有找到什麼好東西,通常大家推的都是 Hammer.js,不過其實這個 library 是專門設計給 mobile app 使用的,看了一下程式碼發現是組合 touch 相關的 event 後再經過數學運算後提供客製化的 gesture event 像是 pinchpan … 之類的。

不過這個和我的使用情境不太一樣,因為 gesture 相關的 event 只有在 mobile 的 browser 上才會存在,因此只能再找找別的方法。

Solutions

之後很幸運的找到了 Chromium 開發者們的討論串,主要在討論的內容就是要如何把 touchpad 上的 pinch 手勢透過 wheel 這個 event 傳出去!那個討論串主要的重點就是在於 2014 年五月之後,Chromium 開發者們上了一個 patch,讓前端開發者可以透過正規的 wheel event (對了,wheelmousewheel 有點不太一樣,前者才是大家公認的標準,後者則是非標準,只有少部分的 browser 有支援,要注意一下)去偵測 pinch gesture 的觸發。當 wheel event 是透過 pinch 觸發的話,那傳進來的 event 的 ctrlKey 這個屬性則會被設成 true,所以開發者們就可以用這個值來做判斷。

而在我們公司裡,因為我們要監聽這個手勢的發生做客製化的視覺處理,而且我們不希望 Mac 上預設的 zoom in / zoom out 還被觸發,所以要記得透過 event.preventDefault() 來避免 Browser 做 zoom in / zoom out 的動作。

Limitations

當然世界沒這麼美好,所以我最後還是整理了一些目前的限制(以後說不定就沒這個問題)

  • Safari
    1. 目前我手上最新的 Safari 9.0.x 版(Mac OS X 10.11.x)是沒辦法透過上面的方法來偵測手勢及取消預設的 zoom in / zoom out 觸發。
    2. 好消息是在未來的 Safari 9.1.x 版後,他們提供了新的 gesture event 讓開發者們可以去偵測手勢,不過這個版本目前也還沒釋出所以也沒辦法測試,如果官方文件沒有唬爛的話那就應該是可以支援,只是這個 event 目前應該也是 Safari only 的客製化 event 就是了,會不會變成 standard 也不知道。
  • Chrome
    1. 在 2014 年五月後的 Chrome 就支援上述做法來偵測 pinch 手勢了!(我很想查 Chrome 的版本號只是不知道怎麼找,如果有人知道那個 patch 實際被 land 到哪個版本的話,請和我說一下)
    2. 個人 Chrome 48+ 實測是 ok 的。
  • IE / Edge
    1. 如果討論串上的資訊正確的話,那 IE / Edge 應該和 Chrome 一樣有支援 ctrlKey 可以讓開發者去做偵測。
  • Firefox
    1. 無解 …
  • Electron
    1. 我有測試過 Electron 0.36.x+,因為他的核心也是 Chromium,所以這個做法也是可以支援的!
    2. 如果你是用 <webview> 的方式來載入你的 web app 的話,那你特別需要先在 render view 的地方聽  wheel event 但是不需要做任何事(超怪,無法理解),這樣這個 wheel event 就會正確的被傳進你的 <webview>,然後你的 webview 裡面如果有實作 event.preventDefault() 的話,那預設的 zoom in / zoom out 行為就會被取消,這樣你就可以在 webview (也就是你的網站裡面處理這件事情就好)

References

附上所有我找到的有用資源如下:

  1. http://jsbin.com/qiyaseza/8/edit?html,css,js,output
  2. https://bugs.chromium.org/p/chromium/issues/detail?id=289887
  3. http://stackoverflow.com/questions/15416851/catching-mac-trackpad-zoom
  4. http://stackoverflow.com/questions/29929411/disable-pinch-zoom-in-webkit-or-electron
  5. https://gist.github.com/NekR/9a80ebe73573e11f0351

[Look Back] 2015 – A Crazy Year

This image was made with Vectr

look-back-2015

時間過的好快,2015 又過了呢 … 已經來到傳說中的 26 歲了呀。

逝去的 2015

過的好快,2015 就這樣過了,來列一下年初期許的事情有哪些完成了:

  1. 背好五十音 xD
  2. 挑戰一個人去旅行,學著和自己對話。
  3. 勇敢離開自己的舒適圈。
  4. 不要一個人過完這一年。(閃屁)

如果真的要說,2015 真的是一個瘋狂的一年。

工作方面,在七月的時候離開了 Mozilla,謝謝前同事們對我的照顧,在這個地方學了好多東西,然後又來到了另一個有趣的地方 Vectr ! 不只開啟了數位游牧民族的生活,也開始實作一些有關繪圖軟體需要的東西,這個經驗真的是很難得呀。

感情方面,雖然在 2014 年尾發生了一些事,但是卻又遇到另一個更好的人,也因此催生了 2015 年最重要的 Open Source 專案 – Kaku!也開始在師大學日文,不知不覺也上了一年的課,日文能力也略有進步,雖然在日本的時候只會講不會聽也沒什麼屁用就是了 xDD 只能繼續加油。

而在旅行方面,這一年也跑了好多地方:

  • 金沢
  • 高山
  • 白川郷
  • 大阪
  • 奈良
  • 清邁
  • 拜城
  • 澎湖四天三夜
  • 四年一度的東港燒王船
  • 台南遠端工作一週

還記得以前曾和旅行咖的朋友說過日本是我們 50 歲以後才會去的地方,沒想到這一年我們兩個都去了日本,而我還去了兩次 xDD。邊打這篇的時候還邊翻了一下行事曆,才發現原來我跑了這麼多地方!旅行對我來說真的是生命中不可或缺的一環呀。

現在進行式的 2016

這一年我想試試看不要預先設定目標,試著讓時間的推移來開啟更多不同的可能性,很多時候人生就是在這種時候才會發生許多精彩的故事不是嗎!?

最後還是要謝謝在 2015 年出現在我生命中的所有人,不論是好是壞都是讓我繼續前進的一部分!謝謝你們,一起加油吧 🙂