在學校的日子們最後的流水帳

這是我 2015 年 4 月份大學畢業前、到畢業後一小段期間寫的日記。時間的流逝好可怕。
之前一直有些顧慮,不過也擺了快兩年,覺得差不多可以放出來了。(你以為在釀酒嗎)

大腦並不擅長記住精確的事情,而且還會自己腦補。我喜歡「精確地」紀錄說過的話、發生的事情,何時何地何人何物。如果連當下都無法記錄到讓自己在以後回顧時信服的話,想想從小到大我們背誦的以為是歷史的東西:我們已經背誦過夠多小說與扭曲的事實與謊言了(新聞製造業就別提了),沒有必要再給世界留下一篇只能讓自己滿足的爛小說。

kuanyui @ JinGuaShi [2017-03-22 水 23:40]

(File created at 2015-04-24 04:41:40)

很感傷,我真的很慶幸我進了中興。雖然有些課很廢(尤其必修)、也遇過一些爛人爛貨,但其他遇到的同學、因為各種管道認識的朋友、那大家都說漂亮但我怎麼也不覺得稱得上漂亮但確實溫腥的校園環境、各種課程與(很少參加的)活動的點點滴滴,我這輩子忘不了的。

Read More

近況小記

很久沒寫 blog。最近發生不少事情,覺得也是時候應該要花點時間來紀錄一下。

0

最近的每日作息是

  • 一~六:上班、下班、吃飯、(有心情的話)練琴、洗澡、刷 OJ、12 點左右刷牙吃藥睡覺。
  • 日: 莫名其妙超早醒來後:一半時間在昏睡中度過、剩下一半時間耍廢放空刷廢推看 RSS reader 念演算法刷 OJ 然後強迫自己玩買了還沒玩完的遊戲。
  • 作曲看心情好壞決定,這不是花一定時間就一定有固定產出的活…。

1

前陣子工作上遇到一件很難過的事:我們的產品有 web 介面與 CLI 介面,我負責 web (Angular) 另外一位負責 CLI (Go),我們要實作出邏輯一樣的功能(例如 input validator)。負責 CLI 的同事一天就寫完:而我呢寫了四天還有 bug。我想出的演算法智障到不行,根本繞遠路、複雜、沒效率又辦不到任務。當下立刻跑去請教那位同事他的思路,發現只用了三個 if statements 就解決了,我我我…

Read More

QML 踩雷筆記

[2018-04-11] 這篇文章未來應該不會再變動了,QML 已經是我最厭惡的程式語言之一(詳情請見本文留言區),我想以後除非發瘋否則應該不會再嘗試第二次。
這篇文章是初學 QML 時寫的,很可能有謬誤。

沒想到網頁寫一寫莫名其妙就開始寫 QML 了。總之就是工作上有個新專案,最後是用 QML 開發,最大的優勢是前後端的開發可以分離。可以先把 UI 邏輯開發完,同時一邊跟客戶討論需求後,最後才進行後台業務邏輯實做。而在寫 UI 的過程幾乎不用寫 C++

雖然 KDE5 Plasma 桌面已經全面改用 QML 重寫、Blackberry、Ubuntu Phone 也都採用 QML 作為 GUI toolkit 使用者基數應該挺龐大的,然而目前寫了一個多月,實際在開發時還是踩到很多雷,而這些雷的原因也很雜,所以這裡來快速簡單的統整一下,希望對任何想學 QML 的新手能有一點點幫助,避免更多人成為孤獨的踩雷家。

Read More

多重 SSH Keys 與 Github 帳號

Updated at [2017-12-27 水 16:58]

後來覺得這篇文章原本講的方法實在太麻煩了,而且當你有用 submodule 時會有問題 (總不能直接改 submodule 的 git repo URL 吧),剛好發現一個好辦法:使用環境變數 GIT_SSH_COMMAND ,如下:

1
GIT_SSH_COMMAND="ssh -i ~/.ssh/COMPANY_KEY" git clone git@github.com:foo/bar

但這樣每次都要打前面那一串很麻煩,不如直接 export ,例如我自己是寫了個簡單的 alias 到 ~/.zshrc 裡面:

1
2
alias set-company-git-ssh='export GIT_SSH_COMMAND="ssh -i ~/.ssh/COMPANY_KEY";
export PS1="${PS1}COMPANY ==> "'

這樣下了 set-company-git-ssh 後就可以安心使用 git ,連 zsh 的 $PS1 (prompt) 都會變,一目了然。

順帶一提,npm install 自己也會去吃 GIT_SSH_COMMAND ,很方便。

使用情境

工作上需要用公司的 email 申請一個新的 Github 帳號,這樣一來我的系統上就有兩個 Github 帳號用於開發…orz,總之今天摸索了一下多重 SSH key / GitHub 帳號時的應對方式。

需求

  1. 透過 SSH 而不是 HTTPS 來 clone / fetch / push (這樣就不需要每次 push 都輸入 GitHub 帳號密碼)
  2. 兩個帳號:
    1. 平常自己用的 GitHub 帳號
    2. 公司用的 Github 帳號 (以下假設為 `YOU@COMPANY.com`)
  3. 在 clone 時就決定用哪個帳號來 clone
  4. 以後 git push 時,根據 clone 時選的帳號,來自動選擇正確的 SSH key。
協定 長怎樣 需要 Github 密碼
SSH `git@github.com:USERNAME/REPONAME.git` 不用
HTTPS https://github.com/USERNAME/REPONAME.git 每次 push 都要

1. 建立新的 SSH key 並綁定該 Key 給 Github 帳號

因為現在一組 SSH key 只能綁一個 Github 帳號(就算可以綁多個我也不太建議,你會很混亂),所以我們要建立一個新的:

Read More

[Python] Meta Programming 與 __metaclass__, __call__, __new__, __init__, object, type

[注意]

  1. 本文假設你已經寫過一點 Python,並且有基礎的物件導向 (object-oriented, OO) 觀念,至少要知道什麼是 class 跟 instance。
  2. 本文只討論 Python 3,至於 Python 2 那種早該被歷史淘汰的該死東西將完全不去鳥它。
  3. 這篇只是筆記性質的虎頭蛇尾的半廢物文章,寫到後來就忘在硬碟裡,只是今天 [2016-08-28 日 23:55] 不小心把這篇 deply 出來就想說…算了出來就出來吧 _(:3」∠ )_ ,但現在沒那心情所以也懶得仔細再看一次科科,本文最後的 singleton 範例有些東西我自己也搞不清楚了,知道的大大敬請指教 <(_ _)>

要理解 Python 的 Meta programming,必須同時理解 object, type以及 __metaclass__, __call__, __new__, __init__ 的運作機制。

Python 中的 object

  • 首先我們必須先牢牢記住一個重要觀念:Python 是一種物件導向語言;在 Python 裡面,所有你能想得到的東西都是 object
  • 我們可以用 type() 這個內建函數,來得知某樣東西的 type。
    • type() 一個 object 時,會回傳一個東西叫做 Type Object ,你可以用 print() 印出來看看是什麼樣子:
1
2
3
4
5
6
print( type(1)             ) # <class 'int'>
print( type(1.1) ) # <class 'float'>
print( type("hello") ) # <class 'str'>
print( type([1,2,3]) ) # <class 'list'>
print( type({1,2,3}) ) # <class 'set'>
print( type({1: 10, 2:20}) ) # <class 'dict'>
  • 上面的例子說明了,像 "hello" 這個字串,在 Python 中其實是 str 這個 class 的 instance。
  • 連函數(function)也是一個 object:

Read More