over 4 years ago

TL; DR 版本:Linode 是躺著中槍的路人

上個月,Linode 被打下來,洩漏了一堆資訊。逼得很多人不得不換卡和換密碼。幾個小時前,在 HackerNews 的一篇文章揭露 Linode 其實是路邊的那個倒楣鬼,人家不是要揍他,而是揍他的客戶...

以下內容是基於 HN 上的一篇懶人包翻譯,然後加上HTP 雜誌原文裡的資訊。

故事是這樣的:

有個駭客組織叫 HTP,最近有個匿名組織假冒成另一個組織 "ac1db1tch3z" 想要挖他們的底(去挖 HTP 的 botnet)。HTP 非常不爽想要報復,後來他們查到這個匿名組織在用 SwiftIRC 這個 IRC 服務在聯絡。而 SwiftIRC 的 nameserver 放在 Linode..。

所以 HTP 想要把 Linode 打下來,hack 進 SwitftIRC 放後門,然後報復回去。

他們一開始直接打 Linode,結果 1day exploit 被 Linode 防下來了。但是,Linode 的域名註冊商 name.com 被打下來了。所以他們的計畫改成弄一個 transparent proxy,打算從中間攔下 Linode 的帳號密碼...。

=== 題外話 ===

不只 name.com 被打下來了。 Xinnet, MelbourneIT, and Moniker 也被打下來了。
這一波總共有 550 萬的 domain 被打下來..no kidding

=== 題外話結束 ===

本來計畫是這樣的,但是他們發現了一個更棒的洞,直接打下了 Linode ...

這當然很 high 啦。他們當然直接拿下 SwiftIRC 開始種後門。更精彩的是,因為不少站台也放在 Linode,中獎的名單還有: Nmap, Nagios, SQLite, OSTicket,

Phusion Passenger (modrails), Mono Project, Prey Project, Pastie, Sucuri, Hak5, Pwnie Express, Puppet, and oauth.

(都是一些超重要的站...)

但是,HTP 不知道的是,HTP 內部被 FBI 滲透了..因為 nmap.org 是個非常重要的站台(security scanner)。於是 Linode 很快就被 FBI 警告了 nmap.org 被打下來了。

於是,Linode 上其他站被 HTP 打下來的事,很快的也被知道了。這讓 HTP 的報復計畫來不及實現...於是 HTP 決定警告 Linode 至少在 5/1 不准講出去,否則 HTP 就會散佈這些他們拿到的這些敏感資訊(包括客戶資料以及信用卡資料)。如果 Linode 安靜的話,HTP 就會遵守約定刪掉拿到的這些東西。

=== 題外話 ===

敏感資訊包括 : 159000 + 信用卡資料,使用這名稱, $5 (我不知道是多少數量) 筆加密過的密碼,LiSH 使用者名稱,LiSH 密碼 「明碼版」 。還有 Linode 雇員 Login 帳號。

=== 題外話結束 ===

因為 HTP 打 Linode 本來就不是為了拿這些資料,而是想要打仇家。所以他們認為開給 Linode 的 Offer 已經算不錯了。如果他們不聲張,基本上就等於什麼事都沒發生。

但是!!Linode 還是公開了被打下的這件事(因為他們也被 FBI 逼著要公開,FBI 很明顯的不信任 HTP 會守約)。HTP 知道 Linode 其實被逼到一個很難自處的位置,於是也跟 Linode 達成了另一個協議,只要 Linode 在公告上說,經過分析之後發現打下他們的是 HTP。HTP 就會同意刪除當初拿到的這些資料....(很多 Hacker 其實只是想留名)

HTP 被這樣偷搞很不爽,於是他們就在查到底誰是 FBI 的內鬼。最近終於找到了,他們打進了這個內鬼的電腦,並且打開了 webcam。正好清楚拍到了 FBI 正在對某個 HTP 成員背後下指導棋,然後這個人就被踢出了組織...

這是到目前的故事。不過這是 HTP 單方面的故事,信不信就隨你了…

 
over 4 years ago

TL;DR : Rails 4 是一個溫和加強版的 Rails3,而且贈送了很多酷炫 feature,適合進場

上個月花了一點時間直接衝了 Rails 4.0beta1,利用 upgrade project 去熟悉整個 Rails4 新的架構。

若要我形容對於 Rails4 這次升級的感想的話,我會總結為兩句話 New Feature, Better Syntax

相較於 Rails 2 -> Rails 3 幾乎是個毀天滅地的重新大改寫(i.e. 不管是 Rails 本身,還是使用 Rails 開發的 project),Rails 3 -> Rails 4 的升級及變更內容顯得溫和許多。

Better Syntax

Rails 4 這次的改進,許多都是吵了多年以來的折衷方案、或者是許多開發者對如何設計,始終各自有 strong opinion 的主題,都找到 best practices 而被一槌定音了。或者是一些一直以來大家覺得老是被逼著這樣寫,非常智障的設計,也都被改掉了…

Routing

  • 讓 Routing 更安全:新增了以 http verb 為 syntax 的寫法,如 get/post
  • 支援 Rouring concern: 如果要幫不同的 resources 加上如同 :comments 這樣的 nested_resources 就不用一直再重複貼上

ActiveRecord

  • 強迫 scope 的寫法要全面改成 proc / lambda:避免 eager-evaluated 出現的問題。
  • Relation#not:以往要寫出 not 的查詢條件,寫法讓人哭笑不得。
  • Relation#none:以往撈不出集合,是 nil,要回傳 [] 空集合要自己作..
  • Relation#pluck:可以輕鬆只摘出某些欄位,以及要自己手下 select…
  • Relation#unscope:避免 default_scope + order 產生的排序問題。(因為下 except 無法閃過去)
  • update & update_columns:update 會觸發 callbacks, update_column 不會,但是 update_column 無法送多個 params,於是必須只好用 sneaky-save 這個 solution 繞過。現在 4 直接支援 update_columns

ActionController

  • before_filter 更名為 before_action:就是正名...
  • respond_to do |format| 拿掉 xml 以 json 取代:2013 年了,沒人再拿 xml 當 default API...

Security

  • 拿掉 attr_accessible,改用 strong_paraments:去年 Github 被打下的事情鬧很大,Rails 的安全策略重新被檢討,於是最後社群討論出採用 strong_parameters 得這個 best practices。

Other

  • 砍掉 public/index.html : 砍掉愚蠢的 publc/index.html,以往教 Rails 初學者第一課就是記得砍掉這個預設檔案,不然寫的東西都會看不到
  • add_flash_type :以往警告訊息只有 [:notice , :alert, :error ] 三種類型,但是自從有 bootstrap 之後。大家習慣使用的是 [:notice , :warning, :error]。要套版時要一直手加 , :flash => { :warning => "Oh no!" } 是很智障的事,Rails4 開放自定義 flash types。(P.S. 這是我提的...)
  • mem_cache_store 換成 dalli:自從 1.9 出了之後,原先的 :mem_cache_store (memcache-client)會撞到 utf8 問題,於是大家都改用 dalli 作為 backend cache,Rails 4 的 :mem_cache_store 預設將改為 dalli。

New Feature

  • Model Concern / Controller Cern: 重複用到的 method使用 Concern 複用
  • Turboklinks : 無痛自動 pjax。pjax 不難,只要你用 Rails4 …
  • Cache Digest: 採用 Russian Doll Cache Strategy,智能 cache 設計,以前多層 partial cache 的問題讓大家實在很頭大。
  • HTML5 input form helpers: 現在是 HTML5 的時代,開發時自然會使用很多 js plugin,如calendar plugin,但用傳統的 form object 去產生這些 field 實在很痛苦。Rails4 內建了 HTML5 input form helpers。
  • 採用 jbuilder 產生 json : 生 json 可以採用類似生 rss 的方式寫 builder,真是驚訝這個 feature 現在才出現 ….

結論

學 Rails4 最快的方式不是看書,因為總體而言,這次的升級並不是什麼大破壞。改良的 syntax 和好用的新 feature。反而應該會減少不少平常開發上的負擔。而學習 Rails4 最好的方式就是用勇敢在現有的 project 上,大方的開一個 rails4 branch 下去練習升。

不用花很多時間你就能感受到 Rails4 新 feature 帶來給你的好處…

// 警告:以上建議只針對 Senior Rails Developer。目前還有一些 gem 沒有 Rails4 版本。所以 project 升級有時候會遇到必須要自己 fork gem「手動升級/Hack」的狀況,不熟包 gem 者勿輕易嘗試。

這次內建的一些 feature,其實都還蠻有意思的,也許將來還會挑幾篇特別再寫幾篇文章...

資源

 
over 4 years ago

以後關於 Web 開發技術的東西,我會同步或 優先貼在 Rocodev官方 Blog 裡面。

裡面除了我的技術文章之外,也會有我們優秀同事所寫的一些技術文章,如 Sublime Text 2 Packages for Rails

歡迎訂閱! http://feeds.feedburner.com/rocodev

P.S. Rocodev Blog 裡的文章不一定會 100% 與這裡的 Blog 文章 100% sync。

SCSS 開發原則:禁用 @import 'compass'; 這篇我就沒有打算貼過來,所以建議各位兩邊都訂…

 
over 4 years ago

Rails4 在前天的 RailsConf 2013 釋出 Rails 4.0 RC1 了,這也表示大家應該可以進場了。

上個月在 Rails 4.0 beta1 時為了練手感,把手上的一個中小 production 專案,也上了 rails4 branch。

大概有幾個感想:

  • Upgrading to Rails4 這本書強烈建議要買,才 $15 USD,可以節省你不少 debug 時間。

  • 升 Rails4 建議不只開 branch,也用 rvm 開一個 gemset 出來作,因為 gem dependency 變更蠻多的。

  • rails4_upgrade 要裝。這個 gem 蠻好用的..可以幫你掃 dependency 問題。事實上 Rails3 升 Rails4 最討厭的是 gem dependency tree,因為 Rails 3 已經出太久了(幾乎快兩年了吧),很多 Gemfile 都強綁定 3 ,所以升 Gemfile 時會出現很多問題...

  • major gem,如 simple_form, devise, 幾乎都有 beta1 版,裝了就保證可以動。小的 gem 也幾乎都有 rails4 branch 可以 hotfix。(起碼我在 beta1 進場時遇到的問題就幾乎都有解,所以在 rc1 的狀況應該會更好)

  • 這次 Rails4 的改動,我個人的感想會是 Rails3 的 New Feature, Better syntax Version。如果平常 code 都寫的蠻漂亮(接口和封裝乾淨)的話,升級應該是沒有太痛才對。唯一讓人很煩的就是 gem dependency 解不完,還有牽扯到 scope 與 query 的部份幾乎都要重寫..:/ (目前是都還跳 warning 而已,但真要清 warning,如果 model 裡面 condition 很多,真的會清到手快斷...)

  • 有關於 New Feature 與 Better syntax 這個議題,我應該週末會寫一篇出來..

  • Rails project 的本體內容物是沒有改動太大,但大家拿來 build gem 的 internal API 改不少,這也難怪 Jose Valim 這一兩天也同步釋出了 Crafting Rails Applications (2nd edition): Expert Practices for Everyday Rails Development 第二版的 beta。我這幾天改 gem 要升 Rails4 也是中了一堆 api 變更的地雷…

  • 會逼大家都改 gem 的原因是因為是,連 migration api 都改了,所以只要提供產生 migration 的 gem 通通會逼要升 Rails4,真是個好招 -_- (連我只有兩個 commit 的 AutoFacebook gem 也不能倖免。解法在這裡

  • Obie Fernandez 前天也宣布了 Rails 聖經 The Rails 4 Way開始 beta。值得注意的是他這次是使用 Leanpub 釋出書籍的 beta,而非走 Informit 的 RoughCut 版本。

  • 為什麼我有時間測這些東西?好問題,我也不知道…明明最近就忙到快死了...orz

 
over 4 years ago

我寫的兩隻 gem bootstrap-helperboostrappers 目前都釋出 Rails4 版本了。

  • gem install bootstrap_helper -v 4.2.2.1
  • gem install bootstrappers -v 4.0.rc1

有任何問題,請回報到 Github 上的 issues 上。

Boostrappers 是針對我在 2013/03 月底測試 Rails 4.0.beta1 測出來的 solution 更換掉 gemset 的。目前應該是沒什麼大問題...

不過這次值得注意的是,Rails4 底層又換了不少 API,包括 generator 的 action 和 migration,所以為了 bnootstrappers 的升級,我被迫 release 了三隻 gem。

包括我之前寫的 AutoFacebook,也被迫出了一個 Rails4 版本。

  • gem install auto-facebook -v 0.1.rails4
 
over 4 years ago

最近公司頻道從 IRC 換到 Hipchat 上面,本來也想要把 Hubot 也一起搬過去的。

但是 Hubot 的安裝真是惡夢,光是 node.js 版本和 npm 之間的 dependencies 就可以搞死人。我們公司現在又沒有專職的 SA,工具蠻多都是我自己下海寫的....

最後想了一下,決定找一套在 ruby 下也很好開發的 hipchat bot framework。

最後找到這套 isis。因為敝公司 是 100% 靠 Ruby 吃飯的,所以瞬間就把寫 bot 的門檻拉到很低...

掛上 hipchat bot 的方式

因為 bot 是常駐在聊天室的,所以你必須要幫 bot 申請一個 hipchat 專用帳號。

hipchat:
  jid: DDDD_XXXXX@chat.hipchat.com
  name: Full Name
  password: <password>
  history: 3 # num of history fields to request
  rooms:
    - DDDD_room_name@conf.hipchat.com
    # - DDDD_second_room_name@conf.hipchat.com

Bot 走 Jabber 通訊協定。Jid 和 Romm 的資訊在 https://yourcompany.hipchat.com/account/xmpp

jid 格式 DDDD_XXXXX@chat.hipchat.com,room 格式 DDDD_room_name@conf.hipchat.com

開發 / 掛上 Plugin 方式

isis 的 plugin 撰寫很簡單。基本上只要到 lib/isis/plugins 多開一個 class 繼承 Isis::Plugin::Base,然後掛進 config.yml。
這樣就做好了...

Local 測試

bin/isis run 就可以把 bot 跑起來了。而若要背景常駐要跑 bin/isis start

Deployment

開發完畢推上 git 之後,要讓 bot 重開還要跑到 server 上跑 bin/isis restart。懶人如我當然覺得這很麻煩,所以我用 gitploy 和 Rake 檔寫了 autodeploy,跑 rake deploy 就會動了。

順便還參考 hipchat/hipchat-rb 的 deploy 檔,做了 deploy hook 掛在 bot 的 deploy rake 上,這樣起碼有人 deploy bot 時大家會知道,以免 bot 被搞爛了沒人發現...。

config/gitploy.rb https://gist.github.com/xdite/5424771

Rakefile https://gist.github.com/xdite/5424780

後記

昨天後續還寫了幾隻常用 bot,比如說「午餐吃什麼 bot」、「redmine #issue_number bot」、「網頁自動抓標題 bot」。

不過這不是重點,重點是 bot framework 架好之後,禮拜五晚上同事們竟然不睡覺,一直在惡搞這隻 bot 瘋狂加功能....XD

看起來 bot 的確可以玩出不少花樣啊...

 
over 4 years ago

這是一兩個禮拜前貼在 Facebook 牆上的心得。整理一下重貼在 Blog 上...

整理一下過去幾年的心得,如下:

JD 部分

寫清楚 Job Description

  • 寫清楚公司能提供什麼(薪資福利)
  • 希望對方已經有什麼經驗?(已具備什麼技術,什麼職位就寫什麼)。

不要徵超人

不要徵 「超人」。徵「超人」沒有意義。

這裡的超人若以 Web 界來比喻,就是你可能看到 JD 這樣寫「熟 Rails、熟 jQuery、熟 ORM、熟 API 設計、熟 OO Design、熟....」

若一個工作職缺,出現「超人」的內容。通常表示:

  • 這個公司只缺一個人,就是做到死的超人。Developer 不是笨蛋,看了也知道雇主想幹嘛…
  • 雇主不知道自己想徵什麼人。這對 Developer 來說也是危險訊號。

如果你不是這種心態,是認真想招到合適的人。那麼請把需求寫清楚。

  • 如果團隊用 Git 很深,那麼寫上「會使用 Git」。
  • 如果團隊用 Rails,那麼寫上「熟 Rails」。
  • 如果團隊用 Rails,願意收 junior,那麼寫上「具備 MVC 開發經驗」。

不要貪心寫得希望對方什麼條件都具備,這樣十之八九只會收到一堆充滿 BuzzWord (對方希望合你胃口嘛)的垃圾履歷,大大拖慢你篩寫出正確合適的候選人的速度。

必須要理解到一個現實,不是每個人一進公司,就有辦法馬上 pickup,寫一堆「熟OO」並沒有任何幫助。只要寫應徵此職位的「最低條件」即可。

舉例來說:因為如果對方不會 Git 你又不想 train 他 Git,你就要寫「會使用 Git」。如果你可以接受 train 對方 Git,只要寫「不害怕 Command Line」即可。不然寫一個「熟 Git」,雙方都不知道這到底是「熟」是要「熟」到什麼程度…

不要請對方直接寫信到 jobs@mycompany.com

通常這樣做的下場是,「你會覺得自己會收到一堆來亂的履歷」。這不是應徵者的錯,因為你沒告訴人家「你想看什麼樣的履歷」。

而且,不是人人都有辦法寫出「有重點」的履歷。

我建議的方式是乾脆設計一張表單,請對方照格式填。不需太制式,但你可以用這種方式引導對方把他自身的重點 highlight 出來。而且 fit 你的需求。

這樣可以節省你在看履歷時很多時間。

Appsumo 的 Noah Kagan 在 Learn Chief Sumo's Proven Automated Hiring Formula 也是用了類似的手段。只不過他做得接近自動化…

至於我們公司的 應徵表單,我是這樣設計的..

把招聘啟示貼在正確的地方

徵人公告只是一篇文章,你可以貼在任何地方。

但就我的經驗是,貼在你平常在混的社群裡就好,不要到處亂貼。高曝光率對招聘一點幫助都沒有。

怎麼說呢?這幾年下來,我發現共事過最棒的同事,或收過來看起來不錯的履歷。都是在社群裡面徵來的。不是在社群裡面原本就有見過面的,就是看我的 Blog 在徵才,寫信過來應徵的。再不然就是平常有在 Facebook follow 動態的人。

至於那些在其他地方看到徵才啟示寫過來的履歷。怎麼說呢?你真的會覺得他寫過來的東西「不合胃口」。

相信我,收到「很多」履歷,絕對也不是什麼好事...。因為最痛苦的往往不是你已經很忙了,卻招不到人。而是你已經很忙了,還要花上一堆時間過濾履歷;挑來面試的人,還瘋狂浪費你寶貴的時間…

Noah Kagan 在 Learn Chief Sumo's Proven Automated Hiring Formula 這篇其中的一個招聘技巧。也是建議不要到處亂貼,儘量把徵才啟示、通知放自己家產品的 Facebook Page 邊欄,或者是產品網站、產品通知信裡。

這些原本就認同你產品的人,有極大的機會 fit 公司 culture。而不是網路上的任意陌生人。

其他

這篇文章已經太長了。下次有空再來寫 interview…

 
over 4 years ago

一直以來( 5-6 年前開始..),我都是用 IRC 在管團隊的 Log 和通知。

這個習慣最早以來是跟前輩學習來的。這在比較強悍的技術團隊內部,幾乎是行之有年的標準 Convention。

( 可見 Flickr 著名的 10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
投影片 (P.52),不過他們大概 2006 年就開始這樣做了,這篇只是後來比較漂亮的整理...)。

當年 在 T 客邦,也是用 redmine + IRC bot 自己搞了一套。

把 Log 都打到 IRC 有很多好處。團隊成員去開會、或者暫時離開。回到電腦前,還是可以很快速的掌握剛剛發生了什麼事。再加上 issue tracking 或者是 system alert 其實是很洗信箱讓人容易分神的東西,所以我們把這些幾乎都搬到 IRC 上,建立出一個可以非同步但又高效率的合作開發模式。

不過這個模式還是有一些極限,所以最近在 survey 過後,最近我決定把 公司 整套 solution 搬到 Hipchat 上。

主要搬家原因

  1. 發現每個同事一進來都要教怎麼用 irssi + 工作站掛 irc,學習成本很高
  2. 公司聊天室是 skype, log 在 irc 上,開兩窗有點麻煩。加上 skype-bot 不是不能作,只是我覺得 skype-bot 很吵…
  3. 人員離職很麻煩,因為要把 irc room 的 key 和 info 整套換掉,無法作權限控管
  4. demo 給別人看 irc solution 時也很麻煩,因為對方一定看得到我們的 key ....
  5. 對 irc 訊息上色要試很久,對一般的 developer 門檻有點高
  6. irc log 多半要切到桌機才能看,沒有 mobile solution。

所以最後就整套就搬到 Hipchat 了。看起來大家現在是用的蠻習慣的。

Hipchat 的好處

  1. 主要是 Web Based,但有 iOS, Android, Mac, Windows, Linux client
  2. 有 group 和 permission control,踢人加人很方便
  3. API 整合,寫 bot 很容易
  4. 聊天行為與一般 IRC chat 蠻相近的
  5. 貼圖貼檔案貼 Link 很方便
  6. 一樣會存歷史紀錄,就算離線了,重新上線還是可以找 Log
  7. 很多主流系統整合支援( github, redmine, capistrano, airbrake….)
  8. 5 人以下現在是免費的方案…

Hipchat integration

我們目前是把目前的幾種 Log 都打到 hipchat 上

  1. Github (github 的 hook 支援 hipchat, pull request, push , merge 都會通知...)
  2. Capistrano Deploy http://blog.hipchat.com/tag/capistrano/
  3. Airbrake ( server error 通知系統, airbrake 支援 hipchat )
  4. Redmine (官方的 hipchat/redmine_hipchat 不好用,所以我自己改了一隻 rocodev/redmine_hipchat 出來)

之後還會掛更多東西上去…

 
over 4 years ago

Here are the reading marterials I recommend in 2013:

Basic

If you are new to Ruby / Rails world, I suggest you take following courses :

Learning Rails

Use following courses to build a simple application, like a "forum"

Basic web development

Intermediate Ruby on Rails

( If you are not familer with TDD with Ruby on Rails, these two books might be a good start)

UT on Rails is also a excellent learning material

Testing

Advanced web development

Refactoring Ruby / Rails code

Writing better Ruby code

Podcast / Journal of writing better Ruby/Rails code

Object-oriend Design in Ruby on Rails

Know Rails better

Guideline of writng Ruby / Rails code

Resources of latest Ruby

 
almost 5 years ago

Github 今天上了新的 features: Contributions

在新的個人頁面可以看到過去一年自己 Commit 的軌跡...。

看了一下,我公開的 commit 有 923 次。

2012-public

含 Private repo (公司和自己的 side project),有 3363 次。

2012-private

另外一些之前整理在 FB 上的數據。2012 年,我:

  • 出國了四次
  • 去過了三個國家
  • 給了超過 10 場 talk
  • 完成了五個案子
  • opensource 了兩個熱門 gem
  • 拿了一個世界大獎
  • 開了一間公司
  • 開發了超過 10 個 Rails porject
  • 寫了超過 60 篇文章
  • 寫作了超過 30 萬字
  • 讀了超過 200 本書......

加上去年一整年 commit 的 3300 次。

到底哪來的這麼多時間啊?..orz

結論是,應該要來放個假了嗎?