2015年9月18日 星期五

學習ReactJS、Redux與Isomorphic的紀錄

0 意見



這個小網頁,原先是希望可以在選擇社運場合做的事情以後,就會跳出相應的法條。在此記錄我一路做來的參考文章與技術難點。


學習使用 ReactJS



我先參考 這個網頁中文翻譯版),學習如何把網頁用 React 的方式重新思考一次。


我把網站分為問題表(questionTable)、問題列(questionrRow)、顯示結果按鈕(result)、答案表(answerTable)、答案列(answerRow)一共五個 component,並用一個大的 component 包起來,讓最外層的 component 處理狀態的變化。


我先使用單網頁的方式,從 cdn 載入 React 的 javascript,讓網頁可以運作。


當時的網頁


Webpack、ES2015 與程式碼結構



完成網頁後,接著我需要進一步把網站以結構化的方式架構起來,並且轉移到 ES2015。


我參考的 template 是 這個


我把網頁修改成 webpack 可以運作的方式,並且把語法轉為 ES2015 的語法。其中關於轉換語法,可以參考 這篇文章


結果請點此


Redux


接著,我把原先由外層 component 處理的 state,修改為使用 redux 來處理資料流。


我參考的文章是 Redux的官方文件中文翻譯


當時做完的網站原始碼 在此


接下來,是請 @rschiang 幫忙使用 css 美化。美化後的成果 在此


Universal



接著,我想要挑戰 isomorphic,把網頁預先 render 出來,避免 SEO 的問題。


當時我有詢問過 @coodoo ,也做了一些 問答 , @coodoo 當時建議我參考他的 範例 ,不過我稍微瀏覽過幾個以後,選擇了 @erikras 的 範例 作為 template。


其中這邊有兩個坑,大概卡了我兩天的時間。


這個坑的檔案在此


第一個,react router 的版本從 0.13.3 升級到 1.0.0-beta2,這個版本的升級修改了 Router.run 的參數。這跟之前使用的不太一樣。


第二個, children={routes}這邊吃到的 routes 有問題,一直會跳錯。後來我修改了 routes.js 檔案:

<Route>
  <Route handler={ App } path="/" />
</Route>
修改為

<Route path="/" component={App}/>


才解決這個問題。


另外,這個 template 使用的 css 是 inline css,他有特別 解釋為何要這樣做 ;不過我的網站也就一個 css,而且對這個原理還不熟悉,所以我選擇了使用傳統 webpack 的方式,把 css 包入 javascript。所以我的 webpack loader 段多了這個:

{ test: /\.css$/, loader: 'style!css' }


以把 css 包入 javascript。


Forever,Daemonlized 與 Nginx



最後,我要把 App 放上 Server 讓他提供服務,所以我選擇了 forever 來提供服務。


首先,先安裝 forever:

npm install -g forever
然後添加一個 /etc/init.d/forever 來提供服務:

#!/bin/bash
#
# node      Start up node server daemon
#
# chkconfig: 345 85 15
# description: Forever for Node.js
#

# variable for run forever
APP_PATH=$WHERE_YOUR_APP
export NODE_PATH="./src"
DEAMON="./bin/server.js"
COMMAND="npm run start"
LOG=$WHERE_YOUR_APP/log
PID=$WHERE_YOUR_APP/pid/forever.pid

# variable for nodejs
export PORT=8080
export NODE_ENV=production

cd $APP_PATH

case "$1" in
    start)
        # npm run build
        /usr/local/node/bin/forever start -l $LOG/forever.log -o $LOG/forever_out.log -e $LOG/forever_err.log --pidFile $PID -a $DEAMON
        ;;
    stop)
        /usr/local/node/bin/forever stop --pidFile $PID $DEAMON
        ;;
    stopall)
        /usr/local/node/bin/forever stopall --pidFile $PID
        ;;
    restartall)
        /usr/local/node/bin/forever restartall --pidFile $PID
        ;;
    reload|restart)
        /usr/local/node/bin/forever stop --pidFile $PID $DEAMON
        npm run build
        /usr/local/node/bin/forever start -l $LOG/forever.log -o $LOG/forever_out.log -e $LOG/forever_err.log --pidFile $PID -a $DEAMON
        # /usr/local/node/bin/forever restart -l $LOG/forever.log -o $LOG/forever_out.log -e $LOG/forever_err.log --pidFile $PID -a $DEAMON
        ;;
    list)
        /usr/local/node/bin/forever list
        ;;
    *)
        echo "Usage: /etc/init.d/forever {start|stop|restart|reload|stopall|restartall|list}"
        exit 1
        ;;
esac
exit 0
新增以後,可以先添加執行屬性:

chmod +x /etc/init.d/forever
然後加入啟動清單:

update-rc.d forever defaults
並且在 /etc/nginx/sites-available/ 新增以下檔案,並且 symbolic link 到 /etc/nginx/sites-enable/

server {
  listen 80;
  listen [::]:80;

    client_max_body_size       500m;
    client_body_buffer_size    128k;

  # Make site accessible from http://localhost/
  server_name $SERVER_NAME;

  location / {
    proxy_pass http://localhost:8080;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}
最後開啟服務:

/etc/init.d/forever start
/etc/init.d/nginx restart


這樣網站就成功運行囉!


有興趣的朋友可以打開 這裡 參考。

深入閱讀......

2015年5月12日 星期二

解決 Discourse 中文搜尋問題

0 意見

Discourse 是好用的Rails論壇,但可惜的是他的中文搜尋至目前為止有點問題。完成以下設定就可以修復中文搜尋功能。

1. 在管理員設定>其他中把 min search term length 設為1,這樣一個字就能搜尋。

2. 把資料庫編碼修正為UTF-8。

2-1. 到架設discourse的資料夾執行:

./launcher enter app
2-2. 進入機器後,要進入資料庫:
sudo -u postgres psql discourse
2-3. 接著更新資料庫編碼

update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'discourse';
2-4. 離開資料庫:

輸入 \q 就可以離開postgreSQL了。

2-5. 更新舊的index
由於舊的資料庫內容並未以UTF-8的方式更新,需要重設index。在docker機器內,discourse的資料夾(應是 /var/www/discourse)內執行

rake search:reindex


做完以後中文搜尋就好囉!

註:本文在唐鳳指導下完成,感謝唐鳳!
深入閱讀......

2013年12月19日 星期四

別濫用媒體-駁《別濫用公民活動》一文

0 意見

中國時報旗下的旺報前幾天貼出了一篇《短評-別濫用公民活動》(註1)。


在文中,旺報極盡抹黑之能事,將反服貿的團體抹黑為民進黨組織,又質疑這些團體是代表著民意還是黨意。這樣的意見,正說明了中國時報集團已經不是一個替人民發聲的媒體,而是一個替中國傳聲的媒體。在此,我想很認真的要求中時集團,請中時集團不要濫用媒體身份,大叼中國共產黨的飛盤。


這篇文章問,這些團體代表的究竟是民意,還是民進黨的黨意?很明顯,這是中國時報一貫的邏輯--只要立場和中國時報不一樣,就是民進黨,就是深綠。這和以前民進黨備受批評的「中共同路人」的抹黑方式又有什麼不同?這和國民黨批評環團是「民進黨外圍政治團體」又有什麼不同?凡是非我族類,其心必異,這種想法正說明了這個報紙容不下不同的聲音,只以為自己是真理。


反服貿的意見到底是不是民意?公民覺醒聯盟連續數周在網路上進行民調,其中不清楚服貿的比例約38%,60%的意見都是清楚但反對;只有1.6%的意見是清楚但支持(註2、3,圖1)。旺報、中國時報編輯群,請問你們代表的是1.6%的民意嗎?還是共產黨的黨意?




圖1:公民覺醒聯盟所做的服貿協議網路調查結果(圖片取自:fb公民覺醒聯盟粉絲團)。



再來,這篇文章提到:「台灣資金「錢」進大陸,廠商大舉出走,在當地創造大量就業機會,並帶動大陸經濟起飛,陸資卻無法來台,讓資金難以雙向流動。」、「政府要打造良好的投資環境,訂定明確產業政策,讓陸資、美資、日資等全世界資金,來投資台灣分享成長機會。」


基本上,這邊的對比忽略了台灣和中國之間在工資水平上的差異。中國的低工資,讓台商趨之若騖,利用低工資進一步的壓低生產成本。因此,台商的投資,當然可以到當地創造就業機會。但現在台灣的工資平均仍比中國高,請問中國公司來台灣,請台灣人會有優勢嗎?中國公司賺的到錢嗎?結果,究竟是台灣公司去中國的多,還是中國公司來台灣的多?就業機會,又是在哪裡創造的?


更何況,中國商人在非洲已成為掠奪者。中國人無視當地的民情,總覺得錢就能解決一切;到當地辦工廠,引進大量中國人,搶了當地人的飯碗,還怪當地人不勤勞(註4)。這種態度,已經造成許多國家的困擾。


更重要的是,服貿協議從頭到尾,馬英九政府就沒有好好聽過人民的聲音;唯一提出的評估報告,又包含諸多對於關稅稅率的假設(註5)。這些假設滿足了,評估報告才有效力;但卻看到馬政府不分青紅皂白,什麼東西都拿該篇報告出來說嘴,連該篇報告的限制都沒有看清楚。評估亂做、不諮詢民意,前國策顧問郝明義一再的發文要求政府傾聽民意,說明其中的條文有諸多不合理之處,更忽略了國安問題。這個政府不聽就是不聽,還抹黑反對的團體在造謠(註6)。


公民覺醒聯盟傳真了《服貿協議致馬英九函》(註7)到總統府,還要求馬英九必須看過、必須親自在回應上簽名。可是結果呢?等了一周,總統府才回傳公文,要求行政院直接回覆,副本傳給總統府就好(註8)。這種態度,根本就是視民意為無物。


反對服貿協議,是在為台灣的國民爭取權益,也是反對國民黨如此倉皇草率、無視民意的簽下一個有問題的協議,和民進黨根本一點關係也沒有。這種抹黑行為,和共產黨抹黑反對的人是「境外敵對分裂份子」的行為一樣,無視於問題本身,反而抹黑提出問題的人。


在這裡,我想請問中時集團的編輯群:請問你們真的去了解反服貿者的論點了嗎?請問你們知道他們反對的點是什麼嗎?你們總是看到黑影就開槍,只要反對的就說對方是深綠、是民進黨。可以請你們多用點腦袋,去思考一下別人的觀點,了解一下反對的意見嗎?還是說,你們知道這邊你們無力反擊,所以只好打烏賊戰術?只要反對者被貼上深綠、民進黨的標籤,他們說的話就一定有問題,而中國時報就代表著真理嗎?


就算這個政府如此輕視民意,如此作賤民主精神,如此的忽視國安問題及條文中的不對等問題,旺報還是以這種「叼飛盤」的態度「逢中必挺」。真不知道中國時報編輯群到底心中想的是民意,還是共產黨的黨意?誠然,反對與中國的任何來往並不切實際,適度的交流有助於兩岸民眾的互相了解;但是旺中卻是只要共產黨說好的,這個媒體就永遠都毫不遮掩的贊成。這個編輯群的人,到底心中有沒有對台灣這塊土地的感情?


難道,中時集團編輯群對於服貿通過後的新聞審查行為早已了然於心,天天都在實踐,所以不痛不癢?還是說,中時集團編輯群的人,早已習慣聽令行事、上頭老闆說了算,一點自己的聲音都沒有,早就視民主精神為無物?


中時集團編輯群聲稱,反服貿團體是「違逆世界潮流」、「不惜得罪大多數明理的台灣各界人士」;我想,不惜得罪大多數明理的台灣各界人士的,恐怕不是反服貿團體,而是中國時報和旺報編輯群吧。在此,我公開的請問中國時報和旺報編輯群:請問你們這種刻意忽視民意,自行塑造民意,不惜得罪台灣各界人士的行為,是想要把台灣搞垮嗎?你們是想要塑造台灣很想簽服貿的假象嗎?請問你們這樣濫用身為媒體的話語權拍中國共產黨的馬屁,圖的又是什麼?


請旺報及中國時報編輯群不要迴避這個問題,誠實的摸著良心回答,謝謝!




深入閱讀......

2013年12月11日 星期三

中資來台會不會壟斷台灣產業?

0 意見

最近服貿協議爭議不少。但最多人提到,也最恐懼的劇本,是中國企業挾龐大資產來台,會壟斷台灣產業(註1)。但這個描述其實有很大的問題。當然這是可能成立的,但是這個命題要成立,其實還需要很多要素的配合。我個人嘗試以我的理解來剖析這個問題。內容可能有問題,若大家有意見,可一起討論。


台灣市場是否吸引中國



首先第一個要考慮的是:中國企業進入台灣市場,最重要的吸引力是什麼?我想既然是企業,最重要的就是獲利了。那麼我們來分析看看,中國企業是否可以在台灣市場取得龐大的獲利。


深入閱讀......

2013年12月7日 星期六

回應《基督教小小羊園地》之聲明

0 意見

看到《基督教小小羊園地》的一篇〈嚴正聲明:本人絕對與『多元成家、婚姻平權懶人包』網站無關!〉,認為我們的懶人包移花接木了他的觀點。讓我感到十分詫異。舉例來說,這就像一個先生走在路上看到鄰居長得很像他兒子,然後立刻轉頭指責他老婆說她偷漢子一樣。


有兩個部份是我可以在這裡回應的。剩餘的部份,以及引用出處的說明,則是由懶人包基督徒觀點的編輯群加以回應。各位朋友若有興趣,可以先過去看看。 http://billy3321.github.io/tapcpr/statement.html

深入閱讀......

2013年12月1日 星期日

從多元成家看理性對話

0 意見

最近多元成家的議題吵的沸沸揚揚。


而有意思的是,反多元成家的護家盟所推出的論點,幾乎都看似不堪一擊。這些論點有的扭曲了多元成家法案的內容,再加以抨擊;有些則是發揮了想像力,把人獸交也關聯進來。


這些論點只要找了原始資料來看過,就知道不堪一擊(註1)。但為何這些人會深信不疑呢?


深入閱讀......

2013年11月15日 星期五

書本推薦:哲學哲學雞蛋糕-給動腦偏執狂的娛樂零嘴

3 意見

上了高中以後,我才開始使用網路上BBS。在那個剛有ADSL網路的年代,上巴哈姆特BBS看人筆戰是我的娛樂之一。當時筆戰的起手式就是互稱閣下,並且針對對方的論點逐行逐行的攻奸,其實非常精彩。這些筆戰有時候吵的是萬年老梗的男女問題,有時候吵的是政治觀點或是社會議題。


後來隨著自己慢慢長大,到了PTT的年代,發現這些筆戰愈來愈多元,從政治、社會議題到生活中的小知識等等,不一而足。當時我只知道筆戰很好看,卻沒有想過該如何去分析一場精彩的筆戰。


我升上大學就讀生物學系時,猶記得當時有許多學者專家在鼓吹所謂的人文教育。有個老師也跟我們這學懵懵懂懂的學生推荐一本人文書:薩依德的知識份子論。


這是我第一次接觸到人文學科的書籍。不能否認,這本書讓我感到十分痛苦。閱讀起來,就感覺像在越級打怪一樣。每字每句都要不斷的斟酌再斟酌,才能推敲出背後的原意。每翻過一頁,就要短暫的小睡一會讓我過熱的腦袋冷卻一下。雖然最後好不容易讀完整本書,但也讓我對人文學科產生恐懼。艱澀難懂,是我對人文學科的第一個印象。


在廢死議題吵的沸沸揚揚的時候,很偶然的在網路上看到一篇名為《雞蛋糕死刑地圖》的文章(註)。這篇文章巨細靡遺的把所有當時支持、反對死刑的文章論點都抓出來,並且對個別論點都有深入的論述。


這篇文章很快就抓住了我的注意。我沒有想到,哲學居然可以這樣子整理論點、整理邏輯並且幫助釐清混亂的筆戰戰況。當時孤陋寡聞的我,根本沒有想過人文學科也可以這樣淺顯易懂。我還記得那篇部落格的標題:《哲學哲學雞蛋糕》。


我才發現,一直以來自己的思考方式其實並不完整。我一直以來都是相信那些看似理性、中立、專業的文章,卻沒有去思考過文章的前提是什麼、沒有思考過文章的邏輯是否正確、沒有去看到這些論述背後的架構是不是有問題。


當時的我,只知道要用自己的耳朵去聽,用自己的眼睛去看,用自己的腦子去思考。但是我卻沒有想過,到底要怎麼思考。我知道我們的教育是填鴨,我也知道自己要培養獨立思考,但我卻沒有想過究竟要如何去分辨一篇文章的真偽。而《哲學哲學雞蛋糕》的老闆做到了,並且以非常淺顯易懂的文字把這些背後的眉角描述出來。這讓我感到非常驚訝。


更重要的是,身為一個對文科盲,我以為我無法看懂人文學科背後的關鍵。居然有人可以這麼有心的撰寫出文普書,書中的例子也是近期的台灣時事。這種切入時事的教學方式讓我感到非常窩心。也讓我了解到哲學的重要。


法國從十九世紀起,就將哲學納入了中學教育的範疇。哲學教育的目的,是為了培養具有獨立思考及批判能力的公民。這可以避免國家以教育之名,行灌輸意識型態之實,也可以避免教育成為推廣缺乏反思的道德教育。


但反觀華人文化下的儒家教學,事實上就是在推廣缺乏反思的道德教育。儒家教育並沒有告訴你經文是否有問題,只告訴你這些話是什麼意思,並且要求學生背誦。在這個過程中,學習只是一種把知識放到腦袋中的行為,而不是學習如何得出新的知識,也不會反思以往的知識經驗是否還能落實到現在的社會。也因此,我們許多人民,在面對權勢者的話術(比如某老闆說的話)時,往往缺乏反思、缺乏抵抗能力,反而會不加思索的全盤接受。這種缺乏反思、缺乏思考能力的問題,普遍的存在社會上。


現在我們的社會上,有許多人會呼籲大家要有獨立思考的精神和能力。而其實,這就是培養哲學思考的能力。學習以哲學的角度去剖析問題、去思考問題。哲學,正是獨立思考的關鍵。


哲學其實不只是一門學問,更是探索自我、探索社會的關鍵。我強力推荐各位朋友,可以從這本《哲學哲學雞蛋糕:給動腦偏執狂的娛樂零嘴》來開始入門,學習哲學,學習獨立思考的方法,並且應用到生活,以及形形色色的政治、社會議題上。藉著這本書的入門,你將會更清楚的看見各種論點背後的脈絡。


購買本書:
http://www.taaze.tw/sing.html?pid=11100680527




深入閱讀......