2015年9月30日 星期三

Laravel 在 Eloquent alias table 名稱

在 Laravel 撈資料的時候發現有時候 Eloquent 很不好組,尤其是有 sub query 的時候....,後來用了 DB 的方式去做 Query:
$query = DB::table('xxx_xxxx AS a')
     ->where(
         'a.GG',   '=',
         DB::raw(
            '(select max(GG) from xxx_xxxx as b where xxx_xxxx.`no` = b.no)'
         )
)

但我後來發現原來 alisa 在 Eloquent 有方法耶...
在 Eloquent 使用 Alias,只需要使用 from 的這 static method,比方說上面那一句可以改成下面這一句,後面的 where 幾乎是沿用就可以了。

$query = XXXXXXX::from('xxx_xxxx as a')
$query-> where(
'xxx_xxxx.GG,  '=',
DB::raw(
'(select max(GG) from xxx_xxxx as b where xxx_xxxx.`no` = b.no)'
)
);
堅持要用 Eloquent 的原因是,之前改了一些 getter/setter (accessors and mutators),如果今天用 DB:: 的方式去撈資料,我改寫的 getter 好像就沒有作用了,哭...,還好後來還是有找到方法,硬是全用 Eloquent 的方法取資料。




2015年9月23日 星期三

關於買樣板來製作網頁這一件事情

穎(@look_me08)張貼的相片 張貼

(因為不放圖顯得很空洞,所以放一張今天晚上在左道咖啡的照片)

今天買了一套 Admin 介面的樣板,我想起這件事情,還滿值得研究研究談一下想法。事實上我很常買樣板,甚至有些我根本也沒有用到,不過買回去第一件事情,想想別人為什麼可以做樣板做到可以拿來賣錢,一定有它方便於我的地方。

首先,完整性不用講,常常我們腦袋裡想的天馬行空,後台想要多牛B就多牛B,但就是不想動!? 對吧,於是幻想就停留在那一刻,然後刻出來的東西照樣平庸。

接下來是樣板有時候是『學習的樣本』,你可以買到用 Angular 製作的樣板,bootstrap 一樣,很多很多,你可以透過套過樣板知道別人怎麼把這一堆前端的 library, plugins 『兜』在一起,就算手法不是很高明,但也是一種解決方案,千萬不要覺得這些事情很簡單... 前端是很苦工的...。

可以學但不要照單全收,有些樣板不一定是很有組織的程式碼,這樣也是挺合理的... 因為畢竟他可能只是在 demo 某一件事情,通常你買來可能還需要再整理過。

再來是學習使用現有的樣板套用在自己的系統上,不論你的 template engine 是什麼,趁機組織一下頁面可以共用的地方,分出哪些是東西是 layout, partial, widget, 或是 bla~bla~bla~,有助於一點點習慣程式喜歡『re use』的概念。


當然也有人會認為,買樣板沒有樂趣,很有可能撞板或是什麼的... ,我個人是覺得只限於後台或是內部系統會買。前台的話,我還是喜歡有設計過的網頁 :P

只是想起,有一次在做手機版網站,當時還菜,一直不懂為什麼手機上看我的網站,那顆 menu 的按鈕按下去之後,感應很緩慢,不知道有 fastclick 可以幫我解決手機上 click delay 的問題,這點,從樣板學來,所以我知道了有這個工具。

第二個經驗是,樣板使用的 plugin 有時候會讓我驚訝,『原來有這種工具!』的心情。

前端是一個做久了有時候會很沉悶的工作,但偶爾發現一些驚喜,內心還是會很澎湃的,也許有這樣的心情的時候,才發現自己已經是個有點懶散的老鳥了...,因為懶,所以我寧可刷個幾百塊錢買樣板,企圖得到一個系統看起來很完整,能 work,眼睛順眼的結果。


2015年9月22日 星期二

Rails Girls Weekly - JavaScript Basic For 6 Weeks(2/6)

(圖源: Railsgirls Taiwan 粉絲頁)

這週是 week2,講的內容是關於 JavaScript 的 dialogs box,還有一些條件判斷。

上課是還蠻輕鬆愉快的啦,希望大家都堅持的下去,可以一路上到 week6 :)

其實可以的話,看 readme 比較清楚。
github repo: https://github.com/winwu/javascript-basic-toturial/blob/master/week2/README.md


PPT:


『在 PHP 上學會自動化測試與實戰 TDD』 ... 下課後


前言
我自己剛開始在使用 phpunit 遇到的一些問題: (嚴格來說也不能說奇怪... 要說自己涉世未深..)
1. 效能問題 (越跑越慢, 甚至慢的奇怪).
2. Database 沒有設定好,設定錯誤導致應該要以 SQLite 而不小心跑成 MySQL.
3. 類別的 Mock 不會寫.
4. tearDown 的地方有時候會忘記.
5. 測試碼太多支時,會有點不知道怎麼組織
6. 會丟 Exception 的 function 不知道怎麼測,又不希望被標成 risky tests (phpunit 如果發現你的  測試 function 根本沒有 assert 時會出現的訊息)
7. 知道的 assert 太少 (雖然這完全是沒唸書的關係...)


上週末,去上了兩天小鐵(大澤木小鐵)的 TDD 課程,更了解 TDD 的連續兩天 workshop,算是非常有收獲,尤其七,八月以來,工作上的團隊開發也漸漸開始使用 TDD 開發,雖然很不熟練,用法用的亂七八糟,但是也是因為有過這些錯的經驗的接觸之後,來上課才更能瞭解什麼是 better way,我還蠻喜歡這種感覺的,就是我不喜歡從0開始,然後一直讓別人來教我什麼是好的, 什麼是對的,這樣的感受太不夠深刻了 :P 不犯錯的學習只會讓我覺得這件事情好像不難?! 然後挑戰性就失去了...


第一天講單元測試, unit test 算是很小的單元,一次只做一件事情的測法,這個算是剛學習測試最好上手 and 理解的。再來一些原則,像是 3A ... 還有教到一些重構,因為寫測試的時候,難免會邊重構, 邊寫測試,所以學測試,跟重構也有一點關係。(我也想起自從開始學 TDD 之後,也會開始對重構很有興趣,這真的是不知道為什麼 XD) 因為這堂課的關係,我才發現 phpstorm 好棒啊! 這些 refactor 的功能 sublime 都沒有.. 雖然有些殘念,不過接下來可以在專案重構時,也趁機學學使用 phpstorm。

(圖: 主辦單位準備的點心,這紅茶綠茶讓人想到測試就是紅燈, 綠燈不斷循環阿... 但記得最後 commit 上去要綠燈就是了~)

另外 phpunit 產出 coverage 報表非常的不錯,看到程式碼開始有一點覆蓋率之後,感覺就像是有在上班啊 (誤)

第二天著重在 BDD,只能說 BDD 非常有趣,大概是因為感覺很像照著 spec 來寫測試,那些腳本寫起來,雖然很抽象...,但是我竟然是在用程式語言寫一個 spec 的感覺,很神奇+詭異,測試工具真的是什麼怪功能都有 @@ ~ 只是剛開始寫,覺得不太順暢,還需要多練習就是了...尤其 Example 用 Laravel 來講解,又更貼近於我的日常了 :P ,心得是: 相較於 TDD,我覺得團隊要導入 BDD 比 TDD 還難...,只是『感覺』,說不上很特別的理由,大概是因為 spec 本身就很難有(存在),就算有也會變動,如果今天的需求是改 spec,那麼 BDD 要改,程式改了,TDD 也要改,一個測流程,一個測功能跟程式,超 high 的 XD 感覺 commit 會很多~

在專案上的導入測試這件事情來說,我反而覺得是誰先來開始帶起這個風氣比較重要。

回家 TODO :
* 學習使用 mockery 去 Mock 物件
* behat (BDD)
* 等 91 哥開下一梯 TDD 的課程 :)

為什麼要上 TDD 實戰,跟上面的前言7點有很大的關係,因為有些情況不知道自己做得對不對,有些內心還沒有解法,所以想要更了解多一點,這樣比較扎實 :D 這兩天真的很有回饋感 XD 感謝主辦單位,也謝謝小鐵 ~

2015年9月15日 星期二

Rails Girls Weekly - JavaScript Basic For 6 Weeks(1/6)

今天去五倍紅寶石講一場 JavaScript 基礎,因為這個課程分六週上,所以今天只是第一週,投影片在此。只希望來的人都有收穫,不要充滿挫折。。。 下班還願意學習的人真的不容易 :) 辛苦了!  

下週二一樣有 week2,到時候再分享新的文章。


Coursera 機器學習基石 第二講:Learning to Answer Yes/No [二元分類] 筆記 (很亂,不要看 ><)

這兩天看的是第二講

我可能還要再找週末時間整理吧(預計中秋連假...)
(目前在尋找好編輯數學公式的工具...)。

奧.. 我非常累,先睡
事情已經多到我覺得是我的極限了。


2015年9月13日 星期日

Coursera 機器學習基石 第一講: The Learning Problem 筆記

請大家忽略這篇吧...
這是記錄給我自己看的,筆記很亂,只有我自己看得懂 :P
林軒田老師的課真的很不錯,就以介紹 hypothesis 那一段來說,比 Ng 的課好理解些,或許語言真的有差吧...,雖然 Ng 的課有翻譯,可是還是有些吃力啊...

week1 講 Learning Problem,光是把影片看完,消化一下,筆記一下,大約 2-3hr 吧...
說實在還真的沒什麼把握有能力 pass 這堂課耶,程度落差大...
然後我真的睏了,沒什麼力氣整理筆記,這也是順手拿起來的紙張寫一寫...
(字醜得比國小生還醜..)


2015年9月10日 星期四

『機器學習駭客秘笈』 讀書心得 (上)


書目: 機器學習駭客秘笈
Machine Learning for Hackers - Case Studies and Algorithms to Get You Started
作者: Drew Conway, John Myles White
譯者:林威仰
出版社:歐萊禮

我一直在猶豫我到底要不要寫這篇心得,因為我到底能寫出什麼有幫助的事情我也不知道?!不過看看就好... 希望沒有浪費讀者太多時間。

關於你要看這本書的話,有幾個建議:
*這本書的範例是用 R 語言來解說,所以,比較優良的情況是,你有學過基本的 R 應該會更上手,不過也不用太擔心,第一章節會介紹 R 的安裝跟一些基本概念。
*這本書介紹了幾個常見的 Machine Learning 的方法,像是分類, 回歸, 資料分群, 最佳化。


## 前言
* 『機器學習是什麼? 抽象來說,是一系列的工具與方法,協助我們從各種記錄或資料中,萃取出其模式規則甚至是隱含其中的深層資訊。』- 第一頁。
* 這本書雖然用了『駭客』兩字,但不是我們心中所認為的那種駭客,而是指喜歡學習新技術,並且用來解決問題的人
* 機器學習涉及到非常多領域,基礎理論是數學跟統計學 (當然還有其他的啦 XD)。
* 機器學習包含許多的理論,初學者如果想要看這本書,最好可以對一些基礎的理論有所涉略。
* 『動手實做才是機器學習的圭臬』 - p.1 前言
* 機器學習有兩種方式,一個是『監督式學習』,另一個是『非監督式學習』。書中的第三章, 第四章,都是監督式學習。


## 第一章 使用 R 語言
*『統計學探討如何從解讀資料中的資訊』 - p.1
*『機器學習則是要將資料轉換為有意義的事務』- p.1
* 機器學習處理的問題不外乎兩個型態,分類問題跟回歸問題。
* R 的缺點是無法處理極大量的資料,如果你只是為了驗證幾個簡單的概念,使用 R 蠻適合的,但是目標如果是建立企業級的資料分析系統,R 就不會是最好選擇,像是 google 或是 facebook 都用 R  來做實驗性的機器學習演算法,但是真的要實戰,是會把演算法移到像 C 語言來實做之類的。


## 第二章 資料探索
(我個人覺得整理資料最難..)
這章對我來說其實在講數學比較多,會介紹平均數, 中位數, 眾數, 分位數, 標準差, 變異數。看了很頭痛的東西 XD 好想哭,好吃力...


## 第三章 本文分類: 垃圾郵件判斷
* 二分法,也就是分類問題(classification) 是機器學習常見的方法,這本書舉例了垃圾郵件判斷,分類法最重要的一個點就是特徵擷取,比方說,你拿什麼特點來認定某封信件是否為垃圾郵件? 。在這本書會介紹如何用內文的內容,去做分類,比方說某些文字出現的機率過高,有可能是就是垃圾信件之類的。

* 本文分類演算法又稱為 『單純貝氏分類器 (Naive Bayes Classifier)』,在書中的範例,將每封信的文字分成兩類的文字,一類是可能出現在垃圾郵件的單字,另一類則否,然後算出一個大概的機率,這還會談到先驗機率 (機率為多少就可以判斷是垃圾郵件) 等等。

* 章節會有實作的 code 可以看,有實做一個貝氏垃圾分類器,另外還用到了 R 的 tm 套件,tm 套件就是 text mining,用來做本文探勘的工具,還會用到 ggplot2 畫一些圖,感受一下分類的結果,恩.. 如果你覺得這章很 hard code... 那後面的章節更 hard code (哭),但蠻有趣的,如果你跟我一樣不懂實做,那就把方法看一看。

這章的範例雖然有趣,但一般的分類問題絕對不是用一個簡單的條件就可以將條件一分為二,所以接下來來到了第四章。

## 第四章 項目排序: 優先收件匣
* 這個章節其實是延續第三章,如果我們今天把一堆郵件做分類,一類是正常的,一類是可能為垃圾郵件的,再來,我們希望針對垃圾郵件的可能性做排序...

* 為一組資料做排序,也是機器學習常見的工作,最有名的例子: 推薦系統。

* 如果你還沒看過這本書,可以先思考看看: 你打算用什麼來排序哪些信件是重要的?

* 小提示: 在解決一些機器學習的問題時,視覺化資料永遠是一個了解資料的一個不錯的方法,幫助你瞭解特徵之間的關聯性。 - 參考 p.107


第五章開始我留到下回再寫,有點累,內容有點多,後面開始講看不懂的線性回歸。


結論
* R 的話,可以去上 coursera 的課,或是 datacamp,只看第一章就想要把 R 弄熟,不可能 XD。
* 這本沒有我想像中的.. 基礎 XD 可能我不是這個領域的人吧.. 感覺看這本書在平行世界,但是學到很多方法 :)。



PS: 這本書已經賣出去了

2015年9月5日 星期六

2015 台灣資料科學愛好者年會 - 系列活動 『 資料科學團隊培訓及導入經驗分享會』 活動筆記


我參加的是 2015/9/5 這一場『資料科學團隊培訓及導入經驗分享會』,以下是一些很簡單,隨手紀錄的筆記,比較片段,自行斟酌要不要看瞜... 講者說會後會分享 PPT,如果我有看到網址,我會補上 :)

有錯字請見諒 XD 打字很累的...

# 資料科學簡介 (0900:1030)
* 資料分析很像在掏金,你知道裡面應該有很有價值的金,但他稀少,一定要有對的工具把它找出來。
* 這是現在大家做大數據的困難:『有很多資料,但只拿出一點點東西』。
* 所以推廣資料科學,透過會議,研討會,讓大家知道我們有很多工具。
* 訓練資料科學家非常困難,講者覺得最重要的是溝通能力。這種人物很難找,你有聽過,但你很難遇過。

## 資料科學包含:


資料科學不是單一技術,是這些科學的集合。
  * 數學統計
  * 模式識別(雜亂的東西找出 pattern)
  * Data Mining
  * Machine Learning(讓電腦自動發展演算法)
  * 人工智慧
  * 類神經網路(幾十年前的學科,最近又開始紅了)
  * 資料視覺化
  * Big Data Modeling
  * Big Data Solution Engineering
    當你平常處理資料的方法已經不適合了,當你需要新的方法來處理新的資料,我們就需要新的技術。
  * EDA

### HIPPO
HIPPO-driven -> Data-driven
老闆說什麼就做什麼(那這家公司是 HIPPO-driven) 而不是 Data-driven。

## Data Science
大數據可以是形容詞 動詞 名詞... Example: 你這資料有大數據了嗎 XD

### Big Data
  * with height volume, velocity, or variety
  * 政府喜歡用『巨量資料』
  * 量是多大才叫做巨量? 每人定義不一點
  * 有大師認為,傳統的統計是經過抽樣,有經過抽樣的都不叫大數據
  * 資料一直進來
    * 像是電商
  * 反應速度很快
  * 多樣性,當你的資料跟以前的不太一樣,開始整合產生新的價值。
  * 我們不一定要一直去強調大數據這件事情
  * big data 太容易被誤用了

### Unknown Problem 
  * 傳統的 BI (Business Intelligence) 你知道問題,也知道答案,但是精確值不曉得。
  * Data Discovery 企業根本不知道這個問題(ex: 在哪個跨國公司有潛力?)
  * 探索式的開發,結合其他的資料,找出企業的問題,或是開發新的客戶

### Data Collection and unification
  * 因為科技的進度可以搜集到以前搜集不到的資料 (ex: 手機,手機上面有很多感應,透過手機的水平垂直,震動, 加速研究台北市公車哪一條路開的比較平穩)
  * 台北市有三千支 camera, 車上的行車記錄器, 微軟的年齡偵測。如果資料夠大,知道你是誰,你的情緒。
  * Deep Learning。
  * Google Map 過去是有大概去推估門牌號碼,但是用 Deep Learning 可以做得很準,用影像辨識處理,這是前幾年還做不到的事情,但是現在做到。

### Data Product building
  * 因為電腦處理的速度變快,所以我們很容易打造 data product。
  * 他有很多種含義,現在比較常講的是 input 的資訊,output 會直接做判斷,不用經過人為。
  * 推薦系統是典型的 realtime data product,案例像是電商,比如說 Amazon 做了 20 年了。

### Business Context (i.g.,goal => revenue)
  (--沒記錄到什麼--)


## Data Science is More Than..
* 分析工具 (R, Python)
* Infrastructure(Hadoop, NoSQL)
* Big Data(small data also do) small data 也可以小兵立大功
* Data Visualization
* Statistics/Machine Learning


## 案例
1. 計算社會學
  * 當電腦科學家遇上社會學
  * 社會學很難?! 因為它牽涉到人,不能重複,看不到因跟果。
  * 我們都需要資料來佐證,可是跟人有關的資料很難取得。
  * 涉及隱私的資料都很難取得。
  * 常用的方法: `analytics of web-scale observational data`, `virtual lab-style experiments`, `computational modeling`.
    * virtual lab-style experiments: facebook  在 internet 上做實驗,像是投票,如果是針對某個黨派做操作,是有可能造成選舉結果的。
    * Google/Facebook 可以操作決定讓你看到的內容ㄡ
    * 『排行版』是有效的。排名在前面會增加下載量,或是購買量(有可能造成買榜行為)。排行榜會不會改變你對某個東西的印象?
 
---


# 資料科學家的養成
* 技術背景

## 資料科學家
  * 統計, 機器學習, Domain specific data mining techniques, Data Visualization

## 資料工程師
* 資料錯了你好歹要看得出來呀

## 資料科學家的特質
* hacking..
* 溝通能力跟人際技巧比較重要
* 兩到三個專業知識
* 懂得企業如何操作, 如何賺錢

## 資料素養 + 創意人的訓練
* 你會再遇到問題的時候,不做假設 不偏見
* 有經驗知道這個問題該怎麼搜集資料,及分析

## 幾個建議
* 獨處跟熱情

## 在建立資料科學團隊,找不到熟手怎麼辦?
* 這種人不會在市場上流動
* 幾本上你在台灣找不到這種人
* 三項領域出發: 資訊, 數學統計, 解決問題能力
* 個人特質要具有: 細心富創意,溝通能力

## 最小團隊組成
* 講者認為理想最初始團隊: PM, 資料科學家, 資料工程師*2, ,資料視覺化工程師。
* 兩個不嫌少,先求有再求好

##『大』數據處理平台?
* 大部份的公司是在處理資料缺乏結構的問題,而不是資料過大的問題。
* 『大』不是重要的特質
* 30% 的大數據的問題在於『必須分析來自於多個來源的資料』
* 隨機抽樣是我們的好朋友

## 資料倉儲團隊 vs 資料科學團隊
* 倉儲團隊管理整個團隊的資料,但多數事情是事先被決定的。(問題會變,但資料差不多就是那樣)
* 資料科學: 資料倉儲團隊的『客戶』
*  企業領導階層指出方向之後,資料科學團隊深入資料之後,定義問題

## 釋放資料科學家
* 資料科學家不應該做報表撰寫 (解放他們吧..)

## 培養對資料好奇的文化
* 資料團隊要懂得 re-phrase 問題
* 資料團隊負責重新定義問題,以及找到答案

## 混出資料科學家
一定要有商業敏感性,你找個統計學家是沒有用的。數據部要跟業務部的人經常在一起,不只是一同開會,更要一起吃飯喝茶.

## 資料成為企業資產
企業資產而非部門資產。
制度一: 程式/資料透明化/共有
制度二: 所以資料由單一團隊組成
制度三: 資料團隊成戰略編組, 高層全力支援 (ex: 阿里巴巴~ 資料策略委員會)

國內狀況目前: 以上皆非。 XD (覺得爽)

## 資料團隊目標要明確
『你們測量過的東西,是無法管理的』- W.Edwards Deming
* 績效量化,通常不是無成本,需要額外的投資跟時間累積。


##結論

其實去年也參加過了,心得一樣,資料科學的技能要持續,不然就是 nothing  n! o! t! h! i! n! g!

(只是一年了,還是覺得自己很廢廢的 XD)

2015年9月4日 星期五

git commit 時用 vi 編輯儲存時出現 Error...

不知道為什麼我的 Mac 在操作 git 時,打 commit 後 :wq (儲存離開),會出現這樣的 Error:
➜  erp git:(master) git tag -a v1.1.1
error: There was a problem with the editor 'vi'.
Please supply the message using either -m or -F option.

這個 Error 很慘,表示我剛剛打的 commit 都不見了,所以也沒辦法有下一步 (push) 的動作。

在網路上有找到一個很奇怪的解法,要我把 git  預設使用的編輯器的 bin 路徑改掉,只要下這樣的 command 就可以正常 git comment:
➜  erp git:(master) git config --global core.editor /usr/bin/vim
很神奇... 如果有人知道為什麼請告訴我 TT。

Vue multiselect set autofocus and tinymce set autofocus

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