avatar

大兜

右手寫程式,左手寫音樂

留言

我的貓 - 黏黏和歲歲

似乎從來沒有介紹過家裡的貓,索性來出賣幾張照片吧!

筆者自 2015 十月開始認養第一隻貓咪,2016 六月認養第二隻,由於從小到大沒有養寵物的經驗,不知從和開始,前三個月不是四處問人就是不斷上網找資料。好在中途之家的姊姊很熱心,總是親切地回答我的問題。

飲食

因為知道了近幾年台灣開始吹起了濕食風,遂一開始就沒有打算買乾飼料,就先從三餐吃罐頭開始。試過了顛峰、鈕翠寶、Goody 等等。最後是顛峰的口性最好,雖然顛峰不便宜,當時筆者才養一隻貓,負擔尚可,但第二隻住進來後有些吃緊,筆者也開始找其他濕食管道。

後來知道台灣有幾家廠商有在做寵物生食,像是汪喵、巴夫等,索性買了一條回家嘗試,不料家裡主子愛吃到把整個碗舔地乾乾淨淨,筆者心喜之下果斷買了幾箱。

就這樣,她們之後都吃生肉,回歸原始的飲食,而不是加工過的罐頭。

健康

只有姊姊黏黏看過病,剛來筆者家裡第一天就發燒了。初養前十天就要照顧病貓,這對第一次養寵物的人來說實在是一件很困難的事,但也因此筆者在剛養貓的第一個禮拜就學會了投藥的技能,記得第一次投藥前看了十幾部 YouTube 教學影片,就怕自己做錯一步,害到了黏黏。

娛樂

本來以為只要是逗貓棒就可以吸引貓咪,但好像還是得看個性才行。歲歲會為了彩帶棒瘋狂,但黏黏對貓草娃娃比較感興趣,這讓筆者每次選購玩具都會考慮買到兩種以上。

根據觀察,貓似乎無法分辨棉被和床中間有一層空間,或是無法理解筆者蓋上被子是什麼概念,每次筆者埋進一隻手在棉被裡搓出一點聲音,她們就會開始隔著棉被狩獵筆者的手,好氣又好笑。


養寵物真的事很棒的一件事,尤其是對獨居太久的人,加上如果工作性質又屬於 SOHO 的話,長久下來真的會生病,有個寵物陪在身邊,生活也比較不會憂鬱。

繼續閱讀

留言

Ruby#open 知多少?

本文同步發表於 alphacamp

先來個快問快答吧:

如果現在要你使用 Ruby 去開檔,你會想到怎麼做?

直覺是使用 File.open,但想想 File.new 似乎也可行,然後又發現不使用 File 類別,直接用 open 也能做到一樣的事。去查了 Ruby 文件結果...

繼續閱讀

留言

Ziltag Beta 啟動

筆者很久以前曾希望有個服務可以在圖片上自由的加上各種資訊,那是在看漫畫的時候,心想如果可以在某些分鏡加上自己的評論並與網友們互動,效果應該不錯,不料今天出自夥伴與自己的手,世事難料啊XD

Zillion Tags, Ziltag

Ziltag 的目的是希望在現有的圖片、影片等多媒體上面,創要一種新的社交互動方式:你可以在任何圖片的任何地方標籤上任何資訊,可以是一句話、一個人名、一段連結影片等,而每個標籤都可以是個討論串。

如果你的設備有滑鼠指標(Beta 尚未支援手機),只要將它移動到下面這張圖片就可以理解這個服務在做什麼:

tonytonyjan is playing the piano

有別於其他平台,Ziltag 是以提供腳本的方式給那些想要在網站上提供多元互動的站長們使用,這些站長們可能是部落客、攝影師、畫家、設計師、美食家、探險家等。除了創造與讀者的新互動之外,他們也能透過標籤傳達讀者可能感興趣的資訊,例如商品的價錢、植物的介紹、食材廣告、英語單字教學等等,使用方式依照使用者的創意可以十分多元。

成為 Ziltag 夥伴

成為使用者很容易,當你在聆聽筆者的音樂拙作時,就已經是 Ziltag 使用者了,如果想進一步留下評語(手下留情),直接留言即可,並不需要離開筆者的網站。相對的,你若有自己的網站,且也希望提供你的讀者不同的體驗,則必須透過 Ziltag 網站註冊並索取腳本,不妨今天就來玩玩看吧 :)

繼續閱讀

留言

Rails on webpack

記得筆者在去年於 RubyConf Taiwan 講的題目「還給前端工程師一片天空」中提到如何整合 Rails 與 Node.js 世界的工具,投影片在此。雖然 webpack 正夯,但礙於筆者當時沒去研究,使用的工具仍是上一代的 gulp、bower,所幸議程也有相關的講題,如何澤清前輩的「gem 'webpack-rails'」。

只是經過筆者幾番研究之後,覺得整合這兩樣東西似乎不需要像網路上找到的各種教學文或是 gem 搞的那樣複雜,所以想藉這篇文章分享自己的做法(但並不保留 sprockets)。在那之前,先分享一些小知識:

asset_path 知多少?

#asset_path 是 Rails 中其中一個底層 API,許多 helper 如 #image_tag 等都會調用,而若沒有特別查閱原始碼,大概不多人知道 asset_path('/app.js')asset_path('app.js') 差了一個斜線會影響結果,至於差在哪就讓我們節錄部份原始碼:

def asset_path(source, options = {})
  # ...
  if source[0] != ?/
    source = compute_asset_path(source, options)
  end
  # ...
end

sprockets 其實有偷偷去複寫 #compute_asset_path,也就是說當傳入 "/app.js",assets pipeline 是不會運作的,但若傳入 "app.js",在 sprockets #compute_asset_path 的加持下結果會長的像 /assets/app-c5bd5cb45ee76432b26a5dfb28e01b59.js?body=1;反之若 "app.js" 檔案不存在,或者根本就沒安裝 sprockets,那就退回原型得到 "/app.js"

所以只要我們複寫的 #compute_asset_path 能算出 webpack 產生在 public/assets 中的正確路徑,其實不用更改任何 API,就可以輕鬆整合 webpack。而 #javascript_include_tag#stylesheet_link_tag#image_tag 等 helper 都可以照常使用。

webpack –json

sprockets 在編譯後會產生 manifest.json,裡面有 asset 原始路徑與其計算後的路徑資訊(例如 app.js 對應到 /assets/app-c5bd5cb45ee76432b26a5dfb28e01b59.js,以 Hash 儲存),好處是 Rails 可以透過讀檔取得計算後的路徑結果,不須透過 sprockets,所以為了增加效能,這個檔案在 production 環境中是必要的,而在 development 環境中,由於 assets 的路徑是及時透過 sprockets 得出,所以並不需要這個檔案。

此外 sprockets 在 controller 與 router 中也動了手腳,這也是為什麼專案中 public/assets 明明沒東西,而在 development 環境下中送出像是 /assets/ooxx.js 的請求卻仍可以正常運作的原因。

只是 webpack 畢竟是 Node.js 世界的產物,無法篡改 Rails controller 與 router,好消息是 webpack --json 會產生一個跟 manifest.json 類似的檔案(官方稱之為 stats file)。所以只要在 webpack.config.js 中加入產生 stats 的 plugin,再用 webpack --watch 來開發就已經綽綽有餘了,例如我們在專案的根目錄下產生 stats.json

plugins = [
  function() {
    this.plugin('done', function(stats) {
      require('fs').writeFileSync(__dirname + '/stats.json', JSON.stringify(stats.toJson()))
    })
  }
]

範例專案

筆者在 Github 實作了一個範例,重點只在兩個檔案: app/helpers/webpack_helper.rblib/webpack_stats.rb

webpack_stats.rb 負責載入 webpack 產生的 stats.json,經過處理之後產生一個 assets hash,例如:

{
  'app.js' => '/assets/app.js',
  'app.css' => '/assets/app-c5bd5cb45ee76432b26a5dfb28e01b59.css' # 也支援 hash 尾綴
}

(限制是 webpack 必須遵守檔名格式為 filename-hash.extname 或是 filename.extname。)

而這個 assets hash 將被用在 #compute_asset_path

# app/helpers/webpack_helper.rb
require 'webpack_stats'
module WebpackHelper
  def compute_asset_path source, options = {}
    WebpackStats.assets[source] || super
  end
end

大功告成!老實說這樣就已經能完美運作了,不用安裝什麼 gem,實測用來寫 react 也不用安裝 react-rails。而剩下的問題已經不關整合的事,像要加入 SASS、CoffeeScript 或是 Font Awesome 等,或是在 production 下要壓縮 JavaScript 並且分離 CSS 檔案等,這取決開發者對 webpack 的掌握。

至於只在 production 中分離 CSS 檔案,裡面可以這樣寫:

<%= stylesheet_link_tag 'application', media: 'all' if Rails.env.production? %>

至於為何要這樣做,可參考 extract-text-webpack-plugin 的 README 提到的優缺點。

我就是要 gem

其實筆者也是有做啦⋯⋯如果真的覺得那兩個檔案很麻煩,可以安裝 webpack_stats,這除了可以用在 Rails,也可以當一般 webpack stats 的 loader 使用(用在 Rails 之外的地方)。

繼續閱讀

留言

來自 chef.io 的小禮物

筆者在開原世界裡面也打滾一陣子,貢獻過大小專案如 Rails、Ruby 等,也收過一些獎勵如比特幣、質數幣,但這次的禮物還蠻特別的,讓人忍不住想要多發一篇網誌:

chef.io 這種方式還頗逗趣的,比起錢,筆者似乎還比較喜歡這種可愛方式(完全中招啊)。除了感謝狀之外,還有一些小貼紙,可惜筆者沒有在筆電上面加貼紙的習慣,只能收在抽屜裡了。

唯一美中不足的地方就是國名寫了「Province of China」讓人不是很舒服,如果只寫「China」或「Republic of China」筆者是還勉強可以接受,畢竟現在中國正在內戰中嘛,只是搞不清兩個政府的領土就實在有點不應該(但無論是哪一個 China,當然還是寫 Taiwan 最好聽了)。

ChefConf 2016

題外話,最近筆者收到一封寄給貢獻者的 ChefConf 2016 邀請信,早鳥票可以省 400 鎂,然後如果是 chef 貢獻者的話還可以額外省 $295 鎂,害得筆者頗心動,但即便如此筆者仍無法負擔高額的機票與住宿的費用,如果有誰需要這筆優惠的話,還請與筆者聯絡,不要讓這筆錢浪費了,感激不盡 :)

繼續閱讀

留言

對不起,我把馬英九放進 Ruby 2.3 了

這世界所有升級到 Ruby 2.3 的伺服器,皆可以得到英九的庇佑。

身為一個 Ruby 語言的教徒,這個聖誕節最令人興奮的莫過於 Ruby 2.3 的發表了,不過這次由於筆者的緣故,意外讓台灣的政治人物們走進了 Ruby 原始碼中,究竟是怎麼回事呢XD

百聞不如一見,各位不妨...

繼續閱讀

留言

2015 回顧

原來是 101 煙火啊,我還以為是洗瓶刷呢。

時間 工作 成就 日常
二月 待業 赴加拿大 confoo.ca 演講  
三月 進入索拉爾 上班一週就離職、出了一本書(衝上博客來新書排行 No.2,天瓏 No.9)  
四月 進入 Ziltag    
五月 Alpha Camp 客串講師    
六月   第一次出國玩  
七月 Rails 桃園班 課程在 1 週內 50 人額滿  
八月     免役、從台科退學
九月   在 Ruby Conf Taiwan 演講  
十月   湊合了第三對情侶,可以自封為媒人了 養貓了,脫離六年的獨居生活
十二月   我的程式碼出現在 Ruby 2.3.0收到了 chef.io 的感謝函 湯圓大會、跨年晚會

另外值得慶祝的是:TJDict 突破 22k 使用人次了 :)

2015 也是充滿各種刺激的一年,不過最值得慶祝的還是成功免役了,除了省下一些納稅人的錢,也幫家裡一個大忙,畢竟當一年兵就是把一年的年薪賠下去。且年初的時候還有收到澳洲、矽谷的 offer,但筆者那時因尚未服役或免役,所以就婉拒了,頓時心中頗有「中華民國誤我一生」的感覺,所幸但這件事情不會再發生了。

新年嘛,難免許新希望,不過筆者自從去年領悟了及時行樂的智慧以後,就沒有什麼夢想了,感覺許下目標也沒什麼意義,當下活得不錯、無憂無疾就謝天謝地了,真要說的話大概是希望三十歲以前移民吧,但這是目標,不希望,兩者有些差異,目標是將會發生的事情,希望是即便沒發生也無妨。筆者想移民到非華人主宰的國家,然後如果可以一輩子不說中文,就一輩子不說。

2016 正要開始,也不知道會發生什麼事情,畢竟回首過往,自己的人生似乎老走在鋼索上,只是相較往昔的自己,今日的心態已經平靜許多且可以輕鬆看待生死與成敗了,即便是從鋼索到跳火圈我想也是沒什麼大不了的。

就這樣吧,新年快樂 :)

繼續閱讀

留言

PTT 每天自動登入小程式

最近大選近了,八卦版似乎將發文門檻調高到了 1000 次,帶風向的黨工少了,頓時清新了許多(不過仍然影響不到筆者)。其實養 PTT 帳號不容易,因為同一天只算登入一次,我們得每天記得登入一次 PTT,否則就平白損失了24 小時,如果沒有 PTT 成癮症,其實很容易忘記。

而身為工程師如筆...

繼續閱讀

留言

Ruby SSE Server 動手做

本篇文章同時也發表於 CodeTengu

照片是日本硬體製造商 Speedlink 在東京舉辦的 server 投擲大賽,誰能把 server 推得最遠,可以得到最高的分數,圖片中的機器值 50 萬日幣,這也是名符其實的 push server,影片在此

最近要蓋個 SSE

繼續閱讀

留言

Ruby Conference Taiwan 2015

大會官網

一年一度的 Ruby Conference 又來啦,今年的明星陣容除了與去年一樣有邀請到 Ruby 之父松本行弘(Matz),Rails 的核心開發者 Aaron Patterson(tenderlove),以及一位來自日本的 CRuby 核心開發者芝田浩(hsbt)。

大會...

繼續閱讀