作者: Jerry Lin

  • 將現成的 git repo 添加現成的專案資料夾

    將現成的 git repo 添加現成的專案資料夾

    這是一個 git 小技巧,其實滿常用的,但是每次要用的時候都要查一次有點小麻煩,紀錄一下。

    主要的應用場景是在我們在伺服器/本地已經有一個現成的資料夾,要把他添加至一個遠端新創的 git repo中,但是因為環境設定原因,我不想要移動資料夾的路徑。

    要注意的是:

    1. 如果是用 Github 創建,預設都不要選擇 .gitignore 等檔案,會出現一個教學可添加,照著作即可。讚!
    2. 確保目前伺服器/本地可以 push/clone/pull git 伺服器(廢話),推薦使用 ssh 連線,參考這裡
    3. 這是使用的流程以空的 git repo 為主,雖然不影響,但是還是建議拿空的 repo 比較不容易有衝突。
    4. 資料夾中會生成一的 .git 資料夾,有些資料夾是從別人那拉下來的。請先把這個資料夾刪除。也要記得先檢查 .gitignore 是不是你要的。

    流程上:

    1. 記得先安裝好 git 套件。進入到目標資料夾,確保沒有存在其他 .git/ ,以及 .gitignore 設定正確。
    2. 建立一個新的 git
      git init

    3. 添加檔案至 git,並且 commit
      git add .; git commit -m "initial commit"
    4. 注意遠端的 branch 是什麼,在 Github 上通常是 master
      git branch -M master
    5. 添加到遠端 git。 <remote-repo-url> 要替換成 git repo
      git remote add origin <remote-repo-url>

    6. 檢查網址
      git remote -v

    7. git push 資料到遠端 repo
      git push -f origin master

    提醒一下,現在有些 Git 平台使用 main 作為預設的主要 branch。

    以上。

    參考:

  • 透過 phpdoc 套件生成 PHP 文件

    前後端分離的實作中,會有遇到後端需要給前端 API 文件的需求,透過 phpdoc 的 PHP 工具可以將註解轉換成可讀的文件網頁,這樣基本只要把註解寫好文件也就差不多完成了(?)。

    有幾點要注意:

    1. 執行的環境需要能夠使用 PHP,不推薦使用 composer 安裝(據官方稱很容易衝突)。
    2. 我建議先把設定檔做好,再依照設定檔案跑會比較輕鬆,這邊提供一組範例
    3. 把設定檔放在根目錄外面是好習慣。
    4. 配置完成後,於相同目錄下執行以下指令產生文件:
      phpdoc
    5. 文件中關於設定標籤 visibilities 有些錯誤,設定檔案的配置上建議還是要多試看看才知道。
    6. API 中常用的 post/get 方法,參數的引用不太適合用 @param,即便註解了也會顯示不出來,我查 stackoverflow 是推薦用 @uses 。
    7. 因為這是 php 文件,不是 HTTP API 文件,所以還是會存在溝通成本的,包含呼叫路徑的操作,這可能有賴於後續研究和嘗試自定義的調整。如果要生成 OpenAPI 格式,可以參考這個套件(有夠麻煩)。

    我使用的是 phpdoc  3.0 版本。

    安裝操作的部分,我使用的是 phar 安裝,好處就是可以裝到 global 環境:

    首先先把 phar 檔案下載下來:

    wget https://phpdoc.org/phpDocumentor.phar

    變更權限:

    chmod +x phpDocumentor.phar

    然後改名,移動到 global 的環境上(這裡以 Mac 為例):

    mv phpDocumentor.phar /usr/local/bin/phpdoc

    是否要移動到 global 環境取決於看有沒有要 project base ,這和 composer 的安裝類似,如果不是 mac 但不知道要移動到哪裡可以參考這個文件

    接著有基本參考 phpdoc 的文件就能運作了。他有很多功能,以下附上不負責翻譯:

     

    而我是在 Codeigniter4 中實作,所以我會把路徑放在 ci4 的根目錄外面,假設 ci4 在 www/ 之中,我就放在外面,此時 source 的 dsn 會設定:

    "./www/app/Controllers/"

    而生成文件的設定也相對會設定在根目錄之外,參考範例。好處是避免文件因人為疏失變成公開的資安危機,壞處則是必須要額外設定路徑或網域來指向他提供給其他人閱讀。

    而我的策略則是將該份生成文件納入版本控制之中,提供給前端,讓前端 pull 下來以後就直接用本地電腦打開來閱讀使用。

    附上設定檔案範例(最後更新 2023-05-13):

    推廣一下,要養成打註解的好習慣,不只是給未來的自己看,如今加上一個可以給前端看的服務,這樣打註解的動力應該會更高了。

    參考資料:

    PHP 註解的 tag 參考:

    Phpdoc 設定文件:

    Phpdoc 設定文件說明:

     

  • DNSSEC Cloudflare 與 Godaddy 設定

    DNSSEC 中文全名是:網域名稱系統安全擴充程式(Domain Name System Security Extension,DNSSEC)主要用途可以簡單理解為 DNS 的加密簽名資訊,防止 DNS Server 有劫持或污染的動作。細節可以參考財團法人台灣網路資訊中心文章 或是 Cloudfalre 的文章,而在網域的 DNS 配置的狀況下,會牽涉到的有三個層面: 網域註冊商、名稱伺服器( Name Server)、客戶端(瀏覽器),客戶端扮演的角色是作驗證 DNS 指向真偽的動作,而我們做設置的部分就會有網域註冊商與名稱伺服器。

    這邊介紹比較常用的, Cloudflare 和 Godaddy 兩家配合操作,如果是直接使用 Godaddy 的 DNS 的話,依照官網說明,會需要開啟頂級 DNS (Premium DNS)服務,這次介紹的應用場景是使用 Godaddy 註冊的網域,透過 Cloudfalre 作為 Name Server 來啟用 DNSSEC 的功能。

    p.s. 如果是用 Cloudflare 註冊的話,據官方稱,他們會自動申請註冊 DNSSEC 服務。

    https://developers.cloudflare.com/dns/additional-options/dnssec
    https://developers.cloudflare.com/dns/additional-options/dnssec

    在開始之前先講注意事項:

    1. 其實已經有很詳盡的說明了,Cloudflare 請參考這裡,Godaddy 參考這裡
    2. 注意有Godaddy 有部分網域後綴是無法使用 DNSSEC 服務的,網域列表請參考這裡
    3. 設定完成後,可以透過這裡,輸入網域來做檢查。

    流程以下:

    在進入 Cloudflare 的網域後,找到 DNS 的 Settings 裡面。點擊 Enable DNSSEC 按鈕。
    點擊後會跳出 DS 紀錄,會有的欄位有:

    DS Record, Digest, Digest Type(這邊後面一般會帶 2), Algorithm, Public Key, Key Tag, Flags,如果不小心把 popup 視窗關閉了也不用擔心,在 Enable 按鈕的下方會多一個「DS Record」的連結可以展開相同的資訊。這些資訊我們等等會用到的有 Key Tag, Algorithm, Digest Type, Digest 這幾個欄位。先紀錄起來,要注意 Digest Type 等等要輸入的是 2

     

    紀錄好資料以後,就是到 Godaddy 註冊 DA 資料,不得不抱怨一下, Godaddy 的操作體驗真的不太好。首先,登入 Godaddy 以後進入到 Domain Portfolio 頁面,也就是顯示全部網域的頁面,找到你要的網域,右邊會有一個三個橫向點點的圖案,點擊展開之後會有一個 Edit DNS (編輯 DNS)的選項,點進去。

    https://ph.godaddy.com/help/add-a-ds-record-23865

    在網域名稱的下面會有一個「DNSSEC」的連結,點下去填寫資料。

    https://ph.godaddy.com/help/add-a-ds-record-23865

     

    這時會需要新增 DS 紀錄,我們需要新增一個 DS 紀錄,把剛剛 Cloudflare 資料填入,會有這些資料:

    • Key Tag: A number between 1 and 65536 that quickly identifies this DS record.
    • Algorithm: An identifier of the cryptographic algorithm that generates the signature. Choose an option from the menu.
    • Digest Type: This determines the algorithm type that constructs the digest. Choose 1 or 2 from the menu.
    • Digest: The digest is an alpha-numeric value that specifies a cryptographic hash value of the referenced DNSKEY Record.

    如果 Cloudfalre 使用的是中文的話,可能會有些資料對不齊,附上 Godaddy 中文的對應:

    • 金鑰標籤:Key Tag
    • 算法:Algorithm 一般會是 13
    • 摘要類型:Digest Type 在這個 case 請輸入 2
    • 摘要:Digest

    輸入完成後儲存就行的,稍等 10 – 60 分鐘。可以用這個網站輸入網域來檢測。沒問題就行啦!

    同場加映:

    因為我滿多網域用 Hover 註冊的,可以參考:

    參考資料:

    DNSSEC · Cloudflare DNS docs
    DNS Security Extensions (DNSSEC) adds an extra layer of authentication to DNS, ensuring requests are not routed to a spoofed domain.

    DNSSEC Analyzer
    The DNSSEC Analyzer from VeriSign Labs is an on-line tool to assist with diagnosing problems with DNSSEC-signed names and zones.

  • ZeroTier 在 Mac 中安裝

    ZeroTier 是一個取代 hamachi 的區域連線服務,建立虛擬區域網路的概念。 hamachi 真的是時代的眼淚,以前玩世紀帝國還是創世神必須用的。兩套軟體優劣參考這裡這裡

    這次嘗試安裝 ZeroTier ,這款支援許多平台的安裝,我是在 mac 上安裝。

    除了 GUI 的介面可以使用之外,也支援 CLI 的操作方式,安裝完後輸入

    zerotier-cli status

    就可以看見一套自己 zerotier 的狀態,其中會有十位數的英數字串就是這台電腦的地址:

    200 info xxxxxxxxxx 1.10.6 ONLINE

    同樣的也可以輸入 zerotier-cli help 指令查看能夠使用哪些 cli 命令。

    這軟體花了一些時間研究,主要是因為一直沒辦法正常使用 GUI 介面,而且這種以網路為主軸的軟體,不是自己 host 的還要裝在自己電腦上有點兒可怕。所以特別研究了一下。

    要注意的有:

    1. 安裝完這台電腦的 ID 儲存在 /Library/Application Support/ZeroTier/One 這裡,如果 uninstall 之後,以後不再需要使用,或是想要更換地址,把這個資料夾刪掉就完事了。
    2. 安裝完,在系統設定->隱私權與安全性->自動化 中會看到 ZeroTier 的開關,預設 System Events 會是開啟的,如果沒開啟表示之前沒有允許。
      我得吐嘈一下,即便打開了,從 mac 上方 tool bar 點擊 Start UI at Login 時,還是會不斷要我資料,可能是因為 root 權限的關係,豪煩阿!
    3. 因為 Start UI at Login 設定點擊開關失效,建議從系統設定-> 一般->登入項目,在登入時打開選項中,直接把 ZeroTier 拿掉。
    4. 開啟關閉有點問題,因為他是 root 權限使用,如果硬用 cli 執行的話,直接用 launchctl 來處理,參考以下指令:
      # 開啟
      sudo launchctl load /Library/LaunchDaemons/com.zerotier.one.plist 
      # 關閉
      sudo launchctl unload /Library/LaunchDaemons/com.zerotier.one.plist
    5. 我安裝時一直沒有辦法執行 GUI 介面,所以解除安裝很多次,他本身有提供 uninstall 的 shell,執行:
      sudo "/Library/Application Support/ZeroTier/One/uninstall.sh"
    6. 要讓 GUI 介面跑起來需要一些魔法,參考這裡
      1. 開啟終端機,停止 Zerotier :
        sudo launchctl unload /Library/LaunchDaemons/com.zerotier.one.plist
      2. 下咒語:
        rm -rf ~/Library/Application\ Support/ZeroTier
      3. 從 mac 應用程式介面直接點,就行了。

    那個咒語有點莫名其妙。為您點播,潘美辰,〈不要問我為什麼〉

  • 《這一生,你想留下什麼?:史丹佛的10堂領導課》讀書心得

    這本書越看越眼熟,查了一下出版日期(2018/11/30),應該是自己剛做 SOHO 之後透過讀書會或是自己看的。

    這本書的作者經歷十分顯赫,從博客來或是其他地方都可以看到,他是近代十分了不起的人物。

    《這一生,你想留下什麼?:史丹佛的10堂領導課》作者約翰‧漢尼斯介紹
    《這一生,你想留下什麼?:史丹佛的10堂領導課》作者約翰‧漢尼斯工作經歷介紹

    在開始之前先提供一些參考資料。

    • 天下文化文章,關於作者約翰‧漢尼斯,參考
    • 約翰‧漢尼斯評論近期時事的新聞(2023-04-20),參考(AI)、參考(Web3)、參考(烏俄戰爭)。
    • 本書摘要,參考參考

    正文依照目錄分為十個章節:

    第一章 謙卑:高績效領導的基礎
    第二章 真誠與信賴:高績效領導的關鍵
    第三章 領導就是服務:了解誰為誰工作
    第四章 同理心:塑造領導人和機構的要素
    第五章 勇氣:為了機構和社群挺身而出
    第六章 協力與團隊合作:你無法單打獨鬥
    第七章 創新:產業與學術界成功之鑰
    第八章 求知欲:終身學習的重要性
    第九章 說故事:溝通願景
    第十章 遺澤:這一生,你想留下什麼?

     


    這是一本描述「領導人」的合格標準,因為需要分成兩次心得,依照 1-5、 6-10 章兩部分,把我認為重要或是值得思辯的重點列出。

    前半段:

    我始終不認為領導者是需要「謙卑」的,甚至我認為組織應該要達到在價值觀上的「扁平化」,就層級之所以會有上下級,是因為不同需求需要有負責的人員,他必須做統籌與決策的動作,因此需要為事情負擔起責任,但在事務能力上,不同工種本來就需要不同的專業分工,我們能夠認同負擔責任的人因此可以分配到比較大的利潤或是給予足夠的尊敬,但不代表他有足夠的利潤和社會地位之虞,也能享有「傲慢」的權力,更甚至其他他不應該有的權力都是,這是需要制衡的,也是在該位置上需要引以為戒的。

    我覺得我們我們應該先跳脫古時候貴族階級或是權威思想的框架,也許是翻譯的關係,我從來都不認為一個組織應該有「領導人」這樣的詞彙出現。主管該做什麼,老闆該做什麼,各部門不同的工程師、業務、秘書、行政等等都有入職時談好的職責,「帶領」這個詞彙應該是「跟著我一起往前走」,跟著我走有許多原因,可能我有資金、可能我有點子,也許我整合能力好,足以完事,但這些都不是「我說什麼你做什麼」,明明就是有一個明確的交換價值(薪水),真的沒必要再把奇怪的「師傅」、「老大」、「兄弟」等這些稱呼實際上的心裡暗示附加給自己,作繭自縛。

    上述這段話,有出社會經驗的人看完,應該會覺得哪裡怪怪的。

    現實中根本不可能達成,因為不是所有的人,都能夠主動學習成長,家庭也不是從小平等教育,自律習慣足夠,我猜這樣的人,就是這本書的受眾。尤其是給陷入彼得僵局的那些現實中的主管一個正確的心態標準。

    用自己的話整理前五章心得列點:

    1. 你作主管工作,工作的內容是處理人的問題以及決策。部門內的工作項目未必需要你是最有經驗的,如果你才是最厲害的那個,而不是主管這個職位最適合的,要不要考慮換人做? 老闆也是,別以為底下員工沒有嗆你老闆換他當就以為真的很適合當老闆了。
    2. 商業模式九宮格也適用於業界或學界內部的工作項目中。某種程度來說,公司任一職位是商業環境中的整合以減少成本的作法。所以,包含目標客層、關鍵活動、價值主張等等,應該要把目前這個職位當作一間小型公司經營。
    3. 同公司經營的態度,誠信和同理是非常重要的特質。而更不要忘記,當坐到管理職位時,更必須要掌握好正確的時間適時發揮價值,因為處理人的問題往往和時間與情緒是有關係的。這是從管理職位甚至到老闆都需要學習的工作技能。

    後半段:

    我一直對於團隊的概念頗有微詞,起因於有人說過「一個人跑得快,一群人走的久」。一群人其實很難真的完成「高效」運轉,先不論所有人的態度,光是溝通就是一個必要且消耗能量的事情,而一個人也很容易受限於能力,導致最終產品的完成度不足,或只能停留在 MVP 的階段。但我認為,這並不是組成團隊的理由,因為你可以外包。先前和朋友聊過一個白手起家的公司老闆進程:

    1. 一個人自由工作者接案。
    2. 發現案子無法獨自完成,找其他人合作。
    3. 發現合作對象很聊得來,互相介紹案子。
    4. 合作幾個大型案件後,成立一個適合的團隊,長期合作。
    5. 長期合作的團隊認為需要做大市場,於是成立公司,成立品牌。
    6. 公司業務需要成長擴編,找了更多行政、業務。
    7. 這群人累積了足夠經驗和技術,並且經歷了許多人情世故,轉至幕後,開始將核心技術下放給員工。
    8. 再過幾年,公司轉交給專業經理人或資深足夠有能力與野心的員工經營,這群人退至股東、董事。

    這是書中沒提到的,然而要完成這樣的經歷,靠的是運氣。甚至在書中第六章講到內容,大多也是發生在第六點以後的事情。初期商業合作時,價值觀不同或是溝通不良,如果無法忍受大多就是下次換人了,真正要達到標準的作法少之又少。

    我認為我們能做的只有讓自己順心意不會後悔就行,各種個性的人都有,改變他人價值不是給他看一本書那麼簡單的事情,你也無法對他的人生負責。只要你準備好就行,團隊能有合格的產出比較重要。

    用自己的話整理後五章心得列點:

    1. 團隊很重要,是獲得更大收益前需要經歷的風景。在未來,身處管理職,更需要瞭解團隊,準備好處理團隊會發生的各種狀況,不只是不好的事情,如何激勵士氣、如何減少合作成本,這些都是非常重要的工作課題。
    2. 工作上處理人的問題上,另外有幾個技能值得特別提出:求知慾與溝通願景。很重要的,自我職能的輸入與輸出。尤其是不要忘記,不是所有人對數字都有敏感度的,也不是所有人都是保持理性聰慧的,情緒的幫助與更簡易的讓對方認同你想要訴說的內容,這樣的表達能力,是一個非常重要的工作技能。
    3. 新創是重要的,這已經是老生常談了。當資訊落差越來越小,會加速、有天賦的人會更快找到自己適合的賽道奔跑,所以保持研發動能是重要的。
    4. 當你運氣和準備充分,足以達到成為公司股東之際,你必須要事先做好交接。確保你能夠成為一個吉祥物,不會因為你不參與而造成公司損失。

    童軍團有一句流傳已久的話:「要做一個躺在搖椅上的團長。」意思就是除了自己要有綜觀全局的視野之外,也要對每件事有正確的人事安排,讓大家做擅長的事情,專職分工。最後,一個團正常運轉之時,團長就會沒事情作,可以安心躺在搖椅上(拓展業務)。  這在很多老闆身上也能看到相似的狀態,我認為,這就是因為建立了一個健康的團隊,老闆也在正確的位置上發揮作用才能有的成果吧。

     

  • 《如怨以償》沉浸式娛樂 心得

    今天參加 4/9  晚上《如怨以償》的沉浸式劇場體驗。最近很愛跑沉浸式的劇場活動,先說對於「沉浸式」的定義,我的概念是:「消除舞台的邊界的劇場,或是意圖模糊觀眾角色定位的演出。」這齣《如怨以償》是的確符合的。而在宣傳的命名上是避開了「戲劇」相關的詞彙,稱之為「沉浸式娛樂」,我以為這應該是想要開一個新的分類,未來可以有更多元的形式來處理劇本,也是考驗編劇和導演在除了傳統劇場訓練之外另外更多新的演出形式、互動編排。

    事實上也的確在《如怨以償》中有許多除了演員演出與角色互動之外的橋段,而且互相編排滿巧妙的。在多人的沉浸式劇場中以分小隊的框架來處理不同支線劇情,也透過觀眾選擇來決定預排好的支線路線,這非常考驗活動企劃(或是編劇?)對於人數與劇情的安排,我覺得在這方便編排的很是不錯。後期搭配一齣小舞台的戲對劇情作交代,最後回歸「個人」對於「怨念」的處理,我也認為在處理「怨念」的橋段上,深淺是合理且妥當的。其中也能看出活動企劃意圖想讓觀眾二刷的野心。

    先講結論:

    1. 我覺得沉浸式體驗的劇場想讓觀眾二刷是困難的,這是值得挑戰的課題。
    2. 不太劇透劇情,但他利用了桌遊、觀眾互動遊戲與最後守靜等橋段,與劇情的結合很巧妙。
    3. 劇情是完整的,觀眾的參與是深層的,而結尾的處理我認為很可圈可點,但略微可惜。
    4. 民俗信仰偏向道教,但偏向架空的神佛地獄設定,這是可惜的。
    5. 活動互動與即興互動的環節很棒。劇中大姊很可愛,二哥很帥。

    我發現在沉浸式的劇場中,大多因為人數問題,會需要以分隊進行的,再視情況進行各小隊分合的處理。在進場之後,我們會預先在一張「符籙」上,填寫之前在網路上填寫的「怨念」,這算是一個角色設定的儀式,也是依據符籙上的編號作為分隊的方法。分隊之後,首先會進行角色的設定和前置的劇情,在這裡開始就很容易讓不同的分隊對於劇情有不同的理解,導致劇情容易每個人認知有缺少。不過這齣劇應該有對人數對應做好安排,在銜接到劇情推進的大戲上安排的很妥當(這應該是單劇情多支線多結局的處理模式),接著利用「怨念堂的培訓與篩選間諜」為目的,作為劇情需求,在中間穿插了一些桌遊和觀眾彼此之間的互動遊戲,其中也透過互動遊戲,讓觀眾整理自己在符籙上填寫的怨念/ 解方。

    後續在經過最後一場揭露間諜的戲之後,輪到玩家怨念的結尾了,這裡我在參與中一直很好奇應該要怎麼處理。意料之外的,最後是再次將小隊打散,回歸到個人上。利用劇情中的橋段,讓觀眾做抉擇,並且讓觀眾進行守靜(我的理解源自於童軍儀典,參考這裡)的橋段,讓觀眾自行抉擇並且利用錄音帶錄下自己關於自己的怨念,怎麼想,該怎麼做的一段獨白。

    依照個人不同的選擇(或是某部分的運氣),在互動環節上會有不同的角色、後續劇情,大抵前面是單一劇情的推薦,不過在最後因為對怨念抉擇的不同,最後劇情的橋段會有差異,我個人看來最後的個人劇情偏向是一個沉浸式角色抽離的儀式,有趣的是這些成為厲鬼的怨念我後來發現其實都會匿名出現在官網上,這也是滿猛的,可以感受到想要擴散討論的目的。

    感受上可以從怨念觀察、分隊互動、戲劇內容與觀後心得幾個分類來描述心得:

    ⠀怨念觀察

    「怨念」的設定是一個很有趣,也是吸引我的地方,我自己寫了一個對於別人來說也許是很小的事情,不過自己在填寫的時候才發現,是一個記得住二十幾年的事情。因為要求要把對方的名字寫上,我也毫不客氣的把對方的全名和事情完整寫上了。整整把符籙寫到了背面。心裡在想著不知道他們開檢討會會不會拿我的怨念出來討論(笑)。而我對怨念的提出的解方(劇情需情)也是先準備好的。在守靜時需要用錄音帶錄下解方,我提出的是:「我想要忘記對方,但是希望他永遠記得我,而且這輩子帶著愧疚。」這和怨念堂設定的「執念」是一個矛盾的存在,不過很明確的,不想釋懷。對於這種違背邏輯的神秘學處理,滿期待他們之後改版會不會有這類狀況的處理。

    分隊互動

    分隊互動上,我認為基本上偏向娛樂性的處理,與讓觀眾加深對演員的角色刻畫,對劇情推進較無太大幫助。但我認為很棒的是,分隊互動對劇情雖然沒有推進,但是帶上了串接的動作。因為在第一次分隊活動中,有選出幾個較為個體較為特殊的角色(猜測應該是怨念十分特殊、觀察到入戲太深的觀眾,或者也許只是要安排參與演出的觀眾),第二次的分隊觀眾互動遊戲上,應該對該角色們有特別的互動,在後續的大戲上有特別安排這些角色出現參與演出,而大戲後的最後一次分隊活動中,我們這場演員與大家互動中有特別點出幾個怨念的附和,隱約可以聽出來是真的滿大個仇恨。

    ⠀戲劇內容

    戲劇部分我認為可以分為有劇本的戲和沒有劇本的劇情,沒有劇本的劇情偏向分隊活動。劇本的互動是小型舞台劇的形式,觀眾的角度近似 360 度圍繞演員進行的。分隊活動上偏向是角色扮演的大地活動,角色的扮演在無劇本的演出上真心佩服,因為我自己在互動上常常不自覺因為遊戲帶入會開始思考策略,導致會瞬間出戲,甚至自我角色錯亂,有一度還小聲質問演員到底誰才是大魔王(我是想要配合演出啦),不過演員十分敬業融入在角色之中,應對的行為也貼合後續劇情的演出的內容,有些愧疚自己給演員帶來麻煩,希望不會被寫在怨念的符籙上,雙手合十。

    原本我並不期待這齣戲所準備的怨念內容會對自己有成長,預期只是戲劇需求的道具之一,但令人意外的其實在整理過程中,除了發現自己竟然記得對方的名字,而且在怨念堂的劇情引導下,演員角色會「部分分享」彼此之間的怨念,原本認為這對於認真寫怨念,而且又十分投入的觀眾是一件非常危險的事情,但可以看得出來劇情安排上有試著讓觀眾投射進角色放下執念的意圖,也似乎在其他分隊互動環節上有額外的處理(有針對玩家角色做獨特區分,這我沒有參與到),最後守靜的環節,用錄音帶錄音錄下自己的怨恨與報仇方法,也聽了一段結尾語錄音的劇情,頗有意圖解開或是化解的意味。可惜的是最後一場互動環節中,因為酒醒了,所以在錄音室中有一段劇情完全沒有記憶,後續二哥帶的詢問我自己完全記不起來,甚至連我錄音講了什麼我也記不住。回到家後發現,我拿的是錄音帶阿!誰家還有卡帶錄音機?這故意的吧這是。

    有劇本的戲中,後段有一個是分隊形式演出的,可惜當時因為不勝酒力,有點小暈,並不是看得非常理解,有點偏親情類的詮釋。我認為這應該是補足角色層次的行為,對劇情沒有太大影響。

    ⠀觀後心得

    容我分段敘述:

    這次的活動意外的男女比大約是 7:3 ,很符合陰間的設定。我猜應該大多是感情因素,就我隔壁和後續分享的特殊觀眾都是感情上很大的怨念而來的人,很多人平時可能很正常,但每個人其實或多或少都帶有一些秘密和過去,也許有來看戲的,也有多少帶著來解惑心思的,真心希望他們回去都能有一些能夠化解的作法。

    ⠀⠀⠀

    我認為我是認真寫怨念的觀眾,可惜遊戲的時候有點太放飛自我了,投入的狀態不夠,要不應該能夠成為演出很棒的一部份。滿幸運的因為男女比的關係,整場戲無論分隊或是大戲身邊大多都香香的。恩,也許這是分心的原因?  我覺得角色刻畫最深刻的是大姊,劇情部分就不贅述,我覺得可能是因為他是裡面需要詮釋比較多個性,也擔負一個帶領觀眾走向「另外一條路」的角色,所以整體覺得對他印象最深刻,而且他很正。

    ⠀⠀⠀

    裡面角色名稱有四個,最終我只能用輩份來記住每個人,分別是大姊、二哥、三弟、四妹和奶媽(應該沒錯吧?)每個人有分別對應的能力,本來以為在互動上會有類似操作,但可能是劇本和時間的需求,這塊在戲中並沒有強調出來,反而互動時帶開的設定又是另外一個新的,我覺得這部分略微可惜,但瑕不掩瑜。我認為在演員如果在最後無論是哪個分支劇情能不只是二哥與觀眾參與互動的話,或是在後續在多推進一些劇情,讓劇本在之後個人反思的部分結束後,有一個完整個結束的話,可能會讓觀眾更有完整的體驗的感覺,但是實際上要如何進行會變的十分困難,包含時間掌控以及劇情的編排都是相當的挑戰。

    ⠀⠀⠀

    這齣劇是可以感受到希望觀眾參與第二次的,但是我發現沉浸式的演出似乎某些程度上要讓觀眾二刷,會需要更多的誘因?我覺得這齣劇的拉力在於:

    1. 最後獲得一份個人化的紀念品(錄音帶)
    2. 與不同角色的互動劇情
    3. 與不同玩家的互動

    而推力在於:

    1. 劇情互動無法隨心所欲選擇
    2. 戲中個人撰寫的「怨念」,對於現實中心裡層面的影響
    3. 不確定是否劇情會變化?熟悉劇情以後抽離感會更深。

    我會滿在意熟悉劇情這件事的,也許在活動中喝酒是有目的性的更容易忘記劇情?會期待在之後劇情可以做一些改版。值得一提的是,可能是因為高估了自己膀胱和低估了自己代謝能力,雖然已經盡可能排開了水分,但是在活動後段還是超級想上廁所,還好後段在進錄音室之前有一個空檔可以趕緊去上廁所,覺得人生太難了,差一點錄音內容就會一直提尿急的事情。

    ⠀⠀⠀

    劇中的地獄與神佛的概念,據我瞭解是一個架空的世界觀,有一個滿有趣的小地方是,因為我分組互動是由三弟帶領的,三弟一直認為我是「上面派來的間諜」(這是劇情的一部份),最後還被上了銬。後面在即興的互動中他說我看我的臉我是「福德神」,我一開始還以為是土地公,套用土地公設定,土地公妻管嚴應該是瘦的,我肯定不是。後來發現,不是,跟劇情世界觀不一樣,瞬間 emo 了。

    ⠀⠀⠀

    覺得演員很厲害,奶媽有一段京劇演出、大姊角色變換、二哥的形象還有三弟與四妹的好幾場互動,覺得身歷其境(廢話)的同時,又因為是沉浸式的形式,在各種狀態下能激發不同的可能,演員除了演出之外也要有很強大臨場反應和配套的作法,這也除了需要考驗演員本身演技之外,也很挑戰編劇或企劃的設定。我覺得這也可能是安排錄音間的設定,如果後期演員需要面臨能量過於強大的觀眾的話,可能已經不只是演技上的需求了,還會需要某些心裡諮商上的訓練?在回家的路上我也在思考,觀眾適合收的點是不是可以在往後多一些?是不是有可能把情緒再釋放多一些?如果成本允許的話,是不是能夠結合戲劇治療,讓觀眾在最後一場戲上釋放足夠的能量和情緒?或是這樣的場景和劇本,是否後續會成為戲劇治療的元素之一呢? 這不是我能考慮的,也許就想想過個乾癮吧!

     

  • 〈三小時異性戀思辨聯誼〉聯誼活動心得

    距離上次參加聯誼應該有四五年了,上次還是在上班時公司舉辦的聯誼活動過去當暗樁,活動結束後還跑去和主辦人分享活動心得。這次是線上課老師推坑臨時參加的,因為自己工作的關係,基本上已經成為聊天機器人一般的存在,難得有主題的聊天,還能認識朋友的活動,心頭一熱就報名了。

    按照慣例,心得怕忘記所以寫下來。沒有要捧活動的意思,但是這樣的活動很有趣,有種 UGC 的感覺。

    自己覺得文末最一句滿帥的,是心底話也要記得,永遠少年,保持真誠。

    這週日臨時報名一個聯誼,是七日戀人舉辦的 4/2 〈三小時異性戀思辨聯誼〉活動,主要是討論愛情觀,然後最後聯誼配對。滿有趣的,應該算是出社會以後就沒有一次多人的價值觀討論。自己有兩個期待:

    1. 是期待能配對到一位價值觀很合的對象
    2. 趁這個機會多瞭解其他人目前的想法,與整理自己的價值觀。

    先講結論:

    1. 配對沒有成功,不過有加幾個人 IG ,男女都有,有收穫的。
    2. 前幾個晚上再填寫問題表格時,也一邊在看心得與整理問題的答案,滿開心的,這是一種價值的梳理。
    3. 覺得很慶幸,自己價值觀滿完整的。
    4. 後來結束後有一票沒有配對到人揪坐捷運就先離開了,覺得滿可惜的。

    活動分成兩個部分:最後的配對環節,以及前面價值觀討論。

    ⠀先說配對的過程

    配對的過程,是除了自己的號碼之外,填寫兩個有意願的對象號碼,如果兩邊都有互相填寫到,就配對成功。

    我猜可能無論是女生還是男生,配對填寫應該會以外表為第一考量,推測判斷的邏輯應該會是:

    1. 價值觀 ok 的作為門檻,不 ok 的剔除。
    2. 挑外貌最好的。評估標準:顏值、身材、身高、氣質談吐。

    這是我猜的。可惜沒辦法拿到票數分布,如果猜測準確的話,票數應該會集中落在 2-3 人左右。

    配對的流程是事先不會知道的,對配對沒什麼特別的想法,甚至在配對前也沒想過什麼策略。不過沒有配對成功,心理到也是小失落的,有種可惜我還沒好好認識大家,以及大家還不知道我很想認識大家的遺憾感。但現實如此,恩恩,借用余自摩的話:

    我將在茫茫人海中尋訪我唯一之靈魂伴侶。得之我幸,失之我命。

    唉呦好文青。

    關於價值觀討論的部分,依照時間軸分成三塊,分別是「活動前的準備」、「活動中的對談」、「活動後的想法」。

    活動前的準備

    慶幸的是,在準備時越來越感覺自己自身價值觀是完整的。對於表單上,需要填寫問對方的問題,我能夠抱持一個好奇的態度,並且自己能夠很快速明確的回答內容。在活動前好幾個晚上也在梳理自己關於感情上的態度和想法,的確自認為對於情感的態度沒有太大的問題,價值觀也沒什麼互相矛盾的地方,簡單來講,單身憑實力。

    值得一提的是當時在想,真的配對到了要怎麼辦?會要單獨約會?還是一起參加活動比較好?會考慮到面向就不只是價值觀的部分了,這倒是沒有一個好的解。

    活動中的對談

    印象滿深刻的是,除了有一位跑馬拉松的老師之外,發現其他人的興趣或是工作,自己在過去大部分是求學階段都有接觸過相關的領域。看到有人帶鼓棒來時格外覺得懷念,雖然以前自己打的滿很爛的,不過當天回家還特別翻以前演奏過的曲目。 聽到別人介紹工作時,也會在心理不禁驚呼:「耶!那你有看過 XXX 嗎?」這類的造樣造句。很有趣,可惜時間不是很多,主題也不是聊天活動,要不有種渴望和大家多聊一些,無論是興趣或是工作時有趣的經歷。

    滿遺憾的是這次活動只有三小時,有幾輪對話常常沒有辦法完整到每個人都有發言的時間。不過三個小時的參與,結束後就感覺到略微疲憊,很難想像如果是六個小時的活動應該要如何適當分配精力。也許這也是某種觀察和篩選?

    對話的部分,原本期待大家會準備好上來侃侃而談,可惜是發現有許多的發言花了滿多思考的時間,略微感到不耐。突然發現這是自己一個滿大的缺點,也發現大家都非常有耐心而且和善,提出不同的意見,對於沒有結論的發言也不會打斷或是協助加速。

    其中有一個滿有興趣的話題,是整個活動快要結束前我們討論的。題目是「你能接受一週有幾次性行為?」後來聚焦在「一週最多幾次、最少幾次」。意外的發現大家的回答和期待的數據完全不同! 原本我期待男生會滿高,女生會偏少,不過大家的回答發現其實似乎女生的最少次數也不會只有一兩次甚至沒有。 可惜的是這題目也因為時間關係,後來沒有辦法完整結束。

    值得一提的是,雖然活動沒有配對成功,但是活動後有加了幾位朋友 Instegram ,這是非常超值的一件事,有隱私概念相近的工程師、在國家音樂廳演出過的研究生、跑馬拉松但是來不及分享如何獲得長輩緣的數學老師。

    滿可惜的是後來有一票人應該是要揪坐捷運,所以一起先離開活動場地了,而我在等待「搭訕對象」中,也就沒有跟著大部隊移動。後來在活動結束後有遇到其中一組配對成功的「七日戀人」在外圍比肩散步聊天,經過時不自覺露出姨母笑,看起來很聊得來,真心祝福。

    活動後的想法

    回去時朋友關心打來電話,在一一報告心得的時候,突然想到:「我參加的目的,是聯誼還是思辯?」好似策略上是衝突的:如果是聯誼的話,這場活動在思辯的發言中應該要迎合自己心儀的對象才對,甚至不應該發言;而如果是思辯的話,作自己就好,更應該把自己完整展現出來讓別人來攻擊和檢視。

    朋友回覆的是:「可是這不就是要找和自己價值觀相近的對象聯誼嗎?」目光拉回現實,沒有配對成功的,的確就是沒有相近價值觀的對象,也無法左右別人的想法,而這種活動也不太適合為了實驗而參加,如果真的配對到,反而對對方是種罪過了。

    而如果之後有機會有時間的話,會更期待能夠多瞭解其他人真實的過去的經歷,以及他們曾經做的事情。深知很多想法和態度,最終也只會停留在「我是這麼認為的」這個階段,真的遇到了,在有壓力的現實下,未必會同自己之前所想的做。面對假設的問題,保守的回答,或是直覺說不知道是沒有錯的。我們能做的,也就是確保自己是個言行合一的人就是。

    我也是一直很努力的成為言行合一的人,不是指「說到做到」,而是我清楚我是怎麼樣的人,我會這麼做,所以這麼說。

  • 無效爬蟲、垃圾蜘蛛的阻擋方法

    我發現當紅俱樂部有許多爬蟲的 log ,於是蒐集了一些無效爬蟲,以及阻擋方法。

    無效的爬蟲又有人稱之為「垃圾蜘蛛」,這些爬蟲機器人大多是 SEO 優化公司,或是沒有價值的爬蟲機器人,會毫無節制的訪問你的網站,造成網站 loading 遽增。滿惱人的,效能來說是還好,但是產生一大堆 access.log ,資料在查找上頗令人不耐。

    處理方式有兩個方向:

    1. 當作是壓力測試,想辦法優化網站效能。
    2. 阻擋這些爬蟲的「攻擊」。

    以下列出阻擋的方法,這邊主要是使用 useragent 來判斷,在 nginx 中設定阻擋。其中有一個 python 的 useragent ,如果自身有使用 python 處理 curl 等動作的話,要記得排除:

    if ($http_user_agent ~* (SemrushBot|python|MJ12bot|AhrefsBot|hubspot|opensiteexplorer|leiki|webmeup|DotBot|petalbot)) {
    return 400;
    }
    

    另外針對爬蟲設定 rotbot.txt :

    User-agent: SemrushBot
    Disallow: /
    
    User-agent: python
    Disallow: /
    
    User-agent: MJ12bot
    Disallow: /
    
    User-agent: AhrefsBot
    Disallow: /
    
    User-agent: hubspot
    Disallow: /
    
    User-agent: opensiteexplorer
    Disallow: /
    
    User-agent: leiki
    Disallow: /
    
    User-agent: webmeup
    Disallow: /
    
    User-agent: DotBot
    Disallow: /
    
    User-agent: petalbot
    Disallow: /
    

    不過這個檔案的設定就要看爬蟲本身是否尊重該設定了。

  • PHP Codeigniter 4 框架速度優化

    會選擇 Codeigniter 有一個很大的需求是因為要能快速入手,簡單好用,從 3.x 個位數版本開始,現在推出 4 大改版,結構和其他框架也越來越像。

    最近修改一份無框架的專案程式碼,在不更改業務邏輯、資料庫結構的狀況下,移植到 ci4 上面以後才發現,速度變的奇慢無比。想到要追蹤 ci4 的執行速度,才發現 composer 下來的 core 還挺複雜的阿! 功能強大結果變慢,屠龍的少年,終將變成惡龍呀……。

    於是開始研究 Ci4 優化的方法,這邊記錄下來。

    在優化之前,以兩個檔案讀取作為指標。

    讀取名叫 init 的頁面 2.3 sec

    Ajax 讀取前端設定 JSON 資料 3.41 sec

    處理的動作

    • 在 app/Config/Modules.php 中,把 $enabled 和 $discoverInComposer 設定為 false ,參考文件。( init 頁面 828ms, ajax load settings json 2.11 sec)
    • 同一個檔案中,把 $aliases 設定為空集合。( init 頁面 761.82ms, ajax load settings json 1.8 sec)
    • 在 app/Config/Toolbar.php 中,把 $collectors 設定為空集合。在 app/Config/Events.php 中,有一段標記 ‵Debug Toolbar Listeners.‵ 的程式碼,刪除或註解起來。 ( init 頁面 640.70ms, ajax load settings json 1.54 sec)
    • 在 app/Config/Filters.php 中,預設有幾個 class 開啟,分別是:csrftoolbarhoneypotinvalidcharssecureheaders。這幾個有些是安全設定,自行確認檢查哪些要移除。
    • 檢查 app/Config/Autoload.php 裡面有哪些用不到的,儘量在只需要使用時才用。

    效果顯著。

    init 頁面從 2.3 秒到 683豪秒
    AJAX 讀取前端設定從 3.41 秒到 1.65 秒

    但是無框架的原始程式碼呼叫速度還是非常的快的。在相同資料庫、相同 php 運行環境的狀況下,速度是框架 3 倍以上。

    init 頁面 208.03 豪秒
    AJAX 讀取前端設定 354.94 豪秒

    這沒辦法比,革命尚未成功就是。

  • 《自慢10:18項修練》第四部讀書心得

    這次這本書將會讀完,這次的進度是從第十五項修練〈解決問題〉到第十八項修練〈喜歡讀書〉,另外還有一篇後記。

    先講結論:

    1. 大目標拆解成小目標,無法解決的問題可以分成各個小問題來解決,這是目前為止我認為還是最高效解決問題的手段之一。
    2. 要小心「拜飛機」的迷思,可能找到的「著力點」只是表象。「著力點」 這個詞彙定義也是很有趣。
    3. 我不認同「速度快」是人才的論點,也不認同倡議「讀書」的重要性。這兩個互相矛盾。

     

    這次嘗試以列點的方式呈現,試試看是不是文字可以避免過多綴字:

    • 15-2 〈解決問題的 SOP〉 我覺得重點是把大問題分析成小的目標和進度的作法,這很有柯文哲的風格。但 15-3 提到的「節決問題的著力點(槓桿點)」,似乎是過於武斷了,看到時第一時間警覺會需要小心「拜飛機」的迷思。不過書中有提到《系統思考》一書,可能找機會可以看一下
    • 16-1 提到「手腳俐落」的人是最值得珍惜的人才,我是持反對立場的。有許多技術含量比較高的實作,或是需要比較精密的動作,通常做錯的機會成本會比動作慢的機會成本來的大很多。簡單可以從大學普化實驗或是社會新聞的編輯工作看得出來,更遑論一些設計相關的工作內容。我認為,在某些職業領域上,速度是一個門檻,只要超過了那個門檻,反而精細與穩定會比速度還要重要的許多。同樣的在 16-3 也有一樣的狀況,對於「慢工出細活」的解釋有些略為詭辯了。
    • 第 17 項修練是真的十分認同,我會認為不論輩份或是職位,守時會是對自己的要求,雖說不太好因為「守時」於否判斷對方是否是一個「不能自律」的人(誰又絕對自律呢?作者嗎?),但是在各種應用面上,對時間的掌握我認為是一個表現實力的方法,在提供一定品質的門檻前提下,能夠準時和不能準時,不僅是態度,也是一種技術掌控的能力表現。
    • 18 項修練在現代我認為應該是指資訊的獲取的重要性。但「書本」和「資訊」本質會有所不同,像是書本會有「二手資訊」、「作者經歷」或是「著書時間長短」等等都會影響到書本中提供的「資訊」內容;而從更快速的途徑,例如:網路、前輩朋友所獲得的資訊,也會有「可靠度不高」、「系統化程度低」等問題,無論是單純指「資訊」本身,或是經過整理的書本內容,自己要能夠掌握、整理和運用才是好的。
    • 額外提一點,我認為,理解把書本的內「知識」,或是從各方來的「資訊」,整理成自己的系統能力,這樣的動作要夠快,簡單講就是要「學的夠快」,學的夠快會有更多機會認識自己的優勢和劣勢,越早能夠認識自己才越有時間練習。無論是改進缺點或是加強優點,甚至是成熟自己的價值觀,都會需要時間來堆疊。當大家都知道努力很重要的時候,要捲就是要比眼界了。這個比較像是「T 型人才」的概念實作。