簡(jiǎn)介
因?yàn)閷?ext-blog 的原因,慢慢喜歡上github_ 。然后突然有一天產(chǎn)生了一個(gè)想法:如果可以把自己的博客_ 和 github主頁(yè) 集中到一塊展示給別人,會(huì)不會(huì)是一種很方便的自我簡(jiǎn)介方式?然后我就動(dòng)手寫了 codertrace.com 。
所以, codertrace.com 這個(gè)網(wǎng)站的作用就是用來(lái)集中讓程序員炫耀的。它通過(guò)RSS抓取,將你的博客,github主頁(yè),或其他有RSS輸出的信息集中到一塊展示給別人。這些信息通常就可以代表一個(gè)程序員。
如果你是程序員,也不妨試試。
技術(shù)信息
不知道哪個(gè)王八蛋說(shuō)的,程序員每一年得學(xué)一門新語(yǔ)言。我2010年末接觸了Lisp,然后莫名其妙地寫了 ext-blog ,又莫名其妙地在2011年末接觸了Ruby。因?yàn)榇髮W(xué)期間太癡迷C++,我勤奮努力,幾乎通曉這門語(yǔ)言的各種細(xì)節(jié);后來(lái)又稍微實(shí)踐了下編譯原理。在這若干年間,斷斷續(xù)續(xù)也接觸過(guò)其他腳本類語(yǔ)言,我甚至在android上用java寫過(guò)幾個(gè) 小應(yīng)用 。基于這些積累,我發(fā)現(xiàn)我可以很快上手Ruby,然后再上手Rails,然后就有了 codertrace.com (當(dāng)然還做過(guò)一些小的 APP )
所以, codertrace.com 就是一個(gè)Ruby on Rails的應(yīng)用。當(dāng)我用這貨來(lái)做WEB的時(shí)候,我才發(fā)現(xiàn)曾經(jīng)用Lisp寫博客是多么geek。這種感覺就像你在用匯編寫一個(gè)GUI程序一樣。我的意思是,ruby/rails的世界里有太多現(xiàn)成的東西,但lisp的世界里沒有。
而且,ruby是一個(gè)很爽的語(yǔ)言。我太喜歡它的closure語(yǔ)法,簡(jiǎn)潔,不需要加其他關(guān)鍵字就可以構(gòu)造(例如其他語(yǔ)言map(function (item) xxxx end),或者map(lambda (item) xxx ))。但我不喜歡在使用的地方通過(guò)yield去調(diào)用---這就像一個(gè)hack。我更不喜歡ruby用proc去封裝closure。好吧,這其實(shí)是我自我分裂,為什么我要把ruby看成一個(gè)函數(shù)式語(yǔ)言?
腳本語(yǔ)言真是太酷了。
服務(wù)器信息
我很窮。不管你信不信,我真的舍不得花1000RMB買個(gè)VPS來(lái)架設(shè) codertrace.com 。目前, codertrace.com 架設(shè)在 heroku.com ,而且還使用的是免費(fèi)服務(wù)。免費(fèi)服務(wù)竟然只有5M數(shù)據(jù)庫(kù)。 codertrace.com 后臺(tái)為了異步抓取用戶提供的RSS,還使用了一個(gè)單獨(dú)的進(jìn)程(delayed_job ruby gem)。這也不是免費(fèi)的。
但ruby的世界里有太多現(xiàn)成的東西了,甚至有很多現(xiàn)成的庫(kù)解決這里的兩個(gè)問(wèn)題:heroku_external_db,這個(gè)gem可以讓codertrace使用heroku以外的數(shù)據(jù)庫(kù),然后我就在我的VPS上搭了個(gè)mysql,這下流量和網(wǎng)站響應(yīng)速度悲劇了啊,你想你請(qǐng)求個(gè)頁(yè)面,這個(gè)頁(yè)面直接涉及到若干條數(shù)據(jù)庫(kù)查詢。而這些查詢的請(qǐng)求和回應(yīng)竟然是通過(guò)internet網(wǎng)絡(luò)傳輸?shù)摹?/p>
workless,這個(gè)gem可以在有異步任務(wù)時(shí),例如codertrace上讀取RSS,就會(huì)自動(dòng)開啟這個(gè)worker進(jìn)程,然后heroku開始計(jì)費(fèi),當(dāng)沒有任務(wù)時(shí),它又自動(dòng)關(guān)閉這個(gè)進(jìn)程。雖然省了美元,但再一次讓網(wǎng)站的響應(yīng)速度打了折扣。
為了實(shí)現(xiàn)自定義域名,我需要將 codertrace.com 指向 heroku.com 提供的IP。但也許你會(huì)同我一樣憤怒,因?yàn)樗峁┑膸讉€(gè)IP都被GFW墻了!所以,目前的實(shí)現(xiàn)方案是,我將 codertrace.com 指向了我博客對(duì)應(yīng)的VPS,然后在VPS上使用nginx反向代理到 heroku.com 提供的IP。即使如此,我最近甚至發(fā)現(xiàn) codertrace.com 竟然神奇般地會(huì)域名解析錯(cuò)誤,難道godaddy的name server也要被GFW和諧??
故事
作為一個(gè)宅男,在工作的若干年中,若干個(gè)假期我都用來(lái)打游戲,或者寫程序。
所以,當(dāng)這個(gè)成為習(xí)慣的時(shí)候, codertrace.com ,就順理成章地消費(fèi)了我今年的春節(jié)假期。我發(fā)現(xiàn)一個(gè)人窩在租的小房子里寫代碼是件很爽的事情。在當(dāng)前這個(gè)社會(huì)環(huán)境下,你可以專注地去干件喜歡的事情,還不用處理各種生活瑣事,真是太爽了。
但為什么我平時(shí)得不到這種感覺?因?yàn)?,我,是一個(gè)沒錢的程序員。我和我老婆租在一個(gè)標(biāo)間里。在這樣狹小的空間里,多個(gè)人就是多幾倍干擾。這太殘酷了。
末了
曾經(jīng)我以為我很牛逼,曾經(jīng)我以為程序員很牛逼。后來(lái)我慢慢發(fā)現(xiàn)自己很垃圾。我沒有寫出來(lái)過(guò)牛逼的程序,大概也沒能力寫。還記得那個(gè)程序員的故事嗎?就是有個(gè)傻逼也以為程序員很牛逼,但不幸在一家非IT公司的IT部門工作,他的程序員同事的工作就是每周填個(gè)excel表格。他后來(lái)很絕望,因?yàn)樗麤]有為世界貢獻(xiàn)過(guò)任何代碼。后來(lái),這貨丟下一切,坐上去某地的飛機(jī)走了。