顯示具有 生活雜記 標籤的文章。 顯示所有文章
顯示具有 生活雜記 標籤的文章。 顯示所有文章

2019年8月28日 星期三

十年一覺 N1 夢

故事是這樣子的,8/27 剛公佈 2019 年第一次日文檢定的成績,經過了三次不合格之後,這次通過 N1 ,天氣好不用再散步可以跑步啦(什麼。


先來個有圖有真相:
配個歷年成績,一開始真的是慘不忍睹……:
2016/12:語言知識 23/60  讀解 32/60  聽解 22/60   77/180   Not Passed
2017/07:語言知識 26/60  讀解 33/60  聽解 30/60   89/180   Not Passed
2017/12:語言知識 36/60  讀解 32/60  聽解 31/60   99/180   Not Passed
2019/07:語言知識 38/60  讀解 58/60  聽解 33/60  129/180  Passed

上次就已經來到只差一分合格,理應再準備一下就可以過關,但認真應考還是太累,年初工作剛到任還在適應中,決定一口氣延一年半到今年 7 月,還很幸運的在台灣大學新的大樓應考(不過新教室有一點問題,之後再說),這次總算通過啦。
這次的準備沒有特別久,如果我沒記錯的話應該是四月初開始認真準備,不過真要說的話其實是沒多認真啦…,我覺得投的時間比之前考前都還要少,下面會提一下各區塊的準備方式,有些可能會有業配嫌疑,不過我保證沒有,反正這個小 blog 跟現在工作做的產品都沒人在意(欸:
  • 語彙、閱讀
語彙跟閱讀這次是放在一起……沒有準備,這次是從閱讀下手,在上班通勤時間陸續看了utsuki 給我的<哪啊哪啊~神去村>,還有許久以前從 BookOff 搬回來都沒看的<嫌疑犯X的獻身>,兩本都是看過中文再看日文,避免日文看不懂的狀況,一開始的單字量會比較大一點,看多頁之後就會比較順,還會發現一些作者愛用字,像是神去村作者很喜歡用うなずく;題庫只有寫一本<全攻略新日本語能力試驗N1讀解問題集>,這本我覺得題型跟真的考試的 correlation 有點大。

以這次的結果論,閱讀我覺得是有效的(我現在反而超好奇我是錯了哪題www),至少不合格的三次閱讀題寫得滿抖的,趕在最後一分鐘的時間寫完;相對的這次閱讀題看得滿順,寫完還剩 40 分鐘,我還一度以為 N1 是不是變簡單了,還回去推敲了文法排序的幾題(以結果來看效果沒有很好就是);單字的話可能效果不如預期,畢竟言語知識分數沒往上,但文法有被評為 A,所以很可能是單字被扣。
言語字彙年輕的時候可以用 anki 之類的背單字軟體,不過我是覺得老了之後有點用不起來,一直盯手機太累了,還不如輕鬆看小說,然後買個迷你記事本把不會的單字記下來,在走路的時候拿出來複習。
  • 文法
文法在自我學習上是用之前用過的兩本:<TRY!日本語能力試驗從文法掌握N2> 跟 <TRY!日本語能力試驗從文法掌握N1>,這兩本文法的好處是有附 10 篇左右含所教文法的短文跟CD,很早以前考 N2 時是自己讀,那時還是拿奇怪的文法整理手冊在背,現在看來覺得效果沒有很好,這次乾脆把 CD 倒出來,然後反覆的聽跟跟讀到熟,像是睡覺前就放一篇聽到睡著、或是在工作中重複播放,我猜兩本書的 CD 我至少聽過 50 遍以上 。

課程的話,這次是在 utsuki 推薦的 Cafetalk 上面找老師,基本上只要是日文老師都會開 JLPT 專門的課程,結算是上了 28 堂,平均下來大約一週上兩次 50 分鐘的課程;老師是用<日本語パワードリル N2>跟<日本語パワードリル N1>,寫大量的題目跟講解,基本上絕對是有練有差,有些題目用的文法是同一個,錯兩遍就記下來了;而且意外的發現自己在<選出最符合文章的文法選項>這大題非常的弱。
另外老師有用一本<日本語総まとめ N1 語彙>,裡面有整理疊字詞跟副詞,在考前背過一陣,我覺得多少是有用的。

考試結果來看至少文法的評定結果是 A,不過我個人覺得在<重組文法>這題上面,做過的練習題難度都不到真正考試的難度,Correlation 也滿高的,平常寫練習題都很順手,上場考試卻排不太出來,我也不知道該怎麼改善就是了。
  • 聽力
聽力的話…就真的是放水流了……沒有認真準備啊結果也變醬糊,考試結束就覺得跟之前比沒有脫胎換骨的感覺…還是一樣,沒 Fu,聽一聽就是會掉字,偏偏在日文掉關鍵字很致命;然後第四大題真的是我的罩門,真的不知道要回什麼,每個 3 都好像是答案……;這次的聽力還證實了我的閱讀跟聽力是連不上的,有一題聽力講了一堆 りんぎょう,我就一直在想りんぎょう 是啥……見鬼<林業>啦…,,真的是愧對我還看完神去村的小說。

準備上我是建議把字幕丟掉,小弟也是 2016 考爆之後,從 2017 的<動物朋友>開始遮字幕看動畫,至現在雖然不是內容 100% 聽得懂,像<搖曳露營>有關千元鈔票的地方就沒聽懂,但意思都能抓個大概,如<Lovelive Over the Rainbow>跟<紺青之拳>在電影院也盡量遮字幕看。
動畫之外就是把比較紅的<逃避雖可恥但有用>、<半澤直樹>、<房仲女王>的日劇,一樣看完中文之後遮字幕看日文同時跟讀、在上班重複聽上面幾部日劇,或是狂聽 NHK 之類(不過 NHK 其實重複的內容很多,像是颱風、天氣、股市一直重複,其實不算太好的素材);其他就是強者我同學 GGM 大大借我的<新日檢聽解一本搞定>,有意思意思聽過一輪。

綜觀練習狀況,我覺得這次比上次還要穩定許多,我會給的建議,也是我第二次不合格之後,在 N1 衝刺班上老師給的學習建議:
  1. 從聽開始:把字幕丟了,聽動畫、日劇跟綜藝節目,看過中文再聽一遍也可以;反正一定有足夠簡單的內容,比如說動物朋友(O。
  2. 跟讀:超痛苦,但是是讓舌頭聽話的有效方法,必要的時候像房仲女王,可以考慮用 0.8 倍速跟讀,會比較輕鬆一點。
我覺得先不管日檢,至少這兩年練下來耳朵是有變靈敏的,至少看動畫會知道在講啥,練習題會莫名的知道它想講什麼,甚至聽沒聽過的歌也能聽出一些單字,這邊引用研究好像是吊書袋,但之前看過的研究是指出:沒字幕對學語言的效果最好,有其他語言的字幕有一點效果,有字幕基本上就沒效果了(如果有人知道這個研究的話煩請讓我知道一下)。

考場上也沒什麼太大問題,就是新教室比較大,有人反應聽力的聲音不夠大聲,讓大家聽了 8 遍<天氣很好所以去散步吧>,真的很靠北……


細數從大三的時候心血來潮(?)修了日文一,到今天通過 N1,差不多也要十年了,十年間進進退退,修完日文一之後停了一年,接著修了日文二跟後續的一些進階課程;13 年 7 月第一次挑戰N3,那時候在實驗室忙得要死要活,考前一天還失眠睡不著,準備不週又完全沒睡上場考試(回想起來沒考到睡倒真是奇蹟),結果 97/180 比及格高2分浮過去了。
14 年 12 月通過N2,那次準備比較充足些,總分:107/180;後來因為兵役的關係,從 15 年到 16 年進去當個兵出來什麼都忘了,以致連續三次被 N1 壓在地上打QQ。

N1雖然及格了,但從聽說讀寫來看,也只有讀算勉強過關:
現在的口說帶有一種奇怪的口音,重音位置超奇怪,被真的會日語的人指稱她完全聽不懂我在說啥,之前參加多國語言交換咖啡,也是被一位日本人瘋狂糾正,每說一句都有文法上的錯誤,跟 Cafetalk 的老師對話也是零零落落的,他能聽得懂我想講什麼根本奇蹟;試著跟讀也是很吃力,舌頭沒辦法動這麼快的感覺。

俗話說:「N1 考過了只是剛開始」。
誠哉斯言,個人經驗來講,所謂的多益、N1,其實都是能夠訓練的,就像軟體公司面試要刷題,文法、閱讀也能透過刷題解決,這次考前文法粗估應該刷了 300-400 題吧。但除去考試,語言能力或者任何能力,除了實際上場幹架之外,有什麼是考試考得出來的呢?考過了其實什麼都沒有;不過,現下已經知道了進步的方法,剩下就是慢慢努力,務求聽說讀寫能力俱備了。

十年一覺 N1 夢,夢醒時分繼續努力。

2019年8月19日 星期一

第一次在 COSCUP 當講者就上手

故事是這樣子的,在上周結束了兩天的 COSCUP 行程,總算達成人生成就:參加 COSCUP (欸。
這次是以講者的身分去的,畢竟搶票什麼的實在是太難了,就跟搶普悠瑪一樣難,當講者好像比較簡單(True Story)。

這次準備的題目其實都是準備許久的,一個是本次 COSCUP 有開 Rust 議程軌,就把之前寫 computationbook-rust 裡面當範例的 simple language ,配上研究一小段時間的 PEG parser 挑出來,攪一攪投出去。本來這是想要去年的 MOPCON 投的,但畢竟 MOPCON 是以網路為主體,跟這 programming language 還是格格不入被拒絕了。

下面是投影片:


blog 的話,可見實作麻雀雖小五臟俱全的程式語言剖析表達文法 PEG 簡介使用 rust pest 實作簡單的 PEG simple 剖析器使用 procedence climbing 正確處理運算子優先順序幾篇。

另外一個議題則是去年 8-10 月做的 Nixie Tube Clock,COSCUP 有非常適合的硬體議程軌,老實說 Rust 議程軌我覺得不一定會上,硬體議程軌我就真的滿確定會上,畢竟講硬體的本來就少,Nixie Tube Clock 也滿完整的,果然最後就上了一場。
投影片在此:


blog 筆記總計有十篇:
0. 前言
1. 材料取得
2. 自組高壓電路
3. 驅動電路
4. 控制電路
5. 電路板基礎
6. 電路板實作 layout
7. 焊接
8. 寫 code
9. 後記

個人小小的體悟是,先不要想 COSCUP,先想著把某件事情做好,時候到了投稿自然會上;就像會上一位大大說的,因為沒搶到票決定每周用 golang 寫一個 project,52 週之後就當講者了。
這次投上的題目,無論是 PEG + programming language,還是 Nixie Tube Clock,都是一年前甚至兩年前開始的嘗試,PEG 還搞了個失敗的 C parser,blog 寫了好幾篇的題目,做到這種程度才能換到 40 分鐘的上台時間;也許現在就該來想一下要做什麼新題目了。

----

第一次參加 COSCUP ,這次真的融合了超多議程軌人超級多,據說直接突破 2000 人,大拜拜的意味滿重的,像 Pycon 這樣同時段 3 場的都很常兩場一定要選的,COSCUP 同時開 14 場議程,從一開始聽議程就不是目的了。
實際下來比較像:三分聽議程,七分面基友。
細數一下我到底遇到多少在網路上見過面的大大:像是從荷蘭遠道而來的呂行大大、台灣軟體界照世明燈郭神大大、久未見面的 jserv 大大、好高興教授大大、TonyQ 大大、在會前酒會遇見上海大殺四方的 Richard Lin 大大、曾經在高雄氣爆的時候幫我提升 Google Map 權限的 pingooo 教授大大;認識了台灣 maker 社群、Python HsinChu User Group - PyHUG。
不過我覺得比較扯的還是呂行大大,走一走每個攤位都能遇到人,真的是神猛狂強溫爽發。

記得以前參加 PyCon,總會在那邊要求自己盡量的聽,連可能不知道在講什麼的、 lightning talk 都聽完之類的,這幾年終於改掉這樣的習慣,發現時間寶貴,聽一些跟自己太遠的東西其實是浪費時間,還不如放點時間出來跟大家聊聊天,真的沒想聽的就早早離開會場沒差;網路上常講:
小孩子才做選擇,成年人當然是我全都要。
但其實,成年人才知道自己要什麼、不要什麼、有能力要什麼、沒能力要什麼,我覺得是反過來的:
成年人才做選擇,小孩子才是我全都要。

我想最後還是要感謝一些人,像是強者我同學 JJL 大大幫小弟 review 投影片;強者我同學 wmin0 大大幫小弟生出一個 Nixie Tube 的講題,這個題目應該給大大講才是。
明年希望大家也都能成為 COSCUP 講者。

2019年4月22日 星期一

第一次教召就上手

我想是這樣子的,如果你進到這個頁面,有很高的機會你是因為收到後備指揮部寄來的神祕信件,很不巧的機票又沒有訂下去,開始無助的在網路上收集各種相關資訊,或者已經到了鬼門開的前一天,要準備好收行李的時候。
其實小弟也差不多,我是在 2 月底的時候接到後備指揮部確認資料的電話,過不久通知書就寄到家裡,4/15-4/19 要被教召,看看反正就進去國軍養個肝,在那邊躲來躲去的也不是辦法,反正雖然是南部但 4 月中還不算太熱,就乖乖的去召一下保衛台灣獨立。

從拿到召訓說明書開始說起,其實召訓說明書上已經寫清楚要準備什麼了:
  • 身分證/健保卡/駕照三選一,身分證當然是最好,但只要能證明身分的都OK。
  • 私章,領薪餉用:沒帶也可以簽名所以沒差。
  • 個人所需藥品:有病就該吃藥(欸。
  • 盥洗用具:要不要用新訓那種洗頭髮洗身體二合一的看個人,教召洗澡時間比較多沒必要洗戰鬥澡;大概就是沐浴乳、洗髮精、牙膏跟牙刷,刮髮刀想帶就帶一支。
個人衣物,這部分可能是大家最想知道的?當初我有查這個查了一下:
基本上進去會領到公發的兩雙黑襪、兩件內衣、兩件內褲跟一條毛巾,我的策略就是衣服完全不洗,時間省下來看書,我是這樣帶:
  • 一套離營時穿的衣服:星期一報到的時候身上穿的衣服褲子,到營區之後就脫掉放進塑膠袋裡包好,因為天氣熱的話,星期一的衣服吸飽到營區的汗水,放到星期五會非常的臭(我服役的時候試過一次會有像大便的味道,然後我還穿那個去搭捷運回家wwww),簡單作法就是密封起來不再穿了。
  • 保暖用的外套:我是沒帶畢竟南國 4 月就不用再穿外套了。
  • 毛巾:公發的就省下來,解召前繳回去,少浪費一點資源。
  • 五件內衣:同理,不過我日常沒內衣所以就是兩件公發的穿五天這樣。
  • 五件內褲:公發的我繳回去了。
  • 五雙黑襪:公發的我繳回去,如果要自備的話建議買好一點,或是用已經穿舊的,我買了新的結果非常咬腳,覺得沒有很舒服,襪口上面一點有腫起來,雖然我不確定會不會是有跳蚤。
  • 睡覺穿的短褲:這次我忘了帶,只好都穿迷彩褲睡覺…。
衣服之外就是要帶塑膠袋裝髒衣服。

其他:
  • 書:殺時間用的(其實跟同袍哈啦也很殺時間),輕小說我就覺得不錯,小本又可以看很久,像隔壁的大兵帶了<刀劍神域 18、19>,五天下來也快看完了。
  • 充電線:如果你手機續航力不夠,應該會開放中山室讓大家在使用時間充點電,但如果保持關機手機應該不至於每天用幾小時就沒電啦。
  • 水壺:裡面會發保特瓶的腰間水壺,我自己的水壺是晚上在寢室用的。
  • A4 資料夾:裝教召令跟手機三聯單等文件,進去會發一個牛皮紙袋不過我覺得資料夾比較好用。
  • 手錶:我的手錶進去前壞掉了,體會到各種不方便,要一直跟人借錶看時間。
我這次有個第三次被召的自備延長線跟電扇,這就看個人有沒有需要了,如果是 7, 8 月也許有需要。
教召基本上沒有髮禁跟鬍子的要求,裡面也有看到染金髮跟馬尾,要不要剪三分頭的答案應該很明顯了,我是順道去剪短一些,這樣比較不會熱。
連著教召單寄到的包含一張交通兌換券,填好之後可以換台鐵的票,理論上只能換莒光但我換到自強號他也沒跟我收錢owo,而且明明薪餉的錢是來回都有算,那我去程票用換的不是變成國家補助了召員兩次車錢?

教召其實就輕鬆過就好了,稱謂從新訓的編號->部隊的姓名->各位伙伴,一開始聽到怎麼聽怎麼不習慣XD;協訓幹部對大家也很客氣,大家至少都20多歲也都成熟多了,反正大家都當過兵也知道要怎麼做,撐一下五天就過去了。雖然如此教召也不是在玩,該練的都有練,該打靶的就打 25/175 的靶,打完該擦槍的就擦槍,砲操該跳的就連跳三天。
生活上來說下課可以投飲料(我覺得軍中的販賣機一定超級賺…),可以上營站,上下午20 分鐘的下課也會有小蜜蜂販售熱食冷飲,小心不要吃胖了。
手機收繳放養機場之後,每天中午跟晚上兩次有三個時段可以用手機,我自己是覺得領手機麻煩,統一在晚上用手機。
這次的飯(不知道為什麼)很難吃,跟新訓、通校、前運隊、部隊比起來,就教召的飯最難吃,醃漬品特多,新鮮的菜很少很像伙房在省錢,偏偏炒菜又很常燒焦變臭灰搭口味,如果真的忍不住就買營站的泡麵來吃,出來之後我現在吃什麼都覺得是人間美味wwww。

其實教召跟其他人聊一下,也是不錯的體驗,每個人各有不同的退伍年次,服役時的單位也都不同,有的人真的超級操,下部隊遇到聯勇,打完之後一個月再接漢光,結束一周後開始準備聯信(名字跟順序我不確定),幸好在開打前他退了;跟我這種在部隊上做九個月文書退伍的不一樣,這次都是另外兩位下過基地的人在罩我,動作做起來超純熟的。
可能就跟這部微電影說的一樣吧:一次當兵下過聯勇,一生回憶抬頭挺胸。

這次教召小弟的公司那邊正好要發新版軟體,正在緊鑼密鼓的測試跟解 bug,我一被召就躲了五天的工作 lol,然後久違的得到一堆時間可以專心做自己的事,就把很早以前拿到的<時間管理-給系統管理員>給看完了,雖然說一次把書看完好像不是作者的本意啦XDD。
不管怎麼樣進去養個肝也不錯,出來我晚上 10 點眼皮自動變沉重,倒下去一覺到天亮,健康到肝臟都會發光呢。

2019年3月19日 星期二

維基百科上繁簡內容的修訂

故事是這樣子的,最近小弟在看 github 上一個 os 的教學,跟 jserv 大大的 mini-arm-os 有點像,都是教你從頭幹一個作業系統出來,只不過這個是幹在 X86 處理器上,某種程度上我覺得在 X86 上寫開機程式根本是各種考古,還要從 real mode 一路開上來(yay
最近剛寫好小弟第一個 X86 kernel ,結果因為在 link kernel 的時候,object 檔案的順序寫錯,害我 de 了一輪搖曳露營 OST的 bug,超白痴。

扯遠了,其實這篇是要講 wiki 的,在寫作業系統的時候不免會去查一些 wiki 資料,然後就發現某些條目充滿了中國風格的用語,當然上面選擇台灣正體也不是看不懂但就是煩,於是把過去註冊密碼忘了的 wiki 帳號找了回來,自己來做個編輯,這裡記錄一下流程,希望大家有看到類似的狀況也可以順手修正一下。
我看到的文章是這篇:X86 呼叫慣例

參考用的資料:wiki 繁簡處理說明

首先先打開上例的 X86 呼叫慣例的頁面,會發現網址的部分,其實是 zh-tw/X86调用约定,這是因為 wiki 的規定是所有的中文頁面都是同樣的內容,再用之後會提到的轉換方式,轉換為中國(zh-cn)、新加坡(zh-sg)及馬來西亞(zh-my)三種簡體中文;台灣(zh-tw)、香港(zh-hk)和澳門(zh-mo)三個繁體中文。
所以在條目上變成先佔先贏,也就是有了「X86调用约定」的頁面的話,就不能新建「X86呼叫約定」的條目,必須只能編輯這個頁面,請見繁簡轉換的條目標題
然後編輯內容也不能隨意將簡體轉成繁體或反向轉換,否則會被視為破壞;另外文中的異體字、日本漢字也都有自己的處理方式,不過這裡我們今天不會提到。

這麼做的好處,就是無論簡體或繁體都會貢獻中文的所有頁面,壞處就是用語、行文等習慣,會需要花費時間轉換,而且我很懷疑能不能轉得好,像是文字轉過去了文法卻沒法用轉換的,對編輯者來說也很麻煩,像我如果要編輯簡體先到先得的頁面,就得要用簡體編輯才行,我個人是覺得壞處是大過好處的…但總之這是現下 wiki 的政策,再怎麼智障也只能先遵循(我其實找不太到這個政策形成的過程,也許有知道的人可以補個脈絡)。

再來就要到所謂地區詞處理了,請見wiki 地區詞處理說明:例如 stack 繁體為堆疊,中國簡體則是堆栈或栈,現下 wiki 的做法就是本文一律先到先得,編輯者是簡體中文就寫簡體中文,讀者選擇台灣正體的時候,再轉換成繁體頁面。
這裡的系統畫成階層圖大概是這樣:

愈下面的地區碼針對性就愈強,指定 zh-mo 就只會在澳門繁體頁面才會轉換,但指定繁體中文就會在下面三個語言都轉換;另外 wiki 有幾個不同階層的轉換:由上而下為全域轉換、全文轉換、公共組轉換、單獨轉換來處理。

  • 全域轉換就是超暴力所有 wiki 範圍內的文字都轉換,誤殺率很高,只有非常針對絕對不會誤殺的詞才能進去,例如台灣正體轉換表的:米芝蓮=>米其林。
  • 全文轉換雷同,只是在一篇文章內通殺。
  • 公共轉換組應該是最實用的,也就是針對資訊科技,定義好一系列的對照表,這些對照表就能套用到跟資訊科技相關的文章中。
  • 單獨轉換就是用來針對固定位置的詞來做轉換

我在看到 X86调用约定的時候,就是因為沒上資訊科技的公共轉換組:IT,以致雖然是繁體頁面內容卻都是中國用語(例如標題轉換成 X86調用約定),修正方式也很簡單,在原始碼的部分加上 NoteTA 的轉換模版就好:
{{noteTA
|T=zh-hans:X86调用约定; zh-hant:X86呼叫慣例;
|G1=IT
}}

其中 T 表示標題的轉換
G1~Gn 則是引用公共轉換組,這裡引用一個 IT 的,至於你說為什麼我知道要引用這個…呃…目前我只知道從類似條目去找,或者從全部的列表裡去找(yay

其實只要加上公共轉換組,看起來就會順眼很多了,自然會有一些詞沒修正到,只能之後手動下去修,像公共轉換組只定義堆栈要轉成堆疊,但原始碼有人只寫栈就轉不過去了。
大概就是這樣,要讓 wiki 用詞跟習慣一樣,還是需要大大們多多動手做點小修改,我個人還是覺得把簡體跟繁體頁面合併滿白痴的,你看我們定義了這麼多的公共轉換組,其實連個 X86呼叫慣例都轉換不好,說到底簡體中文跟繁體中文已經不是文字上的差別,而是連文法上都有差異了吧

2019年1月24日 星期四

閱讀程式碼的心得

許久以前曾經看過這篇,由傳說中在 appier 大殺四方的 PCMan 大神寫的閱讀程式碼教學

最近剛好因為小弟的工作上,也會需要在有一點點規模的程式庫裡面穿梭,雖然都在打混還是累積了一點點心得,在這裡分享一下,當然小弟還是遠不如傳說中的 PCMan 啦,大家從我這裡連過去上面的文章,看完就可以關掉回家了(誒
如果你還是想加減看一下,小弟比較熟的是 C/C++ 系的靜態語言,寫網頁什麼的小弟就不擅長了;然後個人的經驗是有極限的,例如 Linux Kernel 那種規模的 code 我就從來沒有弄懂過QQQQ。

1. 開 code 之前,先把專案編譯,跑起來:


編不起來的 code 就是垃圾,要怎麼知道你改的程式有沒有問題?要怎麼看到你的修改有發生實際效果?編不起來這一切都沒用,所以從網路上載了個 project 下來,第一步一定是先看說明文件把專案編起來或跑起來。
通常網路專案要不是 autotool 就是用 Cmake,個人是覺得 autotool 的機率還是高一點點,但通常都是下個 autoconf 再接 configure 就能生出 Makefile 了。

2. 看 code 是最後一步,先從高層次理解程式在做什麼:


這是工作一陣子之後的心得,原始碼最底層是一個很細緻層次的東西,例如模擬一個 x,y 的座標值,然後往上一層一層建構線、面、一群面的組合、一群組合的參考/一群組合的陣列參考等等,上層會用高層次在操作,把下面的實作都隱藏起來。
理解高層次的程式在幹嘛,遠比從低視角去理解實作重要(雖然 low angle 拍出來的照片比較香(炸)),沒理解想法跟目的之前,直接看程式碼是沒有意義的,看到函式做一個 loop,可是為什麼要 loop,在 loop 什麼?沒理解想法,連看著處理中的資料無法分辨對錯的時候,就只是看一堆無意義的資料飛過去而已。
比如說最近跟著強者我同學 JJL 大大在看 verilator 這個 project,這個 project 會把 verilog 吃進來,模擬的 C++ 送出去,verilator 發大財,直接進到 src 資料夾會看到滿滿的 V3xxxx 的檔案,但只要緊抓上面的概念,其實大部分都是 AST 的檔案,verilog 會先被 parse 成 AST,由程式對 AST 進行一些處理變形,再把成果寫出去;所以說至少會有 AST node 跟走訪 AST 的程式,從這點抓下去八九不離十了。
理解高層次的程式比較困難,一般函式至少會有註解,可以註記這個函式的功能,但高層次想法是一個比較難表述的東西,通常也不會訴諸文字,只會記在開發者的腦袋裡面,如果能有一個人帶領的話通常效率會快很多。

3. 調校好工具:


工具上的投資非常值得,好的工具能省下極大的時間,要不要用 IDE 個人沒什麼信仰,一般我都是用 vim,這部分請參考幾篇拙作:用 Vundle 安裝 vim 插件,還有用 ctags 幫助跳轉,Ctags 的程式碼跳轉是一定要的,效率直接天上飛。
終端機也是一個值得好好投資的工具,我一般工作都會開 5 個終端機的分頁,前三個用來編輯 code,第四個用來編譯(因為 C 專案通常程式碼跟編譯的 top 不會是同一個目錄),第五個用來執行程式(對因為通常程式碼、編譯跟執行檔不會是同一個目錄),用 Alt+12345 可以很快速的在分頁間切換,到 Alt+6 我覺得就太遠了。
至於多螢幕,我覺得有幫助但有限,最大的用處是在撰寫投影片跟筆記的時候,可以把 powerpoint 跟 word 拉到另一個螢幕去,跟 code 來回對照會快很多,但單純閱讀程式碼的時候是用不上的。
另外一些 shell 相關的部分,請參考拙作<那些在工作上看到的各種東西>的工具部分:

4. 邊看邊做點筆記:


說真的大型專案有些都會到很噁心的地步,還會有一些積非成是的地方,命名不佳的地方,可能當初寫好、修改,改到後來就沒人敢改了。
最近遇到還有印象的是這樣:我們會依序分解,一條線 x、x 的其中一個端點 S、S 的兩個端點 X1, X2,分別傳進去給函式 A, B, C 做處理,但函式 A 裡面 S 在 x 的 index 跟函式 C 裡面 X1 的 index,變數竟然都用 index,然後在函式 A, B 裡面,都用 i 變數來 pass 給下層的函式,變成裡面的 index。
搞到後來到底 index, i 在哪裡代表什麼都一團糟,這裡就很適合簡單畫個表格記錄一下;要隨手 refactor 一下也是可以,但在大型又缺乏維護的專案下,refactor 有可能會花很多時間,這部分就要自己取捨了。

5. 順手做點修改?


參照上一點,做點變數修改、加些註解,幫助自己理解程式碼是 OK 的;但要記得,一定要沉住氣,不要去改一些枝微末節的東西。
例如有些專案會是悲劇性的空白 tab 混用的狀態,這就不要改了,第一個這個會引發比無限之戰更慘烈的信仰之戰,第二是這種大範圍的修改很浪費時間;第三這種修改很難進入主線,設定一下 tab 的寬度讓程式碼排版回到容易看的狀態就好。
如果有一些區塊很難讀懂,可以用 vim 的 = 在區塊內做重新排版(雖然我覺得這個功能爛掉的機會滿大的)
再來是 syntax sugar,例如自從 C++11 的 range-based loop 出來之後,看到舊式的 iterator based loop 都會覺得癢癢的,是不是該順手改過去?個人認為是不需要。
syntax sugar 的本意就是:更易讀或表達更簡單的文法,本質上無關乎背後的實作,所以你動了手一方面對程式其實沒半點影響,通常 iterator-based 的 loop 也不會影響閱讀跟理解,還不如把精力省下來看懂程式想做什麼。

要知道大型或是正式的 project ,review 機制完善之後所有的修改都會需要審核,沒事沒頭沒尾的送一個修了一堆東西的 Pull Request 被接受的機率都很低,另外 syntax sugar 等級的 refactor 其實根本不影響程式效能,真正架構上、想法上的 refactor 才會,記住程式開發最浪費時間的東西就是程式人的腦袋,不要浪費時間在低層次的修改上面,專注在高層次的程式流程上。
大型的專案通常都橫跨十幾年,會有老舊語法跟 legacy code 是很正常的事情,我現在做的專案裡面還有 K&R C 的 parameter style 勒,就像下面這種:
int foo(bar, qux)
int bar,
stNode qux { … }
反正編譯器還支援的狀況下留著也沒差,我敢打賭這種 code 還會在公司的程式裡留 10 年以上;記得 syntax sugar 只能加在熱咖啡裡,咖啡冷了就不要浪費精力加糖,想辦法換杯新咖啡比較重要。

6. 從 main 下手:


不知道從哪裡開始,我個人的經驗是從 main 下去最快。
main 通常(通常就是有例外啦)會保留最多高層次的程式邏輯跟想法,如果在 main 裡面看到低層次的操作那也是滿抖的。
以 verilator 為例,main 位於 verilator.cpp,整個結構其實很單純:剖析傳進來的參數,讀檔,process,將結果 dump 出來。process 裡面就是對 verilog AST 進行處理的各個 visitor 呼叫,trace 一下就能清楚整個程式的大體流程了。
當然這個規則無法一體適用就是了,具體還是要看各 project 的架構,我也看過最上層是一套虛擬機的專案,實作功能都拆分為給這個虛擬機執行的函式,這時候進入點就變成各函式而不是 main 了。

以上大概就是幾個工作到現在累積的看原始碼心得,小弟班門弄斧,希望各位看倌大大有什麼意見都能多多回饋給小弟。

2018年7月4日 星期三

不正經,關箱文

故事是這樣子的,2012 年8月資訊展的時候,因為舊筆電面臨解體,那時入手了一台新筆電,宏碁的 Aspire V3-571g,當時還寫了開箱文,算是 blog 非常早期的文章之一,後來好像也沒什麼人看這台筆電就過氣了QQ。
算算到今天,再過一個月也要滿六年了,老到我現在連官網上都找不到相關介紹了,大約兩個月前決定將他出售,主要理由有幾個:

第一是畢竟用的六年,累積下來的傷痕也不少,下面會詳細討論這點。
再來雖然已經拆開過兩次用空氣噴槍清除灰塵,但處理器附近的機殼打不開,散熱膏也沒有換,現在用起來容易過熱。太熱也容易影響效能,裝了 windows 之後有時還是覺得它不是 i7 的筆電。
還有一個原因是重量,那時要跑模擬買了運算力強的機種,因為科技進步的關係比舊筆電輕,但加上電池 2.2 kg 還是相對重了些。一方面現在出國機會增加,搭廉航的話行李克克計較,背包限制 7 kg,2.2 kg 就重很多了。另外也是老了,背這麼重都覺得累(yay,想當年背著它爬山都沒在怕的說owo。

用了六年也是傷痕累累,這裡就細數一下這台身上到底有多少傷:
  • 散熱孔:應該是撞到,有兩條塑膠散熱片有破裂,不過除了外觀之外沒什麼大問題。
  • 光碟機:光碟機外殼的塑膠片有時候原因不明脫出卡榫,要用力把它卡回去。
  • 鋼琴烤漆機身:很自然的有點傷痕。
  • 背板螺絲:因為塑膠機殼慢慢磨損,塑膠上的螺紋磨掉,背板螺絲就無法鎖上去,會很自然的掉出來,後來在那個螺絲孔外貼了一塊膠帶XD。
  • 螢幕轉軸:這是第二次打開機殼清灰塵時發現的,在那之前有一段時間,開螢幕的時候都會覺得有點卡,原因是螢幕的金屬轉軸已經生鏽,變得比較不靈活,這時候持續開關螢幕,不靈活的金屬轉軸會把應力傳給周圍的塑膠機殼,最後連接金屬轉軸的塑膠部分斷掉,這時候開關螢幕又變得不卡了呢 (不~~~。
  • 鏡頭:本來是鏡頭藍色故障,改用外接鏡頭;最後交貨前安裝了 Linux Mint ,變成直接讀不到鏡頭訊號(Input/Output Error)
  • 充電線:Acer 的老毛病,變壓器之後接電腦的細線,電線在內部斷掉,舊筆電也發生過同樣問題,最後去維修站買了新的充電線,偏偏細線連著變壓器,要買就要買一個新的變壓器。
  • 貼紙:左邊本來有五張貼紙,Intel、Acer 的都掉了(Intel 是第一個掉的 XD),Nvidia 兩張掉一張 ,只剩一張Windows 跟另外一張 Nvidia 的。右邊的規格貼紙開始刺手之後也撕掉了。

資料保密上,我是用 Archlinux 開機碟進去,然後下:
dd if=/dev/zero of=/dev/sda
把整個硬碟覆寫掉,這只是覆寫 0 ,專業點(有電子顯微鏡等級)還是有機會被讀出來,要求安全還是會推薦 0, 1 多寫個幾遍,或者直接用專門的 shred 把硬碟寫個三遍,但這些都很花時間,就算是 zero 覆寫 1TB 的資料也要大約三小時。
也有人推薦用 urandom 生成密鑰,然後用 AES 加密 zero 作為亂數:
dd if=/dev/zero bs=1M count=100 | gpg --symmetric --passphrase `dd if=/dev/random bs=4 count=8 2>&1 | sha256sum | head -c 64` - > /dev/null
反正 AES 一定超快,比硬碟還要快,不能直接用 urandom 是因為 urandom 慢很多,zero 可以到 100M/s,random 只有 20 M/s;話說回來就算是電子顯微鏡也不是一般人拿得到手的東西吧,更何況我的硬碟根本不值這個價www,如果膽子大一點,其實把硬碟刪掉之後,重新安裝一個全新的作業系統,應該就能防止大部分直接讀硬碟的方式回覆資料了(吧?。

出售方式是在 ptt 的 nb-shopping 版貼文,那裡的交易速度還滿快的,基本上一貼文就有很多人來洽詢。
最終成交價格是 6,800,當初買的價格是30,800 剩四分之一左右(不計通膨),或者稱二手損失(second hand loss)6.57 dB(誒,也有可能是我一開場喊價喊太低,導致後來二手價都拉不上來,不然以一台 i7 的電腦,加上 8G 的記憶體,也許能賣更好一點點,但反正這台六年老筆電加上各種傷痕,搖一搖都可以感覺到快解體的感覺,能賣這樣子,夠了夠了。
據強者我學弟 Shouko 的經驗,Mac 系列的二手損失好像都比較小,如果是新品話搞不好還有二手增益(好啦應該沒有…。
註:據強者我學弟 Shouko 給的參考:其實過了五年 Mac 的二手損失也超過 10 dB了,跟一般電腦似乎不相上下。

下面是交易時拍得一些照片:





總之,六年了。
感謝這台 Acer 筆電,百操不壞的硬碟(Hitachi 的XD)讓我亂刷了一堆 Linux,當初第一次從 Ubuntu 跳槽 Archlinux ,也是在這台電腦上做驗證。
研究所的時候用基本上是用桌電做硬體,用筆電寫程式;陪我寫了系統程式、編譯器作業,跟 jserv 大神的虛擬機作業大戰 300 回合,幫忙開發有上千星星的 github project,我在程式真正變強的過程上,這台 V3-571G 絕對不缺席。
在這台上面畫過百萬人看過的地圖,錄過沒什麼人看的 word 教學跟 git 教學 ,和我一起去了世界各地(雖然很重),參加過東京實習,陪我上山下海,三個東京市都去過(誒

為了驗證電腦各元件都沒問題,做最後的清洗之後裝了 Linux Mint,此文獻給我的 Acer V3-571G,希望你能幫助下一件使用者再戰十年。
敬禮 <( ̄ㄧ ̄ )

2017年1月7日 星期六

多益 900+

去年12/18 ,參加了去年最後一場多益聽讀考試,1/6 公佈成績結果是930,聽力490閱讀440。
之所以要考這場多益,原因是五月退伍後有小小求職過,發現手邊已經沒有適合的英文能力證照,2011 年暑假考的GRE 在今年過期了,當時的成績也不太好,V 60 % / Q 90 % / W 3.5,而且GRE 本身就不是一個廣泛使用的求職英文標準,寫出來大家都不太鳥。
為了及時填補英文能力證明的火力空隙,暑假做了練習題,評估過自己英文實力後,決定報考12/18的多益測驗。

自己的背景當然比較優一點,在學校已經習慣念英文課本跟paper ,聽英文演講也沒有太大問題,口說跟寫作當然…嗯…沒事,就加加減減過得去啦
報考之後下半年就展開練習的生活,大概從8月底持續到12月,除了中間有事出差或太忙,每週末就到圖書館作一回練習題,看看都錯什麼題目。這裡要感謝之前實驗室的地下室長(X 莘予大大借我練習題庫:<New TOEIC 新多益閱讀題庫解析>跟<New TOEIC 新多益聽力題庫解析>,兩本題庫總共2000題,這套據說難度跟真實考試比起來稍難一些,我自己是覺得差不多,全部刷完對我的幫助不小。
另外也有在手機上下載背單字用的App AnkiDroid,單字卡是選用GRE的7500 張單字卡,平時零碎的時間就我把手機拿出來記點單字,我想多少有點幫助(雖然到現在還是沒記完)。
平常練習的時候聽力跟閱讀都是錯10題左右,也就是各450 分,那時候才會定下 >900這個目標,雖然只要超過860就有金色證書,但身為一個整數控,當然是要取個整數900,幸好這次有順利達成目標不用二試。
// 不過我要是有強者我同學:呂神郝神的 -3 dB 大概就 990 了吧QAQ

分科來看,老實說聽力的結果比我想像的好很多,平時練習聽力最怕多益的英、澳口音,跟聽習慣的美、加口音不同,英、澳的口音比較糊成一團,特別聽力 Part 2聽短句問題然後最適當的回答,問題短短的糊成一團就過去了,根本沒聽懂在問什麼,有些 5W1H 的發音還不太一樣,直接聽錯在問什麼;這次測驗事後論壇也有不少人評論有個男生講話特別的糊,好像含著魯蛋在講話,能考到490我也覺得運氣真的很好。
閱讀則是有點偏難(? ,平常練習都可以寫完還剩20分鐘左右,考試可能是太緊張或者太謹慎,剛進到最後一題雙閱讀題,竟然就宣布剩10分鐘,當下有些緊張,最後一題也沒好好讀,成績果然沒有太好看。

小碎念一下,我一直很疑惑多益為什麼不把滿分定在1000 分,拿個990讓人很想進位呀OwO,而且1000 四位數亮出來就是硬比三位數來得有氣勢呀;另外因為身旁實在太多人都990了,害我以為930其實不是個很好的成績 lol不過真要說起來,多益還是比較偏門,像強者我學長丞淵大神在TOEFL 大殺四方,那才是聽說讀寫俱佳的真強者owo。

曾經聽人說過,<這些檢定什麼的都是外顯的,並不能決定你>,仔細想想,要是真有些實際功績,例如在國外念過書或者在外商工作大殺四方,甚或如柏任學長直接在會議會場擔任口譯,丞淵學長在英文辯論場上如戰群雄,他們也許根本不需要這些證書,也能證明自己的英文能力,會考這張證書,也許正是沒有實戰能力的表徵吧?
Anyway,多益順利考過了,評估起來如果再練一兩個月,把閱讀速度跟單字量再提高一些,再考一次閱讀應該能拿到更好的成績,不過目前既然有過900就不打算再考了,接下來就要專心準備七月二戰JLPT N1 了(你看…又是沒實戰能力所以要考證書…QAQ)。

2016年12月13日 星期二

那些在工作上看到的各種東西

十二月小弟剛結束手邊的一個從七月延續到現在的案子,在這為期5個月的工作過程中,個人也有不少收穫,在這裡寫篇文章記錄一下。

溝通:

這次的案子是在不同的平台間移植,工作上沒遇到太多技術問題,在對方公司原有架構上,把平台相關的程式碼換成目標平台的程式即可,撰寫的程式碼不超過300行,只花大約一週半的時間,相關的程式碼就已經寫完了。
後來之所以會拖這麼久,一個原因是對方公司的程式碼還在不斷的更新,而我們必須將這些更新都整進我們的程式中,並且還要在機器上測試過。
這次真的是見證軟體工程,最重要的是團隊間的溝通,少了溝通再怎麼會寫也沒有用,整合上很多問題,諸如架構、測試、環境設定、測試硬體,都是由我的頭頂上司出面,多多溝通就解掉了,溝通的能力有時比技術能力還要重要。


架構:

整個過程中不斷撞牆的部分,在於整個Project 的開發過程中幾乎看不到架構設計的概念,感覺上就是東改一些西改一些,沒有一個系統性的規劃;甚至到現場準備產品發佈的前兩週,突然出現架構的大幅修正,我們整合的部分當然也要收進去,也因此在週末加了一天班(yay。
後來在言談中得知,對方公司的確沒有架構工程師這個職位,那個<架構的大幅修正>只是某個資深工程師這麼寫,其他人看看覺得不錯,其他專案也就跟著這麼做。
對方公司也算台灣有點大的硬體廠,軟體部門的狀況卻是如此,幾乎接近各程式設計師各自為政,知道了還是覺得有些心寒,不知道更上面的廠商狀況會不會好一點?

開發過程中,我自己也犯了類似的錯,應對方要求,我們這邊要整合兩個不同平台的程式碼,我竟然把所有的程式碼放在同一個檔案再用編譯macro 隔開,這當然不符合軟體工程的概念,只要加上更多平台,程式碼必定會增長到難以維護。
後來反省,的確是我的經驗不足才會這樣寫,真是幾年程式寫下來,軟體架構的概念還是沒練成,也難怪要成為架構工程師,都要先經過好幾年的軟體工程師的訓練。

測試:

這是專案中移植的目標平台,使用了一家中國廠商提供的SDK,無奈這家廠商有點兩光,通常會送有問題的程式碼過來,文件也寫得不清不……啊不對是通常沒什麼文件。
一開始在做整合的時候,因為sdk有問題的關係,我們的程式碼執行不定時間就會造成其他的process crash,從log 上來說就是系統上某process (而且每次的process 還不一定一樣)segmentation fault 了,跟這篇文章描述的有 87 % 像
當下無論是我們亦或對方公司覺得是自己的錯,但程式碼怎麼看都沒有問題,無奈它又是個不穩定的錯誤,在實際環境上測試非常花時間,在這個問題上面就花了近一個月的時間。
後來是利用一支之前用過的測試程式,可以用迴圈不斷執行核心功能,透過執行這條測試時也會crash,確認問題是出在核心功能而不是其他地方。

實際測試需要手動碰觸控螢幕,測試程式只需要用終端機執行,透過測試程式才能快速的註解掉可能有問題的部分,再測試會不會crash 來判定問題在哪,最後才定位出問題出在對方的sdk中,回報上去才拿到修正這個問題的新版sdk 。
覺得就算沒有要用到TDD,在專案中維持一些簡單的測試,光是簡單的回歸測試都能預防開發中可能的問題,就算真的出問題找不到在哪時,也能利用測試來定位錯誤。

能力:

這次發覺,自己的能力和對方公司的工程師比起來並沒有差太多,一些方面可能還超前對方。

很多工具例如git 的使用,如何透過Format patch同步兩個git repository 的狀態(當然對方公司內部是用svn ,所以這部分比較勝之不武),shell script 一些工具,我也比對方公司的工程師知道多一些些,工作的效率自然更高
我個人是認為,對方工程師雖然有較長的工作經驗,卻沒有-亦或沒有辦法-持續的和外圈技術圈交流,學習和知道一些最新的小工具:例如我在Code & Beer 聊天中知道的 autojump
一些無名的小工具能大幅提高生產力,卻未必能大紅大紫,是在小眾的技術圈中流傳,多多交流還是能有效擴展自己的見聞。

工具:

這次也學到,平時多多熟悉一些工具的使用,用到的時候可以發揮很大的助益
案子的結尾,有機會跟對方公司的工程師一起到客戶現場去準備產品上線,到現場是個很新奇的經驗,但工作環境實在不太好,程式碼不讓我們用版本控制就算了,連網路也不讓我們使用,遇到問題都只能問男人。
沒辦法查網路的時候真的是在比底力,平常有沒有熟悉shell 工具和程式語言這時立分高下。
我們又被現場公司雷:他們的環境裡有他們自己的設定,造成我們的code 放上去,clean 重build 的時候,把他們的設定移除,造成機器當掉,又是感覺起來是我們的程式有問題
其實只要把他們的設定再裝一次就解決掉了-但從沒人告訴我們,為了抓這個問題花了兩個工作天,大部分時間都在比較build log,在不同版本間進退,也因此用到不少 shell 工具。

我整理記憶上用得上的工具:
一套版本控制系統,至少要能做到在兩台機器上同步,我是用 git
至少一款diff 工具,我是用 vimdiff
檔案關鍵字的搜尋工具:shell grep
找檔案工具:shell find
簡單的 shell script,一旦發現到有重複性的工作,可以的話就盡快改寫成shell script,可以加速工作的效率。
上面這些除掉網路還要能熟練地使用。

總結上面五個,這五個月來接這案子的小小心得,記錄一下。


註:照片有不少篇幅都是用Google Doc, Voice Typing 的功能打的,覺得直接用講的雖然可以省下打字的時間,還有簡省手力,不過事後校稿也滿耗時的。
感覺用說的句子跟用手打出來的風格不太一樣,句子拉得比較長,贅字跟語助詞較多,如果是先寫在紙上再打到電腦又會是另一種風格,挺有趣的。

2016年11月21日 星期一

人生第一次參加 hackthon

故事是這樣的,最近手邊在寫一個網頁相關的facebook message viewer,然後…嗯…我根本不會寫網頁:前.端.超.難 。
正好這時候,學校的開源社在校內舉辦 hackthon,覺得這是一個大好機會,可以認識其它強者幫忙我作這個project,於是就報名了。

這是我第一次參加hackthon,想說先從比較小的 hackthon 開始,累積一點經驗,看有沒有機會參加玩真的hackthon,畢竟如隔壁棚qcl 大神都已經在參加真的黑客松,還遠征芬蘭大殺四方,嚇得老外屁滾尿流,在大神面前我根本只是業餘來亂的,不努力追一下怎麼行?

在hackthon 之前,我已經著手在這個project 一段時間,把後端的parser跟資料庫都寫完了,在hackthon上面只要開API跟寫前端就好了
第一天首先上台簡報一下自己想做的東西, 結果就徵到一名隊友,傳說中的昆立大神,雙方溝通一下API的格式;然後他埋頭寫了一下下,就用Vue.js 把前端整個寫完了,現在的user interface 坑全部都是隊友填的。

哇靠這到底是什麼神速,太強請受小弟一拜 m(_ _)m

然後…試著的所以我的Code 到GAE 上面,結果它用掉太多記憶體跟資料庫,記憶體是我parser 沒有寫好, 總之不付錢的話就沒辦法執行,啊我就是沒錢嘛咬我啊= =...
記憶體的問題,把parser改過之後就解掉了;資料庫真的就無法,資料量就是這麼多,最後放棄直接先睡了。

第二天為了demo ,決定直接把後端的parser 跟資料庫都從GAE 上請下來,整個改成local server,伺服器跟資料庫用Bottle.py 跟sqlite3重寫。
因為GAE 的 ndb 和 sqlite 的介面幾乎不同,平常也沒有在寫SQL 的相關的Code ,第二天重寫後端就用掉一整個早上,幸好到了下午2點左右,全部修完之後作品就會動了,上台demo 也得到不少迴響,第一次hackthon 就這樣堪稱順利的結束了。

我覺得參加hackthon,在參加前最好先有個題目的雛形,自己也可以先寫一些,這樣到了會場,一早 demo 過點子之後就能立即的尋求幫助和建議,遇到的問題也能問人,很快的得到答案。
到了hackthon 現場,就是專注在寫Code的上,在那個專注工作氣氛下,工作效率相當高,像我在第二天,很快的就把SQL相關的語法還有bottle.py 摸熟了,也為了趕出成品,第一天晚上,把我原本消耗超過600 MB memory 的parser重寫成只需要60 MB,算是把工作壓到兩個全天的成果。

當然現在的code 滿雜亂的,需要好好整理整理才行,最後的成品大概就是這樣,已經可以爬訊息跟去瀏覽特定時間的訊息:


這次hackthon 的氣氛算滿輕鬆,也有很多玩笑話,在這裡節錄一些語錄:

A: Steam 雖然出很多單機遊戲,但還是提供了成就系統……
B: Steam 根本是理財遊戲吧XD
C: 遊戲收集遊戲(XDDD

某:前後端分離?前端起手式:Bootstrap

某:Golang寫起來跟C 有 87 %像

2016年10月9日 星期日

人生第一次參加 coding contest

最近郵件收到leetcode weekly contest 8 的信,又收到Top international 也要辦coding contest 的消息,撇開原本就有的ACM 或是Google Code Jam 不說,怎麼現在大家都在辦coding contest,是某種新時代的潮流嗎owo
看了這麼多信我都有點心動,決定這次來參加一下。不過我從來沒有參加過Coding contest 的經驗,畢竟我軟體是半路出家,演算法什麼的根本是十竅通了九竅-一竅不通,不像強者我同學外號武藤遊戲的郝神,都已經在Code Jam大殺四方,還可以打到世界前幾名(yay,連Jeff Dean 都不是對手。

第一次參加這種contest ,得名什麼的就算了,志在參加不在得名。

總之0930 時開始,時間到把題目先看一遍,總共有四題;看完完全確定解法的只有一題 415. add string,我還在寫雛型的時候,大概五分鐘網頁上已經有人解完一題了= =,這到底是什麼鬼速度RRRR。
把add string 解掉之後,繼續下一題,416. Partition Equal Subset Sum,這題我先用了最直覺的greedy algorithm 去寫,因為是approximate algorithm因此有測資是錯的,只好改用dynamic programming 去解,在1 hr 的時候拿下第二題。

第三題Sentence Screen Fitting,用最直覺的解法解掉之後,上傳遇到 time limit exceed。
做了最佳化,在 2 hr 時拿下第三題。解完剩下30 分鐘,開始寫最後一題,雖然知道演算法,不過有些地方碰上問題,剩五分鐘的時候上傳有測資出現錯誤,查了一下想出問題到底在哪裡?再上傳就通過了,只可惜已經超時,這題最後就沒有拿分。

Leetcode coding contest 的規則,除了要快還要對,每次錯誤都會加上10 分鐘的penalty,這讓submit 的時候壓力超大的,看到Accept 跳出來都在電腦前又叫又跳的,幸好房間裡沒其他人。
這種比賽真的滿吃經驗跟熟練度的,在比賽中還在翻c++ forum或cppman 就low 了,根本是上了戰場後再來查武器使用說明書Orz。
最終結果:四題完成三題(如果不算上那五分鐘理論上是四題啦)在2:06:45 時完成,但因為一次超時跟一次錯誤,各加上10分鐘,總時間是2:26:45,名次:200 / 869。

人生第一次coding contest 就這樣結束了,根本悲劇,演算法的什麼好難啊QQQQ

2016年9月27日 星期二

筆電重灌全記錄

最近家目錄 100 GB 的硬碟被我塞滿了。

雖然後來刪掉一些東西,例如之前玩一些<資料>分析contest 的資料,還有之前玩虛擬貨幣primecoin載了整個區塊鏈,也全刪掉;清了大概30 GB 的空間出來,不過覺得還是不夠好,畢竟現在的電腦從2013年4月用到現在,硬碟分割不是很好,有太多長期留下來的東西,設定檔愈來愈亂,空間分配也不是很好;覺得是時候重灌系統調整體質,以迎接下個十年,逆風高灰(X。

重灌系統,麻煩的就是要先備份系統,我選擇的是把家目錄備份出來,備份使用rsync,用rsync 的好處是快,而且可以增量備份,隨時加一點東西上去也OK,例如週末有空的時候做全資料夾備份,直到重灌前一刻再增量備份:
http://newsletter.ascc.sinica.edu.tw/news/read_news.php?nid=1742
rsync -av --exclude=”.*” --exclude=”.*/” src_dir dest_dir
不過如果你的資料夾裡有 git 的話,就要小心,上面這個不會備份隱藏的資料夾,要把那個exclude 拿掉。

硬碟分割的部分,這次決定採用激進的分割方式,雖然電腦上會保留Windows…用來……打遊戲,不過這次不分割所謂的D槽給Windows,資料分割區從NTFS 改為ext4。

以下是這次的分割狀況,沒特別註明就是GB:
  • /boot 200 MB
  • windows 150 之前的windows 被塞了不少acer 預設的程式在裡面,這回全部清得乾乾淨淨,給150 應該很夠用了。
  • Linux root 75,現在是給50 GB,我也從來沒想過它會裝滿,直到有一天要燒FPGA裝了Xilinx Vivado,瞬間root 剩下零頭,每回開機都會警告空間不足…
  • Linux /var 30 曾看archlinux 的wiki 頁面分12 G 給它,結果安裝一堆套件之後立刻就滿了
  • Linux /home 200 一口氣倍增到200 G,應該絕對夠用了吧
  • Linux /data 硬碟剩下的空間大概500 G就全分給data,之前用NTFS 現在改用ext4,用來放一些像是東方啦動畫之類的東西。

另外備份所有已裝套件:archlinux 使用pacman -Q > allpackage 或 yaourt -Q > allpackage 把所有安裝的套件包都列出來

然後就可以放心的把磁碟區全部clean 掉,然後先裝windows,再裝我的不敗開發環境:archlinux;颱風天一個人躲在房間,任窗外狂風暴雨,我的電腦也是狂風暴雨XD。不過我太久沒裝了,還是參考一下強者我同學的安裝記錄,大體上沒什麼不同,我是選用mate 作為我的桌面環境:
http://johnjohnlys.blogspot.tw/2016/06/archlinux.html
小試一下,我的archlinux就回來啦,重裝套件的部分,就用剛剛上面的reinstall 文件,搭配vimdiff,很快就能把套件全部裝回來了…才怪。

老實說,因為選用的是archlinux 的關係,有不少比較不那麼正式卻又很常用到的東西,都要從AUR 去裝;而AUR 跟pacman相比就是很吃網路跟編譯時間,結果我整個裝下來,花的時間不比windows 的少,雖然說爽度還是有差,AUR 只要yaourt 裝好,指令打下去就是了;windows 還要自己去找安裝檔,用滑鼠一個一個安裝,只能說重灌就是麻煩……希望這次轉骨完之後,下次可以等到很久很久之後再重灌了。

ps. 後來發現在 /etc/makepkg 裡面的 -j 選項沒有開,等於是一直用單核心編譯,不知道速度上能差到多少

2016年7月16日 星期六

Blog 累積瀏覽量突破十萬人次

小弟經營這個blog,最近累積的瀏覽量剛剛突破100,000 人次,用dB 來算的話就是50 dB,現在平均每日的瀏覽量大概是100 人吧。

今日瀏覽量截圖:


還有突破當天早上不小心拍到一張99,999 的截圖:

老實說一開始寫網誌只是好玩,有個公開的平台讓自己記一些東西;這blog也的確有用,有時什麼東西忘了,翻自己的網誌就能找答案,所以說瀏覽量其實內含不少自己的瀏覽量,那數字也沒什麼意義。
寫著寫著有些文章就開始熱門起來,像是四年前寫了四篇verilog 相關的文章,現在覺得超級陽春(而且我已經不會寫verilog 了yayayayay),不過累積也有7,000 多次瀏覽,算是積少成多吧。

不過說回來,其實我是有刻意的宣傳這個網誌,例如每發一篇文章就轉到FB 上面,下場通常是沒人看QQ,不過還是有鳳毛麟角的幾篇獲得「分享」,一分享通常就會帶入大量流量,畢竟我FB 朋友們一個個都比我發,不像我只是個花盆;有機會也會把內文跟連結一起貼到BBS 裡面,宣稱「網誌好讀版」也能帶來一般帶不進的瀏覽量XD。
不是這樣做大概也無法在四年半累積到十萬次瀏覽,只能說,想出名還是得靠宣傳,主動出擊才能讓人看見。

去年覺得不用白不用,給blog 連結了Google Adsense 的帳號,大約是去年六月的時候開收益,到今天究竟累積了多少?

才1.3 USD 呀

照這個收益量來看,要靠廣告養活自己根本癡人說夢,真這麼做大概會吃土,而且Google Ads 要累積100 USD 才能轉換為現金匯入帳戶,在此之前也無法動支,相比之下連paypal 帳號內的錢還能付款,Google Ads 就只是個數字罷了。

有位現在在Yahoo 台灣大殺四方驚動萬教每月豪領100K的人生溫拿勝利組強者我同學 qcl 大神(這稱號好長呀XDD),就下了句中肯的評語:
「十萬信眾,一塊收益。」

總之呢,慶祝瀏覽量突破100,000 人次,上次慶祝是 2013 年10月突破10,000 人,附上當時的螢幕截圖:


謝謝大家這麼捧場,今後也要繼續努力下去。

2016年6月28日 星期二

36 個問題

最近有空玩了這個「墜入愛河的36 個問題」
http://womany.net/read/article/6618

玩了之後覺得有幾個tip:

首先是時間要夠,36 個問題不算太多也不算太少,但很多問題的回答都需要解釋,直接了當的答案也不見得完整,例如:

Q:你希望自己出名嗎?希望自己以什麼方式出名?
如果我回答「想,跟Steve Jobs 一樣的方式出名」名人的話對方也許還能了解,但如果是「想,跟Dennis Ritchie一樣的方式出名」,這到底是什麼奇怪的出名方式呢?要解釋就要花時間,這種背景、人物無一不可的介紹,不說個五分鐘絕對說不清楚

Q:如果你能夠活到九十歲,而你能選擇保有三十歲的身體或三十歲的心靈活力,你會選擇保有哪個?
A:心靈活力。
只給這樣的答案只要3分鐘就可以回答完36個問題了啦,但這樣是要對方怎麼了解你啦,為.什.麼.啊?

試玩的時候時間準備得不夠,快23才開始,後來弄到快01才睡,有些問題也因此在中途用簡答的方式跳過,或者偷工簡料五個答案只回答三個,有些可惜。

另外要準備可以倒數的鬧鐘,Q11 和最後的凝視都會用到;就如內文所說:「雙方之間毫無掩飾的脆弱展現能讓親密度升溫」,所以回答的現場最好準備一包衛生紙,免得說一說就崩潰哭出來;也可以準備幾罐小酒壯膽,當然如果你們喝了酒會想睡就免了

剩下好像也沒什麼好注意的,找個好時間放膽去玩吧。

至於這36 個問題是不是真的有這樣神奇效果呢?
這點我無法提供什麼評論,畢竟我和對方在試用這36 個問題前就已經不算陌生人了。
我試玩的結果比較像是洩密大會…,或稱Share 密大會,平常不對旁人說的祕密都被抖出來,像是貼Facebook 一樣貼給對方;真要說這36 個問題為我們的關係帶來什麼變化?大概就是彼此間變得「可以」無話不說,既然最恥ずかしい的東西都分享過了,那還有什麼好不能說的呢?
但說回來,我是在私密空間只有兩人狀況下玩的,文中所說「真的在酒吧找了位陌生的夥伴」面對純粹的陌生人要能老老實實回答其中一些問題,我覺得相當困難,有些問題即便都到了第三部分還是很難出口,只能說那位作家真的太強大了。

TL;DR,這36 個問題能讓你/妳和對方分享許多故事,至於能否墜入愛河,我因為在河裡所以無法提供明確的實驗結果。

2016年5月1日 星期日

退伍感言

原文寫於大兵日記最後一頁,寫作角度其實不全然是當兵,比較像是在部隊的退伍感言,本來應該是退伍當日要PO 的,不過你知道的……懶嘛日記要先打好再來打退伍感言

記得去年5月入伍,正是天氣開始轉熱之時,天氣熱得要死,新訓單位還一堆蚊子,要是有登革熱我敢打賭那裡一定大感染,那時我就對自己說:「天氣越冷越好,因為當天氣冷過開始回暖,就是我要退伍了」,雖然後來冷到2度真的是有點太冷了Orz
很多人會跟我說:「好好我要退伍了」我很懂那個感受,我剛到部一個星期就有人退了,我也跟他怎麼說過,日子就是一天一天過,回頭一看突然就要退了,這就是我對當兵這年的評語:度日如年、度年如日

很幸運當初以四分之一的神抽,抽中金門,前一位抽到東部海巡署一直高興的跟我握手,其實怎麼想金門都比東部好,回台灣搭個飛機噗茲一聲就到了,不像東部搭火車四個小時跑不掉,也沒有離島這樣的長假可以放,軍包機可以搭;抽中的連隊不需要戰備,雖然一到部就連續三個星期沒放假,但任務過後,平常有充分的時間做自己想做的事,伙食也讚
到部前吃過新訓、伙食外包的南通校、罐頭天堂前運隊,沒一個地方的伙食比這裡好,到部第一天早餐吃漢堡,中午進伙房還看到烤盤上滿滿的雞腿都快驚呆了,旁邊忘了哪位還不放過我這個菜逼八,還問:「你看啦早餐吃這樣像話嗎?」請問到部一天的單兵如何回應?這單位的伙食也太誇張了吧

當兵到現在學會:用槍、爬電線桿、在連上當行政學會記帳和財務,曾經拿了兩張紙匯出1,000,000元現金;曾經在大家面前從電線桿上摔下來;曾經在跨年時站哨跨年,看天空隨煙火一明一暗;曾經為了教召2320回營,接著還要站24-02;也曾經情緒失控對著長官大吼大叫;工作壓力太大在被輔導長念到淚灑行政室。
除了部隊的事,在放假期間也沒閒著,感謝班長慷慨借我腳踏車(well 其實班長根本沒在騎,我不騎它就變廢鐵了),它陪我度過無數次島休和洽公,騎著腳踏車環島金門一圈,每日往返部隊與市區;入伍投稿先前量測的電路,利用放假的時間在網咖修改paper,印著reference 跟稿件回營閱讀與修改,終於在3月初將完稿給投出去,只要有心(也許還有沒遇到基地XD),無論看書還是開手機練功,在部隊平時的時間其實很多,可以做到很多平常不會做的事。

當兵一年讓我經歷這些、學會這些,儘管這一年漫長而辛苦,我仍相信收穫多於付出,未來很可能不會再與部隊接觸,這段記憶仍會刻骨銘心
末尾,很高興當初抽中這裡,沒有在海巡署虛度光陰,也要謝謝9個月來大家的關照,今天我要退伍了,明天開始會努力向下個人生目標邁進

2015年11月1日 星期日

錢的聯想

最近筆者在部隊中擔任行政/預財,工作內容大抵就是管部隊的收支:採購連上所需物品、管理銀行國庫帳目、上支出收入簽呈、登連隊收支帳本等,額外任務包括洽公時幫弟兄們買飲料回營XD
預財當久了,其實有種感覺,覺得我管理的不是金錢,而是一種信任:連長會簡單看過簽呈隨即批可,是基於對我學長和我用錢的信任;連隊保險箱的國庫支票和櫃存現金會由連隊行政保管,也是對行政專業的信任;就算是弟兄們放心將錢交給我,讓我去幫他們買東西或是到銀行換成幾袋可以砸死人的硬幣,也是信任的表現。

太多人看到錢就是錢,其實錢只是信用的表現。
歷史證明,人類可以對各種亂七八糟的東西產生信心、貴金屬、貝殼、植物種子甚至是數學加密演算法(bitcoin),大家投入的信心多寡會決定那樣貨品的價值,價值又會反過來影響大家對它的信心。彭淮南說比特幣是一種貴金屬,的確,貨幣本身也像一種貴金屬,在傳遞信用這項功能,貴金屬、貨幣並沒什麼兩樣。

如果我們把金錢=信用這個概念延伸出去,現在國際間的貨幣戰爭,其本質其實是一場信任的戰爭,俗話說貨幣是一個國家的股票,股票價值取決於投資人對公司未來獲利的信心,貨幣價值則取決於人們對未來該貨幣價值--也就是該國家存在的信心。
一但人們對貨幣價值失去信心,便會想方設法將貨幣脫手,換成更能保值的東西,像是iPad(X)
http://technews.tw/2015/07/09/greece-mac-header/

現代的貨幣體系,其實完全是基於信心,紙幣不過是印上防偽功能的防水特殊紙,硬幣則是鑄上肖像的金屬片,物質不重要,重要的是國家擔保的公信,如果今天國家想要,我們也可以換用子彈當貨幣,只是就攜帶性、分割能力、辨識度來說,鈔票硬幣難以取代。
如果失去了擔保的公信,貨幣會在一夜之間化為廢紙、廢五金。

現在先進國家競推的量化寬鬆其實是在稀釋大眾的信心,可見的未來,該貨幣的價值會一直被稀釋,但只要國家擔保長期保值性存在,信心一直稀釋下去也無傷大雅;美日QE 推得之兇,卻也沒多少人認為美國、日本會突然放棄美元日幣,這當然是因為美國、日本背後龐大的資產在支撐它的價值;儘管今日十美元一年後可能只剩九美元,美國擔保的信用仍然可信;相反的,率巴威就算印製10^14 元的紙幣,價值仍比不上幾顆雞蛋。
曾經看到2016 年的總統大選,有人的政見是每人發100億元,的確以國家的力量,我們真的可以這麼做,就像消費券每人可以領3600元;但這政見沒有意義,台灣的信用擔保不了每人發100億元的信用,那時100億元的價值大概跟現在1000元相差無幾。

各國競推量化寬鬆,我覺得是一場「踩煞車遊戲」,量化寬鬆讓貨幣價值降低,逼使大家將貨幣換成貨物,藉此催出貨品需求成長,這樣的下場是,推動的國家最終可能會:
  1. 該國決定踩煞車,退出競推量化寬鬆的行列:這會導致貨幣催生的成長減緩,需要改處理國內的分配問題。 
  2. 推到一定程度,大眾擔心國家無法再擔保這麼多的貨幣,導致大家開始拋售該國貨幣與國債,導致該國債率大升,貨幣一夕間失去價值。 
這就像一堆人開車衝山谷,先踩煞車的會被眾人羞辱,不踩的會摔死;又像是藥癮,停掉會很難過,但繼續吃有可能會吃壞身體,而且吃愈久停掉就會愈難過,要更久才能恢復回來。
台灣是否應該跟著跳下去玩?該是持續寬鬆催生成長,還是該反其道而行,改用所得重分配對付衰退?我覺得這個問題真的滿難答的;但我相信,持續寬鬆推動的成長有其極限,與其跟大家一起玩到累死,我們也可以走一條新的路,想辦法在衰退中,也能過得舒適優雅一點。

不過說回來,我覺得我想得太遠了,只能說「管錢的」其實管的是大家的信任,坐在這位子上,能不戒慎恐懼,把每一筆帳都管得清清楚楚嗎?

2015年10月25日 星期日

程式與工作

筆者所在的連隊,前陣子在接教召,筆者和其他連數位行政,要負責近300 位召員的薪嚮跟交通費補助,筆者所在的連隊還好,只有一個排約30 位召員,其他連隊都是近90 位召員。

整個過程其實挺慘烈的,一開始就要先跟召員們收個人私章以便辦餉,要收來回交通票據還有該員的工作地或居住地證明以便核銷交通費,想當然爾大家都會忘了帶東西,補救的工作當然是我們行政要做了,各項東 西的補救方式分別是:

  • 私章:由我們行政刻一顆,刻章費用由薪餉中代扣
  • 沒帶工作地或居住地證明:請家人或同事代為傳真
  • 沒交通票據證明:我們行政代開證明
  • 沒買回程機票:我們行政代購機票,這會需要加收召員的身分證件
然後交通費資訊還要打到網路系統上,印出交通費表附在餉冊後面。

我們連因為人少,我簡單處理後兩位要刻章、兩位要代買機票,輕鬆解決;其他連跟營行政就不行了,營行政負責統籌所有印章代刻、機票證明與代購,其他連隊的行政因為人多,統計要刻誰的印章、買誰的機票、機票的時間等就花了好一段時間,統計錯誤更正也會一直出現、傳真機還會不定時嗶嗶響,送來新的住地證明,營行政就被潮水般的訊息淹沒,教召這幾天都是從早工作到晚,不斷處理進來的訊息,到機場跟刻章店處理新進的要求,回營區收召員們的證件跟歸還證件。

其實筆者自己也很懷疑,如果把我放去其他比較多人的連隊,或是讓我接營級統籌的工作,我是否能做得更好?還是會更混亂?但看著營行政做事時的樣子,我突然有種體悟,其實工作就跟程式有點類似。

實作程式時,寫code 的速度快慢其實不是重點,重點是你的程式是否切合你的問題,用錯的架構去解問題,要不碼浪費資源或是要嘛容易出錯;工作也是一樣,認真與否不是關鍵,選一套好的工作方式才是重點。

以下是我認為幾個好工作方式的要點:

  • 善用數位工具:
現代電腦其實比人類更不易犯錯,有很多枯躁的事能讓電腦代勞,同時文件在電腦上修改比手寫快得多,同時電腦還能快速搜尋、排序,如果資料量超過50筆的作業,用電腦文件來管理會比手拿一疊紙清楚得多,教召時其他連隊確認交通費金額都要去翻他們收的資料夾,一頁一頁慢慢找,我只要看一下手上電腦打好的表格,瞬間就找好了,就知道兩者有差。
工作時,時時檢視有沒有在做一些電腦可以做的事,例如手寫阿拉伯數字後也要改國字大寫數字;同一份文件對應幾十個的人名,每個人名都要產生一張有它名字的文件,這些請交給電腦,不要有工作是「如果我忘了做這步就會出錯」,這個錯誤會搞死你。
  • 做好版本控制:
請用git這次教召的營行政,用手抄的方式,把各連統計出來有證明要開、有印章要刻的名單,自己手抄到幾張紙上,之後做了什麼就從上面標記掉,問題是新的要求會一直進來,沒多久她那張紙就寫滿各種顏色的註記,要看懂它也變得益發困難。
就個人經驗來說,紙上註記兩層已經是極限了,再來就應該將註記和原稿合成一份新文件;就算要用實體紙張,多用活頁夾整理散頁,或用筆記本,避免散頁可能會被風吹散,需要花時間重排,或是更糟糕的:不同版本的散頁被吹在一起;這可以拉回強調電腦作業上,文件複製與修改的快速。
  • 確認內容正確:
這點很重要,就如我收齊個人資料,第一步是統計召員們欠缺的東西,在excel 上建一張表,這份電腦文件就變成我所謂的single source of truth,收齊的文件因為檢索速度慢,無法搜尋,基本上就是丟一邊不看了。此時,這個統計步驟就變得十分重要,這步出錯,之後的資料都會是錯的,而且,通常不會再回去檢查原始資料正確與否,檢出錯誤的時間都很晚了。
遇到這種狀況,檢查兩遍甚至三遍都不為過,所謂garbage in garbage out,如果源頭都是錯的,之後再怎麼努力都只會產出垃圾。
  • 隨時更新:
這步其實最難,當發現到現在的工作方式不足以應付工作的要求時,隨時切換自己的工作方式,就像手寫統計表浪費太多時間,花點時間先把文件打電腦裡,會讓之後的工作變得輕鬆一點,但通常大家會選擇用本來的手寫統計表。
更細部的,電腦表格有沒有整齊美觀讓人一目了然,所用系統是否對應面對的問題?幾筆資料可以用手寫表格,幾十筆可以用excel隨便做,幾百筆就需要excel 並且時時調整自己的表格了,永遠記得選一個對的工作方式比認真工作重要:working hard, after knowing you are working smart,不要低估人類犯錯的能力,高估自己的能力只是在挖洞給自己跳。

結論:

說完個人意見,回到開頭的問題,面對教召我是否會做得更好,我承認我不知道,因為我沒遇過這種等級的問題,但我相信我能避開一些其他行政遇到的問題。

要我做個總結的話,「高手」不是他們能力特別強或是覺睡得比較少,而是他們選擇好的工具跟好的工作流程,好的工作流程只能從高難度工作中鍛練,厲害的人不會一成不變,用同一套方法解決不同問題,而會因應問題變化修正工作方法;而了解面對不同難度的問題,該用什麼方法才能用最少資源,犯最少的錯誤解決問題,靠的就是經驗,能累積豐富經驗並取用自如的,就是「大師」。

附注:

啊不過說回來教召這件事,筆者面對最大的問題,其實是國軍教召網路報到跟辦餉的系統根本是一團垃圾,也就是國軍給了我們一支會炸膛的手槍上場打仗;另外像是「確認內容正確」這步,要如何讓底下的人都確實貫徹這步,讓他們別一直修改他們呈上來的要求,我想這就是另一個難題了。

大家工作上都有什麼小技巧呢,歡迎大家留言。
另外不免俗的來個:以上內容,認同請分享XDDDD

記帳兩三事

當會計,不然就是連隊預財兵(無誤),記帳都是相當重要的工作,帳本記錄當前的現金狀況,可作為未來支出收入管控的依據。。

目前我的帳本分成下面幾個項目,從左到右分別是:記帳項目資料、現金收支、各項資金、各項子科目結餘欄位,分別說明如下:

  • 記帳項目資料:記錄一筆帳的時間、帳目性質(收、支轉)、子科目代號、記帳事由。 
  • 現金收支:包含一個現金收入欄跟一個現金支出欄,視收帳或支帳在兩格中填入金額,不能一筆帳包括收帳跟支帳。 
  • 各項資金:包含現金餘額、櫃存現金餘額、銀行帳戶餘額等,現金餘額欄記錄單位有多少資產可以動用,其值應該是櫃存現金跟所有銀行帳戶餘額的總和。 
  • 各項子科目結餘欄位:專業一點的帳是不支援所謂的「大水庫理論」,各用途的帳目要分清楚,用在買食物的錢就不能用來買其他東西,這裡每格會記錄當前該子科目的餘額,全部的餘額應該和現金餘額相同 

平常記帳…呃…就是把帳寫到帳本上,包括三種:收帳、支帳跟轉帳。

收帳跟支帳就是我們收錢/花錢,看是直接動用現金或是由銀行轉帳的方式進入,在各項資金的部位填入相對的數值,並在對應的子科目欄位增加數字;再專業一點的帳會要求例如今天收入三筆錢時,如果是送入不同的子科目欄位就要登成獨立的三筆帳。

比較特別的是轉帳,像是從銀行帳戶提錢出來補充櫃現,或是由沖銷墊付的款項時,錢只是從一個科目轉到另一個科目,總金額並沒有增減,此時現金收支欄位就不用填入數字,只需要在有變動的子科目下寫入數字即可。

一個完整的登帳大概會長這個樣子:
登帳時間 子科目代碼 登帳名稱 現金收支 現金結餘 (1)
主副食費
(2)
交通費
現金收入 現金支出 現金餘額 櫃存現金 銀行帳戶餘額






6,890,000 6,090,000 22,000 2,000 20,000 12,000 10,000
10/1 (1) 支十月主副食費

12,000 10,000

8,000 0

10/2 (2) 收十月定額交通費 5,000


15,000

13,000

15,000
10/3

補充櫃現8,000





10,000 5,000




第一行是當月開帳,現金收支部分寫上今年度總支出和總收入,登帳時寫上逗號是很重要的,免得有人偷改數字;每個月底將帳本關帳,結清本月的總收支、每筆子科目的餘額,並開下個月的帳。

一般來說大家都是用現金交易,現金上的收支直接登帳即可,若有銀行帳戶的話(通常會有),就要定時到銀行去申請查帳,上面會列上該帳戶的匯入、匯出狀況,以此為附件做收支帳的登帳。


每個月,銀行會給當月的銀行對帳單,這時就可以製做當月的「銀行調節表」,因為我們登帳的時間跟銀行實際入帳的時間不同,可能出現登帳的數字不同。
此表會包含幾個項目,時間性項目包括:
  • 帳戶應收未收款:月底關帳後銀行在該月有入帳,帳戶應該收入這筆但還未登上;筆者自己遇到的例子是該月最後一天匯入了下月的定額經費,而我們還未收帳,因此出現應收未收款。 
  • 帳戶應支未支款:同樣銀行也可能自動扣款,而我們還未列入支帳,像是銀行代扣的水電費用,這個因為筆者的帳戶沒這功能,還沒遇上這問題。 
  • 銀行應收未收款:像是在途存款,錢已經在銀行但1530 當日關帳時未入帳,要到下個月才入帳,就形成應收未收 
  • 銀行應支未支款:帳戶已列支出的支票銀行未兌現,就是銀行應支未支。 
因此,我們記帳本上的餘額,加上(1),扣掉(2),應該會等於銀行帳戶餘額加上(3),扣掉(4),這個調節出來的金額就是我們帳戶本月真的剩下的金額。
就像我們帳本上有100萬元,好像很多錢,但本月銀行自動扣房貸99萬,調節後的金額只剩一萬元,這才是真的可動支的金額,瞬間發現其實帳戶快沒錢了。

另外還有狀況就是登帳錯誤,像是誤收他人匯款等,比過這種狀況相較之下不容易發生。

簡單總結調節表,手上的記帳本,是我們現在已登上的收支,這是「我們知道的」帳目;從銀行拿到的當月對帳單,上面的數字則是「我們不知道的」,會列到(1)跟(2)上;最後則是我們做了收支銀行還未處理,這是「銀行不知道的」,會列到(3)跟(4)上。
調節表其實不難,只要平時記帳記得勤,讓帳本儘量貼近銀行帳現況,不要有太多的未列帳,一般來說都很好調節出來;但若是平時不記,等到月底許多應收未收跟應支未支交錯在一起時,就很難調節出來了。

其實記帳真的不難,記好帳也能幫助控管自己的收支,不過我想也沒人沒事帳要記到這麼複雜,還要跟銀行對帳XD,這比較像法人才需要的,個人帳只要列列支出就算相當厲害了。

相關資料:

  • 關於現金調節表,這裡有相關介紹,可惜是中國網頁:
http://wiki.mbalib.com/zh-tw/%E9%93%B6%E8%A1%8C%E5%AD%98%E6%AC%BE%E4%BD%99%E9%A2%9D%E8%B0%83%E8%8A%82%E8%A1%A8
  • 台灣的頁面比較清楚的我只找到,不然大部分都是word, pdf 檔:
http://blog.xuite.net/lu833484/blog/85621204-%E9%8A%80%E8%A1%8C%E8%AA%BF%E7%AF%80%E8%A1%A8

2015年2月12日 星期四

用youtube開Hangout直播

最近看到watch people coding 這個網站,也真有不少人在上面開實況寫code,覺得滿有趣的,也應該自己來開個實況試試。 目前開實況知名的有Twitch ,這方面有點難搞,目前linux 沒有這方面完整的解決方案,只能用一些程式來解決,相關網址在此: https://wiki.archlinux.org/index.php/Streaming_using_twitch.tv
不過我沒有twitch 帳號,懶得申請;帳號多開一個是一個麻煩

所幸我們有另一個解決方案:用Youtube開直播。
在youtube 右上角自己大頭貼的地方,可以進到「創作者工作室」,影片管理員內就有「現場直播」可以開,不過它要跟手機連線驗證,等於是告訴google 你的手機號碼,大家連結前請多想三分鐘;打開後它會直接用google hangout 開直播,不用特別裝其他程式。

打開後大概會長這樣:

左列有一些工具可以選,例如螢幕分享,可以指定某一個視窗做為直播的內容,例如直播寫code用的終端機或者你的webcam,目前看起來沒有混成螢幕的功能,也就是不能像其他直播一樣,畫面上還會有一個webcam 的影像;也可以開右邊的訊息視窗,不過那個跟youtube 直播頁面上的訊息沒有同步。
按開始播送後就會開始直播了。

不過我覺得直播寫code 本身就有一個問題,直播遊戲的時候,遊戲是比較簡單的東西,今天打東方是躲子彈,明天打東方也是躲子彈,看直播可能可以看一些閃躲的技術;可是寫程式不是,中途插進去的話會不知道那個人是在寫什麼,直播也很難表示出設計師在背後的架構設計,設計概念,很容易變成看一個人在打字,那樣的話直播寫程式一點意義也沒有。

2014年8月17日 星期日

我與HDE

故事要從五月開始說起,那時候參加了pycon Taipei 2014,看著台上眾多大神的報告,覺得自己真是一個花盆。不過,在進場的小袋子裡,除了會議時程表外,還有一些其他的東西,像是可愛的github小貼紙,另外還有一些求職傳單。

其中,就有我將要開始實習的HDE。

--

回來的時候也沒想這麼多,雖然平時我都有寫一些程式,但是我研究所念的東西跟軟體還是想差太遠,如果畢業之後要進到軟體業的話,還是需要一些實戰經驗,我定下兩個方向,一個是參與free software的開發,另一個就是參與實習。
那時候大概把找得到的暑期實習機會都投過了,很幸運的,HDE竟然回應我的申請。

第一階段是直接考程式,第一題要寫一個簡單的數字處理程式,可以用python,Erlang,C++,Ruby之類的。
個人是覺得還滿簡單的,用python解決輕鬆寫意( ̄▽ ̄)-|_
第二題比較機車,跟網路有關,要用python的httplibs去解,這時候就要瘋狂查網路資料lol,我懷疑如果是當面考的話我應該寫不出來,拜google大神才順利寫出來,實在有夠廢。

--

後來通知Skype面試,人生第一次Skype面試呀
結果對方打電話過來,我的Skype就當機了= =,莫名奇妙,「你爸沒教過你不要在人家第一次面試這樣搞嗎?」 
面試是用英文(如果是日文的話我大概會直接GG)記了一些問的問題,僅列如下,順便附自己的回答:
*請簡介一下你自己?
A喔這好像是萬年老梗了,結果我還是答得亂七八槽(T_T)

*可以說明一下你有什麼experience跟internship?
A恁北網管這樣算嗎?

*請說明一下你的生涯規劃,有想要在哪裡工作嗎?台灣、日本、韓國、Bay Area…
A吾乃魯蛇,不要求什麼國家,只要能有工作,然後能有時間持續充電,我就不排斥
(是說這樣是不是刪掉不少台灣公司…?不過我真的認為持續充電很重要呀)

*請說明你這個人有什麼優勢?
A本回答已被QClean屏蔽

*請說明你這個人有什麼劣勢?
A本回答已被QClean屏蔽

*請說明你未來職場上的規劃?我看你大學是念微波的,未來呢?
A我認為這算我的劣勢之一,未來想走軟體路線可是念的是硬體
所以目前我努力找軟體Intern,參與free software project,就是要證明我有軟體能力…

*本問題已被QClean屏蔽
A滿新奇的呃啊哈哈,我還有借機車來環島啊哈哈,還要適應各種交通狀況

*所以你會說日文嗎?
A一點點吧,讀跟聽比較沒問題,寫跟說就會GG

--

另一個面試官

*我們來點技術性的,首先看到你mission 1,你用python寫的,可否說明
A嗯,題目要求可以用C, Erlang, Go, Python, Ruby,其中我會C跟python
我選Python,因為……因為寫起來比較快嘛(生命苦短,珍惜生命,請用python =w=)。

*請問你大概花了多久?
A約30分吧我猜…

*那如果用C來寫呢?追問:那C++呢?
A我想都可以的,我應該會一點C++
按:老實說這裡我忘了跟他們確認是第一題或第二題了,要是是第二題的話我大概不會QAQ。

*請問你有寫過網頁App或是網頁service嗎?
A沒有TAT

*那請問有自架網站過嗎?
A我曾經用php mySQL架過一個測試用留言版,跟個人網頁,不過只能從自己電腦連線
如果要夠安全,能夠公開,大概有點難度

*現在要你架一個網站server,你要多久
A幾小時吧,要完全的安全大概要更久

*請問你熟Configuration Management or Continuous Integration
A我目前參與的github project有使用Travis CI,不過我本身是沒用過啦(yay)

--
我們的問題到這邊,請問你有什麼問題?
Q2:本問題已被QClean屏蔽。
本回答已被QClean屏蔽

Q1:請問本司預計招多少個Intern呢?(這類問題好像是禁忌?)
本回答已被QClean屏蔽

公司的地址在渋谷。
BGM: Welcome to Tokyo:
住處的話公司推薦我去找Sakura house,專給外國人在日本的短期住宿,後來找到的房子在代代木公園(yoyogi Koen),跟渋谷、原宿大概成一個正三角形,經過代代木八幡站後面就是代代木公園跟明治神宮,晚上可以出去慢跑一圈,感覺挺好的。

HDE Intern的規定是每月有150000 JPY的薪水生活補助,另加保險與來回機票,這1.5勝文150K JPY……呃……它是寫「這不是薪水,而是生活費的補助」網頁的解釋是說:
...not for work (because the program are not for work, to comply with the visa regulation) but for your living costs (food/ traveling expenses/ apartment).
在沖繩留學的同學也解釋,這是因為「日本規定沒有勞簽證,不能拿正當的薪水」,至於當中有什麼差異,也許我再跟他們請教
啊老實說我是感覺很有趣,廣義上來說這就是薪水呀,它這樣講就感覺就是給了錢然後說:「這……這才不是給你的薪水呢≥ ≤。」什麼奇怪的傲嬌XD

--

然後我訂機票又訂到華航松山-羽田的機票,比起桃園-成田的機票…呃…貴了3K,這我得辯解一下,買華航是因為他的飛行時間比較正常,中午就可以到東京,這樣下午才有時間辦入住;然後看google map羽田比成田離東京比較近嘛,誰想得到一個城市兩個機場,一個機場比另一個機場貴3K啦(╯-_-)╯ ~╩╩

人生第一次坑人錢就坑3K,我真的不是故意的啊O_O

--

另外,因為「Yoda言論自我審查」的關係,與HDE相關的內容在我的Facebook上會儘量屏蔽,畢竟在下也是位延畢生,之前同學口試通過啦、出國去conference啦、各種畢業證書照啦、出國去大學課程或是不然就各種去玩啦,深知一群人用「過得很爽的感覺」的內容洗別人版,叫我這種花盆情何以堪,因此Facebook上將進行言論管制。

事實上有關實習之前都是列機密,知道的應該在五十人左右。

至於是在東京,知道的人數,嗯,大概是十來位吧,感謝大家幫我守住祕密,沒有四處聲張,至於我幹嘛不說在東京……因為……因為你們沒問啊 /人◕ ‿‿ ◕人\,而且我其實有說我在東京吼,你看我有發一則'welcome to Tokyo'的連結(炸)。

我記得暑假初期有一本書,是講當社群網路跟鄉民文化發展到極致時,世界上會出現多麼光怪陸離的事情,女主角一開始不願意在社群網路上分享東西,於是有了這段對話:

「這是一位臥病在床的小孩,她也許想看到妳看到的美麗海面和滿天星斗,妳不分享你看到的,等於是在傷害她們,剝奪她們看到這樣風景的權利。」還有一段總結是:
「祕密即是謊言;分享即是關懷;隱私即是偷竊」
嗯這個,請大家不要讓世界變成那樣,有事不發到Facebook好像變罪過一樣;請大家將花盆比花盆,營造低調Facebook環境。

--

同時話說回來,我也不覺得在日本工作算是什麼值得炫耀的事情,強者我同學要不是好幾年前的暑假,當花盆我還在各種耍廢的時候,就開始各種像101、日月神教、法國實驗室的實習了,現在還有同學直接在灣區工作,花盆現在才在人生第一次實習,差這幾年的時間根本悲劇,老早就看不見大家的車尾燈了。

總之,實習正式展開,希望花盆能活過這一關。

相關連結:

1.HDEwebsite:
HDE.co.jp
2.HDE Intern website:
http://www.hde.co.jp/gip/
3.SakuraHouse:
http://www.sakura-house.com/

2014年8月1日 星期五

無意間做了不得了的事呢

7/31晚上本來還在練日文聽力,卻瞄到FB(謎:練聽力不專心,拖出去砍了)一兩位高雄的朋友在貼出家門口發生爆炸、或是聽到巨大爆炸響聲的消息,照片跟影片有點猛,根本就是watch dog實況飛機轟炸了。
後來幾條即時新聞貼出來,看到一兩個爆炸點離我家好近,發條簡訊回家問候,沒想到家人回電說離家不到50公尺的馬路整個爆炸,現在家裡都是瓦斯味,整條街的人都疏散到附近的學校操場了。

從這時開始追蹤BBS上面的消息,發現爆炸範圍大得誇張,一堆路口都有爆炸的消息,一開始消息很亂還一度有新聞說前金區都有爆炸(後來更正是感覺得到震動)

後來發現沒人好好整理一個爆炸點圖,只看文字實在不知道哪裡發生事情,經過好友qcl大神的指點,用了google map engine,憑著新聞上的路口報導,網友提供的圖片影片,對照自己生活18年記下來的腦中地圖,大略畫了一張高雄的救災地圖:

後來在Facebook和BBS上被廣泛轉貼,大概是我做過最多人看的東西(我猜應該是用萬當單位的吧),一度流量大到我自己都不能編輯,今天新聞網頁也都有放地圖的連結。
不可否認做地圖滿累的,要不斷掃視即時新聞跟BBS的發文,判讀照片、影片的位置,救災單位的消息出來也要更新上去,後來3點多看事件差不多平息了才上床睡覺。

一天一夜的驚濤駭浪,要感謝強者我同學qcl,寄信跟丟水球提醒資訊更新的網友,整理住宿地圖資訊的網友;最後還要感謝提供平台的google map ,據說還引起google內部工程師的注意,把地圖的流量上限往上調,這個即時調動頻寬的能力真是世界一流啊OAO

結語,該怎麼說呢?
很有幸我們生在這個時代,網路讓每個人都有機會對資訊貢獻一點心力,而正如上一篇對Uber的評論:
「資訊有效的傳遞,是很值錢,甚至攸關性命的」
但網路再有效也有它的極限,現在市府已經進場救災,更有效的指揮體系已經建起來了,這張地圖也差不多可以功成身退了;進一步的原因追蹤不是坐在電腦前抓得出來的,但有幸能宅在學校,對家鄉提供一些心力,個人表示十分榮幸,做了一個大家都在看的地圖,大概就跟「qcl誠徵女友」
http://qcl.github.io/qclwgf.html
一樣,無意間做了一件了不得的事,我自己也滿驚訝的。

ps: 要是我寫的code也有這麼多人看就好了(炸)