分類: 心得x體驗

  • 《QBQ!問題背後的問題》  

    這 part 比較多是總複習。 在第 30 章到 33 章講的是主要是「團隊」,基本包含「謙遜」、「服務」等描述領導者的樣貌。滿有趣的是 33 章所描述的:

    領導者不是問題的解決者,而是問題的給予者 – 史蒂芬・布朗 〈領導者不是問題的解決者〉

    據內文描述,以及第 32 章補充,我發現作者並沒有特別提出,管理者應該如何遵守的原則。對於「問題的給予者」這句話,我覺得滿有趣的,然而我覺得重點反而要擺在:身為領導者,究竟應該給團隊什麼樣的問題呢? 給什麼樣的問題才能夠除了交換價值(薪水)之外,也能提供給團隊更多的體驗價值(成長和產能)呢?

    在看 32 章時,心想這應該會有一個完善的價值觀體系,來實作起來會更好。如果只是,像拜飛機學半套的話,應該會滿大機率走向失敗而怪罪在這本書上的。然而,因為中文翻譯書沒說,所以我大致想像了一下書中描述的,一個團隊的烏托邦(可能理解有錯,因為就我所學,不太能認同):

    1. 底下員工能夠自行思考,也不在意薪水。
    2. 領導者不是彼得僵局的受害者、可能是出資方、可能未必熟悉團隊業務,但是有權威象徵。
    3. 團隊資訊不是平行流通的,結構呈現輻射狀溝通模式(領導者於中央。團隊分工明確,互相不介入彼此業務)。
    4. 產業或是公司內部的責任歸屬非領導者承擔(責任直接追溯至執行的人)。

    這和我所訓練的團隊,以及以前待過的公司環境差異滿大的。至於要怎麼發展成為中國特色社會主義我們環境能適用的團隊系統,這可能需要再好好思考才行。

     

  • 《原子習慣》讀書心得

    《原子習慣》讀書心得,以列點來記錄,希望這能夠成為以後培養習慣的原則:

    1. 依靠意志力的階段在於規劃習慣以及立志要培養這個習慣的時候,之後要在意的是如何不讓習慣中斷。流程可以如此:立志 -> 規劃 -> 執行 -> 得到成就感 -> 新的立志。
    2. 建立身份認同是好的,要想「自己要成為什麼樣的人」是可以在立志的階段時實作的方向,避免未來規劃有錯而需要修改時產生挫折。
    3. 儀式是好的,一個習慣的觸發開始和執行維持的好幫手,如果是一個不愛無聊的人(Just like me),個人偏好聽一首歌,或是一個短時間的暖身動作作為儀式。除了儀式之外,在原本舊有的習慣上建立一些小動作也是觸發新習慣的方法。
    4. 延遲享受是好的,除了脫離各種方面的貧窮陷阱,這也常常是好習慣的特徵之一,考慮機會成本低的未來收益,可以幫助自己規劃更好的習慣策略。
    5. 偷懶是正常的,會想偷懶是每個人都會發生的狀況,重點是不要執行與自我認同背道而馳所產生的選項。如果理性的想會發現偷懶的選項機會成本是相對高的。
    6. 規劃習慣有必要考慮自己狀態不好的時候的執行效率,降低規格沒問題,要維持住比較重要。
    7. 記錄是好的,可以增加成就感,但要小心避免產生如同童子軍的徽章迷思,那不是人生的唯一一切。
    8. 壞習慣需要改掉的作法有:斷掉觸發的場景、製作一個讓換習慣執行起來更麻煩的場景、想辦法讓壞習慣沒有吸引力。好習慣可以反之執行。
    9. 好習慣和壞習慣無關道德,不必為此任何作自我批判。還是要想辦法解決遇到的阻礙才是正確的。
  • 《QBQ!問題背後的問題》  

    這十章可以當成是一個描述「個人」的篇章。比較偏向對對自我的行為原則建議。雖然說內容有些老生常談,我覺得可以濃縮成一句話:

    把注意力重心放在自身能夠完成的事項。

    我覺得「覺察」是一呼應這十章中,一個滿重要的實作方法。覺察當下為什麼會有改變他人的意圖? 覺察自己當下為什麼會選擇這個決定?覺察到自己的行動和計畫產生了偏差、覺察到目前作了一個任性沒有思考過的決定?

    有這些「覺察」可以把更多注意力放在自身能夠完成的事項上,進而讓未來產生一個正向循環。不過也要注意的,自己的經驗來看,「覺查」這的作法其實滿消耗注意力的,可能要注意自己的注意力容量:提升,或是節省其他開銷。

    值得一提的是,這對自己的身心健康也會非常的有幫助,可以多多觀察自己,不論是自身肌肉運作、心理想法、言行舉止等等,這就比較偏向正念的領域了。

    另外我覺得很有趣的是  27 章。 27 章所描述的「模範」行為,並不是為了要「改變他人」所準備的。他人的想法和感受,也並非自己的課題(參考《被討厭的勇氣》),所以不應該由自己需要面對的,其中最後提到「誰正在觀察仿效你呢?」,我心想:「關我屁事。」

    總截至目前來說:我認為自己從態度、想法,產生選擇並且實作的整個階段,是從自身的「籌碼」和「眼界」以及自身相關的「利益」所考慮的結果,在這個狀態下,修練自己的想法這件事就變的非常重要。我相信如果是一個夠聰明的人,不管是邪惡混亂還是善良守序的人,不管哪種個性的人,最終會做出的理性的選擇都會是相同的。會有的差異我想應該還是在實作的意願和自我控制的能力上。一定都會遇到與自己情緒或本性相違背的,德不孤必有鄰(?)。理解之後,可以把更多注意力放在如何實現自己的選擇上面。

    我覺得 30 章是一個 bullshit,為了 29 章舉了一個爛例子。

  • 《QBQ!問題背後的問題》  

    我覺得 10-20 章所提到的內容都是在描述如何實作「個人擔當」這種精神。

    延續之前提到「容量」的概念,我的分類是這樣的:

    增加時間的餘裕:

    10 都是拖延惹的禍

    認清自己的容量上限:

    11 在現有的資源下做出成績

    12 還有什麼新辦法可以用?

    減少情緒的使用,騰出更多情緒空間來直面問題:

    13 少責怪別人

    14 無能的水手責怪風向

    16 擊敗你生命中的裁判

    17 誰為發生的問題負責?(一次做一個選擇)

    善用他人的容量空間,合作以互補不足:

    15 我們全在同一個團隊裡

    18 主人翁精神

    19 團隊精神的基石

    20 提高個人責任意識,從“我”做起

    概念是認同的,不過對他的例子會滿想吐嘈的。我覺得這是歐美的翻譯書很容易會產生的問題。整個「當責」的實踐中舉的例子,看起來會很像是「不顧公司利益,給客戶最大好處,只要這樣做就一定會有好的回報」。不可能是這樣的,更甚至反而會被當盤子,或是被公司扣薪水,或是公司賠錢。

    所以,先不管其他文化,我覺得,在華人世界中,「當責」的這個精神底下,能夠產生不同「選擇」的,除了本身專業技術和素養之外,還會有「眼界」和「籌碼」這兩種「容量」的提升。

    「眼界」是指說對需求的判斷,可以看成在這個領域所站位置的高度。以前有一個說法是要大家多培養「資方思維」,這是一種讓自己眼光轉換的的思維,會得到可能和當前職務所產生不同想法,進而會有不同的選擇和決定。

    e.g. 乙方的情緒勒索,甲方窗口該怎麼做

    「籌碼」則是只目前能運用的資源,這決定了你能做的事情,尤其在具有制度的,有規模的企業環境底下,能夠運用的資源往往是非常固定的。所以說,你要很清楚清楚而且清晰的知道,你有哪些籌碼,你可以怎麼運用,或是你要拿到更多籌碼,你會有哪些機會成本產生。

    e.g.  Bar 台的打工經驗、賠錢賣的業務

    還是有條件的,我會認為在掌握工具的當下,在改變「選項」的「想法」之前,在真實的社會上,還是要避免成為小孩超人,或是一個能力超群但是永遠好心辦壞事的選手。小心。

  • vue3 學習筆記 EP5

    整理一下至今(2022-10-23)關於 vue3 學習到的項目,列成關鍵字以後方便索引。

    我的學習方法一如既往,就是拿一個專案來實做,反正不賺錢的 idea 很多,和浪浪一樣滿街跑。

    處理上依然使用 sublime 3 處理,一來是習慣了,二來是開啟快速方便處理;壞處是.vue 檔案語法標示要特別處理(目前是改用 HTML 的格式來標示)之外,找不到自動排版的外掛,面對複合 ts 和 html template 的 .vue 檔案也是有夠難處理的。為此我認為可能需要開始針對不同語言來找專門使用的 IDE 或編輯器來處理,這樣可以避免安裝過多的外掛導致衝突,也能夠因為使用專門 IDE 保持實作該語言最舒服的狀態。

    目前學習到的關鍵字如下:

    1. typescript 和 javascript ;scss 和 css
    2. Options API 和 Composition API
    3. 使用 Vite 工具創建專案、編譯,並執行熱更新(HMR)
    4. components 、 template 使用
    5. composables、plugin 包裝(axios \ vue3-loading-overlay \ pinia \ bs-toaster ..)
    6. 前後端分離: controller、網域
    7. CSR、SSR、SSG

    以上。有新的東西再整理一份。

    同場加映

    DEVLOG of andyyou
    本文為翻譯自 Comparing the New Generation of Build Tools 一文加上更新補充。因建置工具更新速度關係,如遇部分內容無法實作或不一致請參考各官方文件。 …

    Day03 – 深入淺出 CSR、SSR 與 SSG – iT 邦幫忙::一起幫忙解決難題,拯救 IT …
    前言 在這篇文章中,我們來聊聊 CSR、SSR 與 SSG 的不同,這三者皆是現今常被提到的網頁技術,而 Next.js …

  • vue3 學習筆記 EP4

    axios 套件介紹,請參考這裡

    這是一個很好用的 AJAX 套件,目前有兩個需求:

    1. 需要一個統一的前置作業,例如 baseUrl 設定、timeout 設定等等。
    2. 需要避免每個 router 的 template 有用到就創建一個實例。
    3. 未來其他功能套件,想要讓各種設定儘量在同一個地方都找得到。

    所以這邊選擇一個封裝和單例的實作來處理。因為網路上找到的作法實在太多,又初學導致一直碰壁,這邊記錄下目前認為最恰當的方法,參考這裡(雖然說文章內建議的方法是使用 ES modules):

    首先確定安裝好 axios 套件,這邊使用 npm 安裝:

    npm install axios

    確保有安裝 Pinia 套件,參考這裡

    npm install pinia

    建立一個 plugins 外掛集合,透過 pinia 存在全域。注意未來如果有其他套件,建議拉一個資料夾管理並確實作好 import:

    # src/composables/plugins.js
    import axios from 'axios'
    import { defineStore } from "pinia";
    
    export const useAppPlugins = defineStore({
      id: "appPlugins",
      state: () => {
        return {
          axios : axios.create({
            baseURL: '',  
            timeout: 10000  
          })
        }
      }
    });

    使用上,引用 plugins.js 中把要用的外掛都抓進來,就可以直接使用了:

    <script>
    import { useAppPlugins } from '@/composables/plugins.js';
    const appPlugins = useAppPlugins();
    
    export default {
    	data(){
    		return {
    			...
    		}
    	},
    	mounted() {
    		...
    	},
    	beforeUnmount() {
    		...
    	},
    	methods: {
    		submitForm: () => {
    
    			let api = appPlugins.axios;
    			console.log(api);
    			api.get('/api/login_config')
    	      .then( (response) => {
    	      	console.log(response);
    	      } )
    	      .catch( (error) => { // 请求失败处理
    	        console.log(error);
    	    });
    		},
    		gotoForgetPwd: (username, event) => {
    			console.log("gotoForgetPwd");
    			console.log(event.target.tagName);
    			
    		}
    	}
    }

    未來如果有其他外掛需要於全域設定的也能夠加入到 appPlugins 中提供呼叫。

    文件中有提到一些好處:

    • Documented APIs.
    • Familiarity among developers.
    • Standard usage patterns that, by design, avoid common problems.
    • Integration with Vue Devtools.
    • You don’t have to maintain the code yourself.

    另外我認為未來在同一個專案中如果有不同的應用場景,可以建立不同外掛集合的檔案提供呼叫,這樣可以整理成一個檔案呼叫,減量減少一個 vue 檔案要 import 一堆而且還要注意上下傳遞關係的麻煩。

    目前對 ES modules 方式的疑或是:每一個 vue 檔案 import 一次,他會不會就直接 create 一個新的實例?
    2022-10-16 update: 這邊在 axios.create 中 baseURL 參數用隨機產生。發現 ES modules 的方法每次 import 都不會產生新的 baseURL 。並不會每次 import 就 create 一次的。

    另外有翻到一個套件叫做 vue-axios ,看起來是包好直接放在 windows 裡面,這有空可以來試試。

    vue-axios
    A small wrapper for integrating axios to Vuejs. Latest version: 3.5.0, last published: 3 days ago. Start using vue-axios in your project by running `npm i vue-axios`. There are 500 other projects in …

    同場加映,單例的設計模式參考:

    单例模式 | 菜鸟教程
    单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 …

    貼心翻譯給看不懂簡體的繁體中文使用者,重點是這些:

    意圖:保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。
    主要解決:一個全局使用的類頻繁地創建與銷毀。
    何時使用:當您想控制實例數目,節省系統資源的時候。
    優點:

    1. 在內存里只有一個實例,減少了內存的開銷,尤其是頻繁的創建和銷毀實例(比如管理學院首頁頁面緩存)。
    2. 避免對資源的多重佔用(比如寫文件操作)。

    缺點:

    1. 沒有接口,不能繼承,與單一職責原則衝突
    2. 一個類應該只關心內部邏輯,而不關心外面怎麼樣來實例化。

    使用場景:

    1. 要求生產唯一序列號。
    2. WEB 中的計數器,不用每次刷新都在數據庫里加一次,用單例先緩存起來。
    3. 創建的一個對象需要消耗的資源過多,比如 I/O 與數據庫的連接等。

    同場加映,單例與全局變量差異:

    JavaScript: global variables vs singletons
    If singleton is available globally, how is it different from a global variable that has a single instance?

    單例滿多缺點的爭議,可以參考這個討論串

  • 《QBQ!問題背後的問題》  

    參加讀書會的讀書心得,找個地方放。

    如果要對整本書下一個註解的話,我會認為:

    這本書描述的是指,「個人擔當」這種精神,以及他的實作方法和介紹。

    書中所描述的「藉由提出更好的問題,當下做出更好的選擇」。

    以我的理解,想可以這樣說:

    人的行為模式是由「意圖」,塑造「想法」,「想法」產生各種「選擇」來付諸「行動」。 我們的想法往往會是想要「趨吉避凶」,也就是儘量用最低的機會成本的選擇來動作。這本書提供另外一個思路是:在做選擇之前,可以再多想想,其實還有更多,機會成本更低的選擇,只是我們常常沒有想到而已。

    至於實際上該如何「多想想」呢?在第十章以前,可以整理成一個重點:

    就是:放棄「不公平」這種委屈的情緒。把重點抓回到需要解決的問題,或是要被滿足的意圖本身。

    當你感受到「不公平」這種委屈的情緒的時候,你很容易產生一種,認同感稀缺的心態,這時候你會發現,你有的選項當中,大部分都會是去滿足你所缺乏的認同感的選項,像說:質疑對方啦、發文討拍啦、遷怒啦等等的。這本書告訴你,這不是你當下應該做的,你應該要回歸到當下,想想「要怎麼做」才能解決掉,目前遇到的問題本身才是。

    有趣的是,其實人在壓力或是情緒過於溢出的狀態下,很容易做出所謂「不理性」的決定,往往和心情平靜時或是精神穩定時候表現不同。我覺得,要減少這樣出錯的機率,除了保持自己在良好的狀態之外,也會需要一個,比較像是提高或是保持,自身「容量」的概念,也可以叫做「創造餘裕」,或是在經濟學相關的書籍會提到的「抗風險能力」的生活應用。書多也有提到一些,例如:不要拖延(創造時間餘裕),拒絕增加壓力的態度:「為什麼找上我?」「我怎麼碰到這麼倒楣的事情?」(擁有情緒的容量),必須要多溝通(提高溝通產生的情緒容量),或是之後會提到的運用團隊(建立能力的餘裕)等等。

  • 處理 Facebook 官方 SDK PHP 版本過時問題

    實作 Facebook 登入時,如果使用官方提供的 Facebook PHP SDK,會遇到登入時使用 oAuth 的 function 過時的問題,至目前為止官方尚未發表更新處理。

    參考:

    facebook/graph-sdk is deprecated and doesn't support PHP 8
    Problem/Motivation facebook/graph-sdk is a dependency of socialfeed, but it has been moved to: facebookarchive/php-graph-sdk and hasn't been updated in 2 years. It also doesn't support PHP …

    目前的解決方法是有好心人發布 fork 的版本。可參考上述討論串,用 composer 安裝。目前已測試可使用的 package 參考這裡。該版本要求 PHP 7.3 以上,可於 PHP 8.0 上執行。

    nickdnk/graph-sdk – Packagist
    Facebook SDK for PHP compatible with PHP8

  • Docker 初體驗

    最近在嘗試用 docker 建構各種環境,目標有 N 個:

    1. 實現 docker 的優勢,讓開發環境和正式環境一致,去除可能的環境差異
    2. 讓環境設定模塊化,搭配已經整理好的設定檔案,減少重複架設的工作內容
    3. 環境設定可以更為彈性和獨立,降低耦合,增加不同語言協作的可行性。

    我想打造一個可以無腦部署又有彈性而且開發成本低的系統部署方法就是。

    這邊弄了一個 LEMP 的結構,未來應該會在不斷新增各種可選的設定檔案上去這樣。

    GitHub – lazyjerry/docker-compose-lemp-stack: Docker Compose LNMP 結構安裝
    Docker Compose LNMP 結構安裝. Contribute to lazyjerry/docker-compose-lemp-stack development by creating an account on GitHub.

    有興趣可以幫我點星星和留言。

    先說設定檔案我都是網路上直接抓模板還有抄各種 hosting panel 的設定檔,到時還要再優化是真的。

    目前玩到這裡的有些結論,記錄起來避免忘記:

    1. 這肯定套件王愛用,hub 上很多已經有配置好的,每個都是獨立的一包不會互相依賴。
    2. 不會互相依賴也是有壞處,一些基礎的套件要分開裝,所以使用 docker 還是有門檻在。
    3. 設定檔案先寫好,docker 的優勢就會出來,到時一包一個配置好裝起來就可以用。
    4. 但是因為設定檔案必須先寫好的原因,所以如果在本機開發環境上,常常會遇到一次要開不同的案子,這邊本機用 docker 就會囧囧的。
    5. 所有的 config 建議 mont 到宿主機的磁碟上,這邊如果不是使用官方的 docker image 就會囧囧,很多 docker 會包成一包,這樣違反 docker 無狀態的精神,建議套件王避開這種 image。
    6. 不要把 docker 當作 VM 來跑作業系統,這樣彈性就跑掉了。然而我也不懂是為什麼會有文章寫不建議 docker 跑 mysql ? 這個問題待釐清就是。

    這裡有一份對岸知乎的比較文章,簡體字閱讀功能沒障礙的話推薦可以看一下:

    请问各位业界人士,Docker的优缺点有哪些? – 知乎
    如题,有一篇相关论文提到了docker。我随便看了看感觉这东西缺点很多,尽管安装后使用可以省掉很多安装第…


    同場加映 附上 Docker 安裝步驟

    安裝套件

    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

    docker.repo 中也同時包含 edge 版本的 Docker 套件庫,不過預設是被停用的,想安裝 edge 版本的話,就要先啟用 edge 版本的套件庫(如果只是要安裝 stable 版本的人,就可以省略這一步):

    sudo yum-config-manager --enable docker-ce-edge

    更新 yum 的套件索引:

    sudo yum makecache fast

    安裝 Docker CE 版:

    sudo yum install docker-ce

    第一次安裝 Docker 的時候,會需要匯入 GPG 的金鑰,Docker CE 版的金鑰指紋是 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35 確認無誤就選擇 y 匯入。

    安裝好之後,啟動系統的 Docker 服務:

    sudo systemctl start docker

    執行 hello world 程式測試:

    sudo docker run hello-world

    安裝 docker-compose

    curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose

    建立連結

    ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

    測試版本,應該要顯示版本號碼

    docker-compose --version
    
    # docker-compose version 1.29.2, build 1110ad01

    啟動 docker

    systemctl start docker;systemctl enable docker;




    參考資料:

    專家觀點:Docker架構優缺點大剖析
    深入研究Docker原始碼、著有《Docker源碼分析》而大受好評的中國Docker …
    Share Compose configurations between files and projects
    How to use Docker Compose's extends keyword to share configuration between files and projects

    GitHub – stevenliebregt/docker-compose-lemp-stack: Docker Compose Linux Nginx MariaDB PHP7.2 Stack
    Docker Compose Linux Nginx MariaDB PHP7.2 Stack. Contribute to stevenliebregt/docker-compose-lemp-stack development by creating an account on GitHub.

    可以裝起來抓裡面的設定檔案樣板,滿實用我覺得

    GitHub – aaPanel/BaoTa: 宝塔Linux面板 – 简单好用的服务器运维面板
    宝塔Linux面板 – 简单好用的服务器运维面板. Contribute to aaPanel/BaoTa development by creating an account on GitHub.

    2021-07-29 update

    推薦一個不錯的筆記: