mongodb group by

SQL-to-MongoDB2
目前在日常生活偶爾會使用 mongodb 做一些開發或存一些 log,除了基本的 json query 以外,偶爾需要用到如 mysql 的 group 功能,剛開始覺得好像沒有辦法直接用 query 做很困擾,實際做過一次複雜的 query 以後才發現 mongodb 的彈性實在是強大不少,除了語法不相容要重學以外。

舉一個實際的例子,有一個表存了 web 的 access log,然後想找到哪個頁面(page)最常被存取,按照頁面的存取次序排序,每一個人在一天存取同個頁面多次都只能算一次(不重複的工作階段 in GA),而且要排除特定 IP 不被計算(自己)。

在 SQL 裡面直覺寫出來大概會是這樣:

SELECT page, count(*) count FROM access_log 
WHERE IP != '192.168.1.1' 
GROUP BY page
ORDER BY count DESC
limit 10

雖然簡單,但是這個寫法沒有過濾掉,不重複計算同個人的重複瀏覽,所以直覺也是用子查詢才能解決這個問題。
Continue reading…

hackathon.tw 心得

IMG_1224
上禮拜(2015.01.31) 第一次去參加了一場由 hackathon.tw 所舉辦的黑客松,所謂的黑客松像是工程師的馬拉松,從發想、實作到介紹連續三十小時不間斷的寫程式,透過短暫密集的與一大群人(一兩百人)一起在同一個環境裡,並與自己組員高度密集的討論協作。

工作了約一年的時間,從學生變成了上班族,寫程式的心態也不斷的被挑戰與改變,在一個半新創(快過新創期了)的公司,跟在學校的做事方法有點類似,但是心態、目的與方法都有很大的落差,參加這場活動讓我重新體驗並反思了寫程式的目的與方法。
算是一個蠻有趣的經驗吧…?
Continue reading…

SauceLabs selenium testing with selenium-webdriver

selenium 是用來做瀏覽器測試的工具,讓你可以安排一個流程在真實瀏覽器上運行來測試結果是否如預期,已經被大量用在 Web 的測試上,這已經許多年,也有許多教學了。

而在 selenium 的測試上,最方便的是能跨瀏覽器測試,但是最麻煩的是你要安排有很多瀏覽器的機器(或虛擬機器),並把環境部屬好,供 selenuim 運行。

而 saucelab 是一個雲端的測試平台,就是用來解決這個問題,他提供了隨時供你取用的運算資源,讓你隨時可以模擬各種平台不同版本的作業系統與瀏覽器,他是一個付費的服務,但是有免費試用的額度可以玩玩看。

這篇文章紀錄從頭到尾透過 nodejs 在本機建立建立一個 selenuim 的測試環境,最後在透過 saucelab 來測試其他作業系統與瀏覽器。
Continue reading…