Spinemodel 是我最近看到的一個思考工具,一開始只是覺得『圖』滿漂亮的。後來,我在寫一篇文章的時候,應用了這個 spinemodel 來寫作,算是解決了我長久以來寫作的一個難題。長久以來,我有一個題目總是寫不出來:「如何把 Clojure programming language 對一般經營管理階層的好處寫出來?」
後來,看了 spinemodel 之後,總算想出了寫法 --- Clojure programming language 算是一種 tools ,所以我要寫它的好處,可以先把它對於 practices 的影響做出連結,這樣子就可以了。考慮經營管理階層與軟體開發者的知識落差之後,這應該是最有效的寫法。
也因為如此,又多看了看這個 spinemodel 的其它應用方式,目前有看到兩個其它的應用方式 ,我覺得算是不錯的,網站上已經有把這兩個用法寫得相對清楚了。
Sunday, March 28, 2021
脊柱模型 (spinemodel)
Thursday, March 4, 2021
non-ascii character
我不小心寫出了一個 bug ,這個 bug 是在程式碼中錯誤地使用了 non-ascii character 。
我需要寫一個字串 "1280x720" ,正常來講,在打程式碼的時候,因為要使用 ascii characters ,所以中間的乘號會使用英文的 x 字母。然而,因為我是從網路找來的字串貼上的,於是,這個字串中間的乘號,就真的不小心變成了 code 215 ,也就是真正的「乘號」。最麻煩的地方是,這種 bug ,肉眼還幾乎看不出來!
事後去反省,該如何可以快速地去找出這種錯誤,大概研究了兩種可以輔助除錯的工具:
(1) 在 source code 資料夾下指令
ack "[^\x00-\x7F]"
如此就會立刻找出 source code 資料裡,包含 non-ascii code 的地方。
(2) vim 的指令 ga 或是 :as 可以顯示 cursor 處的字元編碼。
Wednesday, March 3, 2021
開發 Clojure 搭配使用的 ack 設置檔 (.ackrc)
ack-grep 我一直覺得滿好用的,不用特別設定就會自動忽略 node_modules 這種可以忽略的資料夾。然而,開發 Clojure ,尤其又使用 deps.edn &clj 的話,還是要透過 .ackrc 來設定一些資料夾,讓 ack 視為自動忽略。
--------分隔線 ----------------# Tips:
# using ack to show only the clojure files for further processing
# ack -f --clojure
#
--ignore-dir=resources
--ignore-dir=.shadow-cljs
--ignore-dir=.cpcache
在 macbook 下使用的 .tmux.conf 檔案
- 可以用滑鼠捲動。
- 複製貼上可以與系統的剪貼簿整合。
# Enable mouse scrolling
set -g mouse on
setw -g mode-keys vi
bind P paste-buffer
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'pbcopy'
bind-key -T copy-mode-vi r send-keys -X rectangle-toggle
# Tutorial: copy-pase through tmux buffer
#
# default <prefix> is <C-b>
# using `<C-b> + [` to enter copy mode
# using `v` to start selection
# using `y` to copy selection
# it will get the text stored at two places: tmux copy buffer and system clipboard
# using `ESC` to clear selection
# using `<C-b> + P` to paste at another tmux session
Sunday, February 28, 2021
vim 的「搜尋」相關技巧
我研究了自己在 vim 裡的搜尋行為之後,發現了自己有兩個使用習慣,很明顯地沒有最佳化:
- 有「無意義的反白高亮度顯示」,卻沒有關閉它。
- 反覆搜尋同一個字串。
Wednesday, February 24, 2021
vim 查找關鍵字/函數引用 vs 開啟多重檔案
vim 有兩組功能,我覺得很適合一起使用
- 查找關鍵字/函數引用
- 開啟多重檔案
查找關鍵字的功能,我是安裝 ack.vim 。設定好之後,就可以下 :Ack 指令來找。有比對到關鍵字的檔案,就會在 Quickfix List 裡列出,而且可以用上下鍵來選擇開啟。於是,這時候下列的一組 Quickfix List 專用的指令,就值得記憶了。
搭配指令
:copen => 打開 Quickfix 窗口,顯示所有結果
:cclose, :ccl => 關閉 Quickfix 窗口
如果 vim 配合 language server protocol 來使用的話,可以有查找「函數引用」的功能,我使用的 vim plugin 會將函數引用列在 Location list 裡。於是,這時候下列的一組 Location List 專用的指令,就值得記憶了。
搭配指令
:lopen => 打開 Location 窗口,顯示所有結果
:lclose, :lcl => 關閉 Location 窗口
上述的功能,就很容易開啟許多的 buffers (即開啟後正在編輯的檔案),於是我們如果想要看到,現在開啟了哪些 buffers ,就可以下 :ls 來看,目前有哪些檔案被開啟。
搭配指令
:ls => 看有哪些檔案被開啟成為 buffer
:b [數字id] => 顯示對應該 id 的檔案
:e [檔名] => 開啟特定檔案
:bd => 關閉目前的 buffer
Monday, February 22, 2021
塑造工作 (ShapeUp)
我朋友很欣賞 37 signals 公司的工作哲學 ---「塑造工作」,推荐給我看。(37 signals 公司是間一流的 web application 公司)
該書對於軟體工作倡議的分工方式,我認為相當的有道理。杜拉克曾經有一篇文章探討如何提高知識工作者的產出? 該文提到了幾個重點:
1. 界定任務
2. 專注於核心工作
3. 界定績效
4. 管理者與知識工作者建立夥伴關系
杜拉克來自實務的觀察自然有其道理,但是,要怎麼應用在軟體開發上呢?對於軟體開發的實務來講,十次中有九次,往往都牽扯到未知的實驗與探索,換言之,軟體開發的實務之中,往往帶有一定的科學理論建構性質。有了未知性質的工作,任務難以界定;而邊界難以界定清楚的工作,績效又該如何界定呢?我在過往工作的經驗之中,往往只能使用「專注核心工作」的原則,對於其它三項原則,往往只聽樓梯響,不見人下樓。
「塑造工作」一書提出的解決之道相當有特色:將團隊拆分成「資深團隊」與「循環團隊」。「資深團隊」負責塑造工作,塑造完成的工作,應該是已經將高風險與未知的部分移除、可以在 6 週之內完成的明確開發工作。塑造完成的工作,交給「循環團隊」去開發,而循環團隊的任務則是要在 6 週內完成開發任務。
從界定任務與績效的角度來看,資深團隊的任務是要正確地塑造工作。而循環團隊的工作則是準時地把塑造完成的工作加以交付。這正也符合了杜拉克說過的,「規畫」與「執行」應該分開來做。有了明確的任務界定,界定明確的績效也因此可能發生。(註:杜拉克同時也說:『分開來做,是指在不同的時間做,但是,不一定要交給不同的人來做。』)
從夥伴關系的角度來看,上述的資深團隊,一方面帶有中階管理階層的屬性,因為他們的任務要決定『去做什麼與不做什麼』。更重要的是,他們也是該領域中極為卓越的知識工作者,否則,勢必沒有足夠的能力,來為循環團隊塑造可以達成的工作。管理者與知識工作者兩個不同的身分放在同一個腦子裡,自然可以形成夥伴關系。