2014年10月24日 星期五

2014 PHPConf Taiwan 參加記錄







又是一篇流水賬,事隔好幾天了,我都詞窮了 :P

今年的 PHPConf 辦在輔仁大學,是 10/18 (六),活動網站點這個,然後一如往常,
如果沒有參加的朋友,通常都是看 PPT 比較多,不過我個人非常推薦了解一下今年的 phpconf 議題,很妙的是,我覺得大部份的議題跟 PHP 本身沒有太多的關係,架構面跟效能處理上的議題比較多 (ex: mongoDB, MySQL...),而且都蠻實務的,一整天聽下來有物超所值的感覺哦 !


以下就由本 blog 特派員小 win 做個簡單的 conf 記錄!~

場地來說,雖然也不是第一次到輔大了,不過那個會場真的是有些遠,好熱啊... (不知道為什麼今天特別的熱)。但是學校場地能這樣子也算不錯了,雖然下午會議室有點悶,不過是可接受範圍,感謝辛苦的工作人員還搬電扇來 :)。

一去就是滿滿的人潮在簽到。


這袋子跟去年的很像內,大象就是可愛!


個人識別證。



微博 LAMP 優化之路

第一場,微博 LAMP 演變,講者是中國最有影響力的 PHP 技術專家惠新宸,Laruence,採用 live 的方式進行議程,挺炫的啊,第一次體驗這種 live 議程,不過訊號斷斷續續有點可惜,有興趣可以先看這個網址

大部份在講網站性能優化/結構優化,前端 php 後端 C, 從 LAMP 到 LNMP, O+ 替換 APC 等分享。很多專有名詞我沒有聽過 (ex: yaf, apc...)...,唯一的心得是覺得在台灣做網站,流量也很少有機會需要這樣優化我的網站,機會很少,有點可惜...。

然後聽完這場之後學到一個很有趣的名詞:  首屏時間 (頁面整個 load 完的時間 (數據填滿用戶瀏覽器的時間))。



創意與專案管理的冰與火之爭
這場我沒有太多的想法耶 XDD 抱歉。
只是很少再跟程式相關的場合聽到跟 PM 有關的議程,這也是一種開創呀~



whoscall & MongoDB
gogolook CTO 分享 mongoDB 的應用,雖然我沒有用過 MongoDB,不過是很實戰的分享經驗,講者說明了從 GAE 轉換到 AWS 使用 MongoDB 的過程之中遇到什麼樣的問題以及以何種方式去解決等等。

聽完之後我才知道原來 Time Sync (時間同步) 這麼重要,index size fit in memory,有多少資料配多少的記憶體,採用高水準 DISK等等。

希望之後會有 ppt 可以看,我很想收藏啊~






PHP Extension  開發實務

我的 PHP 程度很普通,所以這場是有點半登出的狀態,講者問: 『有誰看過 php 的原始碼?』 我想會場大概不超過 10 個吧,其實我也沒看過... Orz



運用 Docker 部署PHP專案 (Fntsrlike)
Docker 這陣子真的是很火紅。

這場真是大爆滿啊,不知道是不是因為最近 Docker 越來越多人用了。
這場我很難做些什麼筆記,講者的整個介紹算是很完整了,剩下的就是需要靠自己去學習 Docker 的部分了。

順便推薦一下臺北有個 Docker-Taipei




HTTP accelerator - Varnish 應用 (Ninja)
今天聽下來最喜歡的一場議程,在講述 Varnish 的應用,如何用 Varnish 做 cache,為什麼選擇 Varnish? 使用之後的問題是什麼?

抱歉,以下這段是我記錄給自己的簡短的 note,請大家還是看 PPT 吧,當時要邊聽議程邊打字,可能難免有誤。

Web Server 安裝 Varnish
  • 優點: 線上服務快速部署
  • 但是線上服務已經在 hosting 了,當時的狀況是把一台下下來,另一台前端檔一個 Varnish。
  • Varnish 是檔在 apache 之前,varnish 會判斷 request 有沒有 cache 的資料,沒有才會跟 apache 溝通。

新的問題

  • Hit Rate 遞減
  • Cache 空間浪費
  • 後來發現機器越開越多,網站反而變慢,因為 hit rate 降低了 (被 cache 在 varnish 的次數變少了)。
架構調整

  • 幾台 varnish 擋在 apache 前
  • 風險: 單點失效影響服務。如果某檯機器失效的話,導致後端服務的 web server 可能會承受到 2,3 倍以上的量。
  • Warm up 存在 gap。
     cache miss storm
避免 warm up

  • 依舊保留 varnish 擋在 apache 之前
  • (單點失效的時候)短時間有問題而導致 varnish 掛掉的話,使用 switch 調配 ( 但是這是一個理想的情況)

VCL (Varnish config language) - 聽講者的介紹,是個方便的東西呀

VarnishStat 即時狀態
VarnishHist 線上網頁來源

議程後面有一段在講 cache-control,我覺得好像是蠻重要的部分,雖然我是有做筆記,不過很亂,不好意思放上來。
這場議程會後,我有點想知道 Nginx 跟 Varnish 的差別是什麼...



結語

其實還有幾場是我去聽但是沒有做記錄的,因為電腦快沒電了...,然後也沒有特別的想法,就沒再多描述了,Sorry。

隨著工作的時間跟累積的經驗,越來越能聽得懂某些議程的議題是什麼,感覺還不錯。
去年聽 PHP Conf,沒有像今年這麼的有心得,不完全跟今年的議程安排有關係,一方面也是隨著工作上遇到的問題,越來越能聽得懂某些議程想要分享的內容。

一年的工作累積,有差。進步總是很漫長,短時間內看不出結果,但累積到一定的量,還是會有收獲的 :D


我想今年台灣的 Conference 也算夠多的了,不知不覺也參加了好幾場....
偶爾要放下電腦,停停走走,走走... 停停...



2014年10月16日 星期四

做 Mobile Web 的兩三事...

是說編編擔任前端一職至今也兩年了,也有做過幾次 Mobile Web,(雖然稱不上專業...,但是我沒有放棄要努力好好學的意思...),之前一直想要記錄一下心路歷程,但是一直停留在我那點好幾次分頁的 google 草稿,再加上今年年中有一段懶散,一直沒有寫文章 。

對了,我喜歡片段式的記錄自己學的東西,然後再一次集結起來。

(此圖僅是示意圖而已)

我見過兩種手機版網站的開發的方法

1. 一種是真的當作另一個網站在開發

MySQL Error Code: 1175 錯誤

其完整的錯誤描述如下:
Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Queries and reconnect.


事件起因:
我想要刪除某個 id 在多對多 table 的所有 row。


解法:
在 Delete From ... 之前加上
SET SQL_SAFE_UPDATES = 0

即可解決。

2014年10月14日 星期二

MySQL Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) ... 錯誤

在執行 MySQL 的 Stored Procedures 時,因參數帶入中文而有這樣的錯誤訊息。
簡單來說是跟語系的設定有關,但不管我怎麼修改 database 的 charset 或是 table 的語系,依舊沒有解決這樣的問題,因此在 stored procedures 裡面加了 COLLATE 的語法。

要注意的是 COLLATE 不是加在參數設定的地方,而是在 WHERE = 時為該 field 設定 COLLATE utf8_unicode_ci 的設定。

Example:  不能這樣寫
如果將 COLLATE 的設定寫在參數的地方,MySQL 將會回傳 Error 1235: This version of MySQL doesn't yet support 'COLLATE with no CHARACTER SET in SP parameters,... 的訊息。

DELIMITER $$
CREATE PROCEDURE `ls_cn_sp_getadminuser`(
      IN `_admin_account`  VARCHAR(255) COLLATE utf8_unicode_ci,
      IN `_admin_password` VARCHAR(255) COLLATE utf8_unicode_ci
                                  )
begin
  # 撈出該 adminUser 的資料
  SELECT *
  FROM   `ls_cn_admin_user`
  WHERE  `admin_account` = _admin_account
  AND    `admin_password` = _admin_password;

END


Example:改成這樣寫

DELIMITER $$
CREATE PROCEDURE `ls_cn_sp_getadminuser`(
     IN `_admin_account`  VARCHAR(255),
     IN `_admin_password` VARCHAR(255))
begin
  # 撈出該 adminUser 的資料
  SELECT *
  FROM   `ls_cn_admin_user`
  WHERE  `admin_account` = _admin_account COLLATE utf8_unicode_ci
  AND    `admin_password` = _admin_password COLLATE utf8_unicode_ci;END







2014年10月12日 星期日

『程式設計人應該知道的 97 件事』讀後感


這本書非常適合在寫程式寫到腦袋有點鈍掉,又不想停下來好好休息的人拿去咖啡廳坐著看一看。

我不知道大家 coding 到有點 co 不下去的時候會做些什麼事情,如果是我,就是在臺北東區亂走路,但又不至於走9遍忠孝東路,或是焦慮的喝著有咖啡因的液體...,沒有要幹嘛,但就是也不想睡覺休息 XD。常常我是邊走路邊想事情。

這本書,整體來說,並沒有什麼總結,只是很多人對於工程師的一些想法,不論思考, 做事的方式, coding 跟重構等等。

有些人的想法,看了會很有共鳴,你會覺得,好像我也是這樣做, 好像...我也是這樣想。有些人的想法,可能跟你互斥,不過都是別人的經驗,你可以汲取你認為好的,或是思考一下,不想做 plan A,那如果是你,你會有什麼樣的 Plan B,因為方法沒有一定,端看你的工作環境,  coding 方式, 同事, 客戶等等。


蠻意外的共同點
  • 有幾位專家認為增進 coding 的能力之一是共同參與別人的 open project,或是去看那些開源的專案的程式碼。
    • 這點我自己承認我沒做好,因為我沒什麼耐心看別人的 code,除非是我很有興趣的專案,像是一些用 JavaScript 寫出來的效果等等... :P (還需要多培養....)

註解不是邪惡
  • P.32 那篇是個很好的故事,簡單來說就是,作者在念大學的時候,老師出了一題算出平均值的程式,題目不難,作者得到了一個勉強的分數,但是老師在評分卷上寫著: 『沒有註解 ?』 。老師會這樣問的原因是,老師跟作者都知道這段程式碼目的是要做什麼 (因為已經知道題目了),但是這樣還不夠,『程式碼必須可以對下一個的程式設計師解釋他自己』。
  • 但是也不該過度註解,註解最好可以用來解釋程式無法解釋地清楚的地方 (可以跟『在程式碼無法表達之處註解』, P.34  做比較)
  • 總是有機會會寫到很複雜的功能
  • 『如果這東西很難寫,那麼也應該很難讀』,這句的意思為反意,要注意程式碼的可讀性 (update 2015-01-15,謝謝 洪象成)。

學習程式以外的語言
  • 是的,這篇我很有體悟,尤其剛參加完英文講者蠻多的 JSDC 之後,要好好學英文...

程式碼的審查. P.28
  • 這篇建議可以給會被 code review 的新人看看,我曾經有犯過這種錯,就是被別人 code review,但是我覺得那是對方的偏見,改了我的 code 有時候心情蠻差的。但我後來是蠻喜歡被 code review 的...,有時候就是這樣,當你很討厭被 code review 時,就一直有人會來 code review 你,當你想要有人幫你 review 時,卻很難有這樣的人 XDD 這機會很棒啊,如果有人要 code review,要心存感激啊 !

    程式碼的審查不是用來指正新人的錯誤,而是分享知識,這個很重要。不要讓 code review 變得很嚴肅,如果公司能把 code review 變成一個快樂的點心跟下午茶時間,那會很不錯。


別在你的測試資料裝可愛. P.50
  • 這篇非常有趣,因為真的很容易發生這樣的事情,簡單來說就是,多為你的客人著想 XDD,情境有點類似假如客戶提出了很奇怪的要求,然後你在 log 或是 alert 寫下一些情趣化的 log (ex: 別再按這個鈕了,沒有功能,你這白癡) 之類的話,或許工程師覺得好玩或是無心寫下,當做 debug 用的訊息而已,但是如果忘記拿掉,在客戶面前 demo 時,會給客戶留下很不好的印象,也會很尷尬 XDD 
  • 要這樣寫測試的 log 也要記得拿掉呀 XDDD

學會評估時程
  • 這個是我覺得很難學的部分,因為一個需求,怎樣算完整,我又該怎麼估時間呢 ><,建議以後做一個功能自己記錄一下所花費的時間跟工作內容的細節。
  • 不過這篇的重點不是要工程師給上級一個明確的時程,重要的是釐清需求是什麼, 評估目標跟如何達到自己的承諾。


有幾篇是在講重構跟 pattern,這個可能給有寫過比較大型或是 C++/Java 專案的人看的,我就比較難融入在其中。


P.45。最後,做大量審慎的練習,『達成專門技術最重要的元素,就是你花在進行審慎練習的時間,先天的資質不是主要的原因』。審慎地練習是一種學習,這學習會改變你,也會改變你的行為。這篇是很好的分享啊~ 我很喜歡 :)


我只有記錄幾篇我認為很印象深刻的,
再多說就破太多梗了,要給書商賺點 $$,
有興趣的捧油可以去書店翻翻這本書 :)

JSDC 2014 會後

今年的 JSDC 一樣是辦在中研院,這是第二次參加了,
不過上次是工作人員,這次是會眾。
(我很抱歉中途離開了 JSDC 的工作人員的 member。)



和以往很不同的是,今年的票價是 (早鳥 4500 ) 5500 台幣,議程講者較多國外講者,然後有現場口譯。
整體的滿意度是:

  • 票價: ***
  • 議程: *****
  • 中餐跟點心: ******

現場口譯個人認為還不錯,挺需要的,口譯人員的翻譯我也覺得不錯。



然後不知道為什麼,每次去中研院天氣都很普通.....
在三天連假有其中兩天 7 點就要起床前往中研院參與這樣的盛事,不是一件簡單的事情,我曾經早起睏到後悔報名 XDDD,但是心裡知道不能如此墮落。

Day 1,第一天的入場程序不知道為什麼卡很久,真的不知道為什麼 XD....


Future of Enterprise Web Applications
接著是第一場的 Sencha 的講者,老實說第一場完全處於登出狀態,理由是自以為聽得懂英文,太晚戴上口譯翻譯機,第二點是這個議程的結束讓我完全處於有點錯愕的狀態,有點可惜,我覺得好像沒有聽到太多關於架構面的事情,我想或許他們把重點放在 Day2 的 Workshop 吧...,不過我沒參加 Day2 的 workshop。

2014年10月11日 星期六

mobile web 的 scroll 行為調整

最近研究起 Mobile Web,發現某區塊在上下滑動的時候沒有那種很滑的感覺(不好意思... 真的不知道怎麼形容這種感覺),想要這種感覺的話,可以試試 overflow-scrolling 的屬性:

-webkit-overflow-scrolling: touch;
overflow-y: scroll

畢竟 mobile web 不是 native App,如果想要 scroll 很順的話,可以參考看看。不過要很抱歉的說我並沒有細心的研究這個 CSS 的用法,不過上網查到的都是介紹使用 overflow-scrolling 。有機會我會再詳細補上。


參考:
Native Scrolling on Touch Devices & Polyfilling
Momentum Scrolling on iOS Overflow Elements

2014年10月7日 星期二

skrollr 製作滾動視差 ( Parallax Scrolling )

Skrollr 網址。

這篇不是教學文,只是稍微提及,製作滾動視差的話,Skrollr 是我遇過目前很好的入門,問題是寫到最後難以避免整個 HTML 架構跟 inline-style 混搭風,如果你能接受 HTML 充斥著 data-attribute 跟 inline-style 倒是可以試試看這款。


問題點 :
小的在使用 Skrollr 上發現在 Mobile 觀看時會綁架整個頁面,也有不少人在 Stackoverflow 提及此問題。最後我很孬的只有結論出兩種解法 :

  1. 要嘛就是在 Mobile 或是 Tablet 拿掉 skrollr。 (我最後選擇了這種...)
  2. 修正他。


參考 :

Vue multiselect set autofocus and tinymce set autofocus

要在畫面一進來 focus multiselect 的方式: 參考: https://jsfiddle.net/shentao/mnphdt2g/ 主要就是在 multiselect 的 tag 加上 ref (例如: my_multiselect), 另外在 mounted...