January 8, 2014

喜獲麟兒初為父

No comments:
我家小伙子在 2014 / 01 /04 的 PM 08:47 出生了!

適逢新舊工作交替的時間,我在一月六號報到以前還有寥寥幾天的空閒。由於小孩的預產期是一月十八號,太座大人小桃在那之前安排了兩週的假日用作待產,即使小孩提早一點出世,也能夠休息到幾天。

於是一月三號那天是她生產前最後一天上班,傍晚算準了時間我去接她下班準備產檢,前往醫院的路上太座大人說:「今天下午開始肚子有點痛耶」我帶著玩笑的語氣說:『唔?該不會今天就要生吧?』「應該不會啦,聽朋友說生產前會有一些假性宮縮,當作熱身運動,今天是我第一次感覺到痛」。聽了寬心,我倆就一直開著今天就會生的玩笑直到醫院。

檢查時主治醫師說道:「小孩的頭部發育很正常,不過肚子小了一週,有點瘦。喔!妳的胎位移得很下面囉」聽起來就是很快要生的意思,我心想,如果今天開始假性宮縮,好日子應該剩沒幾天了。天真如我以為還能夠樂上一段時間。

產檢完到附近的平價牛排館吃晚餐,加減補充一點紅肉,看看能不能把小孩的體重拉高一點。吃沒兩口小桃就說肚子還是會痛。「還會痛?該不會很規律吧?」『嗯,感覺好像一段時間就痛一下』「.........我們趕快吃完回家洗澡好了」

我們已經做好最壞的心理準備:小桃連第一天假都還沒開始放就準備入監服刑。草草吃完晚餐,趕緊回家洗澡,確認生產包沒有漏誤,上線取消 g0v 的新年松報名(淚)。

約莫晚上十點鐘,小桃的陣痛開始變得明顯且規律,十分鐘痛一次。「來了!」我心裡這麼想著,趁隙硬是闔上眼睛瞇一下,為接下來的長期抗戰儲備體力。 這天到三點多就醒來無法再睡,小桃因為十分鐘陣痛一次也是徹夜未眠。每個人陣痛的狀況略有不同,她的狀況像是大卡車輾過去再倒車,如此來回持續一分鐘。就這樣碾到天亮實在無法再忍受,我們就整裝出發前往醫院。

到了醫院護士檢查過後冷靜地說:「這樣只有開一指,你們先去到處走走」「已經開一指了,不用擔心啦,這兩天一定會生」護士嘗試安慰我們,卻完全起不了效用。一來最後的假期完全宣告報銷,二來小桃聽到「兩天」這個字幾近崩潰,被卡車撞幾個小時已經很慘了,還要撞兩天也太殘忍。

我們從早上八點多開始在醫院走走停停,走是為了讓進度快一些,停是因為痛到動不了,就這樣捱到下午一點仍然只有開一指,正式確認被退貨,打道回府。

回家之後小桃躺在床上,陣痛的頻率從十分鐘到五分鐘之間不停改變,疼痛的程度更是愈加劇烈。我在一旁沒什麼能作的,只能夠拿著手機不斷給陣痛計時。回想起來頗為趣味,當下覺得陣痛難以忍耐,卻又希望快點多痛一些好讓自己解脫。直到晚上六點終於突破門檻,大約三四分鐘陣痛一次,行了!火速衝向醫院,一看開了一指半,順利收入產房。

無痛分娩乃是一種麻醉方式,進分娩室之前在背部注入麻藥,減緩分娩前的陣痛。當我們要求進行麻醉時,護士問:「真的要打嗎?看情況很快就會生了耶,打了很浪費錢」我當機立斷回答:『要!再不打就換我有危險了』

麻藥大約十分鐘之後開始生效,慢慢減緩陣痛,再過二十分鐘果然已經開到四指半被推進分娩室。短短一會兒就燒掉幾千元,即便如此我們還是覺得很值得,小桃在那二十分鐘找回求生的意志,我在那二十分鐘挽救了自己下半輩子的人生。

分娩室的氛圍相當奇妙,接生的醫生護士專業地指導產婦,什麼時候該呼吸、用力;同時也歡樂地閒聊(好像是)昨天尾牙誰抽到什麼獎品。小桃在生產檯上疼痛哀號,我在旁邊拿著手機錄影,心裡想的是怎麼拍會比較不血腥,手要拿穩別讓鏡頭晃動太大。據小桃的說法,我好像是路過進來拍紀錄片的。

進度很快,約莫十分鐘左右小孩子就出生了,配著響亮的哭聲,紫色的皮膚滿是皺摺,當護士們熟練地為小孩剪臍帶,抽取鼻腔內的羊水時。我看著這張陌生的臉孔,心想著這就是我的孩子,我這輩子都會被他叫做爸爸,就像我對他爺爺那樣叫。我第一次看見他,卻已經註定這輩子他最親的幾個人其中一位就是我。

不知道其他人所謂「當爸爸的感覺」是什麼,真要比喻我的感覺,好像是心房裡挪出一個重要位置,你知道眼前只會哭的這位陌生人,很快就會坐上去了。他的地位將會跟那些你已經熟識好多年的人一樣重要,甚至更重要些,即便你還跟他很陌生。

小朋友很快就止住哭聲,張大眼睛東瞧西瞧,不知這時候他是不是真能看見,一雙大眼不停轉動,俊挺的鼻子跟他娘還真像。我默默地看著他,心中想起伍佰的【真世界】這首歌。

啊!感慨是一回事,太早出生這件事還是要計較,等到聽得懂人話時再來虧他。

小朋友的體重是 2035g,身高 44cm,按照院方的標準要 2200g 才能夠出院,於是甫出生就進了病房觀察,所幸體重輕一點之外沒什麼大礙。接下來一週除了在家張羅必需品,就是勤跑醫院送母奶。至於收集母奶的辛苦,那又是另一個故事了。只能說做母親實在不簡單,從懷孕開始一連串的不舒服、陣痛、分娩,接踵而來的是漲奶、半夜擠乳、給小孩把屎把尿。每個男人實在要對老婆多疼愛一些。


December 4, 2013

Libreoffice 合併列印地址標籤

No comments:
晚間收到一個需求,老媽的朋友有一大筆通訊錄儲存成 Office 的 excel 檔,想要列印到 A4 大小的空白標籤貼紙上,寄送郵件的時候只要依序撕下、黏貼即可。這是相當常見的需求,不過以前沒作過也算是新鮮,因此在這邊做了點紀錄。

  • 使用 Libreoffice 4.1.3.2
  • A4 大小的標籤貼紙,已經預先裁好 2 欄(columns) 11 列(rows)
  • 每一格是 10.5 cm x 2.7 cm
最後印出來的結果大致長得像這樣


首先將檔案視為資料庫匯入,這是我摸索出來的作法,應該會有比較正確的作法
  1. 打開 xls 檔案
  2. 開新檔案,選 Libreoffice Writer
  3. 工具 / 合併郵件精靈 / 3. 插入地址區塊 / 選擇地址清單 / 加入 xls 檔

如此一來 xls 檔就被當成資料庫了,此時可以先把這個 writer 關掉,回到 xls 檔。接著來編輯 template
  1. 從 xls 檔的「檔案」 / 「新增」 / 「標籤」
  2. 在「格式」那一頁先編輯一下
    1. 水平間隔、寬度為 10.5 cm
    2. 垂直間隔、高度為 2.7 cm
    3. 邊框為 0 cm
    4. 2 欄 11 列
    5. 頁寬 21 cm 頁高 29.71 cm (A4)
    6. 隨便存個名字,好比 "Print Label"
  3. 在「選項」那一頁
    1. 選取整頁
    2. 勾選內容同步化
  4. 回到「標籤」那一頁開始編輯
    1. 勾選「地址」
    2. 資料庫:選擇剛剛增加的 database
    3. 選取 database 裡面的 table
    4. 資料庫欄位,依序加入左邊,左邊亦可編輯 (這一步要注意!左方的 template 連結到的是資料庫欄位,如果改用不同的資料庫,會發生找不到資料的情況。意思就是:換資料庫,這一步驟就要重作)
    5. 格式選「連續」
    6. 商標、類型選剛剛儲存的格式 (ex: Print Label)
    7. 按下新增
此時會跑出一頁有 2 columns 11 rows 的文件,但是文件上面的資訊全部都是重複的內容,此時也可以替每個欄位稍微格式化(加粗體之類的)

接著將資料庫的內容填入
  1. 工具 / 合併郵件精靈
  2. 使用目前的文件
  3. 書信
  4. 一路繼續下去到最後一項
  5. 儲存合併的文件 / 儲存為單一文件,此時就能另存為 odt 或是 pdf 檔了

最後拿到了 pdf 檔就可以用來列印,仔細一查卻發現,第一筆資料不見了!但我覺得之前的動作都挺合邏輯,猜想可能有 bug,insert content 的時候有 array index 的問題(唉,我對 office 軟體很沒信心)

另外中文翻譯有時是「合併郵件精靈」,但是打開的視窗標題又變成「合併列印精靈」 :-(



Update:

刪除資料庫的方法
  1. 打開一個文件,選上方的工具 / 選項
  2. Libreoffice Base / 資料庫
  3. 選擇不要的資料庫 / 刪除

November 10, 2013

做與不做之間

No comments:
間接聽到朋友參加的一場座談會,有前輩認為一般民眾不應該作太多事情,這樣是鼓勵政府的不作為。

如此涉及判斷的問題,不論正反方總是可以找到各種支持的理由。選擇不作為者其實只要等著看別人失敗就可證明自己的睿智,有點類似犬儒主義卻又不那麼典型。

世界是如此多種可能,從結果來詮釋一件事相當容易,但在發生以前,選擇做或不做就有點困難,而我們不喜歡失敗的社會風氣,又或著「中國人的渾圓智慧」,使得太積極的人往往被視為熱血躁進。

我仍然覺得這是價值選擇的問題,沒有對與錯。選擇哪種方式,就只關乎人的個性。有人穩重,認為沒什麼好奉獻的,不如顧好飯碗。有人熱血,寧願少吃一碗也要多抬一擔。選哪種都不錯,只要老的時候回顧一切覺得值得,人生也就多圓滿幾分了。

我始終相信「要拯救世界就要先懂得幫媽媽洗碗」,有些人天生是英雄,要幹大事業。我不是,我要從我做得到的小地方,持續地做下去。




October 21, 2013

小英在竹南

No comments:
民進黨前主席,小英基金會的現任董事長蔡英文上週五應邀到竹南演講,朋友丟了這個訊息給我,下班之後我們就一起過去。由於邀請單位的性質,聽眾大多數都是年紀大的長者,像我們一般三十歲上下的年輕人(?)沒幾個。

小英的演講題目相當大:「臺灣當前的挑戰,還有我們的未來」。雖然聽說小英經過選舉歷練之後,變得比較像政治人物。這次的演講如果不看底下的人,還以為聽講對象是研究生。演講內容大多數都是提出當前的問題,範圍其實不出平常跟好友的討論。換個角度說,只要平常比較關心政治的人,對於臺灣現有問題應該都有共識。

有趣的是,現場提問時,小英對於現今公民運動的看法,回應得相當直接明確。演講中她也引述好幾句 1985 行動聯盟的發言,大致可以揣測對兩黨之外的公民運動相當重視。她的看法是,公民運動應該更有組織,以更強的力道去壓迫政黨。是否同意這個看法見仁見智,但我相信,現在年輕人要嘛是不關心政治,關心政治的人對兩個黨都不耐煩了。


October 8, 2013

Livescript Backcall

No comments:
最近因緣際會之下開始碰 Livescript

原本好不容易把 Javascript 打通,以為可以開始用某種語言痛快說話時,突然又來了 Livescript,只好又開始牙牙學語

初碰 Livescript 總感覺到有無形的牆擋在前面,怎麼唸也不順,直到聽見高村長提到關鍵字「Perl」,心中好像有什麼結被打開了,與其把它當成某種 javascript 的變型,似乎把它當成 Perl 的變型要好一點,雖然原作者可能不這麼想 XD

心結打開就舒坦了一些

高村長又曾經開示 Livescript 重要的特色之一就是 backcall。如果沒有誤解,backcall 要解決的問題之一就是 javascript 可怕的 callback 地獄。以一段 pseudocode 來說

http.fetch_data(function(json) {
    open_file(function(filename) {
        save_to_file(filename, json);
    });
});

這段話可以如此解釋:從 http 取得一份資料,成功取得就打開檔案,然後把取得的資料存進檔案裡面。這些動作相當仰賴 callback,我們會一層又一層地將 function 物件傳進去,太多層就是 callback hell !!
用 Livescript 就可以透過 backcall 的方式這麼寫

json <- http.fetch_data
filename <- open_file
save_to_file filename, json

看起來比較簡潔,先來理解 backcall 的形式

callback_parameter <- caller_function
callback_body

箭頭的右側就是我們最先呼叫的 function,箭頭的左側則是傳入的 callback 參數,下方是 callback 的主體。也因此右側自成一組,左側與下方自成一組,看程式碼的時候就要這麼看它

json <- http.fetch_data
filename <- open_file
save_to_file filename, json


從形式上來看會是「執行 open_file 的 callback 是底下那一塊,左方是 callback 參數」。

既然要閱讀程式碼,就要能夠「唸」出來。我自己的念法就會是「http fetch data 之後就打開檔案,打開檔案之後就存入」,至於 parameters 的部份都忽略不看

update: 因為 callback chain 的關係,經常 callback 只會接受一個參數,也就是上一個 function call 的 return value。(不然就是再多一個 exception) 。在此前提下閱讀 backcall 就會簡單很多,上面的例子就是: http fetch data 的回傳值是 json,打開檔案回傳值是 filename,接著把 json 存進去 filename

這是我個人的理解方式,希望給同樣頭痛的人一點幫助

ps. 由於 backcall 底下都會是 callback body,若有不屬於 body 的 statements,用 do 就可以解決了

do
  json <- http.fetch_data
  filename <- open_file
  save_to_file filename, json
  this_is_in_callback \yeah

this_is_not_in_callback \yeah