2017年8月31日星期四

福岡LINE IT工作筆試經驗



前言
相信很多人跟我一樣,對香港的前途感到灰暗,近年在Facebook的時事新聞Post中看過很多次的一句留言就是「有能力就離開香港啦」。
我認為這句說話,雖然所謂「能力」,大多數指就是金錢,你有幾百萬現金,大可以搞投資移民,沒有錢的話,就只好另覓出路。
其中一條出路就是出國工作,雖然跟移民是兩碼子的事,但至少還是離開了香港這個只適合工作,但不適合生活的地方。

其實早在一年多前已經開始物色有什麼工作機會,其實Linkedin上,蠻多大公司都多招聘廣告的。
最早有興趣的是「Agoda」,因為當時在JobsDB都有Ad,它在Linkedin上長期都有招聘廣告,所需工作要求其實跟自己稱得上符合,都是Microsoft .NET技術加一些新興技術,而且公司位置就是在曼谷的Central World大樓。
但跟現職員工打聽過後,知道它們只會請有Native英文程度的人....
我自己讀寫當然絕對沒問題啦,但不得不承認聽力跟會話,跟一個美國人/印度人相比,還差很遠,相信在第一回Skype Interview也過不了,所以無謂自討苦吃。

日本永住資格
早段時間見到「日本政府將縮短高度人才申請永住的條件」,網上看到不少人趨之若鶩。
雖然「永住」不代表你是「日本國民」,但「永住權」對你在日生活,出入境,工作生活都很重要。

詳細可以看一看日本法務省入国管理局網站:
高度人材ポイント制による出入国管理上の優遇制度

IT業類別是「高度専門・技術活動「高度専門職1号(ロ)」,以計分制作資格評估。
簡單來說,如果你有大學以上學歷,十年以上工作經驗,年收700萬Yen以上就差不多達到合格分數,當然還要在日本有工作。
如果你有JLPT N1或N2水平或認可的國際專業資格都有分數加。
不過這方面會花篇幅太多,有興趣大家可以自行研究一下。

能夠在日本工作,肯是一生人之中的寶貴經歷之外,還可以學好日語,再加上上述「永住」的巨大誘惑,足以成就第二人生。
而最近港台兩地IT行情之間,開始多人談論LINE的工作。
因為LINE早幾個月在台灣廣泛地招請人才,在香港JobsDB都有廣告,這份工作最吸引人的地方是:
1. 福岡的博多Office上班
2. 不需要懂日語,受聘請後,公司還會出錢給你在上辦公時間學日語
3. 薪水福利比香港還要高
還有等等很多很多誘因,當然如果你跟我一樣是崇日的話,根本能在日本工作這一個原因就已經足夠令你舉家移至日本。
在發應徵信之前,我做了萬全準備,上網盡可能了解LINE的產品,公司文化,所用的技術,CI/CD流程,更接觸過幾個現職的台灣員工了解一下,他們都給了我鼓勵。

福岡LINE的招聘廣告雖然有Python/Ruby要求,但我知道該公司在網路開發方法都是以JavaEE/Spring為主。
由種種LINE的文件顯示,亦支持我的說法,所以想去日本LINE工作的人就要主攻Spring了。
由LINE公司員工的Linkedin所提示,會用上Jenkins,Node.js,NoSQL,AWS RedShift,和Redis的in-memory data store。

面試
LINE的面試流程簡單:
1.寄CV -> 2.Screening -> 3.Pre-Test -> 4.真人面試

我申請的職位是「Development Engineer」,發CV出去後,一星期左右就收到電郵連測試附件的回覆。


測試有兩部份,第一部份是解答,第二部份是個人能力的問卷,例如(你最擅長的語言,你過去遇到最難的事等等)
基於保密理由,我不能公開試題,大家亦不需要留言問我。
我只能夠說重度Algorithm,外國Computer science課題上是很常見的題目,例如Recursive function, Time & Space Complexity, Big-O, Permutation and Combination,若你是剛畢業的CS學生,又有修過相關課題就應該沒問題,
不過好像我已經工作快20年的人來說,技能已經太過Practical反而應付不了。

當然我也有Google,但不可能Copy答案或以其他語言重寫交貨。
最後我理解其義,以C#作答,並自己想的方法去解題。

但沒想到,我在這個階段已經落選了....


其實這件事已經發生在一個月之前,對我自己的確有一定程度的打擊,我的日本夢也碎了。
因為我自己由90年代開始,聽的是日本歌,看到是日劇,玩的是日本Game,能夠去日本工作生活的確是我的夢想。
雖然結果很失望,但都想仔細寫出來,讓其他人參考一下,希望幫到有共同夢想的人。
希望大家就職成功!

參考資料
有一些網站對你理解LINE的工作情況和環境都很有用,同時了解一下為什麼福岡是外國人踏足日本工作的好地方。
WORKLIFE IN JAPAN 日本 職場 生活 趨勢
福岡:守業大國的 Start-up 之城
福岡市打造亞洲新創基地
43歲市長「跑業務」,福岡三年變日本新創之都!

Line Fukuoka / Facebook / Blog
LINE官方HR/工作環境相關:
LINE員工性別/年齡/國籍分佈
LINE Fukuoka のオフィス (Office) を紹介します
LINE Corporation slideshare - engineer culture
Line Engineering Blog

其他日本網站:
LINE Fukuokaの採用/求人/転職情報
Vorkers (日本版的Glass Door) - 事實上整體評分(3.32/5)並不高,<業界内の順位を見る>也不在高位。
カイシャの評判 - LINE Fukuoka株式会社の口コミ・評判

台灣員工的Blog:
kojilin’s diary
Freddie's BlogFreddie Wang在Line撰文 - 為什麼我們使用Kotlin開發LINE Creators Studio

2017年7月21日星期五

ASP.NET Core 正確發佈至CentOS/Apache & 解決Service Unavailable Error 503

若跟著Microsoft的教學文件,建立ASP.NET Core Project後,上傳至Apache後,應該都會跑得動。
但當你做了若干修改後,即使在本機以IISExpress運作得完美無瑕,
再次發佈可能都得以出現Http Error 503 - Service Unavailable
用GEdit打開Error log,Error message如下:

Long Term Support (LTS) releases are -

[Thu Jul 20 17:54:50.534863 2017] [proxy:error] [pid 1283] (111)Connection refused: AH00957: HTTP: attempt to connect to 127.0.0.1:5000 (127.0.0.1) failed
[Thu Jul 20 17:54:50.535276 2017] [proxy:error] [pid 1283] AH00959: ap_proxy_connect_backend disabling worker for (127.0.0.1) for 60s
[Thu Jul 20 17:54:50.535289 2017] [proxy_http:error] [pid 1283] [client 10.3.15.246:61490] AH01114: HTTP: failed to make connection to backend: 127.0.0.1



很自然就會Copy了上述幾句Google Search,得出的結果都是大概是(未打開SELinux, Firewall/iptables設置問題等等..)

如果依照這個方向去想,搞幾天都不會有什麼改變。
因為原因根本不是Apache的問題。

ASP.NET Core的Dependency Hell & Version Hell

由我早前所寫的問題集當中,可見.NET Core自身的版本跟其他Package的兼容性有極大關係,暫時Microsoft似乎未解決Dependency Hell問題,即使外國,已經有多位開發人員抱怨,認為.NET Core暫時不適合Production用,問題大多數跟我一樣出於開發過程上有太多難以解決的問題。

我們先了解一下.NET Core Runtime/SDK目前為止的版本。
在Github上的Release Notes可以看到有多個版本,而.NET Core Runtime and SDK download archive再分開LTS版和Current Release版,當中Runtime配搭著不同SDK版本下載。
官方解釋LTS和Current Release的分別是:

Long Term Support (LTS) releases are -
- Supported for three years after the general availability date of a LTS release
- Or one year after the general availability of a subsequent LTS release
Current releases are -
- Supported within the same three-year window as the parent LTS release
- Supported for three months after the general availability of a subsequent Current release
- And one year after the general availability of a subsequent LTS release

在Nuget上,亦不見得好。.NET Core Package頁上,舊版本的更新時間可能比新版本還要新,實在有點混亂。

ASP.NET Core / CentOS / Apache 問題集

前天以為安裝好DotNET Core至CentOS,看到ASP.NET頁面,應該就可以專心進入開發程序。
但這兩天預到的問題實在太多,由Visual Studio本身對.NET Core的兼容性,.NET Core本身的問題,到Project設定,再到Apache等等問題,我都花了不少時間解決。
始終.NET Core還是很新的產品,Google後都很難找到實際解決方法,所以我把預到的問題和解決方法寫下來,希望幫到其他人。

開發環境可以參照我前天所寫的ASP.NET Core + CentOS 7 + Apache安裝攻略
Error 1 - The project has not been restored or restore failed - run `dotnet restore`
一次就出現4個Error Message:

Severity Code Description Project File Line Suppression State
Error 3. You may be trying to publish a library, which is not supported. Use `dotnet pack` to distribute libraries. SkinCV C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Common.Targets 262
Error 2. The project does not list one of 'win10-x64, win81-x64, win8-x64, win7-x64' in the 'runtimes' section. SkinCV C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Common.Targets 262
Error 1. The project has not been restored or restore failed - run `dotnet restore` SkinCV C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Common.Targets 262
Error Can not find runtime target for framework '.NETCoreApp,Version=v1.0' compatible with one of the target runtimes: 'win10-x64, win81-x64, win8-x64, win7-x64'. Possible causes: SkinCV C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Common.Targets 262

這個錯誤大多數出現在當你以Core 1.0.0開新Project後,做第一次Nuget Package更新到v1.0.1後,就會出現。
幸好這個問題已經在Github上有人報告issue #2442
解決方法是打開project.json,加上:
"runtimes": {
    "win10-x64": {},
    "win8-x64": {} 
},
之後找出"Microsoft.NETCore.App",修改為
"Microsoft.NETCore.App": {
    "version": "1.0.1",
    "type": "platform"
}
或者你會發現,在dependencies裡同樣都有"Microsoft.NETCore.App": "1.0.1",我自己就把這個刪除,但大家視乎情況而定。

2017年7月18日星期二

ASP.NET Core + CentOS 7 + Apache安裝攻略

作為一個經歷過ASP.NET初代到4.5版本的人,見到ASP.NET終於能夠誇平台是值得興奮的事。
雖然Mono早在好幾年前已經很成熟,而且相容度亦滿足一般使用,但始終不是官方支持,商業上實在很難說服團隊使用。
現在周圍的人都在應用Azure/AWS,甚至是Docker技術把虛擬機和程式封裝運作,ASP.NET MVC/Webforms只能在IIS上執行的確是很尷尬的局面。
Microsoft此舉絕對是明智決定,由一直面對著主流的PHP,Java/Spring,到近年在Start-up廣泛使用的Ruby on Rails或Python/Django,都是Cross-platform的。
所以DotNET Core的出現使ASP.NET不再邊緣化,終於名正言順在Linux/Mac上運行了。
我都來湊下熱鬧,嘗試設置一下DotNET Ready的Linux平台,過程中固然不會一直都順利,自己都是LINUX外行人,我使用CentOS的時候已經是大約6年前的CentOS 5,很多Command都忘記了。
所以我就把每一步Command的輸出,和自己遭遇到的問題解決辦法都寫下來,給自己和大家參考一下。


事前準備
我所採用的軟件版本如下:
  • CentOS Linux release 7.3.1611 (Core) 64Bit
  • Apache 2.4.6 (httpd.x86_64 0:2.4.6-45.el7.centos.4)
  • .NET Core 1.0.4

有幾個官方連結會用上的:
  1. CentOS Linux release 7.3.1611 (Core) 64Bit
  2. Set up a hosting environment for ASP.NET Core on Linux with Apache, and deploy to it
  3. .NET Core command-line interface (CLI) tools

頭兩個是必須的,第三個頁面讓你了解一下Linux下的DotNET CLI工作的命令。

首先我們依照第一個頁面的指示先把DotNET Core核心檔案安裝至Linux。
頁面上沒有提的事,就是我們安裝CentOS後,有兩件事我認為要做的。
1. 做一次系統軟件更新
2. 安裝VNC Server,畢竟我是來自Windows世界,有GUI操作資料夾或檔案,用GUI文字編輯軟件(GEdit)去編輯Apache Config檔會更容易,沒必要扮Geek用vi Editor吧...

Yum Update

***請確認是使用Root權限作SSH連線***

#確認CentOS版本
[root@localhost ~]# cat /etc/centos-release
#> CentOS Linux release 7.3.1611 (Core)
#更新一次系統軟件
[root@localhost ~]# yum update
#完成後,重啟系統
[root@localhost ~]# reboot

安裝VNC Server
#確認沒有安裝過VNCServer
[root@localhost ~]# which vncserver
#***Output***:
#> /usr/bin/which: no vncserver in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

#安裝Gnome Desktop
[root@localhost ~]# yum groupinstall "GNOME Desktop"

#完成後,安裝VNCServer
[root@localhost ~]# yum install tigervnc-server

#執行以下指令,檢查是否安裝完成
[root@localhost ~]# rpm -qa | grep tigervnc-server
#***Output***:
#> tigervnc-server-1.3.1-9.el7.x86_64
#> tigervnc-server-minimal-1.3.1-9.el7.x86_64

2017年6月20日星期二

ASP.NET MVC EntityFramework DataContext (*.edmx) 應該放在哪裡?

以前我做 Webforms Project的時候,很多時求個方便,都都直接在同一個Project下建立DBContext (*.edmx),之後就會在DAL或BLL層面直接利用。
當然還是有機會引起Class名稱上的混亂,但還是機會較微,因為即使要採用Entity,都會使用回EF輸出的POCO classes。

但MVC專案情況下就有所不同,大家都知道,除了DBContext之外,一般我們還會在Models下建立類同的POCO classes (或可叫做DTOs, Data Transfer Objects),而到了EF6,更可以用Code First做Reverse Engineer 快速建立POCOs。
至於原因可以看看這裡 - Entity Framework classes vs. POCO




上述兩者不止內容相似,名稱都可以是相似甚至一樣,如果跟Webforms專案時一樣放在同一個Project下,那麼問題就出現了。



因為很大機會程式會出現錯誤訊息:
Schema specified is not valid.
Errors:
The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 'Address'.
Previously found CLR type 'NewMVC.Models.Address', newly found CLR type 'NewMVC.Database.Address'.

最簡單地說明原因是EF會忽略Namespace,而以Class Name做Table Mapping,更詳細的解釋,可以看看CodePlex上的回報。

解決方法就是以另一個Assembly去載入DBContext,換句話說,就是新建Class Library Project去把EntityFramework的DBContext跟本身的Models分離。

2017年3月26日星期日

Google Blogger終於有新Theme用了!

一度認為Google慢慢會放棄Blogger,始終有Google Reader的前科
回顧一下Blogger的問題,有用開Blogger都會知道,Blogger無論是的Frontend和Admin頁都跟不上時代,簡單如文章搜尋功能都一直都不精準,編輯文章沒有Version Control等等都是現今,
甚至可以說是早很多年CMS上應該有的基本功能,所以都習慣了,但求Google不會對Blogger開刀而已。