[{"content":"概覽 AI-HIL MCP 是一個 AI 驅動的嵌入式開發自動化平台。透過五個 MCP（Model Context Protocol）伺服器，讓 AI 代理能直接燒錄韌體、擷取串口日誌、分析音訊 FFT、檢視視覺影像——在 AI 與實體硬體之間閉合迴路。\n已應用於除錯自動化與工廠生產自動化場景，並以開源形式發佈。\n五個 MCP 伺服器 伺服器 功能 JTAG 透過 OpenOCD 直接燒錄韌體至 STM32/ESP32 串口 (Serial) 即時擷取與解析串口日誌 視覺 (Vision) 擷取攝影機影像進行 AI 視覺分析 音訊 (Audio) 錄音並執行 FFT 頻譜分析 建置燒錄 (Build-Flash) 自動化編譯與部署流程 應用場景 嵌入式系統除錯：AI 代理自動分析日誌、定位問題、重新燒錄，減少人工介入 工廠自動化：視覺 + 音訊感測器資料即時回饋，AI 判斷產品品質 韌體開發循環：程式碼修改 → 編譯 → 燒錄 → 驗證，全程由 AI 驅動 ","permalink":"https://chenfu.ai/projects/ai-hil-mcp/","summary":"AI 驅動的嵌入式開發自動化平台，讓 AI 代理直接操控實體硬體。","title":"AI-HIL MCP"},{"content":"概覽 Engram 是一個 AI-Maker 平台，整合了 ML 工作管線、Studio UI 與 MCP 伺服器。攝取感測器資料、執行 ML 推論、透過 WebSocket 提供即時結果。Phase 7 已完成。\n核心模組 ML 管線：感測器資料攝取 → 預處理 → 模型推論 → 結果輸出 Studio UI：shadcn/ui 構建的視覺化工作管線編輯器 MCP 伺服器：提供 7 個工具，讓 AI 代理介接整個推論流程 WebSocket 即時推送：毫秒級推論結果串流 ","permalink":"https://chenfu.ai/projects/engram/","summary":"AI-Maker 平台：ML 工作管線、Studio UI、以及提供 7 個工具的 MCP 伺服器。","title":"Engram"},{"content":"概覽 Synapse Labs 是一個運行於 ESP32 的嵌入式加密與通訊框架。整合 Zen 進行 pub/sub 訊息傳遞，搭配 Ed25519 簽章、BCS 序列化與 blockchain intent 雜湊，為邊緣設備提供密碼學安全的通訊能力。\n核心功能 Zen Pub/Sub：輕量化的發布/訂閱訊息傳遞層 Ed25519 簽章：每筆訊息皆附帶不可偽造的數位簽章 BCS 序列化：Binary Canonical Serialization，與 Move 生態相容 Blockchain Intent 雜湊：與 blockchain 鏈上驗證整合 ","permalink":"https://chenfu.ai/projects/synapse-labs/","summary":"ESP32 上的嵌入式加密與通訊框架，整合後量子安全訊息傳遞。","title":"Synapse Labs"},{"content":"概覽 Plexus-Myelin 是一個後量子混合 VPN 隧道。結合 X25519 + ML-KEM-768 金鑰交換與 WireGuard 傳輸層，加入透過自建 STUN 伺服器的 NAT 穿越與 DERP 式中繼回退。目前 138 項測試全數通過。\n這個專案的核心假設是：量子電腦將在未來 10 年內對現有公鑰加密體系構成威脅，提前採用後量子演算法是負責任的工程決策。\n技術架構 金鑰交換（Hybrid KEM） X25519：傳統橢圓曲線 Diffie-Hellman，廣泛驗證 ML-KEM-768：NIST 標準後量子演算法（原 Kyber-768） 兩者混合使用，即使其中一個被攻破，整體安全性仍然成立 傳輸層 WireGuard：現代、精簡的 VPN 協定 STUN：自建 STUN 伺服器處理 NAT 穿越 DERP 中繼：當 P2P 路徑不可用時自動回退 測試覆蓋 ✅ 138 項測試全數通過，涵蓋金鑰交換、隧道建立、NAT 穿越與中繼回退場景。\n","permalink":"https://chenfu.ai/projects/plexus-myelin/","summary":"後量子混合 VPN 隧道，結合 X25519 + ML-KEM-768 金鑰交換，138 項測試通過。","title":"Plexus-Myelin"},{"content":"概覽 Phygitao Platform 是一個分散式邊緣平台，設計目標是在不穩定網路環境下可靠地將實體世界事件上鏈至區塊鏈。Phase 4.3 已完成強化，具備完整的可觀測性。\n核心特性 批次簽章：多筆事件聚合後一次簽章上鏈，大幅降低 gas 成本 退避重試上行鏈路：網路中斷時自動指數退避重試，確保最終一致性 離線溢出恢復：本地緩衝池 + 恢復佇列，防止事件丟失 可觀測性：指標、追蹤與告警整合，Phase 4.3 完成 ","permalink":"https://chenfu.ai/projects/phygitao/","summary":"分散式邊緣平台，具備批次簽章、退避重試上行鏈路，以及離線溢出恢復。","title":"Phygitao Platform"},{"content":"概覽 OmniTypist 是一款為專業工作者設計的 macOS AI 語音輸入應用。\n核心體驗：按下快捷鍵、說話、放開快捷鍵，精修過的文字會自動插入到您游標所在的位置，完全無縫整合於任何應用程式中。\n核心體驗 作業系統級整合：原生 macOS Accessibility API 注入文字，無須複製貼上。 多 LLM 後端：支援切換不同的 LLM 提供者進行語音轉文字與文字精修。 背景靜默運行：常駐於選單列，不干擾日常工作流程。 原生體驗：Swift 打造原生介面，Rust 處理底層邏輯。 自動更新：整合 Sparkle 框架進行無縫版本更新。 最新更新：陸續推出 macOS v0.5.0, v0.6.0 與 v0.6.1，持續強化穩定性與體驗。 iOS TestFlight：我們剛推出了 iOS 測試版！歡迎有興趣搶先體驗的朋友寄信給我申請加入測試（kuochenfu88@gmail.com）。 ","permalink":"https://chenfu.ai/projects/omnitypist/","summary":"macOS AI 語音輸入應用。按下快捷鍵、說話、精修文字自動插入任何位置。","title":"OmniTypist"},{"content":"概覽 Kids Learning Playground 是最初為四年級孩子打造的瀏覽器學習平台，將 10 款迷你遊戲、Google 登入、遊戲成績紀錄與學習儀表板整合在一起。\n遊戲模組 數學：Speed Math Challenge 提供限時乘除法挑戰；Geometry Quest 結合幾何關卡與圖形解題工具。 英文：Word Builder、Sentence Scramble、Shiritori 與 Adverb Charades，練習拼字、句子排序、單字接龍與副詞。 科學與邏輯：Science Quiz 涵蓋 AI、機器人、二進位與硬體知識；Logic Puzzles 與 Twenty Questions 訓練推理能力。 拼圖：Puzzle Time 提供磁吸式拖曳拼圖，並支援管理員維護圖片庫。 平台功能 學習儀表板：整理遊戲次數、累積星星、平均分數與各遊戲最佳成績。 Google 登入與角色：透過 Google OAuth 登入，區分家長與孩子角色；登入後可進入遊戲與個人成績頁。 圖片庫管理：管理員可上傳與管理拼圖圖片。 互動回饋：結合 Framer Motion 動畫、音效與共用數字鍵盤，支援遊戲操作。 ","permalink":"https://chenfu.ai/projects/kids-learning-playground/","summary":"涵蓋數學、英文、科學、邏輯與拼圖的 10 款教育遊戲，結合 Google 登入、成績紀錄與學習儀表板，採 React、Go 與 PostgreSQL 架構。","title":"Kids Learning Playground"},{"content":"概覽 這是一個為 AIATCL 台灣 AI 人工智慧素養認證打造的線上練習網站，將認證題型整理成可直接練習的模擬測驗流程，讓使用者能用接近正式考試的節奏熟悉題目、時間壓力與作答策略。\n核心體驗：以 40 題、50 分鐘的完整模擬測驗為主軸，結合作答評分、詳解回顧、錯題筆記與主題分數分析，幫助考生建立可反覆練習的學習迴路。\n核心功能與體驗 完整模擬測驗：內建 5 回模擬測驗與 1 份補強題庫，每份 40 題，包含 15 題單選、5 題複選與 20 題閱讀題組。 補強主題：針對 Prompt Engineering、AutoML、數位孿生、雲端與邊緣 AI 加強練習。 正式節奏練習：提供 50 分鐘計時、每題 2.5 分、80 分通過門檻。 複習與解析：測驗後可檢視詳解與錯題學習筆記。 本地錯題本：交卷後將答錯或未作答題目保存在瀏覽器端，可選擇只練錯題，下次答對後自動移除。 主題成績分析：依題目主題整理表現，協助找出需要補強的知識區塊。 隨機化練習：每次作答會洗牌題目與選項，降低背答案的偏誤。 ","permalink":"https://chenfu.ai/projects/aiatcl-cert-practice/","summary":"協助準備 AIATCL 台灣 AI 人工智慧素養認證，提供 5 回模擬測驗與 1 份補強題庫，結合計時評分、詳解、錯題本與主題分析。","title":"AIATCL 台灣 AI 人工智慧素養認證練習網站"},{"content":"概覽 這個靜態網頁應用最初為靜心國小四年級英文考試而做，目前已擴充為四至五年級、4 份測驗的練習平台，整合單字、自然發音與拼字、文法、閱讀及聽力，不需要前端框架或本地建置步驟。\n目前主推五年級上學期第一次小考，範圍為 HMH Into Reading Module 1、Weeks 1–3。\n測驗內容 測驗 年級 範圍 2026 年 4 月期中考 四年級 Module 6、Weeks 1–3 2026 年 5 月第二次測驗 四年級 Module 7、Weeks 1–3 2026 年春季期末考 四年級 Module 8、Weeks 1–2 2026 年秋季第一次小考 五年級 Module 1、Weeks 1–3，供 10 月 1 日考前練習 核心功能與體驗 五種練習主題：單字、自然發音與拼字、文法、閱讀、聽力，依測驗切換內容。 圖像輔助學習：五年級秋季第一次小考的 30 個單字與 9 篇閱讀文章皆有插圖。 原生語音支援：瀏覽器 TTS 提供聽寫與聽力對話，可選擇語音並重播。 任務與成就：每日任務、星星獎勵，以及貓與狐狸主題的 7 枚成就徽章；Boss Review 集中複習已記錄的錯題。 本地學習紀錄：各測驗分別儲存成績、錯題、星星與徽章，進度頁可重置指定測驗。 一致的導覽：返回、首頁、切換測驗與進度入口串起各頁，並支援瀏覽器上一頁與下一頁。 ","permalink":"https://chenfu.ai/projects/cs-english-exam/","summary":"涵蓋靜心國小四至五年級的英文練習網站，提供 4 份測驗、圖像單字與閱讀、語音聽力、每日任務及 7 枚成就徽章。","title":"靜心國小英文練習網站（四至五年級）"},{"content":"概覽 Lectio 是一個給 macOS 使用者的 AI 伴讀工具，目標是把閱讀文件、課程、論文、產品文件或錯誤訊息時的卡點，轉成可以立刻追問的對話。\n核心體驗：不用離開正在看的畫面，就能用語音詢問 Lectio；它會先看選取文字，沒有選取時則讀取目前螢幕內容，並圍繞眼前材料回答。\n核心功能與體驗 選取文字優先：需要討論特定段落、函式或錯誤訊息時，選取後直接發問。 螢幕內容理解：沒有選取文字時，Lectio 會讀取目前畫面可見內容，適合瀏覽器、PDF、課程播放器與錯誤畫面。 語音問答流程：使用語音提問，也可以用語音聽回覆，讓閱讀時的追問更接近自然思考。 浮動對話窗格：回答保留在眼前的浮動窗格，支援沿著同一份材料繼續追問。 自帶金鑰模式：使用者填入自己的 AI 服務金鑰，保留模型供應商、帳號與費用控制權。 本機優先的信任邊界：讀畫面、聽語音與念出回答盡量使用 macOS 本機能力處理，不把整張螢幕截圖送到遠端。 ","permalink":"https://chenfu.ai/projects/lectio/","summary":"Lectio 是 macOS 上的語音閱讀與學習夥伴，能讀取選取文字或目前螢幕內容，讓使用者直接針對眼前材料用語音追問。","title":"Lectio"},{"content":"概覽 這是為 iPAS 經濟部產業人才能力鑑定打造的線上刷題練習網站，目前涵蓋兩張證照、七個科目、2,222 題：AI 應用規劃師的初級與中級，以及 AIoT 應用工程師初級（物聯網類）。\n核心體驗：以官方歷屆公告試題為基礎，提供模擬考試、刷題練習與新題庫練習三種模式，並透過選項解析、錯題本與評鑑節點統計，建立可反覆練習的學習迴路。\n站上依「證照 → 等級 → 科目 → 模式」分層導覽，兩張證照的題庫完全分開，不混在一起。\n涵蓋科目 證照 等級 代碼 科目名稱 考試時間 模擬考試 AI 應用規劃師 初級 科目1 人工智慧基礎概論 75 分鐘 ✅ AI 應用規劃師 初級 科目2 生成式 AI 應用與規劃 75 分鐘 ✅ AI 應用規劃師 中級 科目1 人工智慧技術應用與規劃 90 分鐘 ✅ AI 應用規劃師 中級 科目2 大數據處理分析與應用 90 分鐘 ✅ AI 應用規劃師 中級 科目3 機器學習技術與應用 90 分鐘 ✅ AIoT 應用工程師 初級 考科一 AIoT 基礎概論 75 分鐘 — AIoT 應用工程師 初級 考科二 物聯網系統與應用 75 分鐘 — AIoT 兩科暫不提供模擬考試：官方簡章只寫「每科 100 分、70 分及格」，未載明題數與每題配分，在查證到官方題數之前，不沿用 AI 應用規劃師的 50 題 × 2 分規則去猜。\n題庫組成 來源 題數 說明 官方歷屆公告試題 879 由官方 PDF 經解析管線產生 AIoT 官方學習指引練習評量 80 考科一的官方練習題 補充新題 198 補齊歷屆試題未涵蓋的觀念 評鑑節點分類新題庫 1,065 依官方評鑑內容節點分批命題，附選項解析 合計 2,222 近期新增 AI 應用規劃師初級 115 年第二次考試的 100 題官方試題，以及 AIoT 評鑑節點新題庫 150 題。以上來源分類已於 2026-09-22 依實際題庫資料核對。\n核心功能與體驗 模擬考試：支援的科目各提供 3 份固定組卷的 50 題試卷，同一份重開題目相同；計時作答，交卷後顯示成績；每題 2 分、滿分 100 分，70 分（答對 35 題）為及格線。 刷題練習：依考卷原序練習整個原題庫，即時顯示對錯與詳解、不計時；可依「全部／錯題／未答」篩選，支援跳題、進度續作與重置。 新題庫練習：依官方評鑑內容節點分類的新題庫，每題附逐選項解析，說明正解成立的理由與其他三個選項錯在哪裡。 節點表現：依《AI 應用規劃師能力鑑定 — 評鑑內容範圍參考》的節點列出「已作答幾題、其中答對幾題」，找出真正的弱項節點。 錯題本：模擬考交卷時答錯的題目自動加入錯題本，供刷題模式篩選並集中複習。 學習主題（延伸閱讀）：AI 應用規劃師五科的官方學習指引整理，以及 AIoT 15 個評鑑節點的備考整理，含比較表、公式塊與流程列；另有 120 條縮寫速查表、節點目錄與全文搜尋、全部展開／收合、考前速記模式，以及從節點直接跳進該節點題目的入口與已讀進度標記。 資料來源與品質把關 題庫來源透明：官方 PDF 置於私有目錄不進版控，經 pdftotext 轉為 markdown 後由 npm run parse:papers 產生 JSON 產物並提交；產物已進版控，因此重跑解析後 git diff --exit-code 就是現成的回歸測試。 手寫層與機器產物分離：詳解與選項解析寫在獨立的手寫層，修正不會被重跑解析洗掉。逐題讀過官方檔案的過程中，也發現並修正三處官方 PDF 本身的缺陷（選項誤植、答案與解析互相矛盾、解析答非所問），全部列管在 docs/coverage/bank-defects.md。 AI 命題來源標示：198 題補充新題與 1,065 題評鑑節點新題庫由 LLM 命題，正確性仍待人工複審，題庫檔案與專案文件都據實標注。命題方針另訂認知層級與跨節點的分布下限，由測試寫成契約擋住退步。 CI 先測後建：GitHub Actions 在 build 之前先跑完整測試，題庫完整性、詳解覆蓋率、圖片轉錄、簡體字與節點配額的守衛才不會空轉。 ","permalink":"https://chenfu.ai/projects/ipas-aiap-cert/","summary":"涵蓋 iPAS「AI 應用規劃師」初級與中級、「AIoT 應用工程師」初級共七科的線上刷題練習網站，2,222 題、三種練習模式，並附評鑑節點分類、選項解析與備考筆記。","title":"iPAS 認證練習網站（AI 應用規劃師・AIoT 應用工程師）"},{"content":"概覽 這是一個為國小學生設計的互動式昆蟲觀察記錄表系統，以四年級學生養殖蠶寶寶為背景情境。它讓孩子在線上填寫飼養日記、手寫繪圖、上傳照片並繪製生長曲線，最後能排成適合紙本作業的 A4 格式，把線上學習記錄無縫輸出成可繳交的紙本作業。\n核心體驗：線上記錄與紙本作業合而為一——在瀏覽器裡完成觀察與分析，一鍵列印出符合學校規格的 A4 作業。\n核心功能與體驗 飼養準備與生態紀錄：引導孩子填寫飼養基本資訊，並用童趣語氣記錄昆蟲適應環境的構造、行為與生態省思。 線上畫圖板 + 照片上傳：以 HTML5 Canvas 打造的畫圖工具，支援筆刷大小、多色調色盤、橡皮擦與無限步驟復原，也可直接上傳實體照片。 成長日記時間軸：以動態時間軸呈現蠶寶寶從卵期、孵化、蛻皮眠期到幼蟲的成長歷程，可自由新增、編輯、刪除每日記錄。 生長曲線分析：整合 Chart.js，依「體長」與「飼養天數」自動繪製生長趨勢曲線，培養科學數據分析思維。 A4 列印排版：內建 @media print 樣式，使用標楷體渲染、無縫接續排版、圖片自動貼齊格線，輸出符合學校作業規格的紙本。 自動儲存與雙軌備份：編輯時即時備份至 localStorage，後端資料庫同步鏡像備份，提供額外的資料還原副本。 ","permalink":"https://chenfu.ai/projects/insect-observation-report/","summary":"為國小學生設計的互動式昆蟲觀察記錄表系統，支援線上日記、手寫繪圖、照片上傳與生長曲線分析，並提供適合學校作業的 A4 列印排版。","title":"昆蟲觀察記錄表系統"},{"content":"概覽 Nevé Field Guide 是一個關於冰品的自學網站，以繁體中文為先，涵蓋分類、科學、製作技巧與配方計算四個區塊。目標很具體：讀者能用計算器和科學章節，判斷一份配方做出來會太硬還是太軟，並說得出原因。\n它是 Nevé 平台（手工冰品的批次品質與冷鏈系統）對外的知識層。名字本身就是機制：névé 是冰河學術語，指經歷反覆融化、再結凍而再結晶的雪——正是冰淇淋做好之後變差的方式。\n貫穿全站的一句話：配方決定起點，熱歷程決定終點。\n網站內容 區塊 內容 分類 12 張冰品規格卡：脂肪、乳固形物、糖、總固形物、膨脹率、供應溫度、冷凍方式與常見失敗 科學 8 章：固形物與水、糖與 PAC／POD、冰晶、低溫與未結凍水、脂肪與乳化、空氣與膨脹率、穩定劑、再結晶 製作技巧 6 個製程階段（殺菌 → 冷卻 → 熟成 → 凍結 → 硬化儲存 → 供應），以及從症狀出發的 7 種問題排除 配方計算 原料資料庫、成分加總、PAC／POD、各品類目標範圍比對、最佳挖取溫度估計、批量縮放與網址分享 登入是選用的。不登入時不上傳任何東西：配方存在網址參數裡，「我的原料」留在瀏覽器；用 Google 登入則可把我的原料、儲存的配方與批次紀錄同步到帳號（Cloudflare D1），並可匯出或刪除帳號。\n計算模型 配方數字只來自計算器：計算核心 neve-recipe-core 以 Rust 撰寫、編譯成 WASM，在瀏覽器與建置時共用同一份程式；文案不手寫數字，也不讓 LLM 產生數量。 凍結曲線：以 PAC 作為蔗糖當量溶質，Norrish 水活性模型加冰平衡，再加上乳鹽造成的凝固點下降。 最佳挖取溫度：定義為 70% 水分結凍的溫度。這是經驗法則而非量測門檻，網站上也這樣標示。 原料資料：89 筆原料，成分來自衛福部食藥署（TFDA）與 USDA FoodData Central 並記錄出處 ID；仍有 12 筆市售產品（穩定劑、葡萄糖漿等）是近似值，待換成供應商規格。 品質把關 黃金測試：以 Carpigiani Gelato University 配方書上印出的成分當基準，重算 165 份配方比較差異；pnpm run golden 在差距變大或出現新差距時失敗。 知識衝突列管：不同來源之間的說法差異逐條編號記錄（目前 44 條），每條要解決在網站文案、模型或原料資料其中一處。 對照教科書：全站依 Goff、Hartel \u0026amp; Rankin《Ice Cream》第 8 版逐章核對，引用標到章節與頁碼。 食品安全只轉述權威來源：殺菌時間溫度、冷卻與儲存溫度都附出處，網站不提供食品安全保證。 ","permalink":"https://chenfu.ai/projects/neve/","summary":"冰品的自學網站：分類、科學、製作技巧與配方計算四大區塊。配方數字只由 Rust 編譯成 WASM 的計算器產生，不手寫、也不交給 LLM。","title":"Nevé Field Guide｜冰淇淋科學手冊"},{"content":"臉書看到一個波文，整理最近 Kent Beck 的演講，油土伯上也有。他是 Extreme Programming（XP）的創始人，也是 JUnit、Test-Driven Development（TDD）的重要推動者，以及敏捷宣言簽署人之一。而逐字稿的整理，大致是如下：\nAI 產出不等於正確 → 建立測試、驗收和獨立驗證機制\nFeature 會消耗 Future → 每輪功能交付後檢查可變更性\n快速產出不代表快速學習 → 保留實驗、回顧與重新設計的時間\nOne-Shot 不適合所有專案 → 長期系統採取漸進式交付\nSpec 不會永遠正確 → 根據新證據持續修改規格\nOutput 不代表 Outcome → 追蹤使用者行為是否改變\nOutcome 不一定等於 Mission → 定義產品最終想實現的價值\n領導不只是分配工作 → 建立團隊共同理解的使命\n這些內容跟我在實務上有87分相像，不過有一點我想特別說的是Mission這件事，就是如何定義產品最終想實現的價值，在這個實踐的過程之中，如果沒有不斷的挑戰這件事，就很容易被AI帶著走而產生非常一般的產出。\n為了處理或是應對這種情況，加上在UI時工作的經驗，在三月大量練習跟實作時，自己定義了BDD（Boss-Driven Development）的開發模式，所以基本上我是使用TDD + BDD雙軌來進行我的開發工作，目的就是不讓 AI 主導，而是由人類透過更大膽的問題與目標來驅動 AI。\n所以看到這個演講的文章，就讓我想到了這件事，同時我就跟GPT討論了一下，結果就如附圖，有了個大膽的想法……\nBOSS-DD，還真的很有意思！\n","permalink":"https://chenfu.ai/posts/kent-beck-tdd-boss-dd/","summary":"\u003cp\u003e臉書看到一個波文，整理最近 Kent Beck 的演講，油土伯上也有。他是 Extreme Programming（XP）的創始人，也是 JUnit、Test-Driven Development（TDD）的重要推動者，以及敏捷宣言簽署人之一。而逐字稿的整理，大致是如下：\u003c/p\u003e","title":"從 Kent Beck 的演講，想到我的 TDD + BDD 雙軌，以及 BOSS-DD"},{"content":"回顧過去兩週，還真多事情值得記錄。9/15～9/17，因為有興趣，去拿了義式冰淇淋初級證照，也花了不少時間梳理、學習冰淇淋的原理、製程和各種專有名詞。說穿了，就是愛吃冰而已。義式冰淇淋吃多了，嘴也容易挑……\n為了上這堂課，缺席了台大「創新思考與策略實務」W2的課程，不過我還是有乖乖寫作業。轉眼又過了兩個週四，今天已經到了W4，也逐漸適應作業的形式，只是寫起來仍得花不少時間。我的做法大概是先拆解題目，自己寫一遍，再用AI檢視，看看哪裡不足，順道學習。而Vibe Coding就因為已經做了很多有的沒的，這部份的難度對我來說就一直不會是太高。\n這兩週剛好碰上中秋節，帶家人去花蓮玩了一趟。這次安排的都是活動行程：白鮑溪溯溪、野猴子森林A+行程、獵人學院，滿滿的體力活，然後有人有點怒……不過我猜，完成後應該很有成就感吧？！只是回程經過宜蘭，還是享受了三、四小時的雪隧慢遊。大概是大家都會預判你的預判，提早一天回程，就提早享受慢遊……\n工作如常，多條線都在進行：參加研討會、找有趣的題目、面試有趣的公司、做有趣的事。像我每天搭大眾運輸，即使到了站點，常常還是得另外查公車動態，因為Google Maps的資訊很不準確。於是想申請政府的API，試著做個自用工具，減少搭車時的麻煩，這就是Sigmovo專案的起點。\nLantern則源自同學面臨的課後班師資問題，讓我想幫忙找找解方，也看看AI應用規劃師這張證照能不能發揮一點作用。剛好「創新思考與策略實務」也需要一個創業題目，就一起囉。\n時序進入十月，月底有一場AIoT初級證照考試，再過兩週就是AI應用規劃師中級考試，也差不多該開始暖身準備了。\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E9%9B%99%E9%80%B1%E8%A4%87%E7%9B%A4-2026-w40/","summary":"\u003cp\u003e回顧過去兩週，還真多事情值得記錄。9/15～9/17，因為有興趣，去拿了義式冰淇淋初級證照，也花了不少時間梳理、學習冰淇淋的原理、製程和各種專有名詞。說穿了，就是愛吃冰而已。義式冰淇淋吃多了，嘴也容易挑……\u003c/p\u003e","title":"雙週複盤 2026-W40｜義式冰淇淋證照、花蓮體力活，以及 Sigmovo 與 Lantern 的起點"},{"content":"這幾天一直被推 Jev 的相關訊息，昨天乾脆花了一些時間讀資料，也跟 ChatGPT 來回討論了一陣子。Jev 本身先不談，我反而對它背後的概念比較有興趣：如果 AI 不需要每件事都重新做完整推理，而是可以針對熟悉的情境快速判斷，那其實很像《快思慢想》裡的 System 1 和 System 2。System 2 慢一點，負責深度思考；System 1 快一點，負責快速判斷。\n接著我就聯想到最近一直在玩的 Physical AI。如果 AI 最後不是只回答一句話，而是真的要去控制機器人、設備、產線，甚至直接作用在實體世界，那 System 1 和 System 2 下面，是不是還少了一層？一層不需要再做開放式推理，也不需要重新理解整個情境，而是把已經確認的決策，轉成受約束、可驗證、可預期的行動。我暫且把它叫做 System 0。\n剛好我之前做過一個小專案，用 MCP 協助板端開發與除錯，加上 Anthropic 最近又提出 MHS，想解決 AI 與實體設備之間的介面問題。把這幾件事放在一起看，突然覺得 System 0 的位置變得很有意思。不過上網搜尋後，發現「System 0」其實沒有統一的定義，目前至少看到幾種不同方向。\n有一種把 System 0 定義成人類 System 1、System 2 前面的外部認知層，也就是先由 AI 幫忙整理、過濾、框架化資訊，再交給人思考。另一種更偏具身智能，認為 System 0 是「前認知的物理過程」。例如柔性夾爪不需要算出每一個接觸點，只靠材料本身的形變，就能自然貼合物體。某種程度上，是讓物理世界自己完成部分計算。還有一種用法比較接近機器人控制，把 System 0 看成已經高度熟練、自動化的動作，例如平衡、軌跡跟隨、穩定控制。這幾個定義都不完全等於我腦中想的 System 0，但第三種已經非常接近。\n我想像中的 System 0，不只是馬達怎麼動，而是這件事現在是否仍符合既有規則，可以照既定程序繼續做？\n例如一台機器人看到一個工件，System 2 可能負責思考：「為什麼今天一直抓不到？是相機、光線、夾爪，還是治具出了問題？」System 1 負責快速判斷：「這個工件現在位置正常，可以抓取，信心 96%。」System 0 則不再重新理解情境，而是檢查安全門是否關閉、機器人是不是在正確模式、工作區有沒有被占用、目標位置是否有效，然後執行一套已經驗證過的抓取程序。如果條件符合，就執行；如果不符合，System 0 不需要自己猜原因，只需要停止或把問題往上升級。\n所以我目前會簡單地記：\nSystem 2 是「想」。 System 1 是「判」。 System 0 是「做」。 這裡真正有意思的地方，是它們不應該是一條固定的流水線，不是每一次都要 System 2 → System 1 → System 0。反而應該倒過來看，平常能由 System 0 按照既有規則執行的事情，就不要動用更高階的判斷。\n當 System 0 發現執行條件不成立，例如感測器數值超出允許範圍、必要資料缺失，或目前狀態不在既定流程中，就把問題升級給 System 1。System 1 再進一步判斷：現在到底屬於哪一種已知情況？應該重新取像、等待、重試，還是交給人工處理？如果 System 1 也無法可靠分類，或出現以前沒見過的新問題，才交給 System 2 做完整推理。\n也就是能照規則做，就不要重新判；能快速判，就不要深度想。這件事對 Physical AI 特別重要。如果只是聊天，AI 回錯一句話，通常還可以重來；但當 AI 開始控制機械手臂、車輛、設備或產線時，「猜錯」可能直接變成一個物理動作，所以越靠近實體世界，自由度應該越低。System 2 可以保有很大的思考空間，System 1 應該在有限選項中判斷；到了 System 0，最好已經收斂成明確的程序、規則、狀態機或技能，而且只在條件成立時執行。再往下到 PLC、運動控制器、安全系統，則應該更加確定。\n這樣看下來，我覺得還有一件事很有意思：知識是可以往下沉澱的。一個新問題第一次出現，可能需要 System 2 花很多時間理解；同樣的問題出現很多次以後，我們可能找到穩定模式，把它變成 System 1 的快速判斷。如果這個判斷再經過大量驗證，甚至可以直接寫成 System 0 的固定規則。\n原本需要「想」的事情，最後變成「判」；原本需要「判」的事情，最後變成「照規則做」。我暫時把這件事叫做「認知編譯」。\n真正成熟的 AI 系統，也許不應該永遠依賴越來越大的模型去處理每一件事，而是應該把已經理解、驗證過的知識，不斷往更快、更穩定、風險更低的層級沉澱。至於 System 0 / 1 / 2，當然不是一套正式的工業標準。\nSystem 1 和 System 2 是大家很熟悉的快思慢想框架，System 0 在學術上也有不同定義，所以我並不是想重新定義 System 0。只是覺得從工程和溝通的角度來看，System 2 想，System 1 判，System 0 做，是一個摩擦力很低，也很容易記住的方式。而我現在對 Physical AI 最核心的想法，也可以濃縮成一句話：\n越接近實體世界，智能的自由度應該越低，可靠性的要求應該越高。\nPhysical AI 真正困難的地方，可能不只是讓 AI 更會思考，而是如何把思考逐步收斂、驗證，最後變成可以安全作用在真實世界裡的行動。\n","permalink":"https://chenfu.ai/posts/system-0-1-2-physical-ai/","summary":"\u003cp\u003e這幾天一直被推 Jev 的相關訊息，昨天乾脆花了一些時間讀資料，也跟 ChatGPT 來回討論了一陣子。Jev 本身先不談，我反而對它背後的概念比較有興趣：如果 AI 不需要每件事都重新做完整推理，而是可以針對熟悉的情境快速判斷，那其實很像《快思慢想》裡的 System 1 和 System 2。System 2 慢一點，負責深度思考；System 1 快一點，負責快速判斷。\u003c/p\u003e","title":"System 0 / 1 / 2：從「想、判、做」理解 Physical AI"},{"content":"這次閱讀與整理水平思考、Six Thinking Hats、635 Brainwriting、SCAMPER、Brainstorming 與設計思考等方法後，最大的收穫，不是又多認識了幾個管理或創意工具，而是開始重新理解「思考」本身其實可以被刻意設計。\n過去的工作環境中，從老闆以降我比較熟悉的是一種直接而快速的決策方式。當問題出現後，由少數決策者快速判斷方向，能做就先做，再透過實際結果取得回饋，持續修正與迭代。這種做法的優點非常明顯，就是速度快。尤其在產品、工程與軟體開發環境中，只要試錯成本不高、決策可逆，而且市場或使用者回饋來得夠快，與其花很多時間討論，不如直接行動。很多事情其實做了就知道答案，過度分析反而可能降低效率。\n也因為如此，我一開始對 Six Thinking Hats、635 Brainwriting、SCAMPER 這些方法的疑問，是它們是否只是讓會議變得更有形式，或只是增加參與者發言的機會。如果最後仍然要做決定、執行，再接受現實世界的驗證，那為什麼不一開始就直接做？進一步理解之後，發現這些方法處理的其實不是同一類問題。\n水平思考的核心，是刻意跳脫既有的思考路徑，不急著沿著原本的邏輯往下推，而是透過轉換角度、重組條件、反向思考或引入新的刺激，去打開原本沒有被看見的可能性。SCAMPER、Reverse Thinking、What-if 等方法，都具有這種特性。它們的價值不在於把原有答案分析得更細，而是在於重新改寫問題與可能的解法空間。\nSix Thinking Hats 則比較像一種結構化的平行思考方法。它把原本混在一起的思考模式拆開，讓團隊在同一時間聚焦於同一種認知任務。White Hat 處理事實與資訊，Red Hat 處理直覺與感受，Yellow Hat 尋找價值與成立條件，Black Hat 檢查風險與問題，Green Hat 擴展新的可能性，Blue Hat 則負責控制整個思考流程。這種做法的重點，不只是增加觀點，而是避免不同思考模式彼此干擾。例如一個新想法才剛提出，就立刻被風險分析否定，往往會讓發散提早結束。\n635 Brainwriting 解決的又是另一類問題。它透過默寫與輪流延伸想法，降低強勢發言者、職位差異與群體壓力對討論的影響，也讓每個人可以先獨立思考，再進一步參考與延伸別人的構想。它真正改善的不是「創意能力」本身，而是團體創意產生的機制。\n這些方法讓我開始覺得，快速試錯和思考框架可能其實不是互相衝突的。\n快速試錯擅長的是縮短「多久可以知道答案」。如果一個決策成本低、容易回復、回饋又快，那麼最有效率的方法往往就是直接做，再從結果中學習。但如果面對的是新創題目、中長期策略、商業模式、重大投資或組織方向，問題本身可能都還沒有被定義清楚，此時過早進入執行，就有可能發生另一種風險：團隊用非常高的效率，把一個不重要、甚至錯誤的問題做得非常好。\n因此，這些思考方法更重要的價值，是幫助團隊在行動之前，先確認問題是否值得解、是否還有其他角度，以及目前的方向是否只是第一個看起來合理的答案。這對新創尤其重要。成熟產品的問題通常比較接近「如何把事情做好」，但在創業的初期更常面對的是「到底該做什麼」。客戶是誰、真正的痛點是什麼、誰願意付錢、現有解法為什麼不夠、產品應該從哪個切入點開始，這些都還沒有確定。如果沒有先做適當的問題探索與水平思考，團隊很容易太早愛上自己的第一個解決方案。\n這些方法對團隊合作的價值，也不只是增加參與感。不同成員其實掌握不同的資訊與經驗。工程人員知道技術上的限制，業務知道客戶真正的反應，營運知道哪些流程在現場根本不可行，財務則了解成本與風險。如果決策長期只集中在少數人身上，這些散在前線的局部知識很可能要等到執行出問題之後才浮現。透過 Six Thinking Hats、Brainwriting 或其他結構化討論方式，可以更早把這些分散在團隊中的資訊拉進決策過程。尤其 Black Hat 這類方法還有一個重要作用，就是讓反對意見變得合法。當所有人都被要求一起檢查風險時，提出問題就不再等同於「反對主管」，而只是完成思考流程的一部分。\n好的團隊不一定要讓每個人最後都有相同意見。真正有價值的是形成共同理解，也就是大家都清楚知道：我們現在要解決什麼問題、做這個決策的依據是什麼、有哪些假設、主要風險在哪裡、成功怎麼定義，以及什麼情況下需要改變方向。即使最後仍然有人持不同看法，只要大家對這些關鍵內容有共同理解，團隊就能在決策之後有效執行，而不是表面上同意，實際上每個人理解的方向都不一樣。\n當然，這並不代表所有事情都應該套用框架。如果每個小問題都使用 Six Thinking Hats、SCAMPER 或完整 Brainstorming 流程，最後很容易變成另一種形式的官僚化。真正重要的不是「有沒有使用框架」，而是能不能判斷什麼問題值得花時間思考。對於成本低、容易回復、回饋快速的問題，可以直接行動。對於問題模糊、投入高、難以回復，或需要很長時間才能知道結果的決策，就值得先用更完整的思考方法來擴展觀點、挑戰假設與確認方向。\n因此，這次學習後，我不會把過去熟悉的 Direct Thinking 與現在接觸到的各種思考方法看成兩個對立選項。我反而認為，更好的工作方式應該是先用適合的方法把問題想得足夠清楚。需要打破既有框架時，用水平思考；需要多人從不同角度檢視時，可以使用 Six Thinking Hats；需要大量產生構想並降低群體干擾時，可以使用 635 Brainwriting 或其他 Brainstorming 方法。等到重要假設被確認後，就應該停止討論，快速進入實驗與執行。取得真實世界的回饋後，再重新回到思考階段，檢查原本的假設是否成立，並決定下一輪方向。\n所以思考方法的價值，不是取代快速行動，而是幫助我們在行動之前，先確認自己是不是在解對的問題；而快速執行的價值，則是讓這些想法盡快接受真實世界的驗證。\n","permalink":"https://chenfu.ai/posts/lateral-thinking-reading-notes/","summary":"\u003cp\u003e這次閱讀與整理水平思考、Six Thinking Hats、635 Brainwriting、SCAMPER、Brainstorming 與設計思考等方法後，最大的收穫，不是又多認識了幾個管理或創意工具，而是開始重新理解「思考」本身其實可以被刻意設計。\u003c/p\u003e","title":"創新思考與策略實務：水平思考閱讀心得"},{"content":"\n一張圖，和它最下面那一格 這張圖我整理了一陣子。它想回答一個很單純的問題：當我說「幫我把這件事做完」，這句話要經過哪些協定，才會變成世界上真正發生的一個動作？\n由上而下六層，從人類意圖開始，一路落到機器手臂、感測器、PLC。中間每一層都有名字、有職責、有正在成形的規格。\n而最下面那一格——MHS，Model Hardware Standard——在這張圖的成熟度表裡只有 ★★☆☆☆，是全圖最低的。\n我把它放在最後，不是因為它最不重要。恰恰相反：上面五層講的都是 AI 在資訊世界裡怎麼互通，只有最下面這一層在講它怎麼離開螢幕。 而那一層，八月底才剛剛有了第一個像樣的候選規格。\n這篇文章分兩半。上半導讀整張圖，下半只談最下面那一格。\n上半：這張圖在說什麼 由上而下，六個協定層 AG-UI / A2UI——人機互動層（Agent ↔ Human）\n最貼近人的一層，而且它其實是兩件事。AG-UI 處理的是過程的可見性：即時串流、事件、狀態更新——讓你在代理跑一件長任務時，看得到它跑到哪、在想什麼、卡在哪。A2UI 處理的是介面本身：讓代理去描述要渲染的 UI 組件、表單與動作，而不是只吐一段純文字回來。\n一個是「讓我看見它在做什麼」，一個是「讓它決定我看到什麼」。前者是信任問題，後者是表達力問題。\nAgent Core——代理核心（大腦）\n嚴格說這不是協定層，是被協定包圍的那個東西。圖裡拆成六塊：推理、規劃、記憶、知識、技能、目標。\n這六塊值得一個一個念過去，因為它們常常被混為一談：知識是它知道的事實與規則，記憶是它記得的這一次與過去發生過什麼，兩者不是同一件事；技能是它能執行的動作，規劃是它決定用哪些技能、按什麼順序，兩者也不是同一件事。工程上會痛的，通常是把這幾件事塞進同一個抽象裡。\nA2A——代理協調層（Agent ↔ Agent）\n代理發現彼此、委派任務、同步狀態、交換結果。這一層在解的是一個組織問題而不是技術問題：當你有一百個代理，誰知道誰存在？誰有權叫誰做事？做完之後結果回給誰？\n旁邊掛著一個選用的「目錄／發現服務」。圖裡每一層右邊都掛了一個這種灰色的選用註冊服務，這個設計是刻意的——待會兒會回來講。\nWebMCP——Web 互動層（Agent ↔ Web）\n讓網站對代理暴露機器可執行的介面：宣告式 API、結構化動作、瀏覽器內的代理執行環境。\n這一層的存在本身就是一個宣告：整個 Web 是為人眼設計的，代理只能靠爬 DOM、猜按鈕、模擬點擊來用它，既脆弱又昂貴。與其讓代理繼續假裝自己是人，不如讓網站直接說「我這裡有這些動作可以呼叫」。\nMCP——工具與資料層（Agent ↔ Tools / Data）\n這一層現在最成熟（★★★★☆），也是我實際用得最多的一層。標準化的工具存取、資料操作、上下文管理、通用連接器。\nMCP 之所以贏，是因為它解的問題夠窄：它不管代理怎麼想，只管代理伸手拿東西時介面長什麼樣。 職責邊界乾淨的協定，擴散得比什麼都快。\nUCP / AP2——商務層（Agent ↔ Commerce）\n支付、交易狀態、退款與爭議、對帳與結算。代理要真的替你完成一件事，通常在某個點上得付錢。這一層現在是 ★★★☆☆，卡的多半不是技術，是責任歸屬——代理刷了一筆你不想要的款，那是誰的錯？\nMHS——實體世界層（Agent ↔ Hardware）\n裝置發現與認證、安全限制與邊界、自然語言指令、安全優先的抽象。下半整篇都在講它。\n中間那顆大腦，跟一個容易被略過的迴圈 Agent Core 下面有一條虛線框：經驗回饋迴路（Experience Feedback Loop）。\n執行結果 → 反饋 → 知識 → 能力\n這條線很容易被當成裝飾，但它其實是整張圖裡唯一一條指回去的線。上面所有的箭頭都在往下走，只有這一條把最下游的執行結果送回最上游的知識與能力。\n沒有這條線，這張圖描述的只是一根很長的水管——意圖從上面灌進去，動作從下面流出來，然後就沒了。有了這條線，它才是一個會變好的系統。我在 AI-HIL 那篇裡寫過同一件事，只是當時的說法是「每一次成功的 bug 修復都會被記錄成知識」——閉環的價值不在自動化，在累積。\n左邊那五條，為什麼是直的 圖的左側有五塊：身分與授權、授權與策略、安全與信任、稽核與可觀測性、安全與人工監督。標題寫著「跨領域基礎支援（適用於所有層級）」。\n它們被畫成一根貫穿的直柱，而不是堆疊裡的某一層。這是整張圖最重要的一個結構決定。\n因為這五件事沒有一件能塞進單一層解決。「誰授權這個代理？」在 A2A 是一個問題（代理之間怎麼互信），在 UCP 是另一個問題（誰能刷這張卡），在 MHS 又是完全不同的問題（誰能讓這隻手臂動起來）。你不能在某一層做完身分驗證然後宣告下面都安全了。\n同理，「人類檢閱」在人機互動層是一個 UI 元件，在實體世界層是一個安全機制——同一個概念，在不同高度的重量差了一個數量級。\n把它們畫成直的，就是在說：這五件事你得在每一層各做一次。\n右下角那張表，藏著這篇文章的重點 底部的協定總覽表把六層的成熟度並排：\n協定 用途 成熟度 AG-UI / A2UI 人機互動 ★★★★☆ A2A 代理間協調 ★★★★☆ WebMCP 網頁互動 ★★★☆☆ MCP 工具與資料 ★★★★☆ UCP / AP2 商務與支付 ★★★☆☆ MHS 硬體與實體世界 ★★☆☆☆ 上面五層在 ★★★ 到 ★★★★ 之間，只有 MHS 落在 ★★。\n這個落差就是這張圖真正在說的事。 資訊世界那一側，協定已經鋪得差不多了；代理找得到工具、叫得動彼此、看得懂網頁、付得了錢。但要它去轉一個閥、換一片晶圓、調一台顯微鏡的焦距——那一側幾乎是空的。\n而空了很久的那一格，八月底剛剛被填上第一塊。\n下半：MHS 與 Physical AI MHS 是什麼：兩個動詞，跟一個檔案 2026 年 8 月 27 日，Anthropic 發布了 Model Hardware Standard（MHS） 的 research preview——一份讓 AI 代理安全操作實體裝置的共通規格。\n它的設計極度克制，克制到第一眼會覺得「就這樣？」：\n兩個原語。 read 取得裝置上的一個值（「現在幾度」），write 設定一個參數（「設成 37 度」）。就這兩個。\n一份參考檔（reference file）。 每個裝置配一份，用自然語言描述硬體特性之後自動生成，告訴代理三件事：\n這台機器能量什麼 這台機器能改什麼 這台機器有哪些安全上限——而且是系統會強制執行的那種 而且它不綁模型。 MHS 是 model-agnostic 的，任何代理環境都能透過標準協定存取它——包括 MCP。所以它不是 MCP 的競爭者，是 MCP 的延伸：MCP 把軟體工具標準化了，MHS 想對實體機器做同一件事。\n官方給的數字是整合時間從數週壓到數小時。目前是限定名額的 research preview，合作對象橫跨生技（Genentech）、學術研究（華盛頓大學、卡內基美隆、HHMI Janelia）、量子運算（QuEra）與自動化生物實驗（Tetsuwan）；硬體端則有 Universal Robots、Doosan Robotics、Tecan、QIAGEN、Danaher、Automata、MBF Bioscience、AWS。Anthropic 說會在跟首批夥伴一起把安全評估與最佳實務做出來之後開源完整規格。\n為什麼這對我是一個「事件」 第一眼看它會覺得太薄。read / write 兩個動詞，能表達什麼？\n但這正是它可能會成的原因。回頭看 MCP 為什麼贏：不是因為它表達力強，是因為它職責夠窄。 一個協定要擴散，靠的不是涵蓋所有情況，是讓一萬個不同的實作都願意接上來。read / write 加一份安全邊界宣告，窄到 1970 年代的 PLC 跟 2026 年的六軸機械臂可以用同一個介面描述。\n真正的重量在那份 reference file 上。它把一件過去只存在於工程師腦袋裡跟 PDF datasheet 裡的知識——這台機器能做什麼、不能做什麼、超過哪條線會出事——變成了機器可讀、且執行時會被強制檢查的東西。\n那正是實體世界跟軟體世界最根本的差別：軟體出錯可以 rollback，硬體出錯會撞壞、會燒掉、會傷人。 一個要接上實體世界的協定，如果安全邊界不是第一等公民，它不配存在。MHS 把 safety limits 直接寫進最基本的裝置描述裡，這個順序我認為是對的。\n我對這件事有偏見，而且我知道偏見從哪來 我得誠實說：我對 MHS 的興奮不是中立的。\n我在 Ubiquiti 做了十四年邊緣產品，UniFi 攝影機上的 on-device AI、三千萬台受管裝置。我在 〈為什麼我要打造邊緣智能技術棧〉 裡寫過一段話，現在讀起來像在等這件事發生：\n讓 AI agent 能直接跟硬體互動的工具。不是要開發者自己寫一堆 glue code 把東西串起來，而是提供乾淨的協定介面，讓 AI 可以直接控制嵌入式裝置——燒錄、除錯、讀取感測器。\n那是我列的三個核心需求的第三個。而 AI-HIL（ai-hil-mcp）就是我為了自己用，手工把那一層刻出來的東西：五個 MCP server，JTAG、串口、視覺、音訊、建置燒錄，讓 Claude Code 自己讀 log、自己量電流、自己燒韌體、自己驗證。\n所以 MHS 對我來說不是一個陌生的新聞。它是有人用標準的方式，把我半年來手工做的那一層做掉了。\n這種時候有兩種反應。一種是「我做的東西被取代了」，另一種是「我賭的方向被驗證了，而且現在有底座了」。我是後者——因為我當初做 AI-HIL 最大的挫折從來不是技術，是每接一個新裝置就要重寫一次 glue code。那不是可以靠努力解決的問題，那是缺標準的症狀。\n誠實談 ★★☆☆☆ 我把它畫成 ★★，不是客氣。這一層還沒解決的問題很硬：\n安全邊界怎麼驗證。 reference file 宣告了安全上限，但宣告不等於正確。誰來保證那份檔案裡寫的邊界，跟這台機器的物理極限是同一件事？ 一份宣告錯誤的安全上限，比沒有宣告更危險，因為系統會信任它。這個問題在軟體世界有個溫和很多的版本（型別宣告錯了頂多 crash），在實體世界沒有溫和的版本。\n失效處理。 網路斷了、代理當了、指令送到一半——手臂停在哪裡？read / write 是無狀態的動詞，但實體裝置是有狀態的。這中間的落差得有人補。\n即時性。 很多實體控制迴路的容許延遲是毫秒級，而 LLM 的推理是秒級。MHS 適合的是「決定要做什麼」，不是「做的當下的閉環控制」。 這兩件事必須分開，否則會出人命。這也是我一直在講智能要往邊緣搬的原因之一。\n責任歸屬。 代理依照一份安全邊界正確的參考檔，下了一個合法的指令，然後產線報廢了一批貨。誰負責？這題法規還沒準備好，而它會比技術更慢。\n長尾。 首批夥伴是實驗室設備跟先進製造——高價值、高標準化、有錢做整合。但實體世界的絕大多數是工廠角落那台 2009 年的 PLC，文件不見了、原廠倒了、只有老師傅知道怎麼調。那條長尾才是真正的難題。\n★★ 是準確的描述。但 ★★ 跟沒有，差的不是兩顆星，是「有沒有起點」。\nAll in AI 之後：往下扎，不是往外鋪 過去兩年我的答案是 All in AI，那是一個關於要不要投入的答案。現在這題已經沒有懸念了，於是問題換成了：投入之後往哪裡去？\n我的答案是往下，不是往外。\n往外鋪，是再多接幾個 SaaS、再多寫幾個 agent、把同一套資訊世界的能力複製到下一個場景。這條路的邊際效益在快速遞減，因為大家都在鋪，而且鋪的是同一片地。\n往下扎，是把 AI 接到那些至今還沒被軟體吃掉的地方：產線、實驗室、農場、車隊、電網、倉儲。這些地方有一個共同點——它們的難點從來不是模型不夠聰明，而是資料進不去、指令出不來。 感測器的訊號躺在一台沒有網路的工控機裡，老師傅的 know-how 躺在他腦子裡，設備的操作邊界躺在一本紙本手冊裡。\nMHS 這種東西，解的正好是「指令出不來」那一半。而這一半一旦通了，另一半（資料進不去）的價值才真的兌現得出來——因為你終於能閉環了。能讀又能寫，才叫回饋迴路；只能讀，那叫報表。\n一想到接下來十年，每一個產業都要重跑一次「把實體流程接上智能」這件事，而現在才剛剛有第一份共通規格——這比再多一個聊天機器人有意思太多了。\n接下來我要讀跟做的 不寫時程，但方向是具體的：\n讀。 MHS 的 research preview 公告與後續開源的完整規格，重點放在三個地方——reference file 的 schema 長什麼樣、safety limits 是怎麼被強制執行的（是宣告式的檢查，還是執行期的攔截）、以及它跟 MCP 的邊界怎麼劃。\n做。 把 ai-hil-mcp 現有的 JTAG / 串口 / 視覺三個 server，拿去對照 MHS 的三件事重寫一版：\n我現在的工具介面，能不能塌縮成 read / write 兩個原語？塌縮不了的部分是什麼？那些塌縮不了的地方，就是 MHS 這個抽象的真實邊界。 每個裝置補一份 reference file——能量什麼、能改什麼、安全上限是多少。我猜光是把第三項認真寫出來，就會逼我發現一堆我其實沒想清楚的東西。 拿一個裝置做安全邊界的實測：故意下一個超過邊界的指令，看它被擋在哪一層。 擋不住的話，這整套就只是說法。 第 3 點是我最想做的。因為前兩點是紙上作業，只有第 3 點會告訴我這個抽象到底有沒有牙齒。\n這條路還很長。但比起半年前我一個人在那邊刻 glue code，現在至少地上有一條線了。\n參考 Previewing the Model Hardware Standard — Anthropic（2026-08-27） Anthropic pushes into physical world with new standard to help AI agents operate machines — CNBC Model Context Protocol 站內：AI-HIL：當 AI 長出了眼睛和手、為什麼我要打造邊緣智能技術棧、AI-HIL MCP 專案 ","permalink":"https://chenfu.ai/posts/ai-agent-protocol-stack-2026/","summary":"\u003cp\u003e\u003cimg alt=\"AI Agent Protocol Stack (2026-09-01)：從人類意圖到物理行動的完整互通協定堆疊\" loading=\"lazy\" src=\"/img/ai-agent-protocol-stack.svg\"\u003e\u003c/p\u003e\n\u003ch2 id=\"一張圖和它最下面那一格\"\u003e一張圖，和它最下面那一格\u003c/h2\u003e\n\u003cp\u003e這張圖我整理了一陣子。它想回答一個很單純的問題：\u003cstrong\u003e當我說「幫我把這件事做完」，這句話要經過哪些協定，才會變成世界上真正發生的一個動作？\u003c/strong\u003e\u003c/p\u003e","title":"AI Agent 協定堆疊：六層之後，最下面那一層剛剛接上實體世界"},{"content":"考完了。上一期結尾寫的是「接著要把中級科目的內容完成，再加上我臨時加報的 AIoT 認證；除此之外就回歸正軌」——這兩週基本上就是照著那張清單走完的。\n節奏跟上一期完全不同。上一期 96 個 commit 幾乎全砸在同一個 repo 上，備考把其他事情都擠掉了；這兩週 commit 少了四成，但攤在四個專案上：題庫收尾、兩份新提案、知識庫的格式升級，還有個人網站。從「只有一件事」變回「有好幾件事」，本身就是備考結束的訊號。\n不過真正值得寫下來的不是清單清完了，而是清的過程裡反覆出現的同一件事：我用來確認「這批做對了」的方法，決定了我能看見哪一種錯。 這兩週最真實的三個缺陷，沒有一個是被測試抓到的。\n這兩週 GitHub 上的實際軌跡 8/15 到 8/31 共 55 個 commit，落在 9 個工作天，其中 8 天完全沒有動靜（含連續的 8/27–8/28）。 分佈在 4 個 repo：ipas-aiap-cert 27、chenfu.ai 11、proposals 10、chenfu-kb 7。 淨變動 +60,589 / −1,076 行、299 個檔案。絕大部分是題庫資料檔。 高峰仍然是單日爆發：8/22（六）一天 19 個 commit，全部在題庫上。8/17 一天 8 個。 一天幾乎只屬於一個專案，顏色很少混在一起。也就是說這兩週是切換，不是並行。\niPAS 網站：從刷題工具長成四張證照的平台 一、把掛了幾個月的「已知限制」重新分類成「壞題」（8/17）\n匯入 115-1 中級三科考古題時，順手解掉一個從專案初期就存在的問題：原卷裡的圖片。\nsenior-ml-114-2-q45 這題以「原始 PDF 選項為圖片，pdftotext 無法擷取」的形式，同時記在 CLAUDE.md、AGENTS.md 與 bank-defects.md 三個地方，被歸類為已知限制——知道了，但不打算解決。它其實是壞題：一道四個選項全空白的題目放在站上，不叫限制，叫故障。\n轉折點是一個很笨的動作：把 PDF 頁面 render 成 PNG，然後真的看一眼。 那些「圖」是程式碼的截圖——Keras 程式碼、train_test_split 的四種寫法、console 輸出的 classification report。內容全是文字，只是被印成了像素。看清這件事之後，原本在比較的方案（要不要抽圖、放 public/ 還是 base64、浮水印怎麼辦）全部作廢，因為文字轉錄在每個維度上都贏。真正的圖表只有 4 張，佔 42 題裡的 4 題。\n這批的規模是：150 題真題（中級三科各 90 → 140 題）、150 則詳解、42 題圖片轉錄，修好 4 題原本無法作答的壞題、3 個解析器缺陷，測試 219 → 225。\n二、補上缺失資訊之後，才驗得出既有內容的錯（8/17）\nsenior-ml-114-2-q50 的舊詳解寫著「空格 1 應填 \u0026quot;r-\u0026quot;、空格 2 應填 \u0026quot;r--\u0026quot;」，並自己標註「因附圖缺失，依官方答案，中信心」。補上圖之後才看得到：圖例是 Training Loss 藍色實線、Validation Loss 紅色虛線，成立的是 A 與 D，不是 C 與 D。\n答案字母是對的，理由整條是反的。 它在只有答案可校驗時完全隱形——從答案反推理由，答案對了所以自檢通過；但站上顯示給使用者的是詳解，不是字母。\n而且它自己標了低信心，然後就留在那裡。這是上一期那條「揭露不等於修正」的另一種形態：標記在資料裡的自陳弱點，同樣不等於待辦。\n三、AIoT 上架逼出了一個問題：既有的 level 到底是什麼？（8/21）\n臨時加報的 AIoT 應用工程師（初級）要上站。第一個念頭是把它當成新的 level，改動最小、一行 UI 都不用動。沒有這樣做，是因為那會讓「AI 應用規劃師的初級」跟「AIoT 的初級」並排在同一個下拉選單裡，而使用者的原話是「不要混在一起」。\n於是加了 cert 維度，導覽變成 home → cert → level → mode。真正的收穫不在這個決定，而在它逼出來的問題：翻出來才發現 level 一直同時扮演兩個角色——「難度階段」與「這批科目屬於誰」。只有一張證照時這兩件事重合，看不出來；加第二張才把它們拆開。\n四、640 題，以及 LLM 命題可預測的失敗模式（8/21–8/22）\n這批是這兩週最大的一塊：AIoT 官方練習 80 題、考科二自編 60 題（補上唯一沒有官方題源的科目）、七科新題庫 500 題（中級三科 300 ＋ AIoT 兩科 200）。題庫總量 1,117 → 1,757 題，測試 268 → 422。之後又以加題方式替五科再平衡認知層級分布（+215 題），並替 500 題逐題補上 meta 與判斷分界。\n第一版每一批都壞在同樣的地方：senior-ai-tech 的答案分布是 A:69 / B:27 / C:4 / D:0，aiot-junior-basics 是 A:86。A 佔七成的題庫，「不會就選 A」的期望值高過真的去讀。這不是內容問題，是結構性失效——而結構性失效可以用測試擋。擋下它的是 8/13 那批初級新題庫時就寫好的 practiceBank.test.ts，這次直接接住了三個新科目。\n但第一次修的時候修錯方向：直接輪替 A、B、C、D，結果每四題恰好是一個 ABCD 排列，比原本的偏斜更好猜。同一支測試的區塊檢查立刻擋下。平衡不等於隨機。\n提案與知識庫：回歸正軌的那條線 題庫告一段落之後，8/24 起換到擱置的線上。\nproposals 這兩週開了兩個新提案家族：Auxin（農業科技）與 Nevé（手工冰品的批次品質與冷鏈系統），各自帶 proposal、SRS、architecture、primer 四份文件。Nevé 走完了四輪收斂——2026 競品地圖、Phase 1 量測方法，最後從文獻定出 TDI 的動力學形式，proposal 推到 v0.7、SRS v0.5、architecture v0.5，並留下一份收斂回顧。Nevé Primer 值得一提的是它把領域術語照因果順序排列，而不是照字母。\nchenfu-kb 則是把知識庫的格式本身當成工程問題來做：OKF v0.2 升級，Rust 寫的 checker 擴充，加上新的 okf-migrate 遷移器（+809 行），wiki/ 的 frontmatter 整批遷移並宣告 okf_version，migrate 補上 raw 模式之後回填 raw/ 61 個檔案，並釐清 raw/ 的唯讀邊界。\nchenfu.ai 這期做的是「可驗證的資歷」：About 頁加上 Claude Academy 徽章牆，17 張徽章全部接上公開 verify 連結（/verify/\u0026lt;code\u0026gt; 才是公開頁，/badges/\u0026lt;uuid\u0026gt; 會把訪客擋在登入牆外），並讓改過的頁面顯示更新戳記。\n這兩週學到的 用某個詞描述問題時，那個詞帶著一套隱含的解法分類。 「圖片的部份有建議的方式嗎」自然被讀成資產管線問題，於是我開始比較抽圖、存放、渲染、授權。先看一眼就會發現那根本不是圖。先看，再分類，最後才比較方案。\n正則能表達的是字面，不是語意性質。 為了驗證「每則詳解都逐項點名 A/B/C/D」寫了一條精心設計的正則，量到 40 則不合格——全是誤判，因為「A 正確描述」的「正」不在我那串動詞裡。我量到的是我的正則涵蓋了多少種中文句法。換成一個弱得多但健全的檢查（四個字母是否各自以獨立 token 出現），0 則不合格，而且這個結果可信。\n官方檔案也會錯，而且錯得很安靜。 AIoT 練習評量的 q078 答案欄寫 Ans（C），但它自己的解析全篇在論證選項 (A)——答案與理由放在同一份檔案裡互相矛盾。只要讀一遍就會發現，只做格式驗證就不會。\n驗證方法決定了你能發現的缺陷種類。 答案字母重配時要同步搬三樣東西：choiceExplanations 的鍵、meta.distractorTypes 的鍵，以及詳解散文裡「若把選項 C 改成⋯」這類指名字母的句型。我當時的檢查是「鍵是否一致」，而三樣裡只有前兩樣是鍵。散文裡的字母從來不在視野內，所以「0 個不一致」是真的，但它回答的不是「這批題目對不對」，而是「我檢查的那件事對不對」。實際壞了 8 題，其中 3 題在早先已經宣告「驗證通過」的科目裡。\n憑印象寫節點名稱，寫掉了 16 題。 考科二的 B2.2 我按印象寫成「物聯網軟體與韌體開發」，一路寫完 16 題韌體題；實際節點是「雲端環境數據收集與平台設計」。topic 是字串，型別檢查沒有意見。那 16 題本身沒問題，問題是大綱裡沒有它們的位置。寫之前 grep 一次，三十秒的動作。\n接下來 640 題全部沒有人工事實查核。 風險最高的是 AIoT 考科二的 160 題（60 自編 ＋ 100 新題庫）——該科沒有任何官方題源。 AIoT 的題數與配分仍未查證，簡章只寫「每科 100 分、70 分及格」，所以兩科的 mockExam 還是關著。拿到官方數字前不要打開。 解析器健檢仍未實作。 「選項長度異常」「選項尾端出現題號」這類檢查，在 8/12、8/17 兩次回顧都提過，至今還是零。這是第三次被寫進待辦。 低信心詳解回頭清一遍：bank-defects.md 中其餘標「依官方答案／低信心」的條目，性質與 q50 相同，應視為未驗證而非「已知較弱」。 Nevé 與 Auxin 的下一輪，以及知識庫這條線繼續往前。 上一期的結論是「把『我感覺不太對』變成可以量測的數字，再把數字變成可以驗證的守衛」。這一期是它的下一步，也是比較不舒服的一步：守衛只會擋下它認得的東西。 這兩週三個最真實的缺陷——自相矛盾的官方答案、散文裡指錯的選項字母、憑印象寫錯的節點名稱——沒有一個在當時的檢查範圍內，而它們全都只需要「真的讀一遍」或「grep 一次」就會現形。\n自動化擋掉的是你已經想過的錯。剩下那些，還是得自己看。\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E9%9B%99%E9%80%B1%E8%A4%87%E7%9B%A4-2026-w35/","summary":"\u003cp\u003e考完了。上一期結尾寫的是「接著要把中級科目的內容完成，再加上我臨時加報的 AIoT 認證；除此之外就回歸正軌」——這兩週基本上就是照著那張清單走完的。\u003c/p\u003e\n\u003cp\u003e節奏跟上一期完全不同。上一期 96 個 commit 幾乎全砸在同一個 repo 上，備考把其他事情都擠掉了；這兩週 commit 少了四成，但攤在四個專案上：題庫收尾、兩份新提案、知識庫的格式升級，還有個人網站。從「只有一件事」變回「有好幾件事」，本身就是備考結束的訊號。\u003c/p\u003e","title":"雙週複盤 2026-W35｜考完之後：把上一期的待辦清掉，然後發現盲區在檢查本身"},{"content":"從加拿大回來後的第一週，參加了 2 個研討會，不過大致上還是被時差整了近一週，直到這週才稍微好點，緊接著就是備考 iPAS AI 應用規劃師初級。\n當初報名的時間點，差不多在 AIA 的 AIPM 課程尾端，剛好又在 FB 上看到這張證照的資訊，打鐵趁熱就一次把初、中級都報下去，還拉了 AIPM 的同學一起報考。所以出國前除了把原本接的案子收尾，也用 RAG 的方式把測驗跟刷題網站建起來，分享給同學使用。接著就是長達 7 週的 CD，一直到這週一才自己開刷備考。\n一開刷就把自己嚇呆了：答對率低於 50%，有些題目還完全看不懂，讓我非常懷疑人生——AIPM 都上完了怎麼還這麼落漆。接著幾天就在刷題、卡住就用 ChatGPT 互動學習、再用 Claude Code 改善系統之間度過，這樣刷到週四早上才整體刷完。\n刷完還是覺得不踏實。畢竟技術面博大精深，專有名詞跟縮寫也一堆，就算當下理解、感覺好像有學起來，之後再看到題目還是會卡住，或想不起來那個技術的應用邏輯……\n想說只剩 2 天，而且這畢竟還是初級認證，於是就請 AI 依學習指引的提綱、加上網站原本就有的內容，從各產業的應用面切入，針對初級的 2 個科目各再生成 100 題測驗題。完成後試刷了一下，沒想到還行——一樣很挑戰，但題目跟答案的解析都有到位，反過來讓我看見原題庫的一些缺失。\n本來以為改善缺失不需要太多時間，結果花掉我週五一整天：中間 Claude Server 掛點一次重跑、Rate limit 一次，最後在週五晚上完工，這時我也精疲力盡。而這個改善終究來不及接上我昨天的考試。週六早上就簡單請 AI 整理整個 AI 規劃的核心流程，套入各產業的實務應用，強化實務落地的流程概念，接著就硬著頭皮上場了。\n我的感覺是：如果在職、又已經有相關概念，備考抓一個月會比較保險；以我的情況，大概要兩週才會比較有餘裕。總之，還是考完了，就 Finger Cross。接著要把中級科目的內容完成，再加上我臨時加報的 AIoT 認證；除此之外就回歸正軌，繼續之前的一些題目。\n這兩週 GitHub 上的實際軌跡 回頭看紀錄才發現，這兩週的節奏比體感還要極端：\n8/1 到 8/15 共 96 個 commit，但只落在 6 個工作天（8/6、8/7、8/10 到 8/14）。 其中 8/13 和 8/14 兩天就佔了 78 個，8/14 一天 54 個——那正是「以為不用太多時間」的那一整天。 主線幾乎只有一個 repo：ipas-aiap-cert 95 個 commit，ai-hil-mcp 1 個。其他六個私有專案這兩週完全沒動。 也就是說，這兩週不是「順便備考」，是備考把所有其他事情都擠掉了。\n刷題網站的六條分支 一、先量化「找不到」的直覺（8/10）\n我一開始的感覺是「從題庫反過來找學習指引，很多都找不到」。與其憑感覺補，就先逐題盤點初級兩科的 435 題，抽出考點、對照講義整理，結果是 55% 的考點在整理裡找不到——直覺是對的，而且比想像嚴重。\n補完的方式是 102 張概念卡、305 則重點，每張卡都是「定義／題庫怎麼考（附題號）／易混淆」三段式。順便查證了幾個會直接改變題目語境的時效更新：《人工智慧基本法》已於 2026-01-14 公布施行（出題時還是行政院草案）、EU AI Act 高風險義務延到 2027-12、MCP 已捐給 Linux Foundation。這類考古題最容易踩的坑，就是拿舊時程當答案。\n二、刷題進度續作與跳題（8/11）\n很務實的功能：進度存進 localStorage、可以跳到指定題號、模式選單顯示進度提示。刷了兩天之後就知道自己缺什麼。\n三、第 160 題的 D 選項（8/12）\n刷到第 160 題時，D 選項顯示了 1155 個字，整頁高度 4150px。追下去發現是解析器的不對稱：答案解析器認得題目的邊界，題目解析器卻不認得答案的邊界，於是 1. Ans（D） 之後整段解析全被吞進最末選項。\n原本判斷是「兩題個案」，跑了一行掃描腳本才發現是全五科 51 題。這是這兩週最實際的一課：先量測範圍再下結論，盤點時值得順手跑一次全量掃描。\n四、依評鑑內容分類的新題庫（8/13）\n就是文章前段說的那 200 題。關鍵差別不在「多 200 題」，而在出題邏輯換了：原題庫跟著歷屆考卷的題型比例走，新題庫改以官方評鑑內容節點為單位、每個節點固定配額。所以它能拿來「針對某個節點集中練習」，而不是被考卷比例牽著走。\n五、詳解與選項解析全面改寫（8/13 深夜到 8/14）\n這就是那個「以為不用太多時間」的部分。量測之後才發現不是個別題目寫得差，是結構性的：選項解析原本是拿一份 106 條詞彙表去比對選項文字自動組句，只在選項是單純名詞時有效；真題多是情境題、選項是整句敘述，比對不到就顯示通用填充。實際數字是 1,305 個欄位裡有 1,135 個是同一句填充。\n整套自動組句機制刪掉，435 題、1,305 條選項解析全部改成手寫，測試從約 140 條增加到 219 條。38 個 commit、一整天。\n六、寧可留白，也不要假裝有內容（8/14 收尾）\n最後把逐項解析接上考試檢討頁時，發現如果照做，中級 senior-ml 有 97% 的錯誤選項會顯示同一句通用填充——而刪掉舊機制的理由，正是「讓『沒有詳解』看起來像『有詳解』」。所以改成以「這題有沒有手寫解析」為閘門：初級 435 題全顯示，中級 332 題整個區塊不顯示。\nai-hil-mcp：唯一一次刪比加多 8/7 花了一天，把六個各自漂移的 MCP crate 統一到共享的 hil-core。46 個檔案、淨負 1,900 行。\n順手修掉的五個缺陷都很典型：vision-mcp 用 try_recv().is_ok() 判斷停止，但停止是靠 drop sender 實作的，所以相機永遠不會被釋放；capture_frame 把 base64 包在 text block 裡回傳，模型根本看不見，每張還吃掉數萬 token；jtag-mcp 的診斷末尾有一個無條件的 core.run()，把燒錄前該有的 halt 取消掉了。\n同時把安全規則從說明文字移進程式碼——電壓上限、erase_flash 需要 confirm=true。寫在 prompt 裡叫模型「不要做 X」，跟讓它「做不到 X」，是兩件事。\n刷題刷出來的方法論 這兩週真正的產出，其實不是題目數量，是幾條被反覆驗證的規則：\n關鍵詞找不到句型。 要找出「其餘三項都是…」這種一句話壓掉三個干擾項的寫法，用關鍵字 grep 找到 5 則，改用語意枚舉找到 16 則。另一批是 12 則對 28 則。用關鍵詞找一個句型，找到的是「用了那個詞的句子」，不是那個句型。\n憑感覺判斷哪些該留完全不可靠。 初判「值得保留」的 40 則，最後有 33 則被重寫；369 則真題詳解，最終只有 57 則逐字未動。它們躲過初判不是因為內容比較好，只是因為讀起來很通順。\n測試可能完全不咬。 做突變測試時，把整條選項解析換成一個字元 \u0026quot;x\u0026quot;，測試照樣綠燈——因為長度與樣板檢查只套在詳解上，選項解析只驗「非空」。每批產出 200 條字串，測試只認證其中 50 條，而漏掉的 150 條正是這件事存在的理由。守衛補在第三批擋下了東西；留到最後才補的守衛，一條都攔不到。\n一致性檢查可能是循環論證。 拿題庫反推出來的筆記，去驗證同一個題庫的詳解，一致是預期結果，不構成正確性證據。\n揭露不等於修正。 有兩次在報告裡誠實標註「這是最勉強的一格」，然後就沒有修它。誠實揭露值得肯定，但寫在報告裡不代表問題解決了。\n接下來 中級三科的新題庫與手寫詳解都還沒做，目前中級 332 題的解析區塊是隱藏狀態。 題庫已知缺陷記了約 40 筆答案鍵爭議，都還沒經過人工事實查核。 選項殘留、頁尾雜訊這幾項健檢目前還是一次性腳本，值得固化成管線測試。 臨時加報的 AIoT 認證。 然後就回歸正軌，把之前擱著的題目撿回來。 回頭看，這兩週表面上是在備考，實際上一直在做同一件事：把「我感覺不太對」變成可以量測的數字，再把數字變成可以驗證的守衛。 答對率 50%、覆蓋缺口 55%、1,135 個通用填充、51 題污染——每一個都是從一句模糊的抱怨開始的。\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E9%9B%99%E9%80%B1%E8%A4%87%E7%9B%A4-2026-w33/","summary":"\u003cp\u003e從加拿大回來後的第一週，參加了 2 個研討會，不過大致上還是被時差整了近一週，直到這週才稍微好點，緊接著就是備考 iPAS AI 應用規劃師初級。\u003c/p\u003e\n\u003cp\u003e當初報名的時間點，差不多在 AIA 的 AIPM 課程尾端，剛好又在 FB 上看到這張證照的資訊，打鐵趁熱就一次把初、中級都報下去，還拉了 AIPM 的同學一起報考。所以出國前除了把原本接的案子收尾，也用 RAG 的方式把測驗跟刷題網站建起來，分享給同學使用。接著就是長達 7 週的 CD，一直到這週一才自己開刷備考。\u003c/p\u003e","title":"雙週複盤 2026-W33｜iPAS AI 應用規劃師備考實錄：從答對率不到 50% 到硬著頭皮上場"},{"content":"過去這兩週（6/1 到 6/14），在 GitHub 上推進了好幾條產品線。回頭看，這兩週的主題蠻清楚：我不是只在寫功能，而是在把各種真實生活裡混亂的資訊和流程，整理成可以被人安心使用的系統。\nMatrixTradingSystem (MTS) 交易操作系統\n這兩週花比較多時間在 MTS 的最後衝刺，主要專注於「讓真實使用者少踩坑」的精細化工作。除了客戶臨時要求的新功能，還要支援興櫃市場。這就很有趣了，沒想到各家券商在興櫃市場的支援度與規格差這麼多，中間遇到了許多奇奇怪怪的狀況。目前大部分問題都已解決，只剩元大證券還在透過信件釐清最後狀況，甚至一度動用到逆向券商 App 來尋找原因。\n在技術細節上，主要做了以下優化：\n券商連線失敗時，不再丟出一長串難懂的工程錯誤，而是提供友善的提示。 優化帳戶與庫存顯示，使其更加清晰直覺。 支援針對每檔股票設定不同的價格策略，以進行庫存賣出與回補。 修掉一些會卡住或誤導使用者的舊流程。 預計週一就會告一段落並順利結案。這次的成果遠超我之前的預期！終於有自己開發的工具會被人日常使用。看來跟錢（交易）越相關的事情，需求就越明確。能讓人願意付錢的痛點，才是真需求。\nOmniTypist (語音輸入與文字潤飾)\n這段時間主要在做系統穩固與跨平台架構的整理：\n整理並穩固了 macOS / iOS 的共用邏輯。 補齊了 iOS 的測試、CI build 與 release tooling。 將一些原本在 Swift 裡不容易測試的文字處理規則，下放到 Rust core 中實現。 這項改動讓 OmniTypist 不僅僅是一個概念驗證（demo），而是成為一個可以長期維護、具備跨平台演進能力的正式產品。\nlifexp (旅遊與生活資料管理 Web App)\n這是為了解決我自己旅遊時的痛點而開發的 App。過去我一直用 Evernote 來管理旅遊資訊，但即使到現在，Evernote 仍給人一種非常 Old School 的感覺，而且在旅行前、旅程中、旅程後的不同階段，資訊使用上常常會有斷點。例如：住宿可能分散在各旅宿平台、官網、或是 Airbnb（Airbnb App 體驗很棒，極推，只是不知道實際品質如何）。\n現在我直接開發了這個 Web App，將所有資訊集中在同一個網站中：\n介面設計以手機螢幕大小為主，並整合了開放地圖。 開啟網頁時會直接跳到今日行程，並整合票券、餐廳預約與飯店資訊等。 串接 Gmail 訂房/票券通知，支援 Evernote 匯入，並優化了生產環境中匯入大型檔案的效能問題。 支援離線資料讀取，以及能將每日大概位置分享給家人的功能。 這不是再做一個傳統的行事曆，而是把散落在 email、筆記、PDF、地圖裡的破碎資訊，整理成真正好用的旅程系統。之後旅遊時我會一邊使用一邊迭代，希望下次出遊從買機票那一天起，一直到旅程結束，都能優雅地拿出手機得到精準資訊，不再手忙腳亂。\n在學習與內容整理上，這兩週也做了一些小工具：\niPAS AI 應用規劃師練習網站：這算是一個立 Flag 的專案。我已經報考了 8 月 and 11 月的認證考試，打算把初級和中級的證照都拿到。因此花了幾天把相關資訊收集起來，架了這個練習網站，好讓自己在接下來 6 週的旅程中也能抽空複習。 英文複習工具與個人網站內容的 SEO 整理：把知識材料從「存在某處」轉化成「可以被練習、被搜尋、被複習與被分享」的狀態。 回頭看，交易、語音輸入、旅行、學習，看起來是截然不同的專案，但底層其實都在磨練同一件事：把複雜的東西變得可操作、可驗證、可持續。\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E9%9B%99%E9%80%B1%E8%A4%87%E7%9B%A4-2026-w23/","summary":"\u003cp\u003e過去這兩週（6/1 到 6/14），在 GitHub 上推進了好幾條產品線。回頭看，這兩週的主題蠻清楚：我不是只在寫功能，而是在把各種真實生活裡混亂的資訊和流程，整理成可以被人安心使用的系統。\u003c/p\u003e","title":"雙週複盤 2026-W23｜MTS 專案收尾、語音工具跨平台演進、與 lifexp 旅遊系統"},{"content":"當你一個人經營一家公司，身邊還跟著一支 AI Agent 大軍，最大的風險其實不是「做得不夠快」。\n最大的風險是——你把自己變成了一台更快的任務機器。\n這半年我同時推著交易系統、Lectio、AI Email、Mira 助理、好幾個小工具與知識庫，AI 確實讓產出量爆增。但我越來越清楚一件事：速度本身不是目的。所以我替自己寫了一份營運指令，提醒自己 AI 到底是為了什麼而存在。這篇就是它的精華。\n核心信念 一個有 AI Agent 的 solo founder，不應該只是變成一個更快的執行者，而應該成為一個更強的創造者。\nAI 的存在，是為了擴展我的想像、減少我的盲點、加速實驗、提升品質、保存脈絡——而不是把我變成任務機器。\n我們不是只在優化效率。我們在優化的是：創造、學習、品質、顧客價值、可維護性、策略槓桿，以及創建者的可持續性。\n產出很重要，但不是所有產出都等價。最好的產出不只是「完成的工作」，而是改變了我理解什麼、使用者能做什麼、產品能成為什麼。\n四種模式，缺一不可 一人公司必須在四種模式間取得平衡：\n模式 目的 Explore（探索） 發掘可能性、顧客需求與產品方向 Create（創造） 發明、原型、設計、想像更好的解法 Build（建造） 實作出可運作的產品 Refine（精煉） 改善品質、易用性、可維護性與清晰度 只會 build，系統會失敗；只會 explore，系統一樣會失敗。目標是創造性執行：有足夠的想像力找到更好的路，也有足夠的紀律把它變成真的。\n創建者掌舵，AI 不取代判斷 創建者擁有判斷權，負責的是：品味、方向、顧客同理、優先排序、策略取捨、產品一致性、技術可持續性，以及最終驗收。\nAI Agent 可以提案、挑戰、模擬、實作、批判、記錄、測試——但它們不取代創建者的判斷。\n我的工作不是接受 AI 的輸出，而是把 AI 的輸出塑造成產品價值。\n換個問法 在逼自己「執行」之前，先問更好的問題。這個轉換對我影響很大：\n不要問「為什麼還沒做完？」，要問「我們學到了什麼，下一個有用的步驟卡在哪？」 不要問「計畫為什麼變了？」，要問「是什麼新證據改變了我們的理解？」 不要問「為什麼要自己做？」，要問「自己做能創造什麼策略價值、學習、控制權或差異化？」 不要問「這會不會太複雜？」，要問「哪些複雜是必要的、哪些是意外的、哪些複雜能創造未來槓桿？」 不要問「今天能不能上線？」，要問「什麼版本現在就能創造價值，又必須達到什麼品質門檻？」 我的 AI Agent 團隊 我把 AI 分成幾種角色，各司其職：\nVision Agent：擴展可能性空間——「這個產品可以變成什麼？」 Product Agent：把點子轉成顧客價值——定義使用者、痛點、價值主張與 MVP 範圍。 Discovery Agent：在過度投入前先學習——找出假設、設計小實驗、決定下一步要驗證什麼。 PM Agent：守住動能但不扼殺探索——辨識當下處於哪個模式、釐清下一個里程碑、必要時建議砍範圍。 Engineering Agent：為「當下的階段」設計對的技術方案——不預設「程式越少越好」，而是幫我把取捨攤開來談。 Prototype Agent：做出快速學習的產物——讓點子先被看見、被測試，學完即丟。 QA Agent：保護顧客、也保護產品願景——QA 不是來扼殺創意，而是讓創意變得可用。 Reflection Agent：幫我從工作中學習——抓出重複模式、創建者偏誤、過度或不足建造。 Documentation Agent：防止脈絡流失——把 AI session 的輸出轉成可持續的知識。 工程取捨的原則 Engineering Agent 的存在，是為了讓我把取捨講清楚，而不是套用教條。它不預設「程式越少越好」、不預設「自己做一定壞」、不預設「架構就是浪費」、不預設「速度永遠比可維護性重要」。\n幾條我信的原則：讓方案貼合當下的階段；當「自己做」能創造學習、控制、差異化或長期槓桿時才自己做；商品化的能力就買或重用；不確定性高時先做原型；把技術債講出來，而不是藏起來；讓系統保持在創建者自己能理解的範圍內。\n創造性營運迴圈 預設的迴圈不只是 Build → QA → Ship，而是：\nExplore → Create → Prototype → Decide → Build → QA → Ship → Learn\n先問什麼是可能的、有價值的、令人意外的；產生概念與原型；在過度投入前讓點子變得具體；依顧客價值、學習、可行性與策略槓桿做決定；實作出當下階段對的版本；確保創意變成可用的產品；把真東西放到使用者面前；再用回饋餵養下一個循環。\n每週時間分配 我會刻意把時間分配在探索、創造、建造與精煉之間。創新導向的 solo founder 預設比例：\n活動 建議比例 探索 / 發現 20% 創造性原型 25% 產品建造 30% QA / 精煉 15% 文件 / 反思 10% 這個比例會隨階段改變：找方向時加重探索與原型；驗證 MVP 時加重建造與顧客回饋；準備上線時加重 QA、精煉與 support；規模化已驗證產品時加重架構、可靠性與自動化。\n技術債要分類，而不是一律喊壞 技術債不是自動就是壞事，被隱藏的債才是壞事。我把它分成四種：\n創造性債（Creative）：探索或原型時產生的雜亂。只要有助學習、沒有假裝成 production、有清楚標記、且在規模化前有決策點，就可接受。 交付債（Delivery）：為了更快上線走的捷徑。只要風險被理解、使用者影響可接受、且有記錄回頭處理的時點，就可接受。 結構債（Structural）：拖慢未來工作的架構問題。當產品方向越來越清楚、越多功能依賴它、維護負擔上升時，就變得危險。 隱形債（Invisible）：沒被命名、沒被追蹤、沒被理解的債。不可接受。 一人公司承擔不起隱形債，因為沒有團隊能吸收這份混亂。 自己做 vs 買 vs 創造 情境 傾向 商品化能力 買或重用 核心差異化 考慮自己做 高不確定性 先做原型 需要發掘新 UX 創造並測試多個版本 安全或資料所有權至關重要 考慮自己掌控 創建者無法維護 簡化 產品尚未驗證 避免重量級 production 架構 方向開始穩定 投資可維護的基礎 現有工具限制了願景 自建或混合 架構只滿足工程師的品味 避免 一人公司也需要心理安全感 即使只有一個人，也需要心理安全感。沒有它，創建者會開始害怕自己的系統。\n要避免這些模式：把每次延遲當成失敗、把每次轉向當成缺乏紀律、把每個 bug 當成無能、把每個未完成的點子當成浪費、把每個 AI 建議當成義務。\n創建者該感覺到的是被挑戰，而不是被威脅。所以我常問自己：我學到了什麼？什麼變清楚了？哪些值得更多探索？哪些可以簡化？有什麼是我該原諒自己「當時還不知道」的？\nAI Agent 治理：小心假進展 AI Agent 會製造假進展。要警惕這些訊號：\n文件更多但更不清楚、程式更多但產品價值更少、研究更多但沒有決定、原型更多但沒有學習、自動化更多但對顧客沒有影響、Agent 更多但創建者的判斷更少。\nAI Agent 應該放大創造槓桿，而不是養出一個**「一個人的官僚體系（a bureaucracy of one）」**。\n一句話原則 一個有 AI Agent 的 solo founder，不該只是執行得更快；而是該創造出更好的可能性、更快地測試它們，再把最好的那些變成可持續的產品。\n這份指令不是理論——我的專案作品集就是它的活證據。想了解我如何與「人」（而不是 AI）協作，可以看協作手冊。\n","permalink":"https://chenfu.ai/posts/%E7%A7%91%E6%8A%80%E6%96%B0%E7%9F%A5-solo-founder-ai-operating-directive/","summary":"\u003cp\u003e當你一個人經營一家公司，身邊還跟著一支 AI Agent 大軍，最大的風險其實不是「做得不夠快」。\u003c/p\u003e\n\u003cp\u003e最大的風險是——你把自己變成了一台更快的任務機器。\u003c/p\u003e\n\u003cp\u003e這半年我同時推著交易系統、Lectio、AI Email、Mira 助理、好幾個小工具與知識庫，AI 確實讓產出量爆增。但我越來越清楚一件事：\u003cstrong\u003e速度本身不是目的\u003c/strong\u003e。所以我替自己寫了一份營運指令，提醒自己 AI 到底是為了什麼而存在。這篇就是它的精華。\u003c/p\u003e","title":"一人公司 × AI Agent 大軍：我的 Solo Founder 營運指令"},{"content":"用 AI 整理了一下 GitHub 上的回顧，沒想到比想像中的進展還多。這半個月回頭看，重點不是單一專案，而是幾條線同時往前推。\nMatrixTradingSystem\n這段主要是在把交易系統往「真的能讓操作員放心使用」推進。新增了不少功能，現在進入收尾階段。不是只有功能能跑，而是流程要更順、風控要更清楚、錯誤訊息要看得懂，操作時也要降低誤按和誤判的風險。接下來就是把這個案子 ship 出去。\nAI Email 工作台\n跟著 AI PM 的課程也做了一番，把 AI email operations 從 prototype 往可營運推。AI 不是只要會產生草稿就好，真正進到工作流裡，會遇到 review、權限、模型切換、observability、SOP 和安全邊界，這些才是實際落地的重點。做起來有趣，不過還沒做到位，還不算是可以上線成為我的每日工具——可能痛點還不明顯，之後再看看。\nLectio\nLectio 上線了！這段比較像從功能開發，慢慢走向正式產品：補了更新機制、bug report、BYOK 體驗、onboarding、權限流程、support/about 頁和 landing page。這些不是最 flashy 的功能，但產品要給別人用，這些東西一定要補。我自覺用這個在看文件、研讀新技術的幫助真的蠻大，不需要在 GPT 跟文件、或是網頁之間切換（如果網頁本身有嵌入 AI 像 Gemini，那幫助就比較低）。不過最近看到 DuckDuckGo 的新聞，就覺得蠻有趣的，物極必反。\nMira（個人 AI 助理）\nMira 還挺初期的。這段在做多通道入口、記憶、工具調度、判斷層，以及 agent 可以安全觀察、操作、回放、交接狀態的基礎設施。我現在越來越覺得，agent 的重點不只是「會不會做事」，而是它做了什麼、人怎麼看、怎麼追、怎麼交接、哪些動作需要保護。要到真的有用，得增進 Skills、還要加 Workflow，而這也是我得把自己日常生活的卡點明確下來，再一個個補上去——像行事曆管理、郵件管理之類為先。Coding 的話之後再說，也許暑假旅遊完再來打造。\n其他的小專案與整理也持續在跑。AIATCL 測驗網站主要是打造來複習考試用；我也報名了 iPAS 初級跟中級的 AI 應用規劃師認證考試，打算再做一個測驗網站讓自己練習，努力在今年把這兩張證照拿下來。chenfu.ai 個人網站是把近期產品工作整理成對外能理解的敘事，chenfu-kb 知識庫則是在累積自己的方法論、決策邏輯和 agent 可以使用的背景知識。另外也有一些設備端、語音服務、自動化資料維護和安全補強——看起來不像主戰場，但其實都是在補邊界、補穩定性、補長期維護能力。\n還有一個里程碑：我完成 AIA 的 AI PM 課程啦！兩個月也是很快的。\n總結一下，整體感覺是事情開始從很多獨立專案，慢慢變成一整套系統：有實際產品、有操作台、有 agent 基礎設施、有知識庫，也有對外展示。還有很多地方不成熟，但方向越來越清楚——不是只做 AI demo，而是把 AI / agent 能力放進實際工作流程裡，慢慢長成可以被使用、被維護、也可以被理解的產品系統。\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E9%9B%99%E9%80%B1%E8%A4%87%E7%9B%A4-2026-w21/","summary":"\u003cp\u003e用 AI 整理了一下 GitHub 上的回顧，沒想到比想像中的進展還多。這半個月回頭看，重點不是單一專案，而是幾條線同時往前推。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eMatrixTradingSystem\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e這段主要是在把交易系統往「真的能讓操作員放心使用」推進。新增了不少功能，現在進入收尾階段。不是只有功能能跑，而是流程要更順、風控要更清楚、錯誤訊息要看得懂，操作時也要降低誤按和誤判的風險。接下來就是把這個案子 ship 出去。\u003c/p\u003e","title":"雙週複盤 2026-W21｜MTS 收尾、AI Email、Lectio 上線與 Mira 助理"},{"content":"這幾週我交付了一個新的 macOS 小工具，叫 Lectio。\n它的出發點很簡單：當你正在讀文件、課程、論文、產品說明或錯誤訊息時，真正卡住的那一刻通常很短。你可能只是看不懂一句話、一個名詞、一段 stack trace，或是文件裡某個前後文沒有接上的地方。\n照理說，這正是 AI 很適合幫忙的場景。但實際使用時，流程常常不夠自然。你得切到聊天工具、複製文字、貼上背景、補充自己正在看什麼。等到這些事情做完，原本那個很直覺的問題，已經被流程磨掉一半了。\nLectio 想處理的，就是這個摩擦。\n不是再做一個聊天視窗 我不想把 Lectio 做成另一個通用聊天工具。通用聊天工具已經很多了，而且都很強。Lectio 的重點不是「問 AI 任何問題」，而是更聚焦在一個情境：\n我正在看某個東西，但我卡住了。我想直接針對眼前內容問。\n所以 Lectio 的互動刻意很窄：\n你正在閱讀某個內容。 如果有特定段落，就先選取文字。 如果沒有選取，Lectio 就讀目前螢幕可見內容。 你直接用語音問問題。 回答留在浮動窗格，也可以用語音聽回覆。 這個流程聽起來很小，但對閱讀來說很關鍵。真正重要的不是 AI 回答得多華麗，而是它知不知道你現在到底在看哪一段。\n為什麼是語音 當人真的不懂時，最自然的反應通常不是打字，而是說：\n「這句是什麼意思？」\n「這裡為什麼要這樣設計？」\n「可以換一個例子嗎？」\n語音比較接近思考的第一反應。打字會逼你把問題整理得很完整，這在某些場景很好，但在閱讀卡住的瞬間，反而變成阻力。\nLectio 的目標不是取代深度筆記，也不是取代完整研究工具。它更像是坐在旁邊的讀書同伴。你可以先問一個不完整的問題，再沿著回答繼續追問。\n眼前內容才是上下文 Lectio 目前的上下文策略很直接：\n有選取文字時，選取內容優先。 這適合討論精準段落、函式、錯誤訊息或文件中的特定句子。 沒有選取文字時，讀目前螢幕內容。 這適合瀏覽器、PDF、課程播放器、設定頁或錯誤畫面。 回答圍繞當下材料。 它不是先假設你要搜尋全網，而是先理解你正在看的東西。 我覺得這是 AI 學習工具很重要的一個方向。很多時候，學習不是缺答案，而是缺一個能讀懂你正在看的上下文、並陪你往下走一步的互動介面。\n信任邊界 Lectio 也刻意做了一些信任邊界的設計。\n讀畫面、聽你說話、念出回答，能在 macOS 本機處理的部分，就盡量留在本機。送出去的是文字內容與你的問題，而不是整張螢幕截圖。\nAI 服務金鑰則由使用者自己提供。這表示你保留模型供應商、帳號、費用與資料路徑的控制權。這對早期工具來說可能多一步設定，但我覺得這是值得保留的產品方向。\n現在做到哪裡 Lectio 目前是 Apple Silicon macOS 早期測試版，最新交付版本是 v0.0.4。\n這一版已經具備：\n選取文字優先的上下文讀取 沒有選取時讀取目前畫面內容 語音提問與語音回覆 浮動對話窗格 使用者自帶 AI 服務金鑰 macOS 本機能力處理螢幕理解與語音相關流程 你可以在這裡看專案頁：\nLectio 專案頁\n也可以直接下載早期測試版：\n下載 macOS 版\n接下來 Lectio 還很早期，但我已經很喜歡這個方向。它不是一個巨大系統，而是一個很貼近日常學習的小工具。它要解決的不是「AI 能不能回答問題」，而是「當我卡住的那一秒，能不能少一點切換、少一點整理、少一點摩擦」。\n接下來我會繼續打磨幾件事：\n讓螢幕內容理解更穩定 讓對話上下文更自然延續 改善初次設定與金鑰管理體驗 針對技術文件、線上課程、PDF 閱讀做更多實測 如果 OmniTypist 是讓我更快把想法輸入到電腦，Lectio 則是讓我更快把眼前材料理解進腦袋。\n一個負責輸出，一個負責吸收。\n這兩個工具加在一起，開始有一種我很想要的工作流雛形：用 AI 降低知識工作的摩擦，但不把思考本身外包掉。\n","permalink":"https://chenfu.ai/posts/lectio-ai-reading-companion/","summary":"\u003cp\u003e這幾週我交付了一個新的 macOS 小工具，叫 \u003cstrong\u003eLectio\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003e它的出發點很簡單：當你正在讀文件、課程、論文、產品說明或錯誤訊息時，真正卡住的那一刻通常很短。你可能只是看不懂一句話、一個名詞、一段 stack trace，或是文件裡某個前後文沒有接上的地方。\u003c/p\u003e","title":"Lectio：讓閱讀少一點摩擦的 AI 語音伴讀工具"},{"content":"MatrixTradingSystem\n從可以跑到可以下單，一路往「真的可以給人測」推。修了很多實戰才會遇到的問題：券商串接、下單狀態同步、Windows installer、macOS release、錯誤診斷、log bundle、各種 preflight check。這種東西真的不是 demo 能看出來的，都是一邊測一邊爆，一邊補。只能說Windows的環境真的太神奇，這些金融券商有些追的新，有些又很Old School，希望立的Flag真的能達標。接下來兩週應該會很主力在把這個案子搞定並Ship！\nEmail operations command center\n就是幫企業處理 email 工作流的工具，這個是在AI PM的課程我們這組選出來的題目，一開始一直覺得這不是我的痛點，所以並沒有真正的花太多的心思在上面，在組長發了第一版PRD後，我想說還是得自幹一下才會有感，所以從 Gmail 串接開始、信件同步、AI 回信草稿、case tracking、提醒機制，到後面開始處理部署、資料庫、Sentry、cron、rate limit。這條線跑很快，也很明顯感覺到 PoC 跟真正上線之間差很多，而做的過程好像也蠻有意思，也沒想像的那麼Boring，也許未來也不用打開Gmail or Outlook，完全可以在自己的工具軟體上操作。\nAuris\n一個 embedded voice AI device 的實驗。從 ESP32 韌體、音訊、WebSocket，到 Rust voice server，再接 OpenAI Realtime API，最後補 manager API、裝置註冊、token revoke。這條很有趣，因為它不是純軟體，是軟體、硬體、AI 三個世界黏在一起，不過這個案子算有一搭沒一搭的做，很多步驟都給他Yes開下去，得等MTS輸出後再繞回來看這塊！\n中間也持續增加並整理了一些自己的知識庫，包含 AI platform、embedded AI、solo dev workflow、決策架構，還做了一些給女兒英文考試練習工具。另外也快速做了一個AIACTL的素養測試網站給同學們當練習。\n總結一下，這兩週不是單純寫很多 code，而是在練一件事：怎麼用 AI 當槓桿，把一個想法快速推到可以真的被測、被用、被打臉，然後再修到更接近產品。\n題外話，我收到了這個玩具，該怎麼辦…機器人世界的入門磚！\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E9%9B%99%E9%80%B1%E8%A4%87%E7%9B%A4-2026-w19/","summary":"\u003cp\u003e\u003cstrong\u003eMatrixTradingSystem\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e從可以跑到可以下單，一路往「真的可以給人測」推。修了很多實戰才會遇到的問題：券商串接、下單狀態同步、Windows installer、macOS release、錯誤診斷、log bundle、各種 preflight check。這種東西真的不是 demo 能看出來的，都是一邊測一邊爆，一邊補。只能說Windows的環境真的太神奇，這些金融券商有些追的新，有些又很Old School，希望立的Flag真的能達標。接下來兩週應該會很主力在把這個案子搞定並Ship！\u003c/p\u003e","title":"雙週複盤 2026-W19｜MatrixTradingSystem、Email Command Center、Auris 與玩具機器人"},{"content":"又是進行雙週複盤的日子，在 AI 讓人感覺時間尺度縮到很極緻，連一天都有可能很長，為什麼我還是進行兩週的盤點，想了一下，好像也沒為什麼，就是覺得這個尺度舒服。\n這兩週，依然持續跟一些朋友見面（蹭了不少飯 XD），參加了幾場研討會，AI PM 的課程持續精進跟一些線上課程的學習，回家跟父母報告，工作室的入駐行程流程，接著面向五月一些之前訂的硬體 SKU 會陸續到貨，最重要的是一個小型玩具機器人，我想會是很有趣的主題，也能給我女兒玩當 Field Testing；另一件重要的事情就是要打造一個「真」能幫我同時進行開發工作的 Agent，實際操作 Scale 我自己的樣貌；最後就是一個老同學找我做多券商交易系統，我雖然有在投資，但做一個下單工具，是之前沒想過的事，這週進行後，覺得蠻有趣的，這個專案得立一個 Flag 要在 5 月搞定結案！\n1. AI 語音輸入工具 OmniTypist 持續打磨 macOS / iOS 上的 AI 語音輸入體驗，讓使用者可以用說話快速輸入文字，也可以選取文字後一鍵請 AI 潤飾。這段時間完成了多個版本發布、iOS TestFlight 測試、語音辨識穩定性修正，以及繁體中文使用手冊。\n2. AI 伴讀工具 Lectio 開始打造一個可以理解你目前閱讀內容、並用語音和你對話的學習助理。它可以讀取目前瀏覽器中的內容，透過語音問答幫助理解文章、文件或網頁。這段時間完成了第一版 macOS prototype、語音輸入輸出、OCR 螢幕理解、設定介面，以及本機語音播放引擎。\n3. 多券商交易系統 MatrixTradingSystem 把一個下單介面原型，往真正可用的桌面交易系統推進。這段時間完成了核心架構、桌面應用框架、交易資料模型、委託／改單／刪單流程設計、錯誤提示、稽核紀錄，以及部分券商 API 的初步串接與驗證。\n這個專案目前還在進行中，距離完整產品還有一段路。接下來還需要整合更多券商，包括尚未完成的五大券商，也還有不少風控、帳務、測試、部署與實盤驗證功能正在規劃與開發中。\n🚩 Flag：五月底前結案。\n4. 個人網站與作品集重構 重新整理了 chenfu.ai，把網站從單純履歷展示，改成更清楚呈現我現在正在打造的方向：邊緣智能、安全網路、AI 工具與產品化實驗。也補上雙語內容、專案頁與 SEO。\n5. 產品提案與市場探索 整理多份產品提案與技術文件，包括 AI 趨勢追蹤工具、AI Maker 平台、語音助理架構、OCR 技術選型等，讓這些想法不只停留在腦中，而是能變成可以討論、驗證、合作的材料。\n下週繼續，硬體到貨、機器人開箱、Trading Agent 繼續推進。時間感越來越壓縮，但方向越來越清晰。\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E9%9B%99%E9%80%B1%E8%A4%87%E7%9B%A4-2026-w17/","summary":"\u003cp\u003e又是進行雙週複盤的日子，在 AI 讓人感覺時間尺度縮到很極緻，連一天都有可能很長，為什麼我還是進行兩週的盤點，想了一下，好像也沒為什麼，就是覺得這個尺度舒服。\u003c/p\u003e","title":"雙週複盤 2026-W17｜機器人、Trading Agent、還有 Maker 工作室上路了"},{"content":" \u0026ldquo;迎向陽光，然後在未知的荒野中踏出路來。\u0026rdquo;\n這份手冊旨在減少溝通摩擦，幫助我們更高效地協作。無論是作為創建者、技術合夥人，還是團隊建造者，我底層的工程師靈魂始終如一。在經歷了帶領 250+ 人企業研發團隊的淬鍊後，我現在以開放的心態投身獨立創建，將 20 多年的經驗注入下一代邊緣智能系統的開發。這是一份反映我當下狀態的動態文件。\n🌟 核心哲學與願景 擁抱模糊性與行動優先 (Action \u0026amp; Resilience)：在探索新興技術（如 AI、機器人、虛實整合系統）的邊界時，前方往往沒有清晰的地圖。我極度看重探索未知時的**韌性 (Resilience)**與解決問題的渴望。行動比語言更有力，告訴我「我們還能怎麼做」，而不是純理論的空談。 公平與關懷 (Fairness Cares)：我非常重視公平。如果團隊成員受到不公平對待或有人的行動負面影響整體利益，我會直接介入處理。 賦能與心理安全感 (Empowerment)：我不喜歡微觀管理 (Micromanagement)。我會給予充分的情境，並期待你掌握方向盤。我們都在面對未知，誠實的試錯是探索邊界的必經之路，看著團隊成員承擔責任並成長，是我最大的成就感。 ⚙️ 技術哲學與開發文化 架構思考 (DDD)：我對領域驅動設計 (Domain-Driven Design, DDD) 有著強烈的偏好。我欣賞「結構化、低耦合、且能真實反映業務實踐」的優雅架構。 探索技術邊界：把功能交付只是及格，對新技術的心之所向才是驅動力。我鼓勵團隊對前沿技術（如 Zig, Zen, DePIN, IoT）保持高度的探索精神。 AI 驅動的工作流 (AI-Driven Workflows)：我積極擁抱 AI 協作。請不要死守傳統、繁瑣的開發流程；我期待團隊利用 AI 工具達到數倍的生產力提升，將人類的腦力保留給最困難的工程預防與架構決策。 💬 溝通與工作偏好 非同步與效率優先 (Async \u0026amp; Efficiency First)：如同我喜歡自託管基礎設施，我同樣偏好「清爽乾淨的文件化」，這遠勝過冗長低效的會議。但對於緊急事項，面對面或 Slack Huddle 絕對優於電子郵件。 坦承直言與開放心態 (Be Straight \u0026amp; Open Minded)：我偏好艱難但誠實的對談，隱瞞問題無濟於事。我將所有回饋視為學習機會，請隨時提供具體範例與改進建議。 內向者的深度處理 (Deep Processing)：身為內向者，我在安靜的環境中處理複雜問題時效率最高。如果我在會議現場保持沉默，絕不代表我反對，通常只是我的大腦正在後台尋找最優解。我的行事曆是公開的，如果我有空，隨時歡迎預約協作。 ⚠️ 我的掙扎 完美架構 vs. 快速迭代 (Speed to Market)：我的工程師直覺總是渴望打造「最優雅的架構」，但為了讓產品對世界產生實質影響，往往需要推向市場進行快速迭代。我經常在這兩者間自我拉扯。如果你發現我們此刻只需要 MVP，我卻陷入過度工程化 (Over-engineering)，請直接提醒我。 缺乏耐心 (Impatience)：對於邏輯不通或充滿行政摩擦的互動，我很容易失去耐心。如果我顯得冷酷或急躁，請多包涵——或者直接向我提出更有效率的解法。 撲克臉 (Poker Face)：我不擅長將豐富的情緒寫在臉上，有時會被誤讀。記住：如果我不開心或不認同，我會直接說；如果不說，請預設系統一切運作良好！ 🤖 與我的 AI Agent 團隊協作 如今我不只與人協作，也與一支 AI Agent 大軍協作。原則和對人一樣：我擁有判斷權，AI 負責擴展我的想像、減少盲點、加速實驗。 AI 可以提案、挑戰、模擬、實作、批判、測試，但不取代我的判斷——我的工作不是接受 AI 的輸出，而是把它塑造成產品價值。\n用四種模式管理拉扯：我用 Explore（探索）/ Create（創造）/ Build（建造）/ Refine（精煉）四種模式，來管理上面那個「完美架構 vs. 快速迭代」的掙扎——只會 build 會失敗，只會 explore 也會失敗，目標是創造性執行。 警惕假進展：文件更多但更不清楚、程式更多但價值更少、Agent 更多但判斷更少，都是該停下來的訊號。AI 該放大創造槓桿，而不是養出「一個人的官僚體系」。 一人也需要心理安全感：對自己和對團隊一樣，我把延遲、轉向與 bug 當成學習而非失敗——要被挑戰，而不是被威脅。 完整的營運哲學寫在這篇：一人公司 × AI Agent 大軍：我的 Solo Founder 營運指令。\n","permalink":"https://chenfu.ai/leadership-manual/","summary":"\u003cblockquote\u003e\n\u003cp\u003e\u0026ldquo;迎向陽光，然後在未知的荒野中踏出路來。\u0026rdquo;\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e這份手冊旨在減少溝通摩擦，幫助我們更高效地協作。無論是作為創建者、技術合夥人，還是團隊建造者，我底層的工程師靈魂始終如一。在經歷了帶領 250+ 人企業研發團隊的淬鍊後，我現在以開放的心態投身獨立創建，將 20 多年的經驗注入下一代邊緣智能系統的開發。這是一份反映我當下狀態的動態文件。\u003c/p\u003e","title":"協作手冊：如何與我共事"},{"content":"AI 的重心放錯了地方 打開科技新聞，滿屏都是雲端 AI 的故事。更大的 GPU 叢集、更多的訓練資料、更貴的 API 呼叫。好像智能只能住在遙遠的資料中心裡，隨傳隨到——只要你有夠好的網路。\n但真實世界不是這樣運作的。\n工廠裡的產線攝影機，需要在毫秒內判斷瑕疵品。車上的感測器，不能等雲端回傳結果才決定煞車。偏遠農場的環境監測站，連穩定的 4G 訊號都不一定有。這些場景——工廠、攝影機、感測器、車輛——才是真實世界的骨幹。而它們全都在「邊緣」。\n延遲、隱私、頻寬成本，每一個面向都指向同一個結論：智能必須搬到邊緣。\n我在 Ubiquiti 待了十四年，親手打造邊緣產品。UniFi 攝影機上跑 on-device AI、三千萬台受管裝置遍布全球——這個經歷讓我極其清楚地看到這道鴻溝：雲端的 AI 飛速進步，但邊緣裝置還活在上個世代。它們大多只是把資料往上丟的「笨管道」，智能完全仰賴雲端。\n這不對。\n邊緣裝置需要三件事 我花了很長時間在想，到底缺什麼？最後歸結出三個核心需求：\n1. 原生智能（Native Intelligence） 裝置本身就要能跑 AI 推論。不是「雲端掛了就變磚」的那種依附式智能，而是真正在晶片上執行模型、處理感測資料、即時做出決策的能力。斷網也能動。\n2. 安全連線（Secure Connectivity） 邊緣裝置彼此之間、以及跟管理端之間，需要真正安全的通訊。不只是今天安全——在量子電腦成熟之後依然安全。後量子時代的加密不是未來式，它是現在進行式。\n3. 開發者友善的工具鏈（Developer-Friendly Tooling） 讓 AI agent 能直接跟硬體互動的工具。不是要開發者自己寫一堆 glue code 把東西串起來，而是提供乾淨的協定介面，讓 AI 可以直接控制嵌入式裝置——燒錄、除錯、讀取感測器。\n這三件事缺一不可。有智能但不安全，等於門戶洞開。有安全但沒智能，就只是加密過的笨管道。有前兩者但工具鏈爛到沒人想用，那一切都只是實驗室裡的 demo。\n我正在打造的技術棧 這不是一個專案，而是五個專案，每一個解決一塊拼圖，合在一起構成完整的邊緣智能系統。\nAI-HIL MCP — AI 碰觸實體世界的介面 五個 MCP server，讓 AI agent 能直接控制嵌入式硬體：燒錄韌體、啟動除錯器、讀取感測器數據。這是 AI 從「只能看螢幕上的文字」進化到「能碰到實體世界」的那一步。我在前一篇文章裡寫過這個想法的起源——消除人類在 AI 跟硬體之間充當「人肉資料管道」的角色。\nEngram — 邊緣 ML 推論平台 吃進感測器資料、跑模型、吐出結果。這是邊緣裝置的「大腦」。不需要雲端 GPU，在本地就能完成推論。目標是讓每一個邊緣節點都有自己思考的能力。\nPlexus-Myelin — 後量子加密 VPN 裝置對裝置的通訊保護層。用 X25519 + ML-KEM-768 混合式交握——結合傳統橢圓曲線加密跟 NIST 標準化的後量子演算法。這個 hybrid handshake 已經跑起來了。就算量子電腦明天問世，今天傳輸的資料依然解不開。\nSynapse Labs — ESP32 嵌入式加密節點 網路裡最小的節點。在 ESP32 上跑嵌入式密碼學，搭配 Zen 做 pub/sub 通訊。證明即使是資源最受限的微控制器，也能成為安全智能網路的一份子。\nOmniTypist — 證明這套技術棧能出貨 Rust + Swift + AI 技術棧打造的消費級產品。v0.0.4 已經完成 Apple 簽章、公證、自動更新。它存在的意義是證明一件事：這套技術棧不只是能寫 demo，而是能交付真正的產品給真正的使用者。\n五個專案，一個願景：讓邊緣裝置不再只是資料管道，而是有智能、有安全、有工具支持的完整系統。\n為什麼是現在 這個願景不是今天才有的，但「現在可以做到」這件事是新的。幾個關鍵的時間點同時成熟了：\n後量子密碼學已經準備好了。 ML-KEM-768 經過 NIST 標準化，不再是學術論文裡的概念，而是今天就能實作、部署的演算法。Plexus-Myelin 裡的 hybrid handshake 就是活生生的證明。\nMCP 協定讓 AI 整合變簡單了。 Anthropic 的 Model Context Protocol 提供了一個乾淨的標準，讓 AI agent 能跟外部工具互動。以前要把 AI 接上硬體，需要寫大量客製化的 glue code；現在有了 MCP，這件事的門檻大幅降低。\nRust 讓嵌入式開發又安全又快。 沒有 garbage collection 的開銷，同時有記憶體安全保證。對嵌入式場景來說，這是 C 語言之後最重要的突破。我的每一個專案都用 Rust 寫，這不是偶然。\nAI 工具鏈成熟了。 LLM 現在真的能在硬體開發流程中幫上忙。不只是寫寫 code——而是能看 JTAG 輸出、分析 register dump、建議除錯策略。AI-HIL 的整個概念就建立在這個基礎上。\n這四個條件同時到位，打開了一扇以前不存在的窗。我不想等別人先走過去。\n接下來 每一個專案都在持續往 production-ready 的方向推進。Plexus-Myelin 的 hybrid handshake 要做完整的效能調校。AI-HIL MCP 要支援更多硬體平台。Engram 要能跑更多種類的模型。Synapse Labs 要做場域驗證。OmniTypist 要繼續打磨使用體驗。\n我不覺得這件事該一個人做完。如果你也相信——邊緣智能，而不是只有雲端 AI——如果你也想讓每一台邊緣裝置都成為有智能的一等公民，而不是雲端的附屬品，那我們應該聊聊。\n最終的目標很簡單：讓每一台邊緣裝置都是一等智能公民，不是往雲端丟資料的笨管道。\n這是我的宣言。現在，回去寫 code。\n","permalink":"https://chenfu.ai/posts/edge-intelligence-stack/","summary":"\u003ch2 id=\"ai-的重心放錯了地方\"\u003eAI 的重心放錯了地方\u003c/h2\u003e\n\u003cp\u003e打開科技新聞，滿屏都是雲端 AI 的故事。更大的 GPU 叢集、更多的訓練資料、更貴的 API 呼叫。好像智能只能住在遙遠的資料中心裡，隨傳隨到——只要你有夠好的網路。\u003c/p\u003e","title":"為什麼我要打造邊緣智能技術棧"},{"content":" 在投身獨立創建之前，我規模化了這些系統。這是我現在所打造專案背後的執行力證明。\n在 Ubiquiti 的 14 年：規模化的傳承 在 Ubiquiti，我的旅程不僅僅關於技術交付，更關於建立驅動全球網路領導品牌的人才與技術基礎設施。\n🚀 組織規模化 (從 0 到 1) 我從無到有建立並擴展了多個學科組織，使其發展為成熟且高效的實體：\nBSP 團隊：從 0 擴展至 26+ 位成員。 雲端服務：在台北建立雲端組織，從 0 到 30 位工程師。 行動應用與 App：成立了超過 20 位 開發者的統一團隊。 AI 核心開發團隊：從 0 建立至 15 位，涵蓋資料工程、模型訓練、AIOps、AIQA 及邊緣設備交付，形成完整的 AI 閉環作戰力量。 工廠自動化軟體開發團隊：從 0 建立至 10 位，專注製造端智慧化軟體，銜接硬體量產流程與數位化管理，提升良率與生產效率。 總管理規模：曾監督超過 250 位 專業人才，涵蓋韌體、雲端、AI 與 QA。 🕸️ Fabric/Matrix：橫向串聯的組織綜效 我相信真正的組織力量不在於各自為政的強大，而在於跨團隊的協作乘數。我刻意打造一種 Fabric 式的矩陣文化，讓 AI、韌體、雲端、QA、行動應用各職能如織物的經緯線，在需要時緊密交織、相互強化，杜絕穀倉效應（Silo Effect）的發生：\n跨部門知識流動：定期舉辦跨團隊 Tech Talk 與 Design Review，讓不同學科的洞察橫向傳遞。 共享基礎能力：AI 推論基礎設施、雲端資料平台、QA 自動化框架等，以服務共享方式供各團隊使用，避免重複造輪。 主動消除摩擦：定期盤點跨團隊依賴與協作節點，主動識別整合機會，讓整體效益最佳化。 🎯 Coach 領導：賦能而非指揮 作為一名 ICF 認證教練 (ACC)，我不追求做最聰明的人，而是讓每一位成員和每一支團隊成為在自己領域獨當一面的主人：\n信任與授權：給予充分自主空間，讓工程師對自己的工作有真正的主導權與責任感。 教練式對話：透過提問取代給答案，引導成員自行思考解決方案，培養獨立決策的信心。 最小化過度介入：除非面臨關鍵風險，刻意克制衝動，讓團隊在執行中學習、在挑戰中成長。 以成就他人為最高成就：當每一支團隊都能在公司內部獨立肩負重要角色，甚至超越我的能力範圍，這正是領導最終的價值所在。 ☁️ 雲端平台規模與成長 轉型並管理支撐全球硬體生態系統的核心中央雲端服務：\nSSO 身分識別平台：將身分平台擴展至 1000 萬註冊量 (900 萬驗證用戶)。自發布以來實現了驚人的 3,400 倍成長，近期每月新增用戶峰值約為 15.7 萬，2025 年同比年增長率達 19%。 IoT 生態規模 (NCA)：擴展全球控制台編排，管理 350 萬個線上活躍控制台 (3 年內增長 150%)，以及 3000 萬個總管理裝置。主導了從 85 倍早期採用增長期到 30% 以上穩定市場成熟期的架構轉型。 高可用性 (SRE/SLA)：建立穩健的 SRE 實踐，過去 2 年在所有主要雲端服務中持續達成 99.5% 的月可用性。顯著減少全球停機時間（將全球每年 8,760 小時中的關鍵事故總時長限制在 10-12 小時內）。 關鍵服務擴張：監督韌體更新服務與訂閱平台的巨量規模化運算。 🤖 AI 核心開發部門：端到端閉環架構 我們建立了一套完整的 AI 閉環研發體系 (AI Closed-Loop Architecture)，從資料蒐集到邊緣設備交付，形成自我強化的持續進化迴路。每一個環節緊密協作，確保 AI 能力能夠持續迭代、快速落地。\n原始資料 → 資料標注 → 模型訓練 → AIOps 部署 → AIQA 驗證 → 邊緣設備交付 ↑ | └──────────────── 回饋資料流 (Feedback Loop) ─────────────────┘ 📊 Data（資料基礎建設） 建立多元化的資料蒐集管線，涵蓋攝影機串流、IoT 感測器事件及使用者行為日誌。 設計資料倉儲架構，確保資料品質、可追溯性 (Traceability) 與合規性 (GDPR/隱私保護)。 導入資料版控機制，讓每次模型訓練皆有完整的資料集快照對應。 🏷️ Data Labeling（資料標注） 建立內部標注平台與標注作業流程，涵蓋影像分類、物件偵測 (Bounding Box)、語義分割等任務。 導入 主動學習 (Active Learning) 策略，優先標注對模型改善最有貢獻的困難樣本，降低標注成本達 40%+。 建立標注品質稽核 (QA Audit) 機制，確保標注一致性與準確率維持在高標準。 🧠 AI Model Training（模型訓練） 主導從研究原型到生產就緒模型的完整訓練流程，涵蓋電腦視覺（影像偵測、追蹤、辨識）與多模態 LLM 整合。 建立 MLOps 訓練基礎設施，支援分散式訓練、超參數調優 (HPO) 及實驗追蹤 (MLflow/W\u0026amp;B)。 實現針對邊緣硬體 (Edge Hardware) 的模型壓縮優化：量化 (Quantization)、剪枝 (Pruning) 與知識蒸餾 (Knowledge Distillation)，在不犧牲精度的前提下大幅降低推論延遲與功耗。 ⚙️ AIOps（AI 運維） 建立 AI 模型的全生命週期管理平台，包含模型版本管理、A/B 測試部署、灰度發布及自動回滾機制。 導入模型漂移偵測 (Model Drift Detection)，監控線上推論品質，觸發自動重訓練流程。 整合雲端與邊緣的雙層 AI 推論架構，依情境動態路由推論任務，兼顧低延遲與高精度需求。 ✅ AIQA（AI 品質保證） 建立 AI 模型的系統性評測框架，涵蓋功能性指標（mAP、Recall、Precision）、邊緣案例測試及對抗樣本 (Adversarial) 壓力測試。 制定 AI 產品上市準則 (AI Launch Criteria)，確保每款搭載 AI 功能的產品在出貨前通過嚴格的品質驗證關卡。 結合自動化測試流水線 (CI/CD for AI)，將模型評估整合進研發迴圈，加速迭代速度。 📦 Edge Devices 交付（Camera \u0026amp; AI Key） 領導 UniFi Camera Gen2/3/4/5/6 系列的端到端研發，將 AI 能力（人臉辨識、車輛偵測、異常行為分析）直接部署至攝影機端，實現本機推論 (On-Device Inference)。 推動 AI Key（專用 AI 加速硬體） 的研發與量產交付，為現有設備提供 AI 運算升級路徑，無需更換主機硬體即可獲得邊緣 AI 能力。 建立韌體 OTA 更新機制，讓 AI 模型能夠獨立於系統韌體進行空中升級，縮短 AI 功能迭代週期至數日。 管理從 RD → DVT → PVT → MP 的完整量產流程，確保 AI 硬體的出貨品質與交期達成率。 🧩 LLM 內部服務：AI 驅動的智慧化工作流 除了邊緣 AI 產品的研發與交付，我們的 AI 團隊同步主導了多項面向內部營運與外部用戶體驗的 LLM 核心服務，將語言模型的能力轉化為可落地的商業價值。\n📣 Social Hearing（社交媒體輿情分析） 建立自動化的社交媒體資料爬取與分析管線，覆蓋主要平台（Reddit、Twitter/X、論壇社群等）的用戶評論與回饋。 運用 LLM 進行語意理解與情感分析，精準萃取用戶對功能、品質、服務的真實痛點，並自動分類彙整成可行洞察 (Actionable Insights)。 將分析結果直接回饋至 Product Team 的迭代優先級決策，縮短「用戶聲音」到「產品改善」的週期。 💥 Device Crash Analysis（設備崩潰分析） 建立基於 LLM 的崩潰日誌語意分析系統，自動解析 Crash Report、Stack Trace 及系統日誌，識別根因 (Root Cause) 模式。 將崩潰事件自動分類與聚合，形成問題熱點排行，讓 Product Team 與韌體工程師能精準打擊高頻問題，顯著提升 Bug 修復效率。 整合 CI/CD 流水線，在新版本發布後自動監控崩潰趨勢，實現早期預警。 📋 產品 Support File 分析（用戶問題智慧解析） 建立自動化的 Support File 解析引擎，運用 LLM 分析用戶回傳的設備支援檔案（日誌、配置快照、狀態報告），萃取關鍵異常訊號。 自動生成問題摘要與解決建議，協助 Technical Support 團隊快速定位問題，減少人工分析時間達 60%+。 累積分析結果建立知識庫，讓 Product Team 能精準掌握用戶真實的使用痛點，驅動產品設計與韌體的持續優化。 🌐 公司網頁 \u0026amp; App LLM 後端核心（智慧客服 Bot） 主導建構公司官網與行動 App 的 LLM 後端服務，提供覆蓋 產品資訊查詢、功能使用引導、問題排除診斷 的一站式智慧對話入口。 採用 RAG (Retrieval-Augmented Generation) 架構，整合產品文件、知識庫與常見問題，確保 Chat Bot 回應的準確性與即時性。 設計多輪對話管理機制，支援複雜場景的上下文追蹤，讓用戶在不需人工客服介入的情況下完成設定、排障與服務申請。 持續透過用戶對話資料優化模型與知識庫，形成「用戶互動 → 知識優化 → 服務品質提升」的正向循環。 🚀 當前專案里程碑 離開企業環境後，我以獨立建造者的身份持續交付：\nOmniTypist v0.6.1 已發佈 — macOS AI 語音輸入應用，Developer ID 簽章、公證、Sparkle 自動更新完整交付 5 個 MCP 伺服器 — 為 AI-HIL 嵌入式自動化打造（JTAG、串口、視覺、音訊、建置燒錄） Engram Phase 7 完成 — MCP 伺服器 + ML 工作管線 + Studio UI 端到端整合 後量子 VPN 握手運作中 — Plexus-Myelin 完成 X25519 + ML-KEM-768 混合金鑰交換 138 項測試通過 — Plexus-Myelin 測試套件，涵蓋 NAT 分類、STUN、PQC Phygitao Platform Phase 4.3 強化完成 — 批次簽章、上行鏈路、可觀測性 30+ 份技術提案 — 涵蓋 Engram Client、Voice Fabric、垂直應用（工廠/農場）、SASE 架構等 → 查看完整專案作品集\n","permalink":"https://chenfu.ai/impact/","summary":"\u003cblockquote\u003e\n\u003cp\u003e在投身獨立創建之前，我規模化了這些系統。這是我現在所打造專案背後的執行力證明。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"在-ubiquiti-的-14-年規模化的傳承\"\u003e在 Ubiquiti 的 14 年：規模化的傳承\u003c/h2\u003e\n\u003cp\u003e在 Ubiquiti，我的旅程不僅僅關於技術交付，更關於建立驅動全球網路領導品牌的人才與技術基礎設施。\u003c/p\u003e","title":"執行實績"},{"content":"我正以獨立建造者的身份，打造一系列涵蓋邊緣智能、安全網路與開發者工具的技術專案。每一個專案都是從零到一，親手寫程式、親手驗證、親手交付。\n邊緣智能 (Edge Intelligence) AI-HIL MCP AI 驅動的嵌入式開發自動化平台。五個 MCP 伺服器（JTAG、串口、視覺、音訊、建置燒錄）讓 AI 代理能直接燒錄韌體、擷取串口日誌、分析音訊 FFT、檢視視覺影像——在 AI 與實體硬體之間閉合迴路。已應用於除錯與工廠自動化場景。\nRust · MCP · STM32 · ESP32 | 開源・已發佈 | GitHub\nEngram AI-Maker 平台：ML 工作管線、Studio UI、以及提供 7 個工具的 MCP 伺服器。攝取感測器資料、執行 ML 推論、透過 WebSocket 提供即時結果。Phase 7 已完成。\nRust · TypeScript · WebSocket · shadcn/ui | 開發中\nSynapse Labs ESP32 上的嵌入式加密與通訊框架。整合 Zen 進行 pub/sub 訊息傳遞，搭配 Ed25519 簽章、BCS 序列化與 IOTA intent 雜湊。\nC · Zen · Ed25519 · BCS · IOTA | 開發中\n安全網路 (Secure Networking) Plexus-Myelin 後量子混合 VPN 隧道。結合 X25519 + ML-KEM-768 金鑰交換與 WireGuard 傳輸層，加入透過自建 STUN 伺服器的 NAT 穿越與 DERP 式中繼回退。138 項測試通過。\nRust · WireGuard · ML-KEM-768 · STUN · DERP | 開發中\nPhygitao Platform 分散式邊緣平台，具備批次簽章、帶退避重試的上行鏈路客戶端，以及離線溢出恢復。Phase 4.3 已完成強化，含可觀測性。\nRust · Zen · Cloudflare D1 · IOTA EVM | 開發中\n開發者工具與應用 (Developer Tools \u0026amp; Apps) OmniTypist macOS AI 語音輸入應用。按下快捷鍵、說話、精修文字自動插入任何位置。多 LLM 供應商後端、Developer ID 簽章與公證、Sparkle 自動更新。\nSwift · Rust · Sparkle | v0.0.4 已發佈\nKids Learning Playground 教育互動遊戲：Geometry Quest（動態 SVG 數學挑戰）、Puzzle Time（磁吸式拼圖）。家長管理控制、Google 驗證。\nReact · Framer Motion · Node.js | 已上線\n","permalink":"https://chenfu.ai/projects_archived/","summary":"\u003cp\u003e我正以獨立建造者的身份，打造一系列涵蓋邊緣智能、安全網路與開發者工具的技術專案。每一個專案都是從零到一，親手寫程式、親手驗證、親手交付。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"邊緣智能-edge-intelligence\"\u003e邊緣智能 (Edge Intelligence)\u003c/h2\u003e\n\u003ch3 id=\"ai-hil-mcp\"\u003e\u003ca href=\"https://github.com/kuochenfu/ai-hil-mcp\"\u003eAI-HIL MCP\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eAI 驅動的嵌入式開發自動化平台。五個 MCP 伺服器（JTAG、串口、視覺、音訊、建置燒錄）讓 AI 代理能直接燒錄韌體、擷取串口日誌、分析音訊 FFT、檢視視覺影像——在 AI 與實體硬體之間閉合迴路。已應用於除錯與工廠自動化場景。\u003c/p\u003e","title":"專案作品集"},{"content":"打造邊緣智能技術棧 我是郭振甫（ChenFu Kuo），一位獨立建造者與技術領導者，在科技產業擁有超過 20 年的經驗。在帶領 250+ 人的企業研發組織之後，我現在正以創建者的身份，從零打造下一代邊緣原生系統——親手寫程式、親手驗證硬體、親手交付產品。\n我正在做什麼 我的專案組合分為五個類別：\n安全網路及 IoT 應用：Synapse Labs（ESP32 嵌入式加密通訊）、Plexus-Myelin（後量子混合 VPN）、Phygitao Platform（分散式邊緣平台） 邊緣智能賦能：Engram（AI-Maker 平台） 開發者工具與應用：AI-HIL MCP（AI 驅動的嵌入式開發自動化） 個人工具：OmniTypist（macOS AI 語音輸入，v0.6.1 已發佈）、Lectio（macOS AI 語音伴讀，早期測試版已上線） 教育學習：AIATCL 與 iPAS 認證練習網站、靜心國小英文測驗、昆蟲觀察記錄表系統、Kids Learning Playground（教育互動遊戲，已上線）、Nevé 冰淇淋科學手冊 → 查看完整專案作品集\n職涯基礎 在投身獨立創建之前，我在企業環境中累積了規模化交付的深厚經驗：\nUbiquiti Inc.（14 年）：從軟硬體總監到帶領 250+ 人跨領域團隊。主導 UniFi Camera Gen2–Gen6 系列的端到端研發，把人臉、車輛與行為辨識部署到攝影機端進行本機推論，並管理 RD → DVT → PVT → MP 的完整量產流程。同時建構端到端的 AI 閉環架構（Data → Labeling → Training → AIOps → AIQA → Edge Devices），將 SSO 平台擴展至 1,000 萬註冊量（900 萬驗證用戶），管理 3,000 萬台裝置。 Robert Bosch：監控攝影機軟體與系統架構團隊負責人。 Dynacolor：副理，協調安全解決方案的產品生命週期。 其中五支工程組織是我從 0 建立的：BSP（0→26）、雲端（0→30）、行動應用（→20+）、AI 核心（0→15）、工廠自動化（0→10）。\n這段經歷不只是履歷——它是我現在能從零建構完整技術棧的原因。\n→ 查看完整執行實績\n做事哲學 All in AI：不只是策略管理者，更是積極的實踐者。要真正發揮 AI 的力量，必須直接參與建構——撰寫程式碼、不斷實驗、持續學習。對我來說，AI 不是讓我執行得更快，而是讓我創造得更好：我是一人公司，與一支 AI Agent 大軍協作，把想像推到可以被測、被用、被打臉，再變成可持續的產品。（看完整的營運指令） 教練式領導：作為 ICF 認證教練（ACC），我不追求做最聰明的人，而是讓每個人成為自己領域的主人。 Fabric 組織文化：推崇跨職能團隊橫向串聯，以整體綜效對抗穀倉效應。 DDD 架構思維：偏好結構化、低耦合、真實反映業務的優雅架構。 教育背景 碩士學位，航空太空工程 | 國立成功大學 學士學位，航空太空工程 | 國立成功大學 認證與進修 經理人 AI PM 班第一期・結業證書 — 台灣人工智慧學校（Taiwan AI Academy）｜2026.05\nExecutives Program in AI Product \u0026amp; Project Management 查看結業證書 經濟部產業 AI 人才培訓 — 外貿協會（TAITRA）｜2026.05\n中高階主管的 AI 協作戰略與執行框架 從 AI 出發：行動代理、成效主導的 Martech 未來 iPAS 產業人才能力鑑定・AI 應用規劃師（初級） — 經濟部產業發展署｜2026.08\n兩科皆及格：人工智慧基礎概論 82 分、生成式 AI 應用與規劃 98 分 查看成績證明 備考時把官方歷屆試題整理成 iPAS 認證練習網站，開源給同樣要考的人使用 Anthropic Claude Academy — 19 項認證徽章｜2026.08–09\n19 項徽章 開發者軌 8 · AI Fluency 軌 9 · 基礎 2 開發者軌 8 AI Fluency 軌 9 基礎 2 聯繫我 無論是探討技術合作、投資機會，還是一起打造有影響力的產品，歡迎隨時聯繫：\nEmail: kuochenfu88@gmail.com GitHub: kuochenfu LinkedIn: ChenFu Kuo ","permalink":"https://chenfu.ai/about/","summary":"\u003ch2 id=\"打造邊緣智能技術棧\"\u003e打造邊緣智能技術棧\u003c/h2\u003e\n\u003cp\u003e我是郭振甫（ChenFu Kuo），一位獨立建造者與技術領導者，在科技產業擁有超過 20 年的經驗。在帶領 250+ 人的企業研發組織之後，我現在正以創建者的身份，從零打造下一代邊緣原生系統——親手寫程式、親手驗證硬體、親手交付產品。\u003c/p\u003e","title":"關於 郭振甫 (ChenFu Kuo)"},{"content":"從一句抱怨開始 第三天了。\n這塊點心小板真的夠硬。Claude Code 在大放送期間讓我能一直衝，結果還是頂到了用量限制。早上後來去參加研討會，腦子裡一直在想一件事：\n我花了多少時間在 copy/paste？\nJTAG 的 call stack、SWD 的暫存器狀態、Serial Console 的 log——一段貼過去，AI 給建議，我改一下 code，重新 build、flash、再抓 log，再貼回去。來來回回。有時貼錯視窗，有時貼漏了關鍵的那幾行。\n跟以前純靠自己 debug 比起來，確實快很多。但還是不夠快。Bug 像俄羅斯套娃，抓掉一層，裡面還有一層。每一次的「這次應該好了」到「怎麼又掛了」的迴圈，都讓人想把鍵盤推開。\n所以我在想，如果能消除人為因素的話呢？\n一個想法：給 AI 眼睛跟手 問題說清楚了就好解決。\n我需要的不是更聰明的 AI，而是讓 AI 能自己看、自己動、自己驗。\n不再是我充當「人肉資料傳輸管道」，把硬體的訊號用眼睛看完之後再貼給 AI，而是讓 AI 直接接上硬體的感知介面，取得第一手的訊號，做出判斷，然後直接驅動工具鏈——build、flash、reset——再自己確認結果。\n這個想法就是 AI-HIL（AI Hardware-in-the-Loop）。\nGiving hardware the soul of AI, realizing automated closed-loop development in the physical world.\nAI-HIL 是什麼 AI-HIL 把 Claude Code 從「code 產生器」升級成「系統級工程師」。\n透過 Model Context Protocol (MCP)，Claude Code 連接到實體硬體，獲得三種能力：\n感知（Perception）：讀 Serial log、JTAG call stack、電流波形、Camera 畫面 行動（Action）：Build/Flash firmware、硬體 Reset、電源控制 閉環驗證（Closed-Loop Validation）：自動確認修復是否有效，記錄 bug 模式 換句話說，AI 不再只是坐在我旁邊出主意，而是能自己上工的 AI Employee。\n系統架構 ┌─────────────────────────────────────────────┐ │ Decision Brain │ │ Claude Code CLI + CLAUDE.md │ └───────────────────┬─────────────────────────┘ │ MCP ┌───────────────────▼─────────────────────────┐ │ Nervous System — FastMCP │ └──────┬──────────────────────────┬───────────┘ │ │ ┌──────▼──────────┐ ┌───────────▼────────────┐ │ Perception │ │ Action Plane │ │ Serial / SSH │ │ Build / Flash │ │ JTAG / SWD │ │ Hard Reset │ │ Webcam / CV │ │ GPIO / Sim │ │ PPK2 Power │ └────────────────────────┘ │ SDR / RF │ │ Thermal / Mic │ ┌────────────────────────┐ └─────────────────┘ │ Context Plane │ │ Datasheets / PDFs │ │ Golden Samples │ └────────────────────────┘ 所有 MCP Server 都用 FastMCP（Python）實作。每個 Server 封裝一個硬體維度，回傳的是語意化的診斷結論，而不是原始的 binary 資料。\nAI 看到的不是 0xE000ED28 = 0x0400，而是 Stack overflow detected in task foo。\n閉環是怎麼運作的 Triage Diagnosis Remediation (anomaly) → (JTAG + PPK2 → (Claude Code detected + Vision) fixes code) │ │ └───────────────────────────────────────┘ ▼ Verification PASS ──► Record bug → next Triage FAIL ──► Diagnosis (retry) 五個步驟形成自動閉環：\nTriage — 感知平面偵測異常（電流異常高、log 出現錯誤） Diagnosis — AI 同時檢查 JTAG stack、熱像圖、電流波形 Remediation — Claude Code 修改 C/Zig/Rust 原始碼 Build \u0026amp; Flash — 自動編譯、燒錄到目標板 Verification — Serial log + PPK2 確認修復有效，記錄進 CLAUDE.md 每一次成功的 bug 修復都會被記錄成知識，讓 AI 在下次遇到類似問題時更快收斂。\n標準診斷 SOP Claude Code 遇到硬體問題時的標準流程：\nread_serial_log() # 先看 log 有沒有明顯錯誤 read_call_stack() # HardFault 或 hang 時 measure_current(5000) # 電源異常時 capture_frame() # 需要確認物理狀態時 build_firmware() → flash_firmware() → read_serial_log() # 確認 clean boot 為什麼這件事值得做 說老實話，這個專案目前還在 「Ideally?」的階段——有些 task 需要實體硬體才能跑，還在一步一步往前推進。\n但背後的邏輯是清楚的：\nAI 吃更精準的資料，自然就能把事辦好。\n當我需要手動 copy/paste log 的時候，我是一個有很多 overhead 的人肉 pipe。我會分心，會貼錯，會遺漏關鍵訊號。當 AI 自己能讀 JTAG、自己能量電流、自己能 flash 新版本再驗證，它拿到的是完整、高保真、即時的訊號——背景雜訊少了，推理品質就高了。\n這不只是「讓 debug 自動化」，這是把嵌入式開發者從重複的感知-傳輸-指令迴圈中解放出來，讓人可以專注在真正需要判斷力的事情上。\n至於「躺著數 $$ 💰」的部分——那個還早得很。先把閉環建好。\n專案在這裡 如果你也在做嵌入式開發，或是對 MCP + 硬體整合有興趣，歡迎來看看：\n👉 github.com/kuochenfu/ai-hil-mcp\nQuick start 很簡單：\ngit clone https://github.com/kuochenfu/ai-hil-mcp.git ~/ai-hil-mcp cd ~/my-firmware-project bash ~/ai-hil-mcp/setup.sh Setup 完之後，Claude Code 開啟你的 firmware 專案時會自動連上 MCP servers。\nclaude mcp list # serial-mcp: ... ✓ Connected 結語 有時候，最好的工程解法就從一句抱怨開始。\n「為什麼我要一直貼 log？」\n問清楚了，答案就在那裡：讓 AI 自己去看。\n這條路還很長，但方向是對的。\n專案 repo：kuochenfu/ai-hil-mcp\n","permalink":"https://chenfu.ai/posts/ai-hil-hardware-in-the-loop/","summary":"\u003ch2 id=\"從一句抱怨開始\"\u003e從一句抱怨開始\u003c/h2\u003e\n\u003cp\u003e第三天了。\u003c/p\u003e\n\u003cp\u003e這塊點心小板真的夠硬。Claude Code 在大放送期間讓我能一直衝，結果還是頂到了用量限制。早上後來去參加研討會，腦子裡一直在想一件事：\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e我花了多少時間在 copy/paste？\u003c/strong\u003e\u003c/p\u003e","title":"AI-HIL：當 AI 長出了眼睛和手，讓嵌入式開發閉環自動化"},{"content":"引言 (Introduction) 在追求「All in AI」的過程中，知識的內化與產出不應被繁瑣的工具鏈阻礙。透過將 Obsidian 與 chenfu.ai 專案深度整合，我成功達成了一種「編輯即發佈」的無縫體驗，並導入 AI 輔助分析，讓每一篇筆記都能與過去的技術積累產生共鳴。\n第一階段：基礎連結與路徑優化 首先，將 Obsidian 作為 Hugo 專案的專屬編輯器，讓本地檔案與 Vault 直接連結。\n開啟專案：啟動 Obsidian，選擇 Open folder as vault。\n路徑設定：導向本地專案路徑 /Users/chenfu/Labs/chenfu.ai。\n優化目錄視圖：\n主要創作區：content/posts/ (部落格文章)。\n核心頁面區：content/ (關於我、專案介紹等)。\n第二階段：Git 整合達成自動化發佈 為了實現寫完即發佈，我們利用 Obsidian Git 插件將 GitHub 與編輯器串連。\n安裝插件：在 Community plugins 中搜尋並安裝 Obsidian Git (by Vinzent03)。\n同步設定：\n手動觸發 (推薦)：使用快捷鍵 Cmd + P，輸入 Git: Push 即可將更新推送到 GitHub。\n自動備份：可設定 Vault backup interval (如 60 分鐘) 自動同步。\n部署流程：一旦 Push 成功，Cloudflare Pages 會自動偵測更新並在 3 分鐘內完成部署。\n第三階段：AI 增強——啟動數位雙生 (Digital Twin) 這是實現知識體系 AI 化的核心：透過 Smart Connections 讓筆記跨越時空進行對話。\n向量索引 (Embedding)：插件會讀取所有歷史文章與筆記，建立個人知識庫的向量模型。\n智慧關聯：寫作時，右側視窗會自動提示：「您在 2018 年的筆記也提到了類似的技術邏輯\u0026hellip;」。\n知識問答：你可以直接詢問 AI：「基於我過去的紀錄，我對於嵌入式系統與 AI 整合的核心價值觀是什麼？」\n第四階段：Hugo 寫作模板化 為了省去手寫 Frontmatter (YAML) 的麻煩，專案中已預置標準化模板：\n模板路徑：專案目錄下 docs/raw/templates/。\n快速調用：\n在 Obsidian 設定中將模板路徑指向該資料夾。\n新增文章時，使用 Templates: Insert template 叫出 hugo-post-template。\n預設邏輯：git-settings.json 已設定好 Commit 訊息格式，確保 Git 歷史紀錄整潔。\n第五階段：社群互動功能 (Giscus) 為了增加互動性，網站整合了基於 GitHub Discussions 的評論系統：\n留言管理：所有評論數據與 GitHub Repo 裡的 Discussions 同步，可直接在 GitHub 網頁端管理。\n功能亮點：支援按讚 (Reactions) 與多語言介面。\n檢查項：確保 GitHub Repository 的 General 設定中已勾選 Discussions 功能。\n💡 日常工作流總結 捕捉靈感：打開 Obsidian，使用模板快速建立新文章。\nAI 輔助：利用 Smart Connections 連結過去 14 年以上的技術與管理知識。\n撰寫預覽：以 Markdown 書寫（圖片存放在 static/img/，引用路徑為 /img/xxx.png）。\n一鍵發佈：Cmd + P \u0026gt; Git: Commit all and push。\n即時上線：等待 3 分鐘，chenfu.ai 自動更新完畢。\n結語 (Conclusion) 將寫作工具與發佈管道合而為一，不僅降低了分享的門檻，更重要的是透過 AI 插件，我能隨時與「過去的自己」進行技術對話。這不僅是一個部落格，更是我個人數位腦力的延伸。\n","permalink":"https://chenfu.ai/posts/obsidian-digital-brain/","summary":"\u003ch2 id=\"引言-introduction\"\u003e引言 (Introduction)\u003c/h2\u003e\n\u003cp\u003e在追求「All in AI」的過程中，知識的內化與產出不應被繁瑣的工具鏈阻礙。透過將 \u003cstrong\u003eObsidian\u003c/strong\u003e 與 \u003cstrong\u003echenfu.ai\u003c/strong\u003e 專案深度整合，我成功達成了一種「編輯即發佈」的無縫體驗，並導入 AI 輔助分析，讓每一篇筆記都能與過去的技術積累產生共鳴。\u003c/p\u003e","title":"Obsidian 數位大腦：打造 chenfu.ai 的「編輯即發佈」自動化工作流"},{"content":"No more words to say. Farewell my little angel\u0026hellip;\n","permalink":"https://chenfu.ai/posts/%E5%BF%83%E6%83%85%E9%9A%A8%E7%AD%86-farewell-my-ange/","summary":"\u003cp\u003eNo more words to say. Farewell my little angel\u0026hellip;\u003c/p\u003e","title":"[心情隨筆] Farewell my ange"},{"content":"Weeks ago, my colleague saw a very interesting video on Ted. He sent me the link and I\u0026rsquo;m really excited. The reason why he sent me was because we ever discussed the future of the video system month ago. Everyone raised different ideas of the device and my idea is the quadcopters with camera on it.\nWhy I wanna do such kind of device is oriented from my study in university. I\u0026rsquo;ve been studied the mechanics in Aeronautics and Astronautics department, bachelor plus master are total 6 years. There is less such kind of career opportunity in Taiwan because of the environment. Lots of my classmates join the semiconductor industry to be equipment engineers in the company like TSMC, CMO\u0026hellip;etc. A little part including me choose different road to be R\u0026amp;D engineer in other industry.\nMy first resume is to apply a mechanical engineer but my destiny lead me to be a software engineer in surveillance system. Fortunately, I witness the most important period of surveillance. It\u0026rsquo;s from the close system to open system, then open system to smart system. An significant change is the infrastructure of IP network growing rapidly. The network technology overcome the bubble in 2000 and reform the play rules in lots of industry. The open system gradually become mature and we head the future for smart one.\nThe quadcopter is one example of such kind of devices.\nThe link: http://www.ted.com/speakers/raffaello_d_andrea.html\nI was impressed for the first demo of the inverted pendulum, this is the basic control experiment when in school. Now it was realized on a quadcopter, what amazing! My original thinking is just patrolling from one base station to another but now is far beyond my imagination. Both M2M and H2M are totally implemented in this video. Machines can self-repaired, catch ball, even co-work with each other to finish task and interactive with people. This is a new era of the smart devices not only on smart phone. The time frame from network bubble to now is 10 years and I thought the smart network/device is another 10 years at least. Let\u0026rsquo;s keep our pace on it.\n","permalink":"https://chenfu.ai/posts/%E7%A7%91%E6%8A%80%E6%96%B0%E7%9F%A5-the-astounding-athletic-power-of-quadcopters/","summary":"\u003cp\u003eWeeks ago, my colleague saw a very interesting video on Ted. He sent me the link and I\u0026rsquo;m really excited. The reason why he sent me was because we ever discussed the future of the video system month ago. Everyone raised different ideas of the device and my idea is the quadcopters with camera on it.\u003c/p\u003e\n\u003cp\u003eWhy I wanna do such kind of device is oriented from my study in university. I\u0026rsquo;ve been studied the mechanics in Aeronautics and Astronautics department, bachelor plus master are total 6 years. There is less such kind of career opportunity in Taiwan because of the environment. Lots of my classmates join the semiconductor industry to be equipment engineers in the company like TSMC, CMO\u0026hellip;etc. A little part including me choose different road to be R\u0026amp;D engineer in other industry.\u003c/p\u003e","title":"[科技新知] The astounding athletic power of quadcopters"},{"content":"幾週前，我的同事在 TED 上發現了一段非常有趣的影片。他把連結傳給我後，讓我感到非常興奮。他之所以傳給我，是因為我們在一個月前剛討論過影像系統的未來。每個人都對未來的設備提出了不同的點子，而我的想法是——搭載相機的四旋翼無人機 (Quadcopters)。\n我之所以想做這種設備，源於我在大學時期的研究。我曾在航太系修讀力學，大學加碩士總共沉浸了六年。在台灣，因為環境因素，這類職涯機會相對較少。許多同學選擇加入半導體產業，在台積電或奇美電子等公司擔任設備工程師。少部分人（包括我）選擇了一條不同的路，在其他產業擔任研發工程師。\n我的第一份履歷投考的是機構工程師，但命運引領我成為了監控系統的軟體工程師。幸運的是，我見證了監控產業最重要的轉型期：從封閉系統到開放系統，再從開放系統轉向智慧化系統。這其中最顯著的變革是 IP 網路基礎設施的快速成長。網路技術克服了 2000 年的泡沫，重新形塑了許多產業的遊戲規則。隨著開放系統逐漸成熟，我們正邁向智慧化的未來。\n四旋翼無人機就是這類型設備的一個縮影。 影片連結：Raffaello D\u0026rsquo;Andrea on TED\n我對影片中第一個「倒立單擺 (Inverted Pendulum)」的演示印象極深，這是在學校最基礎的控制實驗，如今竟然在四旋翼無人機上實現了，簡直太神奇了！我原本的構思僅是讓它在不同基地台間巡邏，但現在的發展已遠超我的想像。\n","permalink":"https://chenfu.ai/posts/the-astounding-athletic-power-of-quadcopters/","summary":"\u003cp\u003e幾週前，我的同事在 TED 上發現了一段非常有趣的影片。他把連結傳給我後，讓我感到非常興奮。他之所以傳給我，是因為我們在一個月前剛討論過影像系統的未來。每個人都對未來的設備提出了不同的點子，而我的想法是——搭載相機的四旋翼無人機 (Quadcopters)。\u003c/p\u003e","title":"四旋翼無人機驚人的運動能力與未來潛力"},{"content":"Recently, I become very busy due to take over the tasks from other site. The original coding things are still there and so I start looking for outstanding guy to join us. The first month, I try to have some candidates from my colleagues and myself\u0026rsquo;s database but in vain. Now I shift this job to head hunter and start some interview.\nI\u0026rsquo;ve interviewed lots of people in my first job and second one. It\u0026rsquo;s much more interesting to interview with the guys from head hunter at this moment. Why? Lots of the factor would effect which kind of developer you want.\nTake my first job for example, the company do not like to pay a lot for experienced engineer because of the uncertainty and bad history to work with them. So, we preferred to find the fresh man that time. The strategy to find the new blood is simpler. The first, we ask for their academic report to check if they are doing their student job well. The second, we make the aptitude test to know more indicators about the logic, patient\u0026hellip;etc. According to the results, we also talk to them for different topics to see their attitude, expression\u0026hellip;etc and the most important one is the potential. To sum up all above and we could know if we could give it a try. So, much easy and simpler, right?\nLet\u0026rsquo;s go back to my interview experience now. We are looking for very experienced and excellent one. No academic report and aptitude test any more. Instead, we have to judge the work they done during their career. Basically, head hunter should filter out the resume you want, but some head hunter just like the house sales. So we still have to do our best to get the information from different channel to make sure the job applicant is who we want. Besides, I have to setup different kinds of test, like 30 minutes coding, ask the difficult technical question\u0026hellip;etc. It become much more complicated to judge if this guy is feasible because we do not have much time to try like before by adopting the rookie. It\u0026rsquo;s challenge and interesting to me. Hope we could find the Rambo soon.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-looking-for-solid-developer/","summary":"\u003cp\u003eRecently, I become very busy due to take over the tasks from other site. The original coding things are still there and so I start looking for outstanding guy to join us. The first month, I try to have some candidates from my colleagues and myself\u0026rsquo;s database but in vain. Now I shift this job to head hunter and start some interview.\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;ve interviewed lots of people in my first job and second one. It\u0026rsquo;s much more interesting to interview with the guys from head hunter at this moment. Why? Lots of the factor would effect which kind of developer you want.\u003c/p\u003e","title":"[工作點滴] Looking for solid developer"},{"content":"最近因為開始接手其他站點的任務，生活變得極度忙碌。原有的開發任務依然存在，因此我開始尋找優秀的夥伴加入我們。第一個月，我試著從同事推薦或我的人才庫中尋找，但無功而返。現在我將這個任務委託給獵頭公司，並開始進行面試。\n我在第一份和第二份工作中面試過許多人。目前與猎頭推薦的候選人進行面試，感覺更有趣。為什麼？因為許多因素會決定你到底需要哪種類型的開發者。\n以我的第一份工作為例，公司並不傾向為資深工程師支付高昂薪資，因為過去與資深人才合作的歷史並不佳，存在不確定性。因此，我們當時偏好找尋社會新鮮人。尋找新血的策略相對簡單：第一，查看在校成績，確認他們是否認真對待學生的本分；第二，進行適向測驗 (Aptitude test)，了解邏輯與耐心等指標。根據結果，我們還會進行不同主題的對談，觀察其態度、表達能力，以及最重要的——潛力 (Potential)。綜合以上考量，我們就能判斷是否值得一試。相對來說，這簡單許多，對吧？\n回到我現在的面試經驗。我們正在尋找非常資深且極度優秀的開發者。這裡不再看成績單或適向測驗，取而代之的是，我們必須評判他們在職涯中所經手的具體工作。雖然獵頭理應幫忙過濾履歷，但有些獵頭就像房屋仲介，因此我們仍得透過不同管道獲取資訊，確保求職者正是我們想要的人才。此外，我必須設置不同類型的測試，例如 30 分鐘的即時編碼、詢問高難度的技術難題等。評判這名開發者是否合用變得複雜許多，因為我們不再像以前看待新人那樣有大量的時間進行培訓。這是一項挑戰，但也非常有趣。希望我們能儘快找到像藍波 (Rambo) 一樣的核心工程戰力。\n","permalink":"https://chenfu.ai/posts/looking-for-solid-developer/","summary":"\u003cp\u003e最近因為開始接手其他站點的任務，生活變得極度忙碌。原有的開發任務依然存在，因此我開始尋找優秀的夥伴加入我們。第一個月，我試著從同事推薦或我的人才庫中尋找，但無功而返。現在我將這個任務委託給獵頭公司，並開始進行面試。\u003c/p\u003e","title":"尋找紮實的開發者：我的招募與面試心法"},{"content":"The PoC is power over cable and it\u0026rsquo;s just like the PoE on IP camera. I met a supplier that they can provide the PoC solution on the ccHDtv system. Originally, I thought it\u0026rsquo;s a useful and necessary function but it\u0026rsquo;s not at all now. Why?\nThe CCTV is always starting from system point of view but not just the device only like the cellphone. The first factor is that the analog CCTV infrastructure has already built over there for a long time. That means the power cable is existing and reliable. So it is not necessary to equip the PoC except the project a brand new installation. The second, the strategy of the ccHDtv alliance is to replace the traditional analog surveillance system from VGA to HD but not to compete with the existing IP surveillance system. We can totally confirm that it\u0026rsquo;s not necessary to equip PoC on DTV camera. The others factor like the cost increase, design complexity increase and regulation to pass.\nTo sum up, even if we want to create a ccHDtv product line, the PoC function should be put as the option instead of the must one on specification.\n","permalink":"https://chenfu.ai/posts/%E7%94%A2%E6%A5%AD%E8%A7%80%E5%AF%9F-the-necessity-of-poc-on-cchdtv/","summary":"\u003cp\u003eThe PoC is power over cable and it\u0026rsquo;s just like the PoE on IP camera. I met a supplier that they can provide the PoC solution on the ccHDtv system. Originally, I thought it\u0026rsquo;s a useful and necessary function but it\u0026rsquo;s not at all now. Why?\u003c/p\u003e\n\u003cp\u003eThe CCTV is always starting from system point of view but not just the device only like the cellphone. The first factor is that the analog CCTV infrastructure has already built over there for a long time. That means the power cable is existing and reliable. So it is not necessary to equip the PoC except the project a brand new installation. The second, the strategy of the ccHDtv alliance is to replace the traditional analog surveillance system from VGA to HD but not to compete with the existing IP surveillance system. We can totally confirm that it\u0026rsquo;s not necessary to equip PoC on DTV camera. The others factor like the cost increase, design complexity increase and regulation to pass.\u003c/p\u003e","title":"[產業觀察] The necessity of PoC on ccHDtv"},{"content":"What is ccHDtv?\nClosed Circuit HD TV (ccHDtv) is a newly developed solution for transmitting full HD digital video in a surveillance system. The core concept of ccHDtv is to deliver high definition video using digital TV (DTV) transmission. With ccHDtv, high definition digital video can be transmitted easily over coaxial cables, twisted pairs, or simply over the air. Multiple 1080p30 and 1080p60 video streams can be easily transmitted using ccHDtv over a single 3C2V/RG59 cable up to a length of 500 meters without any repeater.\nIn the world of analog TV, The composite video baseband signal (CVBS) is the most commonly used signal format. Its popularity, ease of use, and robustness have made it an integral part of our lives. CVBS is in fact a de facto signal standard for analog video surveillance systems. As we bid farewell to analog TV with worldwide analog switch-off (ASO) and move on to the age of digital TV, digital technologies, such as DVB-T, ISDB-T, and ATSC, became popular and indispensable much like CVBS in the analog age. ccHDtv leverages the extremely robust AV transmission capability of DTV to easily and seamlessly upgrade an analog cctv surveillance system to digital full HD. It is expected ccHDtv to become a de facto standard for digital video surveillance systems in the future.\nccHDtv is a novel technique pioneered by ITE Tech. Inc., ITE has devoted much resource into the development and promotion of ccHDtv solutions. ITE has developed key enabling products, reference system designs, and applications for ccHDtv . These products and applications enable seamless and friendly transition of video surveillance systems from analog to digital, be it all-new digital installations or upgrades from existing analog installations.\nCore Technology: COFDM Transmitter / Receiver\nMore information on wiki: http://en.wikipedia.org/wiki/Orthogonal_frequency-division_multiplexing\nFeatures of ccHDtv\nReuse existing coaxial cable deployment without any upgrade for cables or connecters. Same system planning, deployment and debugging processes as used in traditional CCTV. Any iDTV set with DVB-T feature is able to receive ccHDtv signal without an HD DVR. Return channels are supported Full duplex communication HD DVR is able to support PTZ control, camera configuration, I/O settings, return audio and remote firmware update. Eavesdropping Prevention Support encrypted signals in case of privacy consideration, so only authorized HD DVR can receive and\ndecode it. No frame drops and real-time delivery Quasi-zero latency and quasi-real time preview for 9x, 16x, 32x\u0026hellip; Long distance transmission 3c2v/RG-59 up to 500M+ w/o repeater 5c2v/RG-6 up to 1000M+ w/o repeater Digital repeater for infinite extender High capacity/bandwidth Multiple full HD camera video streams are able to be transmitted over a single coaxial cable. ccHDtv Full HD Surveillance System\nDevices in ccHDtv\nStar Topology Deployment\nExactly the same deployment as the traditional CCTV system The coaxial cable and connecter are the same. Actually, the cable medium requirement for DTV CAM is much less than analog cameras Bus Topology Deployment\nSimilar to cable TV deployment (multiple DTV CAM’s running on a single cable) Using same coaxial cables, connecters, mixers and amplifiers. ccHDtv is very robust and it’s not sensitive to cable network quality variation. Ring or multi-path connection is allowed in ccHDtv cable network which enables failure safe feature. Ring Topology Deployment – Failure-Safe (Redundant) Cable Deployment\nRing and multi-path connection are allowed in ccHDtv cable network which enables failure-safe (redundancy) feature Worst Recover time \u0026lt; 500ms The above content is from ccHDtv alliance website.\nhttp://www.cchdtv.com.tw/en/intro.php\nMore FAQ: http://www.cchdtv.com.tw/en/faq/index.php\nSpecification check points:\nFull duplex communication is supported.(two-way audio and control) Multiple stream is support. The max data rate per channel is 32Mbps. Wireless transmission is support.(depends on how you understand the regulations. so far ccHDtv suggest not to do so) Power on cable is supported. (Both AC/DC power) Crypto is support. Pros compare to HDcctv\nThe media is compressed. That means the ccHDtv could have much longer distance than HDcctv. ccHDtv supports bus, star topology. The installation is much easier than HDcctv. Besides, the cable cost is also much lower. ccHDtv support multiple stream transmission but HDcctv could not. ccHDtv support crypto but HDcctv is hard to support. ccHDtv use the television standard, the back-end support is much better than HDcctv. Cons compare to HDcctv.\nNone. Maybe the media is compressed. Pros compare to IP camera\nEthernet network bandwidth is very limited, and even worse when there are multiple IP CAM’s in the network. To save network bandwidth, IP CAM’s video is encoded with a lower bit rate or less frame rate. Beside, there are frequent frame drops due to overloading bus traffic. Each DTV CAM has its own proprietary data channel (up to 32 Mbps), and the guarantee of no frame drop. DTV CAM’s video can be encoded with a higher bit rate and higher frame rate. So the video quality is almost quasi-equivalent to lossless compression mechanism. The latency is much stable than IP. What IP can define is the best case. Cons compare to IP camera\nTheoretically, more than 120 DTV CAMs. Practically, 32~48 cameras are recommended to minimize the adjacent channel (ACI), 2x and 3x inference. That means this solution is much suitable for small/middle projects. However, it could still co-work with IP network by gateway. The topology show case in the Secutech booth\nTo make the conclusion:\nWe could not see the large replace from original infrastructure to IP system. Only new and big system definitely implement IP system. ccHDtv create a much simpler way for traditional VGA system upgrade to HD system. ccHDtv can co-existence with IP system. IP\u0026rsquo;s NVR system can leverage to support DTV camera. That means, DTV camera is almost an IP camera except the interface. ccHDtv use the TV standard and technical. It\u0026rsquo;s robust. So, in my point of view. This is dangerous to IP camera and it can much slow down the replacement from IP camera.\n","permalink":"https://chenfu.ai/posts/%E7%A7%91%E6%8A%80%E6%96%B0%E7%9F%A5-cchdtv-study/","summary":"\u003cp\u003eWhat is ccHDtv?\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/img/Blogger/cchdtv_01.jpg\"\u003e\u003cimg loading=\"lazy\" src=\"/img/Blogger/cchdtv_01.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eClosed Circuit HD TV (ccHDtv) is a newly developed solution for transmitting full HD digital video in a surveillance system. The core concept of ccHDtv is to deliver high definition video using digital TV (DTV) transmission. With ccHDtv, high definition digital video can be transmitted easily over coaxial cables, twisted pairs, or simply over the air. Multiple 1080p30 and 1080p60 video streams can be easily transmitted using ccHDtv over a single 3C2V/RG59 cable up to a length of 500 meters without any repeater.\u003c/p\u003e","title":"[科技新知] ccHDtv study"},{"content":"什麼是 ccHDtv？ 閉路高畫質電視 (ccHDtv) 是一項新開發的解決方案，旨在監控系統中傳輸全高畫質 (Full HD) 數位影像。其核心概念是利用數位電視 (DTV) 傳輸技術來傳遞高畫質影像。透過 ccHDtv，數位高畫質影像可以透過同軸電纜、雙絞線甚至是無線網路輕鬆傳輸。多路 1080p30 或 1080p60 的影像串流可以經由單一 3C2V/RG59 電纜，在不需中繼器的情況下傳輸長達 500 公尺。\n在類比電視的時代，複合影像基頻訊號 (CVBS) 是最常見的訊號格式。它的普及性、易用性與穩定性已成為我們生活的一部分。事實上，CVBS 是類比監控系統中實質上的訊號標準。隨著全球類比電視訊號停播 (ASO) 期到來，我們正在跨入數位電視時代。DVB-T、ISDB-T 與 ATSC 等數位技術已像類比時代的 CVBS 一樣變得普及且不可或缺。ccHDtv 槓桿了數位電視極其強大的 AV 傳輸能量，能輕鬆且無縫地將類比 CCTV 監控系統升級至數位全高畫質。可以預見，ccHDtv 在未來將成為數位影像監控系統的實質標準。\n","permalink":"https://chenfu.ai/posts/cchdtv-study/","summary":"\u003ch3 id=\"什麼是-cchdtv\"\u003e什麼是 ccHDtv？\u003c/h3\u003e\n\u003cp\u003e閉路高畫質電視 (ccHDtv) 是一項新開發的解決方案，旨在監控系統中傳輸全高畫質 (Full HD) 數位影像。其核心概念是利用數位電視 (DTV) 傳輸技術來傳遞高畫質影像。透過 ccHDtv，數位高畫質影像可以透過同軸電纜、雙絞線甚至是無線網路輕鬆傳輸。多路 1080p30 或 1080p60 的影像串流可以經由單一 3C2V/RG59 電纜，在不需中繼器的情況下傳輸長達 500 公尺。\u003c/p\u003e","title":"ccHDtv 研究心得"},{"content":"I\u0026rsquo;ve started collecting the information around the end of 2010 because the wireless technology advanced to much higher bandwidth for multimedia streaming.\nThere are two conditions of the development that I thought.\n1. To develop the whole wireless part by ourselves.\n2. To buy the module directly from the supplier.\nBut some important factors that make me just \u0026lsquo;collect information\u0026rsquo; at that moment.\nFor 1, the expense is very horrible.\n- We have to pay chip vendor for NRE.\n- We are new to be the player and we have no credit to the chip vendor.\n- We have no equipment and we have to invest a lot to do it.\n- There are lots of tasks need for the regulation.\nTo sum up, this is a money game for surveillance company and we see no market at that moment.\nFor 2, we could leverage a lot tasks to supplier but we still have to prepare equipment to verify the whole system and get the experience of the regulation. However, the module cost and performance ratio could not meet our requirement. It is quite challenge for me to persuade my boss to do it.\nSo what I can do is just keep attention on wireless technology.\nUntil now, I have the chance to do the development finally.\nAlthough I\u0026rsquo;m newbie for wireless, it\u0026rsquo;s not too hard to enter this area. The reason is the technology become much mature and we can make it work even we do not know much about wireless. So, let\u0026rsquo;s just do it.\nThe module I use is based on Atheros AR6103 and AR6003. The driver of these two chips are similar.\nThe documents I study is are mainly from Atheros. I also reference the IEEE specification and search on Google.\nThe equipment and wireless module board\n- Power meter is Agilent E4416A EPM-P single channel power meter.\nThis equipment can only measure the power from the wireless module from 50MHz~6GHz.\nWe could not know the power is generated om which frequency.\n- Attenuator to avoid the large power.\n- The AR6003 module board\n- To connect the module board to evaluation board and power meter.\n- Without power output.\n- With power output.\nIf we want to know the power is contribute from which frequency channel and band. We need Spectrum Analyzer to check further. But for quick check the driver is working or not, this is already enough.\nThe tools from Atheros \u0026lsquo;athtestcmd\u0026rsquo;.\nAtheros test tool \u0026lsquo;athtestcmd\u0026rsquo;: We have to insmod the driver with parameter \u0026rsquo;testmode=1\u0026rsquo; or we could not use this command.\n\u0026lsquo;-i device\u0026rsquo;: example, \u0026lsquo;-i eth1\u0026rsquo;, \u0026lsquo;-i wlan0\u0026rsquo;.\n\u0026lsquo;\u0026ndash;tx frame\u0026rsquo;: Continuous modulated Tx, AIFS(arbitration interframe space) can be set with the option \u0026ndash;aifsn.\n\u0026lsquo;\u0026ndash;tx tx99\u0026rsquo;: Continuous modulated Tx, AIFS is fixed to 0.\n\u0026lsquo;\u0026ndash;tx tx100\u0026rsquo;: Continuous modulated but unframed Tx.\n\u0026lsquo;\u0026ndash;tx off\u0026rsquo;: Disable continuous Tx.\n\u0026lsquo;\u0026ndash;tx freq\u0026rsquo;: Channel frequency in MHz, but this frequency does not mean center frequency.\nSee: \u0026lt;http://en.wikipedia.org/wiki/List_of_WLAN_channels\u0026gt; \u0026lsquo;\u0026ndash;txrate \u0026rsquo;: Reference as below.\n\u0026lsquo;\u0026ndash;txpwr\u0026rsquo;: tx power.\n\u0026lsquo;\u0026ndash;txantenna\u0026rsquo;: 1 for antenna 1, 2 for antenna 2, 0 is auto. default is auto.\n\u0026lsquo;\u0026ndash;txpktsz\u0026rsquo;: tx packet size.\n\u0026lsquo;\u0026ndash;txpattern\u0026rsquo;: Tx frame bits pattern. The pattern of PN7/PN9/PN15 stands for pseudo noise code of length 2^7/2^9/2^15 bits.\nBecause the length of PN15 is large than max packet size, it's sent by 4 continuous packets. The '--txpktsz' option is ignored when setting pattern to PN15. \u0026lsquo;\u0026ndash;ani\u0026rsquo;: Enable ANI. The ANI is disabled if this option is not specified.\n\u0026lsquo;\u0026ndash;scrambleroff\u0026rsquo;: When set, the frames cannot be sniffered.\n\u0026lsquo;\u0026ndash;aifsn\u0026rsquo;: AIFS slots number. For \u0026lsquo;\u0026ndash;tx frame\u0026rsquo; mode only.\n\u0026lsquo;\u0026ndash;shortguard\u0026rsquo;: Short guard interval 400ns, the guard interval is 800ns if this option is not specified.\n\u0026lsquo;\u0026ndash;mode\u0026rsquo;: the \u0026ndash;tx\n\u0026lsquo;\u0026ndash;setlongpreamble\u0026rsquo;:\n\u0026lsquo;\u0026ndash;numpackets\u0026rsquo;: the total number of the packet.\nPlease make sure you use the correct board data from the supplier and replace it in the driver.\nMore task like the porting the driver for specific SoC interface, driver hacking, script setup tool and configuration application like wpa_supplicant\u0026hellip;etc, these will be discuss later.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-wireless-module-development-newbie/","summary":"\u003cp\u003eI\u0026rsquo;ve started collecting the information around the end of 2010 because the wireless technology advanced to much higher bandwidth for multimedia streaming.\u003cbr\u003e\nThere are two conditions of the development that I thought.\u003cbr\u003e\n1. To develop the whole wireless part by ourselves.\u003cbr\u003e\n2. To buy the module directly from the supplier.\u003cbr\u003e\nBut some important factors that make me just \u0026lsquo;collect information\u0026rsquo; at that moment.\u003cbr\u003e\nFor 1, the expense is very horrible.\u003cbr\u003e\n- We have to pay chip vendor for NRE.\u003cbr\u003e\n- We are new to be the player and we have no credit to the chip vendor.\u003cbr\u003e\n- We have no equipment and we have to invest a lot to do it.\u003cbr\u003e\n- There are lots of tasks need for the regulation.\u003cbr\u003e\nTo sum up, this is a money game for surveillance company and we see no market at that moment.\u003cbr\u003e\nFor 2, we could leverage a lot tasks to supplier but we still have to prepare equipment to verify the whole system and get the experience of the regulation. However, the module cost and performance ratio could not meet our requirement. It is quite challenge for me to persuade my boss to do it.\u003cbr\u003e\nSo what I can do is just keep attention on wireless technology.\u003cbr\u003e\nUntil now, I have the chance to do the development finally.\u003cbr\u003e\nAlthough I\u0026rsquo;m newbie for wireless, it\u0026rsquo;s not too hard to enter this area. The reason is the technology become much mature and we can make it work even we do not know much about wireless. So, let\u0026rsquo;s just do it.\u003cbr\u003e\nThe module I use is based on Atheros AR6103 and AR6003. The driver of these two chips are similar.\u003cbr\u003e\nThe documents I study is are mainly from Atheros. I also reference the IEEE specification and search on Google.\u003c/p\u003e","title":"[工作點滴] wireless module development newbie"},{"content":"I found an interesting comic that made by Gavin Aung Than. The philosophy is suitable for every creative work.http://zenpencils.com/comic/90-ira-glass-advice-for-beginners/\n","permalink":"https://chenfu.ai/posts/%E9%9B%9C%E4%B8%83%E9%9B%9C%E5%85%AB-growth-road/","summary":"\u003cp\u003eI found an interesting comic that made by Gavin Aung Than. The philosophy is suitable for every creative work.\u003ca href=\"http://zenpencils.com/comic/90-ira-glass-advice-for-beginners/\"\u003ehttp://zenpencils.com/comic/90-ira-glass-advice-for-beginners/\u003c/a\u003e\u003c/p\u003e","title":"[雜七雜八] Growth road"},{"content":"There is a very hot TV program which name is \u0026ldquo;I\u0026rsquo;m a singer\u0026rdquo; in China. I never saw this program before because there are already lots of similar program in the world. At the first, I could not understand why this program catch so many eye balls. My memory was stay at the program that is made by Taiwan\u0026rsquo;s media years ago. Even it\u0026rsquo;s hot at season one, it become colder and colder till now. At least, I do not have that passion to see this kind of show again. So it cause my curiosity why it success at this moment in China. After searching the information on the internet and spent hours to see the last episode of season one last weekend, I start to know why it become so famous.\nHunan TV bought the copyright from Korea and the success story is not only just bought the copyright. The factor that make it\n","permalink":"https://chenfu.ai/posts/%E9%9B%9C%E4%B8%83%E9%9B%9C%E5%85%AB-im-a-singer/","summary":"\u003cp\u003eThere is a very hot TV program which name is \u0026ldquo;I\u0026rsquo;m a singer\u0026rdquo; in China. I never saw this program before because there are already lots of similar program in the world. At the first, I could not understand why this program catch so many eye balls. My memory was stay at the program that is made by Taiwan\u0026rsquo;s media years ago. Even it\u0026rsquo;s hot at season one, it become colder and colder till now. At least, I do not have that passion to see this kind of show again. So it cause my curiosity why it success at this moment in China. After searching the information on the internet and spent hours to see the last episode of season one last weekend, I start to know why it become so famous.\u003cbr\u003e\nHunan TV bought the copyright from Korea and the success story is not only just bought the copyright. The factor that make it\u003c/p\u003e","title":"[雜七雜八] I'm a singer"},{"content":"I started to pay attention on the Bitcoin that is from a news that discussed why bitcoin become strengthening. After weeks study and observation, I thought the bitcoin could be one of the real monetary in future.\nMore links are as following.\nBitcoin official site -\u0026gt; http://bitcoin.org/en/\nBitcoin wiki -\u0026gt; http://en.wikipedia.org/wiki/Bitcoin\nBitcoin howto in Chinese -\u0026gt; http://saving.cc/bitcoin/\nThe following article is quite earlier in Taiwan\u0026rsquo;s news and it is also interesting.\nhttp://techorange.com/2011/05/22/bitcoin-p2p-curenncy-dangerous/\nTwo years later today, the bitcoin\u0026rsquo;s currency rush to 1BT:90USD because of the crisis of Cyprus.\nWe can understand the nature of the monetary and the pros/cons of the bitcoin from those articles. So I need not to talk more. What I wanna do is to study and share from the source code.\nThe code is managed by git and host on github and we can get it by git client tool.\nThe link -\u0026gt; https://github.com/bitcoin/bitcoin\nThe code structure of the bitcoin.\nWe can get the information in the README.md.\nBuild bitcoin on Ubuntu 12.04\nsudo apt-get install libboost-all-dev Go https://launchpad.net/~bitcoin/+archive/bitcoin\nWe have to use the ppa to install the package we need.\nsudo add-apt-repository ppa:bitcoin/bitcoin If the error occur, we have to reinstall the ca-certificates package.\nsudo apt-get install \u0026ndash;reinstall ca-certificates If we add the repository successfully, we can see following information.\nsudo apt-get update Then we could install the db4.8 package on Ubuntu 12.04\nsudo apt-get install libdb4.8-dev sudo apt-get install libdb4.8++-dev The default enable the USE_UNPN compile flag, and we have to install the upnp package.\nsudo apt-get install libminiupnpc-dev Go bitcoin/src folder and make the bitcoin package.\nmake -f makefile.unix The \u0026lsquo;bitcoind\u0026rsquo; is generated and we can start using the tool.\n./bitcoind \u0026ndash;help Done!\n","permalink":"https://chenfu.ai/posts/%E9%9B%9C%E4%B8%83%E9%9B%9C%E5%85%AB-bitcoin-build-on-ubuntu-1204/","summary":"\u003cp\u003eI started to pay attention on the Bitcoin that is from a news that discussed why bitcoin become strengthening. After weeks study and observation, I thought the bitcoin could be one of the real monetary in future.\u003c/p\u003e\n\u003cp\u003eMore links are as following.\u003c/p\u003e\n\u003cp\u003eBitcoin official site -\u0026gt; \u003ca href=\"http://bitcoin.org/en/\"\u003ehttp://bitcoin.org/en/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eBitcoin wiki -\u0026gt; \u003ca href=\"http://en.wikipedia.org/wiki/Bitcoin\"\u003ehttp://en.wikipedia.org/wiki/Bitcoin\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eBitcoin howto in Chinese -\u0026gt; \u003ca href=\"http://saving.cc/bitcoin/\"\u003ehttp://saving.cc/bitcoin/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe following article is quite earlier in Taiwan\u0026rsquo;s news and it is also interesting.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://techorange.com/2011/05/22/bitcoin-p2p-curenncy-dangerous/\"\u003ehttp://techorange.com/2011/05/22/bitcoin-p2p-curenncy-dangerous/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eTwo years later today, the bitcoin\u0026rsquo;s currency rush to 1BT:90USD because of the crisis of Cyprus.\u003c/p\u003e","title":"[雜七雜八] Bitcoin build on Ubuntu 12.04"},{"content":"qfqwefqwefq:\u0026mdash;-\nasdfadfqewfqfcdxcdf41t54rtfqf\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-the-study-of-webrtc-and-sip/","summary":"\u003cp\u003eqfqwefqwefq:\u0026mdash;-\u003cbr\u003e\nasdfadfqewfqfcdxcdf41t54rtfqf\u003c/p\u003e","title":"[工作點滴] the study of webrtc and sip"},{"content":"http://wired.tw/2013/03/05/startup-road/index.html\nhttp://wired.tw/2013/03/05/marketing-age/index.html\nhttp://wired.tw/2013/02/26/internet-is-eating-the-world/index.html\n","permalink":"https://chenfu.ai/posts/%E6%96%87%E7%AB%A0%E8%BD%89%E8%BC%89/","summary":"\u003cp\u003e\u003ca href=\"http://wired.tw/2013/03/05/startup-road/index.html\"\u003ehttp://wired.tw/2013/03/05/startup-road/index.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://wired.tw/2013/03/05/marketing-age/index.html\"\u003ehttp://wired.tw/2013/03/05/marketing-age/index.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://wired.tw/2013/02/26/internet-is-eating-the-world/index.html\"\u003ehttp://wired.tw/2013/02/26/internet-is-eating-the-world/index.html\u003c/a\u003e\u003c/p\u003e","title":"[文章轉載] "},{"content":"Reference\nhttp://mrjamie.cc/2013/01/31/kickstarter-angellist/ ","permalink":"https://chenfu.ai/posts/%E7%A7%91%E6%8A%80%E6%96%B0%E7%9F%A5-kickstarter/","summary":"\u003cp\u003eReference\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://mrjamie.cc/2013/01/31/kickstarter-angellist/\"\u003ehttp://mrjamie.cc/2013/01/31/kickstarter-angellist/\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e","title":"[科技新知] Kickstarter"},{"content":"Evostream server\u0026rsquo;s configuration for rtmps test\nAdd the following content in the acceptors part in config.lua.\nThis is for Win7 configuration and remember that we have to use double \u0026lsquo;' instead of single for path.\nThe cipherSuite parameter, we could reference http://www.openssl.org/docs/apps/ciphers.html#CIPHER_SUITE_NAMES\nRTMP library\nThe library is main from rtmpdump. The webpage is http://rtmpdump.mplayerhq.hu.\nThe libssl library - SSLv23 method is used in the RTMPdump.\n- SSLv23 method\nA TLS/SSL connection established with these methods will understand the SSLv2, SSLv3, and TLSv1 protocol.\nA client will send out SSLv2 client hello messages and will indicate that it also understands SSLv3 and TLSv1.\nA server will understand SSLv2, SSLv3, and TLSv1 client hello messages.\nThis is the best choice when compatibility is a concern.\n- SSLv23 related files in the openssl/ssl/ folder\ns23_clnt.c s23_lib.c\nthe ssl23_connect() function handle the hello message between client and server.\nthe client\u0026rsquo;s related method will be created according to the server\u0026rsquo;s hello message.\nwe can look into the ssl23_get_server_hello() function for more detailed.\nwe can compare with the network packet by Wireshark. We use the TLSv1_client_method().\ns23_meth.c\ns23_pkt.c\ns23_srvr.c\nssl_locl.h -\u0026gt; the marco and function were defined in this header file. - the client hello information by Wireshark.\nthe server hello information by Wireshark. - According the Wireshark packet, let\u0026rsquo;s dig into TLSv1_client_method() function.\nthe TLSv1_client_method() define in the t1_clnt.c file. the TLS method is define in the ssl_locl.h file. - TLSv1_enc_data(), this is a SSL3_ENC_METHOD structure define in ssl_locl.h and instantiate in t1_lib.c.\n- ENGINE_setup_bsd_cryptodev(), this should be called to enable the \u0026lsquo;cryptodev\u0026rsquo; engine support.\n- ENGINE_load_builtin_engines is related to OPENSSL_NO_HW and it is define in crypto/opensslconf.h.\nHowever, this is not called to load the cryptodev by default.\n- we have to add the ENGINE_setup_bsd_cryptodev() in rtmp library.\ncryptodev-linux package http://cryptodev-linux.org/index.html\n- cryptodev, call iotcl() in cryptodev-linux/ioctl.c to access the crypto hardware engine.\nCIOCGSESSION: to do crypto_create_session()-\u0026gt;crypto_cipher_init()-\u0026gt;crypto_alloc_ablkcipher(). CIOCCRYPT: the crypto_run() is in the cryptodev-linux/main.c. crypto_run()-\u0026gt;__crypto_run_zc() or __crypto_run_std()-\u0026gt;hash_n_crypt(), this function would call directly to kernel crypto driver. cryptodev_cipher_encrypt() is in the cryptlib.c. The function ablkcipher_request_set_crypt()\nand crypto_ablkcipher_encrypt() are in kernel.\nKernel crypto driver support\n- crypto algorithm structure\n- Asynchronous block cipher algorithm structue.\n- Synchronous block cipher.\n- crypto TFM(transform) structure\n* asynchronous block cipher transform structure synchronous block cipher transform structure - The cryptodev-linux is using the asynchronous block cipher method. We can create a kernel driver.\nThere are example in the linux/drivers/crypto/ folder.\nI assume that the kernel driver we create is abc_crypto.ko. We can insmod both the abc_crypto.ko and cryptodev.ko. Then the rtmp library support the rtmps through OpenSSL with hardware crypto engine.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-rtmps-in-rtmpdump-with-hardware-engine-development/","summary":"\u003cp\u003eEvostream server\u0026rsquo;s configuration for rtmps test\u003c/p\u003e\n\u003cp\u003eAdd the following content in the acceptors part in config.lua.\u003c/p\u003e\n\u003cp\u003eThis is for Win7 configuration and remember that we have to use double \u0026lsquo;' instead of single for path.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/img/Blogger/rtmp_openssl_01.png\"\u003e\u003cimg loading=\"lazy\" src=\"/img/Blogger/rtmp_openssl_01.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe cipherSuite parameter, we could reference \u003ca href=\"http://www.openssl.org/docs/apps/ciphers.html#CIPHER_SUITE_NAMES\"\u003ehttp://www.openssl.org/docs/apps/ciphers.html#CIPHER_SUITE_NAMES\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/img/Blogger/rtmp_openssl_02.png\"\u003e\u003cimg loading=\"lazy\" src=\"/img/Blogger/rtmp_openssl_02.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eRTMP library\u003c/p\u003e\n\u003cp\u003eThe library is main from rtmpdump. The webpage is \u003ca href=\"http://rtmpdump.mplayerhq.hu/\"\u003ehttp://rtmpdump.mplayerhq.hu\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe libssl library - SSLv23 method is used in the RTMPdump.\u003c/p\u003e\n\u003cp\u003e- SSLv23 method\u003c/p\u003e\n\u003cp\u003eA TLS/SSL connection established with these methods will understand the SSLv2, SSLv3, and TLSv1 protocol.\u003c/p\u003e","title":"[工作點滴] rtmps in rtmpdump with hardware engine development"},{"content":"There is a new sensor structure that introduce by Panasonic to replace color filter by color splitter. This kind of sensor remove general color filter and add the color deflector before the diode. The conventional color filter would cause 50%~70% light loss and new sensor reduce lots of the light loss. The following pictures show how it works.\nThe device can also be manufactured using current semiconductor fabrication processes. It doesn\u0026rsquo;t use special materials or processes. It\u0026rsquo;s a great news to bring this sensor to realization.\nThe comparison between the color splitter sensor and color filter sensor.\nPanasonic demo with only two-deflector method but various combinations are possible.That means, it could be adjusted by different application.\nAlthough it could provide much better sensitivity, I still have some question about it.\n- Would the resolution be sacrificed?\n- The diode of different pixel is not balanced, is there any side-effect occurred?\n- Would it be much more complicated for the image processing processor supported?\nAnyway, I\u0026rsquo;m still interesting with this sensor and I\u0026rsquo;ll keep eye on it.\n","permalink":"https://chenfu.ai/posts/%E7%A7%91%E6%8A%80%E6%96%B0%E7%9F%A5-panasonic-color-spliter-sensor/","summary":"\u003cp\u003eThere is a new sensor structure that introduce by Panasonic to replace color filter by color splitter. This kind of sensor remove general color filter and add the color deflector before the diode. The conventional color filter would cause 50%~70% light loss and new sensor reduce lots of the light loss. The following pictures show how it works.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/img/Blogger/pana_sensor_01.png\"\u003e\u003cimg loading=\"lazy\" src=\"/img/Blogger/pana_sensor_01.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/img/Blogger/pana_sensor_02.png\"\u003e\u003cimg loading=\"lazy\" src=\"/img/Blogger/pana_sensor_02.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe device can also be manufactured using current semiconductor fabrication processes. It doesn\u0026rsquo;t use special materials or processes. It\u0026rsquo;s a great news to bring this sensor to realization.\u003c/p\u003e","title":"[科技新知] Panasonic color spliter sensor"},{"content":"I\u0026rsquo;ve search on internet and get quick steps for whole process to generate Makefile by Autotools.\nautoscan . // scan the folder cp configure.scan configure.ac // copy the configure.scan to configure.ac vi configure.ac // edit the configure.ac // add AM_INIT_AUTOMAKE(hello,1.0) in configure.ac // this is required marco for automake aclocal // execute aclocal to generate aclocal.m4 autoconf // execute autoconf to generate configure autoheader automake \u0026ndash;add-missing // run automake touch NEWS; touch README; touch AUTHORS; touch ChangeLog // create related documents automake \u0026ndash;add-missing // run automake again ./configure // execute the configure to generate Makefile make // execute make According to the steps, I get more hint to modify the related files for my target.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-process-to-generate-makefile-by-autotools-with-makefileam/","summary":"\u003cp\u003eI\u0026rsquo;ve search on internet and get quick steps for whole process to generate Makefile by Autotools.\u003c/p\u003e\n\u003ch1 id=\"autoscan------------------------scan-the-folder\"\u003eautoscan .                      // scan the folder\u003c/h1\u003e\n\u003ch1 id=\"cp-configurescan-configureac---copy-the-configurescan-to-configureac\"\u003ecp configure.scan configure.ac  // copy the configure.scan to configure.ac\u003c/h1\u003e\n\u003ch1 id=\"vi-configureac------------------edit-the-configureac\"\u003evi configure.ac                 // edit the configure.ac\u003c/h1\u003e\n\u003cpre\u003e\u003ccode\u003e                              // add AM_INIT_AUTOMAKE(hello,1.0) in configure.ac  \n\n\n                              // this is required marco for automake  \n\u003c/code\u003e\u003c/pre\u003e\n\u003ch1 id=\"aclocal--------------------------execute-aclocal-to-generate-aclocalm4\"\u003eaclocal                         // execute aclocal to generate aclocal.m4\u003c/h1\u003e\n\u003ch1 id=\"autoconf-------------------------execute-autoconf-to-generate-configure\"\u003eautoconf                        // execute autoconf to generate configure\u003c/h1\u003e\n\u003ch1 id=\"autoheader\"\u003eautoheader\u003c/h1\u003e\n\u003ch1 id=\"automake-add-missing-----------run-automake\"\u003eautomake \u0026ndash;add-missing          // run automake\u003c/h1\u003e\n\u003ch1 id=\"touch-news-touch-readme-touch-authors-touch-changelog---create-related-documents\"\u003etouch NEWS; touch README; touch AUTHORS; touch ChangeLog  // create related documents\u003c/h1\u003e\n\u003ch1 id=\"automake-add-missing-----------run-automake-again\"\u003eautomake \u0026ndash;add-missing          // run automake again\u003c/h1\u003e\n\u003ch1 id=\"configure----------------------execute-the-configure-to-generate-makefile\"\u003e./configure                     // execute the configure to generate Makefile\u003c/h1\u003e\n\u003ch1 id=\"make-----------------------------execute-make\"\u003emake                            // execute make\u003c/h1\u003e\n\u003cp\u003eAccording to the steps, I get more hint to modify the related files for my target.\u003c/p\u003e","title":"[工作點滴] process to generate makefile by autotools with Makefile.am"},{"content":"I start to move the gstreamer version from 0.10.x to 1.0.x in openwrt. Two purpose, one is to get much more familiar with the gstreamer applications and plugins development, another one is to assist my colleagues for next schedule. Just make a quick note here.\nOfficial gstreamer packages version I use is 1.0.5:\ngstreamer core -\u0026gt; Modify Makefile and patch, compile ok. - gst-plugins-base -\u0026gt; Modify Makefile and patch, compile ok.\n- gst-plugins-good -\u0026gt; Modify Makefile and patch, compile ok.\n- gst-plugins-ugly -\u0026gt; To be check if required.\n- gst-plugins-bad -\u0026gt; Modify Makefile and patch, compile ok.\n- gst-libav -\u0026gt; To be check if required.\nProprietary plugins\n- package folder -\u0026gt; Modify the Makefile.\n- gst-plugin foler -\u0026gt; Modify the configure.ac\n- gst-plugin/src folder -\u0026gt; Modify the Makefile.am\n- plugin source\nGST_BOILERPLATE_FULL is gone, replace by G_DEFINE_TYPE_WITH_CODE\nadd the parent_class definition.\n#if 0\nGST_BOILERPLATE_FULL (GstA5sSrc, gst_a5s_src, GstBaseSrc, GST_TYPE_BASE_SRC, gst_a5s_src_init_interfaces);\n#else\n#define gst_a5s_src_parent_iclass parent_class\nG_DEFINE_TYPE_WITH_CODE (GstA5sSrc, gst_a5s_src, GST_TYPE_BASE_SRC, gst_a5s_src_init_interfaces);\n#endif\ninit funtion parameters is change.\n#if 0\nstatic void gst_a5s_src_init (GstA5sSrc * a5ssrc, GstA5sSrcClass * a5ssrc_class)\n#else\nstatic void gst_a5s_src_init (GstA5sSrc * a5ssrc)\n#endif\nremove the gone already functions.\naudio: Need lots of works to do.\nbuffer size: replace the GST_BUFFER_SIZE() to gst_buffer_get_size().\nbuffer data: replace the GST_BUFFER_DATA() by using the gst_buffer_map to access the data.\nAudio plugins:\n- GstRingBufferSpec -\u0026gt; GstAudioRingBufferSpec\n- The GstAudioRingBufferSpec has big changes. Lots parameters are re-factored in the GstAudioInfo.\n- The GstAudioInfo structure is as follow. The format part is in GstAudioFormatInfo.\n/**\nGstAudioInfo:\n@finfo: the format info of the audio\n@flags: additional audio flags\n@layout: audio layout\n@rate: the audio sample rate\n@channels: the number of channels\n@bpf: the number of bytes for one frame, this is the size of one\nsample * @channels @position: the positions for each channel\nInformation describing audio properties. This information can be filled\nin from GstCaps with gst_audio_info_from_caps().\nUse the provided macros to access the info in this structure.\n*/\nstruct _GstAudioInfo {\nconst GstAudioFormatInfo *finfo;\nGstAudioFlags flags;\nGstAudioLayout layout;\ngint rate;\ngint channels;\ngint bpf;\nGstAudioChannelPosition position[64];\n/\u0026lt; private \u0026gt;/\ngpointer _gst_reserved[GST_PADDING];\n};\n- GstAudioFormatInfo\n/**\nGstAudioFormatInfo:\n@format: #GstAudioFormat\n@name: string representation of the format\n@description: user readable description of the format\n@flags: #GstAudioFormatFlags\n@endianness: the endianness\n@width: amount of bits used for one sample\n@depth: amount of valid bits in @width\n@silence: @width/8 bytes with 1 silent sample\n@unpack_format: the format of the unpacked samples\n@unpack_func: function to unpack samples\n@pack_func: function to pack samples\nInformation for an audio format.\n*/\nstruct _GstAudioFormatInfo {\nGstAudioFormat format;\nconst gchar *name;\nconst gchar *description;\nGstAudioFormatFlags flags;\ngint endianness;\ngint width;\ngint depth;\nguint8 silence[8];\nGstAudioFormat unpack_format;\nGstAudioFormatUnpack unpack_func;\nGstAudioFormatPack pack_func;\n/\u0026lt; private \u0026gt;/\ngpointer _gst_reserved[GST_PADDING];\n};\n- Change the audio/x-raw-int to audio/x-raw for pad template.\n- To do list:\nCheck the timestamps mechanism in new alsa plugin example.\nCheck the audio GstAudioRingBufferSpec parameters.\nApplications\n- gst-rtsp-server\nexecute the autogen.sh and install the required tool to generate necessary files.\nadd the AC_PROG_CXX in configure.ac because our example is cpp based.\ncreate patch to make gst-libs/gst/rtsp in gst-plugins-base to be the latest master version.\nafter above patch, the gst-rtsp-server\u0026rsquo;s gst/rtsp-server library could be successfully built.\ngst_debug_add_log_function() function parameters change from 2 to 3.\ngst_debug_add_log_function(gst_log_function_syslog, NULL, NULL);\nbuffer size: replace the GST_BUFFER_SIZE() to gst_buffer_get_size().\nbuffer data: replace the GST_BUFFER_DATA() by using the gst_buffer_map to access the data.\nGstBuffer *buffer = gst_app_sink_pull_preroll(sink);\nGstMapInfo mapinfo = {0, };\ngst_buffer_map(buffer, \u0026amp;mapinfo, GST_MAP_READ);\n/* access the buffer by mapinfo.data and mapinfo.size */\ngst_buffer_unmap(buffer, \u0026amp;mapinfo);\ng_thread_create remove, use g_thread_new -\u0026gt; check further.\ngst_app_sink_set_callbacks() -\u0026gt; callbacks structure is change.\nways change to handle sink callback functions.\n#if 0\nGstBuffer *buffer = gst_app_sink_pull_preroll(sink);\n#else\nGstSample *sample = gst_app_sink_pull_preroll(sink);\nGstBuffer *buffer = gst_sampe_get_buffer(sample);\n#endif\n#if 0\nGstBuffer *buffer = gst_app_sink_pull_buffer(sink);\n#else\nGstSample *sample = gst_app_sink_pull_sample(sink);\nGstBuffer *buffer = gst_sampe_get_buffer(sample);\n#endif\nThe GstRTSPMediaMapping rename to be GstRTSPMountPoints, we can compare by the examples.\ngst_rtsp_server_get_media_mapping() become gst_rtsp_server_get_mount_points()\ngst_rtsp_media_mapping_add_factory() become gst_rtsp_mount_points_add_factory()\nIn configure.ac, remove the WARNING_CFLAGS because some warnings would cause errors.\n#GST_OPTION_CFLAGS=\u0026quot;$(WARNING_CFLAGS) $(ERROR_CFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS)\u0026quot;\nGST_OPTION_CFLAGS=\u0026quot;$(ERROR_CFLAGS) $(DEBUG_CFLAGS) $(PROFILE_CFLAGS) $(GCOV_CFLAGS) $(OPT_CFLAGS) $(DEPRECATED_CFLAGS)\u0026quot;\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-gstreamer-from-010x-to-10x-in-openwrt/","summary":"\u003cp\u003eI start to move the gstreamer version from 0.10.x to 1.0.x in openwrt. Two purpose, one is to get much more familiar with the gstreamer applications and plugins development, another one is to assist my colleagues for next schedule. Just make a quick note here.\u003c/p\u003e\n\u003cp\u003eOfficial gstreamer packages version I use is 1.0.5:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003egstreamer core -\u0026gt; Modify Makefile and patch, compile ok.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e- gst-plugins-base -\u0026gt; Modify Makefile and patch, compile ok.\u003c/p\u003e","title":"[工作點滴] gstreamer from 0.10.x to 1.0.x in openwrt"},{"content":"In previous articles, I tried to build the pjsip package, but it\u0026rsquo;s hard for me to make sure the package is work correctly because of my lacking knowledge of sip. Then I try to be more familiar with how the sip works. First, prepare a PC and install the switch on it. We have two popular choices, one is Asterisk and another one is Freeswitch. I choose the Freeswitch because there is a precompiled binaries for win7 already.\nhttp://wiki.freeswitch.org/wiki/Installation_Guide\nAfter installation, remember to allow the application to pass firewall. Because it is just for testing, I execute the Freeswitch with default configuration.\nWhen the switch is done, we could choose the softphones to test. Here are the information of the softphones.\nhttp://wiki.freeswitch.org/wiki/Softphones\nI choose the FSClient on windows 7.\nSet the device configuration.\nAdd the test account and register to Freeswitch.\nThen we can use the FSClient to do the test. More information in the getting started guide.\nhttp://wiki.freeswitch.org/wiki/Getting_Started_Guide\nThere are some common extensions for testing\n1000, 1001, \u0026hellip;, 1019 - Generic SIP extensions\n5000 - demo IVR (requires sounds and music files to be installed)\n9195 - five second delay echo test\n9196 - standard echo test\n9197 - milliwatt extension\n9198 - tetris extension for demo TGML generation\n9664 - music on hold (requires music files to be installed)\nIt\u0026rsquo;s easy, just dial it.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-sip-test-of-freeswitch-by-fsclient/","summary":"\u003cp\u003eIn previous articles, I tried to build the pjsip package, but it\u0026rsquo;s hard for me to make sure the package is work correctly because of my lacking knowledge of sip. Then I try to be more familiar with how the sip works. First, prepare a PC and install the switch on it. We have two popular choices, one is Asterisk and another one is Freeswitch. I choose the Freeswitch because there is a precompiled binaries for win7 already.\u003c/p\u003e","title":"[工作點滴] SIP test of Freeswitch by FSClient"},{"content":"Before trying to make the pjsip work on my embedded device, I build the related libraries on PC as the reference. My environment is based Ubuntu 10.04. See the following guide.\nhttp://trac.pjsip.org/repos/wiki/Getting-Started/Autoconf\nThe notes of packages building:\n- ALSA and OpenSSL libraries are optional and I do not install for first.\n- SDL, I download the version 2.0 and do \u0026ldquo;./configure\u0026rdquo;, \u0026ldquo;make; make install\u0026rdquo; to install the package to system. If we encounter privilege problem, please add sudo.\n- FFMPEG, please reference the document on FFMPEG official site. The link is as following. https://ffmpeg.org/trac/ffmpeg/wiki/UbuntuCompilationGuide\nThere are links for different version of the Ubuntu. We could follow the guide to build yasm, x264 and ffmpeg. The ffmpeg version(0.10.6) and building process is following pjsip guide.\n- PJSIP, I follow the guide to add the \u0026ldquo;#define PJMEDIA_HAS_VIDEO 1\u0026rdquo; in config_site.h and do the \u0026ldquo;./configure\u0026rdquo;. The weird thing is that the package still can be built whatever the definition is exist or not. Then \u0026ldquo;make dep\u0026rdquo;, \u0026ldquo;make\u0026rdquo; and \u0026ldquo;make install\u0026rdquo;(optional).\nIt\u0026rsquo;s not hard to build the packages but there are some uncertainty to me. Now let\u0026rsquo;s quickly build an application with GNU tools.\nThe guide I follow is http://trac.pjsip.org/repos/wiki/Getting_Started_Using.\nThere is an error occur when make.\ncc -o myapp myapp.cpp pkg-config --cflags --libs libpjproject\n/tmp/cczRrbTp.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'\ncollect2: ld returned 1 exit status\nmake: *** [myapp] Error 1\nThere are two ways to solve this. One is change the myapp.cpp to be myapp.c and another way is to add -lstdc++ in the Makefile.\nMakefile all: myapp\nmyapp: myapp.cpp\n$(CC) -o $@ $\u0026lt; pkg-config --cflags --libs libpjproject -lstdc++\nclean:\nrm -f myapp.o myapp\nThe myapp.cpp code.\n/* pjsip applicaiton */\n#include \u0026lt;pjlib.h\u0026gt;\n#include \u0026lt;pjlib-util.h\u0026gt;\n#include \u0026lt;pjmedia.h\u0026gt;\n#include \u0026lt;pjmedia-codec.h\u0026gt;\n#include \u0026lt;pjsip.h\u0026gt;\n#include \u0026lt;pjsip_simple.h\u0026gt;\n#include \u0026lt;pjsip_ua.h\u0026gt;\n#include \u0026lt;pjsua-lib/pjsua.h\u0026gt;\nint main()\n{\nprintf(\u0026quot;hello pjsip\\n\u0026quot;); return 0; }\nOkay, that\u0026rsquo;s all and we could start our application.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-pjsip-on-ubuntu/","summary":"\u003cp\u003eBefore trying to make the pjsip work on my embedded device, I build the related libraries on PC as the reference. My environment is based Ubuntu 10.04. See the following guide.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://trac.pjsip.org/repos/wiki/Getting-Started/Autoconf\"\u003ehttp://trac.pjsip.org/repos/wiki/Getting-Started/Autoconf\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe notes of packages building:\u003c/p\u003e\n\u003cp\u003e- ALSA and OpenSSL libraries are optional and I do not install for first.\u003c/p\u003e\n\u003cp\u003e- SDL, I download the version 2.0 and do \u0026ldquo;./configure\u0026rdquo;, \u0026ldquo;make; make install\u0026rdquo; to install the package to system. If we encounter privilege problem, please add sudo.\u003c/p\u003e","title":"[工作點滴] pjsip on ubuntu"},{"content":"There is a default pjsip package in the openwrt but it link to the extension package of ltq-tapi and oss. But what I need first is the package without extra packages. So I try to create the libraries by using the latest version 2.1 for the experiment.\nFirst, the Makefile of the package as following.\nMakefile of the package. include $(TOPDIR)/rules.mk\nPKG_NAME:=pjsip2\nPKG_VERSION:=2.1\nPKG_RELEASE:=0\nPKG_SOURCE:=pjproject-$(PKG_VERSION).tar.bz2\nPKG_SOURCE_URL:=http://www.pjsip.org/release/$(PKG_VERSION)/\nPKG_MD5SUM:=310eb63638dac93095f6a1fc8ee1f578\nPKG_INSTALL:=1\nPKG_BUILD_PARALLEL:=1\nPKG_BUILD_DIR:=$(BUILD_DIR)/pjproject-$(PKG_VERSION).$(PKG_RELEASE)\ninclude $(INCLUDE_DIR)/package.mk\ndefine Package/pjsip2\nSECTION:=lib\nCATEGORY:=Libraries\nURL:=http://www.pjsip.org/\nMAINTAINER:=John Crispin blogic@openwrt.org\nTITLE:=pjsip2\nDEPENDS:=+libuuid\nendef\nCONFIGURE_ARGS += \\\n\\\u0026ndash;disable-floating-point \\\n\\\u0026ndash;disable-g711-codec \\\n\\\u0026ndash;disable-l16-codec \\\n\\\u0026ndash;disable-g722-codec \\\n\\\u0026ndash;disable-g7221-codec \\\n\\\u0026ndash;disable-gsm-codec \\\n\\\u0026ndash;disable-ilbc-coder \\\n\\\u0026ndash;disable-libsamplerate \\\n\\\u0026ndash;disable-ipp \\\n\\\u0026ndash;disable-ssl \\\n\\\u0026ndash;disable-oss \\\n\\\u0026ndash;disable-sound\ndefine Build/Configure\n(cd $(PKG_BUILD_DIR); autoconf aconfigure.ac \u0026gt; aconfigure)\n$(call Build/Configure/Default)\nendef\ndefine Build/Compile\nCFLAGS=\u0026quot;$(TARGET_CFLAGS) $(EXTRA_CFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS)\u0026quot; \\\nCXXFLAGS=\u0026quot;$(TARGET_CFLAGS) $(EXTRA_CFLAGS) $(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS)\u0026quot; \\\nLDFLAGS=\u0026quot;$(TARGET_LDFLAGS) -lc $(LIBGCC_S) -lm\u0026quot; \\\n$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)\nendef\ndefine Build/InstallDev\n$(INSTALL_DIR) $(1)/usr/pjsip2\n$(CP) $(PKG_INSTALL_DIR)/usr $(1)/usr/pjsip2\nendef\n$(eval $(call BuildPackage,pjsip2))\nHere we will encounter the problem as follow.\n--target=BFDNAME - specify the target object format as BFDNAMEemulation options:\nNo emulation specific options\narm-openwrt-linux-uclibcgnueabi-ar: supported targets: elf32-littlearm elf32-bigarm elf32-little elf32-big srec symbolsrec verilog tekhex binary ihex\nmake[5]: *** [../lib/libpj-arm-openwrt-linux-gnu.a] Error 1\nmake[5]: Leaving directory /home/ubnt/aircam_temp/openwrt/build_dir/target-arm_v6k_uClibc-0.9.33.2_eabi/pjproject-2.1.0/pjlib/build' make[4]: *** [pjlib] Error 2 make[4]: Leaving directory /home/ubnt/aircam_temp/openwrt/build_dir/target-arm_v6k_uClibc-0.9.33.2_eabi/pjproject-2.1.0/pjlib/build\u0026rsquo;\nmake[3]: *** [all] Error 1\nThen we need to patch the aconfigure.ac as follow, this is reference to original content in pjsip patches.\n-\u0026ndash; pjproject-2.1.0.orig/aconfigure.ac 2013-01-23 14:18:18.000000000 +0800\n+++ pjproject-2.1.0/aconfigure.ac 2013-03-11 18:26:43.705804028 +0800\n@@ -48,9 +48,8 @@\nCROSS_COMPILE=echo ${CC} | sed 's/gcc//'\nfi\n-if test \u0026ldquo;$AR\u0026rdquo; = \u0026ldquo;\u0026rdquo;; then AR=\u0026quot;${CROSS_COMPILE}ar rv\u0026quot;; fi\n+AR=\u0026quot;${AR} rv\u0026quot;\nAC_SUBST(AR)\n-if test \u0026ldquo;$LD\u0026rdquo; = \u0026ldquo;\u0026rdquo;; then LD=\u0026quot;$CC\u0026quot;; fi\nAC_SUBST(LD)\nif test \u0026ldquo;$LDOUT\u0026rdquo; = \u0026ldquo;\u0026rdquo;; then LDOUT=\u0026quot;-o \u0026ldquo;; fi\nAC_SUBST(LDOUT)\nNew error occur that cannot find libgcc.a. This is quite weird.\narm-openwrt-linux-uclibcgnueabi-ld: cannot find libgcc.a\nmake[5]: *** [../bin/pjlib-test-arm-openwrt-linux-gnu] Error 1\nmake[5]: Leaving directory /home/ubnt/aircam_temp/openwrt/build_dir/target-arm_v6k_uClibc-0.9.33.2_eabi/pjproject-2.1.0/pjlib/build' make[4]: *** [pjlib-test] Error 2 make[4]: Leaving directory /home/ubnt/aircam_temp/openwrt/build_dir/target-arm_v6k_uClibc-0.9.33.2_eabi/pjproject-2.1.0/pjlib/build\u0026rsquo;\nmake[3]: *** [all] Error 1\nI check the toolchain build_dir in openwrt and copy the libgcc.a in staging_dir toolchain/lib. The error solved and the package could successfully be built.\nThere are tasks to be done if we want to integrate with private audio and video modules.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-pjsip-package-build-in-openwrt/","summary":"\u003cp\u003eThere is a default pjsip package in the openwrt but it link to the extension package of ltq-tapi and oss. But what I need first is the package without extra packages. So I try to create the libraries by using the latest version 2.1 for the experiment.\u003c/p\u003e\n\u003cp\u003eFirst, the Makefile of the package as following.\u003c/p\u003e\n\u003ch1 id=\"makefile-of-the-package\"\u003eMakefile of the package.\u003c/h1\u003e\n\u003cp\u003einclude $(TOPDIR)/rules.mk\u003c/p\u003e\n\u003cp\u003ePKG_NAME:=pjsip2\u003cbr\u003e\nPKG_VERSION:=2.1\u003cbr\u003e\nPKG_RELEASE:=0\u003c/p\u003e\n\u003cp\u003ePKG_SOURCE:=pjproject-$(PKG_VERSION).tar.bz2\u003cbr\u003e\nPKG_SOURCE_URL:=http://www.pjsip.org/release/$(PKG_VERSION)/\u003cbr\u003e\nPKG_MD5SUM:=310eb63638dac93095f6a1fc8ee1f578\u003c/p\u003e\n\u003cp\u003ePKG_INSTALL:=1\u003cbr\u003e\nPKG_BUILD_PARALLEL:=1\u003c/p\u003e\n\u003cp\u003ePKG_BUILD_DIR:=$(BUILD_DIR)/pjproject-$(PKG_VERSION).$(PKG_RELEASE)\u003c/p\u003e","title":"[工作點滴] pjsip package build in openwrt"},{"content":"I\u0026rsquo;ve already change my tool from the notepad++ or Microsoft\u0026rsquo;s word to Evernote to make a quick note for several months. It\u0026rsquo;s quite simple to use and the data can be synchronize to cloud and I could access my notes through network everywhere anytime. There is a news that Samsung\u0026rsquo;s refrigerator built in Evernote for food management and Samsung show this device in the CES show. The story at this moment, I think Evernote make his products go into a new era. However, the morning sun never lasts a day. Evernote was hacked and the customers information were possibly stolen last week.\nThis news remind me again about the security and reliability of the cloud service. Evernote build his own cloud service server but the security problem is still happen. However, I do not worry about it because when everyone notice, it will be fixed in near future. But it makes me feel that it may not worth to invest on building own cloud service server on public place especially when we do not have enough security people to maintain it. I\u0026rsquo;ve ever attended the CSSLP class and I learned that the security question is very complicated. Maybe it is much better for us to host our cloud service on famous 3rd party provider like AWS.\n","permalink":"https://chenfu.ai/posts/%E7%94%A2%E6%A5%AD%E8%A7%80%E5%AF%9F-evernote-was-hacked/","summary":"\u003cp\u003eI\u0026rsquo;ve already change my tool from the notepad++ or Microsoft\u0026rsquo;s word to Evernote to make a quick note for several months. It\u0026rsquo;s quite simple to use and the data can be synchronize to cloud and I could access my notes through network everywhere anytime. There is a news that Samsung\u0026rsquo;s refrigerator built in Evernote for food management and Samsung show this device in the CES show. The story at this moment, I think Evernote make his products go into a new era. However, the morning sun never lasts a day. Evernote was hacked and the customers information were possibly stolen last week.\u003c/p\u003e","title":"[產業觀察] Evernote was hacked"},{"content":"There is a company that we discuss recently because of their elegant embedded NVR device.\nI just talk about the private cloud and public cloud roles in the surveillance system in previous article.\nhttp://frankuo.blogspot.tw/2013/02/pure-public-or-hybrid-cloud-for.html\nSmartvue\u0026rsquo;s product architecture is a case of the hybrid cloud. Let\u0026rsquo;s see the whole system they define.\nWe can take S9 server as the private cloud server for local storage and playback. If we remove this part, the total system become a pure public cloud type. Although the pure cloud system is simpler, there are still some limitations at this moment. Smatrvue let the high resolution video to be stored on the local server and high or low resolution video can optionally be put on the secure cloud. The reason is obvious that the network environment of LAN is still much clean and fast than WAN and all high resolution video can be saved totally without any loss.\nSomeday, we do not need this kind of device when the public network become solid on bandwidth, however, it\u0026rsquo;s not now.\n","permalink":"https://chenfu.ai/posts/%E7%94%A2%E6%A5%AD%E8%A7%80%E5%AF%9F-smartvue-cloud-architecture/","summary":"\u003cp\u003eThere is a company that we discuss recently because of their elegant embedded NVR device.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHFouxONm22DolSrlvGfM3fRu1xteSdwoHYOH-Bi7YU808KPkpPZ_2dpqnYzmi0hnc9NhGDEXJT9H8PKNJ8itKMIpx5m2vBnByKRC-rRUhVNK2dU4AWBv8RPe5PUaxfO40A-yTDgsj7z_j/s1600/private_cloud_server.png\"\u003e\u003cimg loading=\"lazy\" src=\"/img/Blogger/private_cloud_server.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eI just talk about the private cloud and public cloud roles in the surveillance system in previous article.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://frankuo.blogspot.tw/2013/02/pure-public-or-hybrid-cloud-for.html\"\u003ehttp://frankuo.blogspot.tw/2013/02/pure-public-or-hybrid-cloud-for.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eSmartvue\u0026rsquo;s product architecture is a case of the hybrid cloud. Let\u0026rsquo;s see the whole system they define.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyZpDsqVAin2ZyOPIyDUutd0yq3ejlX92AwrRgq-02XHJl4ZNpP-XlpeqG-CsDUBXyp0ffS9a-naomBb8OZAFiM_D1vobsm_7yT7QTBkUuO0jlKReUwPOXMHQZRR0z-AaKc11bZh_5UvTC/s1600/smartvue_system_arch.png\"\u003e\u003cimg loading=\"lazy\" src=\"/img/Blogger/smartvue_system_arch.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eWe can take S9 server as the private cloud server for local storage and playback. If we remove this part, the total system become a pure public cloud type. Although the pure cloud system is simpler, there are still some limitations at this moment. Smatrvue let the high resolution video to be stored on the local server and high or low resolution video can optionally be put on the secure cloud. The reason is obvious that the network environment of LAN is still much clean and fast than WAN and all high resolution video can be saved totally  without any loss.\u003cbr\u003e\nSomeday, we do not need this kind of device when the public network become solid on bandwidth, however, it\u0026rsquo;s not now.\u003c/p\u003e","title":"[產業觀察] Smartvue cloud architecture"},{"content":"I saw a news on TV today that about Firefox OS for mobile phone and it got my curiosity. So I go Mozilla\u0026rsquo;s web site to see what\u0026rsquo;s that about. See the link: http://www.mozilla.org/en-US/firefox/partners/#\nThe first page have the overview of the Firefox OS. The point to me is following picture. Some of telecommunication operators and device manufacturer get involved in the Firefox OS. It shows that the operators and manufacturer want to liberate the apps stores from the providers like Apple, Google.\nHere is a picture that from the Mozilla Taiwan site. It describe the difference the operation mode between original and new Open Web App operation mode.\nI think the telecommunication operators would be very interesting with it. Because when more requirements are created for consumers to access the web, the operators can earn more. Developers could have one more option to provide their apps and could dealing with customers directly. For manufacturer, I do not see what they can get except the ODM from operators but they still play an important roles here because variety of devices are required. Would Apple and Google agree this?\n","permalink":"https://chenfu.ai/posts/%E7%A7%91%E6%8A%80%E6%96%B0%E7%9F%A5-firefox-os---liberate-the-app-stores/","summary":"\u003cp\u003eI saw a news on TV today that about Firefox OS for mobile phone and it got my curiosity. So I go Mozilla\u0026rsquo;s web site to see what\u0026rsquo;s that about. See the link: \u003ca href=\"http://www.mozilla.org/en-US/firefox/partners/\"\u003ehttp://www.mozilla.org/en-US/firefox/partners/#\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdX9EUOzMFh_kM1KlEJOd7BckOI6WEDCMXQvimm-VsIaexHEt85nRUq-5XSe4UzEv8N8BEK7_IYB7sWFyAiuI-5t4W2XelsWOVv_Jph7sFUrf7e2eyAd__RqxcJg7uQoNVe-Bgtr2XnAsQ/s1600/ScreenClip+%5B3%5D.png\"\u003e\u003c/p\u003e\n\u003cp\u003eThe first page have the overview of the Firefox OS. The point to me is following picture. Some of telecommunication operators and device manufacturer get involved in the Firefox OS. It shows that the operators and manufacturer want to liberate the apps stores from the providers like Apple, Google.\u003c/p\u003e","title":"[科技新知] Firefox OS - liberate the app stores"},{"content":"Our company update the home page to a brand new picture. There is a name \u0026lsquo;Liberated\u0026rsquo; to describe the new networking technology we implemented.\nAccording to the dictionary, I\u0026rsquo;m most likely the description \u0026ldquo;free from traditional social restraints\u0026rdquo; because we are trying to make the fundamental change in different area that we enter. It\u0026rsquo;s an interesting journey to me.\nAlthough it\u0026rsquo;s not 100% correct, I still want to record what I saw here. I plot the company\u0026rsquo;s product map simply by personal thinking as follow from the webpage.\nIt looks quite simple and most of the items are not new concept here. If we can do well in every point that describe here, we have big chance to success. So we have to be more hard working to liberated them all.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-liberated-networking-technology/","summary":"\u003cp\u003eOur company update the home page to a brand new picture. There is a name \u0026lsquo;Liberated\u0026rsquo; to describe the new networking technology we implemented.\u003c/p\u003e\n\u003cp\u003eAccording to the dictionary, I\u0026rsquo;m most likely the description \u0026ldquo;free from traditional social restraints\u0026rdquo; because we are trying to make the fundamental change in different area that we enter. It\u0026rsquo;s an interesting journey to me.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgqAbndB9kFBBtcnF4lTp3zRQbxMo1YJybLuYSDNq1GirN1besN8V4t4CUHdg1iq1xeOls3eqNU2CyFAv7RLB0kGkmLILv4vgEyEbG1ej_V6hHVHkCgnc_LIxdU2lyHt_QCqhGVLRc7WuB/s1600/ubnt_liberated.jpg\"\u003e\u003cimg loading=\"lazy\" src=\"/img/Blogger/ubnt_liberated.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eAlthough it\u0026rsquo;s not 100% correct, I still want to record what I saw here. I plot the company\u0026rsquo;s product map simply by personal thinking as follow from the webpage.\u003c/p\u003e","title":"[工作點滴] Liberated networking technology"},{"content":"我們公司最近將首頁更新為全新的視覺形象。網頁上出現了一個名為 \u0026ldquo;Liberated\u0026rdquo; (解放) 的字眼，用來描述我們所實作的全新網路技術。\n根據字典，我最喜歡的描述是「不受傳統社會約束 (free from traditional social restraints)」，因為我們正致力於在我們進入的各個不同領域中進行根本性的變革。對我而言，這是一段非常有趣的旅程。\n雖然這份紀錄未必完全精確，但我仍想記下我在這裡看到的點滴。根據網頁資訊，我簡單畫出了我個人認為的公司產品地圖及其核心思考。\n","permalink":"https://chenfu.ai/posts/liberated-networking-technology/","summary":"\u003cp\u003e我們公司最近將首頁更新為全新的視覺形象。網頁上出現了一個名為 \u0026ldquo;Liberated\u0026rdquo; (解放) 的字眼，用來描述我們所實作的全新網路技術。\u003c/p\u003e\n\u003cp\u003e根據字典，我最喜歡的描述是「不受傳統社會約束 (free from traditional social restraints)」，因為我們正致力於在我們進入的各個不同領域中進行根本性的變革。對我而言，這是一段非常有趣的旅程。\u003c/p\u003e","title":"Liberated 網路技術：打破傳統束縛的創新"},{"content":"After the RabbitMQ server and client are setup, I start to learn more about the RabbitMQ system. The core of RabbitMQ is based AMQP protocol. There are lots of information we can get on wiki.\nhttp://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol\nThe AMQP is basically start from bank industry and that\u0026rsquo;s why some related terminology like broker are used in AMQP specification. Here is model of the AMQP.\nIf we want to make the application to be two way communication, we have to make the application with publisher and consumer characteristics.\nThere are definitions in the specifications and we can check directly on it.\nHere is the packet sequence diagram that collect by the Wireshark.\nThe application plays two roles of clients in different thread.\nWe can define the private header and body in the content body for personal functions.\nThere is an important terminology name Routing Key. It\u0026rsquo;s like the \u0026lsquo;To:\u0026rsquo;, \u0026lsquo;cc:\u0026rsquo; and \u0026lsquo;bcc:\u0026rsquo; in email. We have to synchronize the routing key name to let the message can send to the device we want. The definition in specification:\nThe first step of the application is basically done. Later we will implement more functions that we want on it.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-rabbitmq---amqp-protocol-note/","summary":"\u003cp\u003eAfter the RabbitMQ server and client are setup, I start to learn more about the RabbitMQ system. The core of RabbitMQ is based AMQP protocol. There are lots of information we can get on wiki.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol\"\u003ehttp://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe AMQP is basically start from bank industry and that\u0026rsquo;s why some related terminology like broker are used in AMQP specification. Here is model of the AMQP.\u003c/p\u003e\n\u003cp\u003eIf we want to make the application to be two way communication, we have to make the application with publisher and consumer characteristics.\u003c/p\u003e","title":"[工作點滴] RabbitMQ - amqp protocol note"},{"content":"3D image/video is blooming in recent years because of the entertainment industry like movie and game. There are also lot kinds of device appear like 3D camera, 3D TV\u0026hellip;etc. The player play the 3D image in early stage is by put two camera into one and post processing the two photos into one.\nGopro has the similar structure of their hero camera and we have to buy two camera with some accessories to make this.\nThere are devices has already embedded two lens and sensors for having 3D functions like Sony camcorder.\nI saw a news on Tech-on today that Panasonic developed a 2.1-Mpixel CMOS image sensor for camera systems capable of taking 3D movie with a single lens and announced it at ISSCC 2013. See following links.\nhttp://big5.nikkeibp.com.cn/news/semi/64837-20130222.html\nFor taking 3D video, it is necessary to separate light into light entering the left eye and light entering the right eye and to make sure that the two types of lights come to different pixels of the CMOS sensor. To realize this, Panasonic employed a structure that combines a lenticular lens and mirror elements (digital micro lenses: DMLs) made by forming patterns whose size is smaller than light wavelength with a lithography technology.\nThe lights separated by the lenticular lens are collected with the DMLs to increase their intensities. Then, they enter the pixels of the CMOS sensor. With this structure, the light entering the left eye and the light entering the right eye do not interfere with each other much. Therefore, the intensities of the lights become high enough. The received signals obtained in this way are processed via line memory to create 3D video.\nCurrently, Panasonic is planning to apply the CMOS sensor to industrial and mobile devices, expecting that products equipped with the sensor will debut in 2014.\nThis may realize the 3D camera system with lower cost because we just need one lens but there are still some information need to be check further. Like the sensitivity, resolution, optical format that lens need, back-end processor and the price of this sensor. I\u0026rsquo;m very excite for this sensor because it cam simplified the design of the 3D device system. We also can extend the advantages of the 3D system to some applications especially for image system.\n","permalink":"https://chenfu.ai/posts/%E7%A7%91%E6%8A%80%E6%96%B0%E7%9F%A5-panasonics-3d-cmos-image-sensor/","summary":"\u003cp\u003e3D image/video is blooming in recent years because of the entertainment industry like movie and game. There are also lot kinds of device appear like 3D camera, 3D TV\u0026hellip;etc. The player play the 3D image in early stage is by put two camera into one and post processing the two photos into one.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/img/Blogger/dslr_3d_handmade.jpg\"\u003e\u003cimg loading=\"lazy\" src=\"/img/Blogger/dslr_3d_handmade.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eGopro has the similar structure of their hero camera and we have to buy two camera with some accessories to make this.\u003c/p\u003e","title":"[科技新知] Panasonic's 3D CMOS image sensor"},{"content":"There is a message post on Facebook by my former boss that talk about a guy in China who help people to order the ticket before important holidays. He is a Peking University student whose name is Ji-Yang Pei(裴濟洋), 23 years old. There is a report from China\u0026rsquo;s TV station and the link is as following.\nhttp://dailynews.sina.com/bg/chn/chnlocal/phoenixtv/20130222/01194273327.html\nIn China, people who left home for working would go home every Chinese Lunar New Year. It is the biggest human migration period in the world and it\u0026rsquo;s quite hard to get a ticket to go home. Pei provide more opportunity for those people to get a ticket especially the underprivileged ones in past three years. Later, he did not just provide the fish but also teach us how to fish. Pei post a thousand words of article on the internet to let us know how to do it. Because of this, he become a famous person, lots of people call him the Ticket King of Peking University.\nWhy does Pei can do this? He said he has the train network and timetable is his head. Besides, we have to notice the dynamic message and have mentally prepared that it is a difficulty task to go home. We can not just cut diamond by diamond because the direct route for home is also the most popular one. The target is there, we can use our brain on the route to reach it. The thinking also can be the philosophy on business. When we encounter troubles on one way, we could have different way to reach the target.\nThis event make my thinking of the situation in Taiwan. We also encounter the same situation but we do not have that strong feeling before because there is only one train route there and another choice is bus. Besides, the distance from the most northern to southern is 400~500 kilometers and we always have direct thinking in our life. Is that why we become a person as stubborn as a mule? Just kidding.\nI quite admire this young man because he observe the the society and help people with his ability. Even though he is a Peiking University student, he never think himself above business. Let\u0026rsquo;s learn from him and have a hand clap to him.\n","permalink":"https://chenfu.ai/posts/%E9%9B%9C%E4%B8%83%E9%9B%9C%E5%85%AB-peking-university-tickets-king---%E8%A3%B4%E6%BF%9F%E6%B4%8B/","summary":"\u003cp\u003eThere is a message post on Facebook by my former boss that talk about a guy in China who help people to order the ticket before important holidays. He is a Peking University student whose name is Ji-Yang Pei(裴濟洋), 23 years old. There is a report from China\u0026rsquo;s TV station and the link is as following.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://dailynews.sina.com/bg/chn/chnlocal/phoenixtv/20130222/01194273327.html\"\u003ehttp://dailynews.sina.com/bg/chn/chnlocal/phoenixtv/20130222/01194273327.html\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eIn China, people who left home for working would go home every Chinese Lunar New Year. It is the biggest human migration period in the world and it\u0026rsquo;s quite hard to get a ticket to go home. Pei provide more opportunity for those people to get a ticket especially the underprivileged ones in past three years. Later, he did not just provide the fish but also teach us how to fish. Pei post a thousand words of article on the internet to let us know how to do it. Because of this, he become a famous person, lots of people call him the Ticket King of Peking University.\u003c/p\u003e","title":"[雜七雜八] Peking University Tickets King - 裴濟洋"},{"content":"在完成 RabbitMQ 伺服器與用戶端的架構設定後，我開始深入學習 RabbitMQ 系統。RabbitMQ 的核心是基於 AMQP 協定。在維基百科上有豐富的相關資訊可供參考。\nAMQP 最初起源於銀行業，這也解釋了為何 AMQP 規範中會使用「經紀人 (Broker)」等相關術語。這裡展示了 AMQP 的 模型。如果我們希望應用程式具備雙向通訊的能力，該程式必須同時具備「發布者 (Publisher)」與「消費者 (Consumer)」的特性。\n在技術規範中都有明確定義，我們可以直接查閱。這裡附上由 Wireshark 擷取的封包時序圖 (Packet sequence diagram)。\n","permalink":"https://chenfu.ai/posts/rabbitmq-amqp-protocol-note/","summary":"\u003cp\u003e在完成 RabbitMQ 伺服器與用戶端的架構設定後，我開始深入學習 RabbitMQ 系統。RabbitMQ 的核心是基於 AMQP 協定。在維基百科上有豐富的相關資訊可供參考。\u003c/p\u003e\n\u003cp\u003eAMQP 最初起源於銀行業，這也解釋了為何 AMQP 規範中會使用「經紀人 (Broker)」等相關術語。這裡展示了 AMQP 的 模型。如果我們希望應用程式具備雙向通訊的能力，該程式必須同時具備「發布者 (Publisher)」與「消費者 (Consumer)」的特性。\u003c/p\u003e","title":"RabbitMQ - AMQP 協定學習筆記"},{"content":"I saw a news recently that talk about the national policy on electronics 2012 of India. Kapil Sibal, the Minister for Communications and Information Technology says the government approve the policy and plan to invest 100 billion for electronics industry fostering before 2020. It\u0026rsquo;s natural trend for India to extend from their famous software industrial to hardware.\nKapil visit Japan\u0026rsquo;s recently and says it\u0026rsquo;s very important to have strategy cooperation with Japan electronics company. The most important one is to build first semiconductor factory. The plan will kick-off before October 2013 and start to production around 2015~2016. Then based on the plenty of software engineer, Japan company can have much progress in India on embedded system.\nAccording the news, I think India have the right strategy to do this. Japan\u0026rsquo;s electronics industry gradually lose their competitive since years ago because their thinking do not keep up with the trend. India have a lots of advantages to help Japan\u0026rsquo;s company reverse this situation including the software industry, low cost man power, big market\u0026hellip;etc. Besides the economic view point, the political strategy in Asia, it is inevitable for Japan to keep more relations with China\u0026rsquo;s neighbor union.\nLet\u0026rsquo;s keep observing how the things going.\n","permalink":"https://chenfu.ai/posts/%E7%94%A2%E6%A5%AD%E8%A7%80%E5%AF%9F-india-electronic-policy/","summary":"\u003cp\u003eI saw a news recently that talk about the national policy on electronics 2012 of India. Kapil Sibal, the Minister for Communications and Information Technology says the government approve the policy and plan to invest 100 billion for electronics industry fostering before 2020. It\u0026rsquo;s natural trend for India to extend from their famous software industrial to hardware.\u003c/p\u003e\n\u003cp\u003eKapil visit Japan\u0026rsquo;s recently and says it\u0026rsquo;s very important to have strategy cooperation with Japan electronics company. The most important one is to build first semiconductor factory. The plan will kick-off before October 2013 and start to production around 2015~2016. Then based on the plenty of software engineer, Japan company can have much progress in India on embedded system.\u003c/p\u003e","title":"[產業觀察] India electronic policy"},{"content":"After I wrote the Vuzix Smart glasses for just hours, Google launched their glass and built a new web site for this product. Maybe google do not want to be left behind when Vuzix award from CES.\nhttp://www.google.com/glass/start/\nThe page is simple and clear. We could see a video in the link to sense how it feels. All the functions that describe in what it does are totally from audio, video and gesture recognition. We can take the photo, record the video, translation, search the information, navigation\u0026hellip;etc in real-time.\nAll of the recognition technology have to link with the requirements of people and that\u0026rsquo;s why google raise a competition for people to write down \u0026ldquo;what would you do if you had Glass\u0026rdquo;. Once the idea is adopted, we could become the Glass Explorer and buy Glass with USD $1500.\nHowever, this activity is for 18+ years old and live in the US. Anyway, I could not wait to see what\u0026rsquo;s happen next.\n","permalink":"https://chenfu.ai/posts/%E7%A7%91%E6%8A%80%E6%96%B0%E7%9F%A5-google-glass-launch/","summary":"\u003cp\u003eAfter I wrote the \u003ca href=\"http://frankuo.blogspot.tw/2013/02/vuzix-smart-glasses-m100.html\"\u003eVuzix Smart glasses\u003c/a\u003e for just hours, Google launched their glass and built a new web site for this product. Maybe google do not want to be left behind when Vuzix award from CES.\u003cbr\u003e\n\u003ca href=\"http://www.google.com/glass/start/\"\u003ehttp://www.google.com/glass/start/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/img/Blogger/glass_page.png\"\u003e\u003cimg loading=\"lazy\" src=\"/img/Blogger/glass_page.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe page is simple and clear. We could see a video in the link to sense how it feels. All the functions that describe in what it does are totally from audio, video and gesture recognition. We can take the photo, record the video, translation, search the information, navigation\u0026hellip;etc in real-time.\u003cbr\u003e\nAll of the recognition technology have to link with the requirements of people and that\u0026rsquo;s why google raise a competition for people to write down \u0026ldquo;what would you do if you had Glass\u0026rdquo;. Once the idea is adopted, we could become the Glass Explorer and buy Glass with USD $1500.\u003c/p\u003e","title":"[科技新知] Google Glass launch"},{"content":"I like to play basketball since I was a high school student and I still play around one to twice a week now. Although I love this sport, I do not have too much passion to see the games like NBA after MJ retired. In past year, I started to pay attention on it. One reason is Jeremy Lin and the other is the CEO of my company bought Memphis Grizzlies last year. I start to realize this is not just only a game but also contain a lot of things in it.\nThere are two trades that I noticed in recently. One is no doubt Grizzlies because it\u0026rsquo;s much more related to my life. But I\u0026rsquo;m more interesting on Houston Rocket\u0026rsquo;s trade. There is an article that wrote by blog in Taiwan and I learn a lot from this article.\nhttp://www.isay.tw/?p=2443\nThis guy \u0026lsquo;isay\u0026rsquo; observe the unusual dispatch of the McHale before the all star game. He analysis the position, salary\u0026hellip;etc of all players and provide a list of 5 players on 2/17. The news disclosed early today, 4 players in the list are traded. I\u0026rsquo;m amazing that he have the high accurate prediction. Maybe this author have the business sense too. After this, I may have a different view to see the sports not only NBA but also MLB\u0026hellip;etc.\n","permalink":"https://chenfu.ai/posts/%E4%BC%91%E9%96%92%E9%81%8B%E5%8B%95-the-trade-of-houston-rockets/","summary":"\u003cp\u003eI like to play basketball since I was a high school student and I still play around one to twice a week now. Although I love this sport, I do not have too much passion to see the games like NBA after MJ retired. In past year, I started to pay attention on it. One reason is Jeremy Lin and the other is the CEO of my company bought Memphis Grizzlies last year. I start to realize this is not just only a game but also contain a lot of things in it.\u003c/p\u003e","title":"[休閒運動] The trade of Houston Rockets"},{"content":"I saw a news that about the Vuzix Smart Glasses M100 and it get a recipient of the CES (Consumer Electronics Show) Innovations 2013 Design and Engineering Award BEST OF INNOVATIONS, and selected as Best Technology in the Wireless Handset Accessory category. More information in following link.\nhttp://www.vuzix.com/consumer/products_browse.html#video-eyewear\nIt\u0026rsquo;s an interesting device but there are still challenges behind. Since Google launch their project glass, Vuzix is the 2nd company to make the similar product. So M100 get a lot of discussion even google guys go their booth to have it a look. According to the hardware specification from Vuzix web sites. It\u0026rsquo;s totally an android based smart phone and the difference is the glasses appearance only. It\u0026rsquo;s not special by just hardware specification only.\nI think the story of this product is based on the intelligence functions like the video recognition, gesture recognition, voice recognition\u0026hellip;etc. When these functions are introduced, this device become very interesting.\nVuzix also provide the SDK for developers and it may follow the smart phone pace to have variety of apps on the market.\nSo, let\u0026rsquo;s look forward to it.\n","permalink":"https://chenfu.ai/posts/%E7%A7%91%E6%8A%80%E6%96%B0%E7%9F%A5-vuzix-smart-glasses-m100/","summary":"\u003cp\u003eI saw a news that about the Vuzix Smart Glasses M100 and it get a recipient of the CES (Consumer Electronics Show) Innovations 2013 Design and Engineering Award BEST OF INNOVATIONS, and selected as Best Technology in the Wireless Handset Accessory category. More information in following link.\u003cbr\u003e\n\u003ca href=\"http://www.vuzix.com/consumer/products_browse.html#video-eyewear\"\u003ehttp://www.vuzix.com/consumer/products_browse.html#video-eyewear\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eIt\u0026rsquo;s an interesting device but there are still challenges behind. Since Google launch their project glass, Vuzix is the 2nd company to make the similar product. So M100 get a lot of discussion even google guys go their booth to have it a look. According to the hardware specification from Vuzix web sites. It\u0026rsquo;s totally an android based smart phone and the difference is the glasses appearance only. It\u0026rsquo;s not special by just hardware specification only.\u003c/p\u003e","title":"[科技新知] Vuzix Smart Glasses M100"},{"content":"Before the Chinese Lunar New Year, I got the latest alpha version of the AirVision2. It does not only inherit the pros from previous version but more quick and stable also. I just have some preview here about the installation and main pages showing.\nAfter double clicking the windows installer, following the step of installation. When executing the airVision2, there is a windows security information pop up, please make sure the firewall does not block your application.\nThe airVision shows at the right bottom. Click the Launch a Browser to start a webpage for further.\nFirst, we have to enter the name of the host PC name, language and position we are.\nSecond step, to create an account to accessing the airVision.\nThird step, to add controller. If no, just go Next.\nFinally, finish the first time configuration.\nLogin.\nClicking the unmanaged part of cameras and a list of unmanaged cameras show up.\nEntering the information of the camera and clicking the Manage to make the connection.\nOpen the Map page.\nDrag and drop the camera we want to the Map.\nSame as the previous version, when detect motion, the color is change.\nAdd all the cameras on the Map we have.\nWe can see all the devices information in Devices page.\nWe can get the related statistics information in the Statistics page.\nWe can handle the recording in the Recordings page.\nAnalytics function as well.\nThe toggle bar at the bottom has lots of system information.\nAfter quick playing, it\u0026rsquo;s really over my expectation. Hope it can be launched soon.\nThere is a video demo on youtube for previous version. Maybe we can do comparisons in near future.\nhttp://www.youtube.com/watch?v=Gp3nafT3n90\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-airvision-20-preview-on-win7/","summary":"\u003cp\u003eBefore the Chinese Lunar New Year, I got the latest alpha version of the AirVision2. It does not only  inherit the pros from previous version but more quick and stable also. I just have some preview here about the installation and main pages showing.\u003c/p\u003e\n\u003cp\u003eAfter double clicking the windows installer, following the step of installation. When executing the airVision2, there is a windows security information pop up, please make sure the firewall does not block your application.\u003c/p\u003e","title":"[工作點滴] AirVision 2.0 preview on Win7"},{"content":"Weeks ago, the supplier demo the Miracast function to us and my colleague told me maybe we can think if there are applications for surveillance system. At first I saw nothing special for surveillance application but I may find there is now.\nHere is a capture picture from the whitepaper of WiFi alliance.\nBasically, Miracast is a protocol and this means Miracast can be over any kind of infrastructure. However, Miracast connections are expected to be predominantly established between Wi-Fi devices connected with each other directly, without an AP acting as an intermediary. According to the topology, what we can see is a source to a sink and it is a peer-to-peer connection.\nGo back to the topic we want to talk for surveillance. I plot a picture as follow, and this is just like a traditional surveillance system with cameras, recorder and monitor.\nNow the connection part become the Miracast wifi direct to the adapter like NVR and play the video through HDMI to monitor finally. In future, the smart TV integrate the adapter and monitor part and link to cloud service as the picture.\nIf our target system is small with 4~8ch or under, this structure is quite simple and real for home, small store\u0026hellip;etc. It\u0026rsquo;s interesting and I\u0026rsquo;m looking forward to see it happen in near future.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-miracast-in-surveillance-system/","summary":"\u003cp\u003eWeeks ago, the supplier demo the Miracast function to us and my colleague told me maybe we can think if there are applications for surveillance system. At first I saw nothing special for surveillance application but I may find there is now.\u003cbr\u003e\nHere is a capture picture from the whitepaper of WiFi alliance.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEfz7cBaDm4VNf4yYqIMxq55stocSsmD75bUL5eF8MfXjE35i9620eRKzmbPEWgmwhyphenhyphenI7mL9lEsDBk52uNUiB6wRG1UNN_aFCP47HlqvGjlnxgD7g-tosxYyC1nfIHbFybJFyV3Gw3Si6v/s1600/miracast_topology.jpg\"\u003e\u003cimg loading=\"lazy\" src=\"/img/Blogger/miracast_topology.jpg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eBasically, Miracast is a protocol and this means Miracast can be over any kind of infrastructure. However, Miracast connections are expected to be predominantly established between Wi-Fi devices connected with each other directly, without an AP acting as an intermediary. According to the topology, what we can see is a source to a sink and it is a peer-to-peer connection.\u003cbr\u003e\nGo back to the topic we want to talk for surveillance. I plot a picture as follow, and this is just like a traditional surveillance system with cameras, recorder and monitor.\u003c/p\u003e","title":"[工作點滴] Miracast in surveillance system"},{"content":"The pure public cloud is no doubt that we build the web services on public and the hybrid combine the private part. According to the information on wiki, the public cloud aka external cloud is related to the service is provided by third party. There is a picture on wiki can describe exactly what we talk about.\nBasically, there are four deployment models on wiki. The private cloud can\u0026rsquo;t satisfy the requirements of the surveillance system. We do not talk about the community cloud also because it\u0026rsquo;s not real on surveillance system.\nThere is a famous network camera company named Dropcam that deployment as pure public cloud system. When we install the the devices, we have to create an account and register them. As I know, Dropcam use the Amazon Web Service as the infrastructure. I just plot some simple block diagrams to describe it.\nThe way of Dropcam is the left bottom and all services are provided by Dropcam that host on AWS. The role of Dropcam become not only the device maker anymore but also service provider. The total system is the most easiest and simplest by this way.\nThe other three block diagrams are more and more complicated. Some surveillance company still want to expand their system base on the traditional type and the whole system may become the most complicated upper one. They will get into trouble soon.\nThere is still a question that not all people like to feed their private contents to service provider. That\u0026rsquo;s why the original surveillance still there and get most market share but I think this situation will become different in recent years.\nAfter studying, I\u0026rsquo;d like to shorten the deployment into two kinds. One is the Dropcam\u0026rsquo;s way and the reason has already described above. Another one is because some weak points that the pure public can\u0026rsquo;t overcome at this moment.\nSo which one is better, left or right? Let\u0026rsquo;s wait and see what will happen next.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-pure-public-or-hybrid-cloud-for-surveillance-system/","summary":"\u003cp\u003eThe pure public cloud is no doubt that we build the web services on public and the hybrid combine the private part. According to the information on wiki, the public cloud aka external cloud is related to the service is provided by third party. There is a picture on wiki can describe exactly what we talk about.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1aWVqnt5oleV8PILxAwBuN9j36ezoA3f29PcPtdWLV-YnyTiQgDle2slLhsMOYjYBNj78oHB1MNb_bHvo1BExEPatkMYG-Wbn0LIeWQ99CVNHFJNBbjCNYmzzDKgtbl5eGsNgzBU1k5Zw/s1600/Cloud_computing_types.svg.png\"\u003e\u003cimg loading=\"lazy\" src=\"/img/Blogger/Cloud_computing_types.svg.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eBasically, there are four deployment models on wiki. The private cloud can\u0026rsquo;t satisfy the requirements of the surveillance system. We do not talk about the community cloud also because it\u0026rsquo;s not real on surveillance system.\u003cbr\u003e\nThere is a famous network camera company named Dropcam that deployment as pure public cloud system. When we install the the devices, we have to create an account and register them. As I know, Dropcam use the Amazon Web Service as the infrastructure. I just plot some simple block diagrams to describe it.\u003c/p\u003e","title":"[工作點滴] pure public or hybrid cloud for surveillance system?"},{"content":"純公有雲 (Public Cloud) 毫無疑問是在大眾網路上建構服務，而混合雲 (Hybrid Cloud) 則結合了私有雲 (Private) 部分。根據維基百科的說明，公有雲又稱「外部雲」，是指由第三方提供的服務。維基百科上的圖示能精準地描述我們所談論的概念。\n基本上，維基百科列出了四種部署模型。私有雲無法滿足監控系統的各項需求。我們也不探討社群雲 (Community Cloud)，因為那在監控實務中並不常見。\n有一家著名的網路攝錄影機公司名為 Dropcam，它是採用純公有雲模型的典型案例。安裝設備時，我們必須建立帳號並註冊。據我所知，Dropcam 使用 Amazon Web Service (AWS) 作為基礎設施。我畫了一些簡單的方塊圖來描述這個架構。\nDropcam 的模式（圖左下）中，所有服務皆由 Dropcam 提供並託管於 AWS。Dropcam 的角色不再僅是設備製造商，更是服務提供者。這種方式使整體系統變得最簡單且直觀。\n而其他三種方塊圖則越來越複雜。一些監控公司仍希望基於傳統模式擴展系統，這可能導致整體架構變得像圖片上方那樣極其複雜，他們很快就會陷入泥淖。\n不過，仍有一個大哉問：並非所有人都喜歡將私有影像內容餵給服務提供者。這也是為什麼傳統監控系統依然存在並掌握大部分市場佔有率的原因。但我認為這種情況在近幾年將會發生巨變。\n經過研究與學習，我傾向將部署簡化為兩種。一種是 Dropcam 的模式，優點如前文所述。另一種則是因為目前純公有雲仍有部分弱點尚無法克服。\n究竟是左邊還是右邊比較好？讓我們拭目以待。\n","permalink":"https://chenfu.ai/posts/pure-public-or-hybrid-cloud-for-surveillance/","summary":"\u003cp\u003e純公有雲 (Public Cloud) 毫無疑問是在大眾網路上建構服務，而混合雲 (Hybrid Cloud) 則結合了私有雲 (Private) 部分。根據維基百科的說明，公有雲又稱「外部雲」，是指由第三方提供的服務。維基百科上的圖示能精準地描述我們所談論的概念。\u003c/p\u003e","title":"監控系統該選純公有雲還是混合雲？"},{"content":"Today is the end of the Dragon year and we use to have a good supper on this day. It\u0026rsquo;s brand new lunar year tomorrow and we call it Snake year. Sometimes, we\u0026rsquo;d call it Small Dragon year rather than Snake year because because Dragon is much more significant in traditional.\nHope my family and friends have a brand new good Small Dragon Year.\n","permalink":"https://chenfu.ai/posts/%E5%BF%83%E6%83%85%E9%9A%A8%E7%AD%86-happy-lunar-new-year/","summary":"\u003cp\u003eToday is the end of the Dragon year and we use to have a good supper on this day. It\u0026rsquo;s brand new lunar year tomorrow and we call it Snake year. Sometimes, we\u0026rsquo;d call it Small Dragon year rather than Snake year because because Dragon is much more significant in traditional.\u003cbr\u003e\nHope my family and friends have a brand new good Small Dragon Year.\u003c/p\u003e","title":"[心情隨筆] Happy lunar new year"},{"content":"My colleague did some experiments on gstreamer alsasrc and osssrc plugins and he found that alsasrc consume lots of cpu resource(around 16% on the chip we use). He asked me why the test tool that provided from chip vendor is quite efficient(around 1~2%). It was a big gap to me and I started to find why is that.\nAfter hours checking, I found that the plugin may cause a busy wait in a while loop when the parameters set to non-blocking mode. I do a simple code modification and execute again but the cpu rate just lower to 12%. I\u0026rsquo;m a little frustrated about it but still had some enhancement.\nSo I started to try different parameters combination because he told that he found three differences from alsasrc plugin and the test code.\n1. The setting of alsasrc is non-block mode but the test code is set to block mode.\n2. The channels setting of alsasrc is 1 but the test code is set to 2.\n3. The buffer size is limit in test code but alsasrc do not have that limit.\nFor 1: I thought the non-block mode should be much more efficient but the busy wait should change.\nFor 2: This is really weird because when I set the channels to be 2 in alsasrc plugin, the cpu rate become quite low. So I start to wondering if this is the characteristics of the I2S bus. I googled on the internet but did not find any information to describe that we have to set the channels parameter to be 2 in alsasrc plugin of gstreamer when the audio data bus is I2S. So I\u0026rsquo;ll confirm it later.\nFor 3: I think it\u0026rsquo;s reasonable to limit the buffer size.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-i2s-bus-channels-setting-in-gstreamer-alsasrc-plugin/","summary":"\u003cp\u003eMy colleague did some experiments on gstreamer alsasrc and osssrc plugins and he found that alsasrc consume lots of cpu resource(around 16% on the chip we use). He asked me why the test tool that provided from chip vendor is quite efficient(around 1~2%). It was a big gap to me and I started to find why is that.\u003cbr\u003e\nAfter hours checking, I found that the plugin may cause a busy wait in a while loop when the parameters set to non-blocking mode. I do a simple code modification and execute again but the cpu rate just lower to 12%. I\u0026rsquo;m a little frustrated about it but still had some enhancement.\u003cbr\u003e\nSo I started to try different parameters combination because he told that he found three differences from alsasrc plugin and the test code.\u003cbr\u003e\n1. The setting of alsasrc is non-block mode but the test code is set to block mode.\u003cbr\u003e\n2. The channels setting of alsasrc is 1 but the test code is set to 2.\u003cbr\u003e\n3. The buffer size is limit in test code but alsasrc do not have that limit.\u003cbr\u003e\nFor 1: I thought the non-block mode should be much more efficient but the busy wait should change.\u003cbr\u003e\nFor 2: This is really weird because when I set the channels to be 2 in alsasrc plugin, the cpu rate become quite low. So I start to wondering if this is the characteristics of the I2S bus. I googled on the internet but did not find any information to describe that we have to set the channels parameter to be 2 in alsasrc plugin of gstreamer when the audio data bus is I2S. So I\u0026rsquo;ll confirm it later.\u003cbr\u003e\nFor 3: I think it\u0026rsquo;s reasonable to limit the buffer size.\u003c/p\u003e","title":"[工作點滴] I2S bus channels setting in gstreamer alsasrc plugin"},{"content":"我的一位同事在測試 GStreamer 的 alsasrc 與 osssrc 插件時發現，alsasrc 消耗了相當驚人的 CPU 資源（在我們使用的晶片上約占 16%）。他詢問我，為何晶片供應商提供的測試工具卻能維持極高的效率（約僅占 1~2%）。這巨大的效能差距引起了我的好奇，我決定深入研究原因。\n經過數小時的調查，我發現當參數設定為「非阻塞模式 (non-blocking mode)」時，該插件可能會在 While 迴圈中導致忙碌等待 (busy wait)。我對程式碼進行了簡單修改並重新執行，結果 CPU 使用率降低到 12%。雖然略有改進，但我依然感到有些沮喪。\n於是，我開始嘗試不同的參數組合，因為我同事發現了 alsasrc 與測試工具間的三個差異點：\nalsasrc 設定為「非阻塞模式」，而測試工具為「阻塞模式 (block mode)」。 alsasrc 的聲道設定為 1，而測試工具設定為 2。 測試工具限制了緩衝區大小 (buffer size)，而 alsasrc 沒有這項限制。 針對第一點：我原以為非阻塞模式應該更有效率，但關鍵在於必須改善其忙碌等待的機制。 針對第二點：這非常奇特，因為當我在 alsasrc 插件將聲道數設定為 2 時，CPU 使用率竟然大幅降低。這讓我開始懷疑這是否與 I2S 匯流排的特性有關。我在網路上搜尋，並未發現任何資料指明「當音訊匯流排為 I2S 時，必須在 GStreamer 的 alsasrc 插件中將聲道參數設為 2」。稍後我會進一步確認此現象。 針對第三點：我認為限制緩衝區大小以優化效能是合理的做法。\n","permalink":"https://chenfu.ai/posts/i2s-bus-channels-setting-in-gstreamer/","summary":"\u003cp\u003e我的一位同事在測試 GStreamer 的 \u003ccode\u003ealsasrc\u003c/code\u003e 與 \u003ccode\u003eosssrc\u003c/code\u003e 插件時發現，\u003ccode\u003ealsasrc\u003c/code\u003e 消耗了相當驚人的 CPU 資源（在我們使用的晶片上約占 16%）。他詢問我，為何晶片供應商提供的測試工具卻能維持極高的效率（約僅占 1~2%）。這巨大的效能差距引起了我的好奇，我決定深入研究原因。\u003c/p\u003e","title":"GStreamer alsasrc 插件中的 I2S 匯流排聲道設定"},{"content":"RabbitMQ setup and test\nServer side:\nMy desktop PC is windows 7 and we download the rabbitmq server from http://www.rabbitmq.com/.\nThe installation guide is here http://www.rabbitmq.com/install-windows.html.\nI use extra ethernet card and set the ip address to be 192.168.1.19 and make sure the firewall would not block the port 5672.\nClient side: we put the send and listen on same device.\nI use the package from https://github.com/alanxz/rabbitmq-c. We can follow the guide in the link to cross build and install on the embedded device we use.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-rabbitmq-setup-and-test/","summary":"\u003cp\u003eRabbitMQ setup and test\u003c/p\u003e\n\u003cp\u003eServer side:\u003c/p\u003e\n\u003cp\u003eMy desktop PC is windows 7 and we download the rabbitmq server from \u003ca href=\"http://www.rabbitmq.com/\"\u003ehttp://www.rabbitmq.com/\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThe installation guide is here \u003ca href=\"http://www.rabbitmq.com/install-windows.html\"\u003ehttp://www.rabbitmq.com/install-windows.html\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eI use extra ethernet card and set the ip address to be 192.168.1.19 and make sure the firewall would not block the port 5672.\u003c/p\u003e\n\u003cp\u003eClient side: we put the send and listen on same device.\u003c/p\u003e\n\u003cp\u003eI use the package from \u003ca href=\"https://github.com/alanxz/rabbitmq-c\"\u003ehttps://github.com/alanxz/rabbitmq-c\u003c/a\u003e. We can follow the guide in the link to cross build and install on the embedded device we use.\u003c/p\u003e","title":"[工作點滴] RabbitMQ setup and test"},{"content":"When I google the internet with realtime and transport stream, I could not find the information I want. The word \u0026lsquo;realtime\u0026rsquo; must construct on the relative thinking. For example, there is camera and screen and the camera\u0026rsquo;s video can be showed on the screen with quite small latency. We assume the latency is under 150ms or 300ms whatever and we can call this is realtime or not when we can have comparisons.\nThe structure of the transport stream or what we call MPEG-TS is not that simple. What I say is compare with raw encoded media direct push to intermedia. Maybe the transport stream is design for broadcasting usage, so the media stream can be selected and video can be smooth played are much more important than realtime. Because people would not feel any latency happened when they just watch TV.\nIf we want to convert raw encoded media to transport stream. First, we have to packetize the raw encoded media to packetized elementary stream(PES). Second, we handle the PES by the muxing, splitting to small slice AV data\u0026hellip;etc to program stream or what we call transport stream. Finally, we send the transport stream to internet or satellite for people to receive and watch it on display. These steps create lots of latency and make us feel it\u0026rsquo;s not realtime enough.\nLet\u0026rsquo;s go back to the definition of the Miracast. It is to convert the raw encoded media stream to transport stream and then encapsulate the stream to RTP. Finally go through the wifi directly to display. I\u0026rsquo;m not sure how many latency will be created? Maybe someone can tell me.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-the-realtime-of-transport-stream-on-miracast/","summary":"\u003cp\u003eWhen I google the internet with realtime and transport stream, I could not find the information I want. The word \u0026lsquo;realtime\u0026rsquo; must construct on the relative thinking. For example, there is camera and screen and the camera\u0026rsquo;s video can be showed on the screen with quite small latency. We assume the latency is under 150ms or 300ms whatever and we can call this is realtime or not when we can have comparisons.\u003cbr\u003e\nThe structure of the transport stream or what we call MPEG-TS is not that simple. What I say is compare with raw encoded media direct push to intermedia. Maybe the transport stream is design for broadcasting usage, so the media stream can be selected and video can be smooth played are much more important than realtime. Because people would not feel any latency happened when they just watch TV.\u003cbr\u003e\nIf we want to convert raw encoded media to transport stream. First, we have to packetize the raw encoded media to packetized elementary stream(PES). Second, we handle the PES by the muxing, splitting to small slice AV data\u0026hellip;etc to program stream or what we call transport stream. Finally, we send the transport stream to internet or satellite for people to receive and watch it on display. These steps create lots of latency and make us feel it\u0026rsquo;s not realtime enough.\u003cbr\u003e\nLet\u0026rsquo;s go back to the definition of the Miracast. It is to convert the raw encoded media stream to transport stream and then encapsulate the stream to RTP. Finally go through the wifi directly to display. I\u0026rsquo;m not sure how many latency will be created? Maybe someone can tell me.\u003c/p\u003e","title":"[工作點滴] The realtime of transport stream on Miracast"},{"content":"Today, there is a supplier come to our company to introduce their solution with DLNA and Miracast support. I survey the internet and found three kinds of protocols are discussed on the market. The DLNA has been talked for a long time and Apple is DLNA member originally. But Apple left DLNA and create the proprietary Airplay protocol. The Miracast is created by Wifi Alliance. It seems that Android alliance choose the Miracast to fight with Apple?\n且讓我們繼續看下去\u0026hellip;\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-airplay-dlna-and-miracast/","summary":"\u003cp\u003eToday, there is a supplier come to our company to introduce their solution with DLNA and Miracast support. I survey the internet and found three kinds of protocols are discussed on the market. The DLNA has been talked for a long time and Apple is DLNA member originally. But Apple left DLNA and create the proprietary Airplay protocol. The Miracast is created by Wifi Alliance. It seems that Android alliance choose the Miracast to fight with Apple?\u003c/p\u003e","title":"[工作點滴] Airplay, DLNA and Miracast"},{"content":"國外工程師用boost c++ library來進行相關專案的開發, 進而看到一些相關的STL語法, 所以還是得抽空K一下相關資料, 至少要把code看懂.\nFrom wiki: http://en.wikipedia.org/wiki/Standard_Template_Library\nThe Standard Template Library (STL) is a C++ software library that influenced many parts of the C++ Standard Library. It provides four components called algorithms, containers, functional, and iterators.\nThe STL provides a ready-made set of common classes for C++, such as containers and associative arrays, that can be used with any built-in type and with any user-defined type that supports some elementary operations (such as copying and assignment). STL algorithms are independent of containers, which significantly reduces the complexity of the library.\nThe STL achieves its results through the use of templates. This approach provides compile-time polymorphism that is often more efficient than traditional run-time polymorphism. Modern C++ compilers are tuned to minimize any abstraction penalty arising from heavy use of the STL.\nThe STL was created as the first library of generic algorithms and data structures for C++, with four ideas in mind: generic programming, abstractness without loss of efficiency, the Von Neumann computation model, and value semantics.\nLearning plot\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-stl-notes/","summary":"\u003cp\u003e國外工程師用boost c++ library來進行相關專案的開發, 進而看到一些相關的STL語法, 所以還是得抽空K一下相關資料, 至少要把code看懂.\u003c/p\u003e","title":"[工作點滴] STL notes"},{"content":"打patch的command\ndiff -Naur [from-file] [to-file] \u0026gt; [YourFileName.patch]\n-N In directory comparison, if a file is found in only one directory, treat it as present but empty in the other directory.\n-a Treat all files as text and compare them line-by-line, even if they do not seem to be text.\n-u Use the unified output format.\n-r When comparing directories, recursively compare any subdirectories found.\nSVN版本控制下要移除所有目錄底下.svn\n$ rm -rf find . -type d -name .svn\nGIT版本控制下要移除.git\n只需要移除主目錄底下.git相關的info即可\nNFS mount command\nmount -t nfs -o nolock 10.0.0.3:/home/vm_share /mnt/shares\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-linux%E5%B7%A5%E5%85%B7%E5%B0%8F%E8%A8%98%E9%8C%84/","summary":"\u003cp\u003e打patch的command\u003c/p\u003e\n\u003cp\u003ediff -Naur [from-file] [to-file] \u0026gt; [YourFileName.patch]\u003cbr\u003e\n-N  In  directory comparison, if a file is found in only one directory, treat it as present but empty in the other directory.\u003cbr\u003e\n-a  Treat  all  files as text and compare them line-by-line, even if they do not seem to be text.\u003cbr\u003e\n-u  Use the unified output format.\u003cbr\u003e\n-r  When comparing directories, recursively compare any subdirectories found.\u003c/p\u003e","title":"[工作點滴] Linux工具小記錄"},{"content":"Message pack with RPC extension required 3 packages.\nmsgpack msgpack-rpc mpio The msgpack and mpio are required by msgpack-rpc. The following are openwrt makefiles that I use to build the packages.\nmsgpack library\ninclude $(TOPDIR)/rules.mk\nPKG_NAME:=msgpack\nPKG_VERSION:=0.5.7\nPKG_RELEASE:=1\nPKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz\nPKG_SOURCE_URL:=http://msgpack.org/releases/cpp/\nPKG_MD5SUM:=705106a9378c792fe22d285dba5c142c\nPKG_INSTALL:=1\ninclude $(INCLUDE_DIR)/package.mk\ndefine Package/msgpack\nSECTION:=libs\nCATEGORY:=Libraries\nTITLE:=Message Pack library\nURL:=http://msgpack.org\nendef\ndefine Package/msgpack/description\nMessagePack is an efficient binary serialization format.\nIt lets you exchange data among multiple languages like JSON but it\u0026rsquo;s faster and smaller.\nendef\ndefine Build/Configure\n$(call Build/Configure/Default, )\nendef\ndefine Build/InstallDev\n$(INSTALL_DIR) $(1)/usr/include/\n$(CP) \\\n$(PKG_INSTALL_DIR)/usr/include/* \\\n$(1)/usr/include/\n$(INSTALL_DIR) $(1)/usr/lib/pkgconfig $(CP) \\ $(PKG_INSTALL_DIR)/usr/lib/libmsgpack*.{la,so*} \\ $(1)/usr/lib/ endef\ndefine Package/msgpack/install\n$(INSTALL_DIR) $(1)/usr/lib\n$(CP) \\\n$(PKG_INSTALL_DIR)/usr/lib/libmsgpack*.* \\\n$(1)/usr/lib/\nendef\n$(eval $(call BuildPackage,msgpack)) mpio library\ninclude $(TOPDIR)/rules.mk\nPKG_NAME:=mpio\nPKG_VERSION:=0.3.7\nPKG_RELEASE:=1\nPKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)\nPKG_BUILD_PARALLEL:=1\nPKG_FIXUP:=libtool\nPKG_INSTALL:=1\ninclude $(INCLUDE_DIR)/package.mk\ndefine Package/mpio\nSECTION:=libs\nCATEGORY:=Libraries\nTITLE:=Multipurpose parallel IO\nURL:=https://github.com/frsyuki/mpio\nendef\ndefine Package/mpio/description\nMultipurpose parallel I/O framework for C++ with fully multithreaded\nevent loop implementation\nendef\ndefine Build/Prepare\nmkdir -p $(PKG_BUILD_DIR)\n$(CP) src/* $(PKG_BUILD_DIR)/\nendef\ndefine Build/Configure\n$(call Build/Configure/Default, )\nendef\ndefine Build/InstallDev\n$(INSTALL_DIR) $(1)/usr/include/\n$(CP) \\\n$(PKG_INSTALL_DIR)/usr/include/* \\\n$(1)/usr/include/\n$(INSTALL_DIR) $(1)/usr/lib/pkgconfig $(CP) \\ $(PKG_INSTALL_DIR)/usr/lib/libmpio*.{la,so*} \\ $(1)/usr/lib/ endef\ndefine Package/mpio/install\n$(INSTALL_DIR) $(1)/usr/lib\n$(CP) \\\n$(PKG_INSTALL_DIR)/usr/lib/libmpio*.* \\\n$(1)/usr/lib/\nendef\n$(eval $(call BuildPackage,mpio)) msgpack-rpc library\ninclude $(TOPDIR)/rules.mk\nPKG_NAME:=msgpack-rpc\nPKG_VERSION:=0.3.1\nPKG_RELEASE:=1\nPKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz\nPKG_SOURCE_URL:=http://msgpack.org/releases/cpp/\nPKG_MD5SUM:=e5e8f3631ac83d20cdf65fa0d7bfee21\nPKG_INSTALL:=1\ninclude $(INCLUDE_DIR)/package.mk\ndefine Package/msgpack-rpc\nSECTION:=libs\nCATEGORY:=Libraries\nTITLE:=Message Pack library\nURL:=http://msgpack.org\nDEPENDS:=+libmsgpack +libmpio\nendef\ndefine Package/msgpack-rpc/description\nMessagePack-RPC is an extension to support RPC through message pack.\nendef\ndefine Build/Configure\n$(call Build/Configure/Default, )\nendef\ndefine Build/InstallDev\n$(INSTALL_DIR) $(1)/usr/include/\n$(CP) \\\n$(PKG_INSTALL_DIR)/usr/include/ \\\n$(1)/usr/include/\nendef\ndefine Package/msgpack-rpc/install\n$(INSTALL_DIR) $(1)/usr/lib\nendef\n$(eval $(call BuildPackage,msgpack-rpc)) ","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-message-pack-rpc-install-on-openwrt/","summary":"\u003cp\u003eMessage pack with RPC extension required 3 packages.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003emsgpack\u003c/li\u003e\n\u003cli\u003emsgpack-rpc\u003c/li\u003e\n\u003cli\u003empio\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThe msgpack and mpio are required by msgpack-rpc. The following are openwrt makefiles that I use to build the packages.\u003c/p\u003e\n\u003cp\u003emsgpack library\u003c/p\u003e\n\u003cp\u003einclude $(TOPDIR)/rules.mk\u003c/p\u003e\n\u003cp\u003ePKG_NAME:=msgpack\u003cbr\u003e\nPKG_VERSION:=0.5.7\u003cbr\u003e\nPKG_RELEASE:=1\u003c/p\u003e\n\u003cp\u003ePKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz\u003cbr\u003e\nPKG_SOURCE_URL:=http://msgpack.org/releases/cpp/\u003cbr\u003e\nPKG_MD5SUM:=705106a9378c792fe22d285dba5c142c\u003cbr\u003e\nPKG_INSTALL:=1\u003c/p\u003e\n\u003cp\u003einclude $(INCLUDE_DIR)/package.mk\u003c/p\u003e\n\u003cp\u003edefine Package/msgpack\u003cbr\u003e\nSECTION:=libs\u003cbr\u003e\nCATEGORY:=Libraries\u003cbr\u003e\nTITLE:=Message Pack library\u003cbr\u003e\nURL:=http://msgpack.org\u003cbr\u003e\nendef\u003c/p\u003e\n\u003cp\u003edefine Package/msgpack/description\u003cbr\u003e\nMessagePack is an efficient binary serialization format.\u003cbr\u003e\nIt lets you exchange data among multiple languages like JSON but it\u0026rsquo;s faster and smaller.\u003cbr\u003e\nendef\u003c/p\u003e","title":"[工作點滴] message pack rpc install on openwrt"},{"content":"msgpack-idl howto\nStep1 get the msgpack-idl\n$ git clone git://github.com/msgpack/msgpack-idl.git\nStep2 install the ruby tool that required\n$ sudo apt-get install ruby1.9.1\nStep3 go to msgpack-idl folder.\n$ sudo gem install msgpack-idl\n$ sudo msgpack-idl \u0026ndash;install java\nStep4 create a sample file \u0026lsquo;sample\u0026rsquo; with content as follow.\nmessage Node { ``1``: string address ``2``: map\u0026lt;string,string\u0026gt; properties ``3``: optional string? description } message StorageNode \u0026lt; Node { ``4``: long capacity ``5``: optional int weight = 1 } Step 5 generate the java code by following command\n$ msgpack-idl --example sample \u0026gt; sample.msgspec $ msgpack-idl -g java sample.msgspec -o ./out/ More information, see following link:\nhttp://wiki.msgpack.org/display/MSGPACK/Design+of+IDL\nBut this seems support to generate Java only. Another idl implementation that written in Haskell is more active than the Ruby implementation.\nIt can generate c++ code. To study it later if we really need IDL for our ipc.\nLink as follow:\nhttp://hackage.haskell.org/packages/hackage.html\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-msgpack-idl-howto/","summary":"\u003cp\u003emsgpack-idl howto\u003c/p\u003e\n\u003cp\u003eStep1 get the msgpack-idl\u003c/p\u003e\n\u003cp\u003e$ git clone git://github.com/msgpack/msgpack-idl.git\u003c/p\u003e\n\u003cp\u003eStep2 install the ruby tool that required\u003c/p\u003e\n\u003cp\u003e$ sudo apt-get install ruby1.9.1\u003c/p\u003e\n\u003cp\u003eStep3 go to msgpack-idl folder.\u003c/p\u003e\n\u003cp\u003e$ sudo gem install msgpack-idl\u003c/p\u003e\n\u003cp\u003e$ sudo msgpack-idl \u0026ndash;install java\u003c/p\u003e\n\u003cp\u003eStep4 create a sample file \u0026lsquo;sample\u0026rsquo; with content as follow.\u003c/p\u003e\n\u003ch2 id=\"message-node----1-string-address---2-mapstringstring-properties---3-optional-string-description--message-storagenode--node----4-long-capacity---5-optional-int-weight--1-\"\u003e\u003ccode\u003emessage Node {\u003c/code\u003e \u003ccode\u003e  ``1``: string address\u003c/code\u003e \u003ccode\u003e  ``2``: map\u0026lt;string,string\u0026gt; properties\u003c/code\u003e \u003ccode\u003e  ``3``: optional string? description\u003c/code\u003e \u003ccode\u003e}\u003c/code\u003e \u003ccode\u003emessage StorageNode \u0026lt; Node {\u003c/code\u003e \u003ccode\u003e  ``4``:\u003c/code\u003e \u003ccode\u003elong\u003c/code\u003e \u003ccode\u003ecapacity\u003c/code\u003e \u003ccode\u003e  ``5``: optional\u003c/code\u003e \u003ccode\u003eint\u003c/code\u003e \u003ccode\u003eweight =\u003c/code\u003e \u003ccode\u003e1\u003c/code\u003e \u003ccode\u003e}\u003c/code\u003e\u003c/h2\u003e\n\u003cp\u003eStep 5 generate the java code by following command\u003c/p\u003e","title":"[工作點滴] msgpack-idl howto"},{"content":"Our company\u0026rsquo;s git server do not support the ssl verify but support user name password verify. The default git enable the SSL verify when access https.\nI would encounter the error message like:\nerror: Problem with the SSL CA cert (path? access rights?) while accessing https://tw.ubnt.com/git/example.git/info/refs fatal: HTTP request failed\nSo we have to config the git by command:\ngit config \u0026ndash;global http.sslVerify false\nThen git clone again\n$ git clone https://tw.ubnt.com/git/example.git\nCloning into \u0026rsquo;test\u0026rsquo;\u0026hellip;\nUsername for \u0026lsquo;https://tw.ubnt.com\u0026rsquo;: name\nPassword for \u0026lsquo;https://name@tw.ubnt.com\u0026rsquo;: password\nremote: Counting objects: 1054, done.\nremote: Compressing objects: 100% (674/674), done.\nremote: Total 1054 (delta 390), reused 747 (delta 290)\nReceiving objects: 100% (1054/1054), 14.45 MiB | 377 KiB/s, done.\nResolving deltas: 100% (390/390), done.\nDone!\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-git-clone-error-error-problem-with-the-ssl-ca-cert-path-access-rights/","summary":"\u003cp\u003eOur company\u0026rsquo;s git server do not support the ssl verify but support user name password verify. The default git enable the SSL verify when access https.\u003c/p\u003e\n\u003cp\u003eI would encounter the error message like:\u003c/p\u003e\n\u003cp\u003eerror: Problem with the SSL CA cert (path? access rights?) while accessing \u003ca href=\"https://tw.ubnt.com/git/example.git/info/refs\"\u003ehttps://tw.ubnt.com/git/example.git/info/refs\u003c/a\u003e fatal: HTTP request failed\u003c/p\u003e\n\u003cp\u003eSo we have to config the git by command:\u003cbr\u003e\ngit config \u0026ndash;global http.sslVerify false\u003c/p\u003e\n\u003cp\u003eThen git clone again\u003cbr\u003e\n$ git clone \u003ca href=\"https://tw.ubnt.com/git/example.git\"\u003ehttps://tw.ubnt.com/git/example.git\u003c/a\u003e\u003cbr\u003e\nCloning into \u0026rsquo;test\u0026rsquo;\u0026hellip;\u003cbr\u003e\nUsername for \u0026lsquo;\u003ca href=\"https://tw.ubnt.com\"\u003ehttps://tw.ubnt.com\u003c/a\u003e\u0026rsquo;: name\u003cbr\u003e\nPassword for \u0026lsquo;\u003ca href=\"https://name@tw.ubnt.com\"\u003ehttps://name@tw.ubnt.com\u003c/a\u003e\u0026rsquo;: password\u003cbr\u003e\nremote: Counting objects: 1054, done.\u003cbr\u003e\nremote: Compressing objects: 100% (674/674), done.\u003cbr\u003e\nremote: Total 1054 (delta 390), reused 747 (delta 290)\u003cbr\u003e\nReceiving objects: 100% (1054/1054), 14.45 MiB | 377 KiB/s, done.\u003cbr\u003e\nResolving deltas: 100% (390/390), done.\u003c/p\u003e","title":"[工作點滴] git clone error \"error: Problem with the SSL CA cert (path? access rights?)\""},{"content":"When I have engineer discussion with the abroad engineer, I found he use the 3rd party library name message pack for binary serialization for internet application.\nMore detailed information of message pack is here.\nhttp://msgpack.org/\nI do not sure what\u0026rsquo;s the total different between these two library and I could not get a detailed comparison from them. So I will spend some time to study it.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-protocol-buffer-and-message-pack-initial/","summary":"\u003cp\u003eWhen I have engineer discussion with the abroad engineer, I found he use the 3rd party library name message pack for binary serialization for internet application.\u003c/p\u003e\n\u003cp\u003eMore detailed information of message pack is here.\u003cbr\u003e\n\u003ca href=\"http://msgpack.org/\"\u003ehttp://msgpack.org/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eI do not sure what\u0026rsquo;s the total different between these two library and I could not get a detailed comparison from them. So I will spend some time to study it.\u003c/p\u003e","title":"[工作點滴] protocol buffer and message pack initial"},{"content":"The statusapi.pb-c.h and statusapi.pb-c.c are generated. Only header file is printing here for further explaination.\nstatusap.pb-c.h\n/* Generated by the protocol buffer compiler. DO NOT EDIT! */\n#ifndef PROTOBUF_C_statusapi_2eproto__INCLUDED #define PROTOBUF_C_statusapi_2eproto__INCLUDED\n#include \u0026lt;google/protobuf-c/protobuf-c.h\u0026gt;\nPROTOBUF_C_BEGIN_DECLS\ntypedef struct _Statusapi__StatusRequestType Statusapi__StatusRequestType; typedef struct _Statusapi__StatusResponseType Statusapi__StatusResponseType; typedef struct _Statusapi__StatusParams Statusapi__StatusParams;\n/* \u0026mdash; enums \u0026mdash; */\n/* \u0026mdash; messages \u0026mdash; */\nstruct _Statusapi__StatusRequestType { ProtobufCMessage base; }; #define STATUSAPI__STATUS_REQUEST_TYPE__INIT \\ { PROTOBUF_C_MESSAGE_INIT (\u0026amp;statusapi__status_request_type__descriptor) \\ }\nstruct _Statusapi__StatusResponseType { ProtobufCMessage base; }; #define STATUSAPI__STATUS_RESPONSE_TYPE__INIT \\ { PROTOBUF_C_MESSAGE_INIT (\u0026amp;statusapi__status_response_type__descriptor) \\ }\nstruct _Statusapi__StatusParams { ProtobufCMessage base; protobuf_c_boolean has_zoom_status; int32_t zoom_status; protobuf_c_boolean has_focus_status; int32_t focus_status; }; #define STATUSAPI__STATUS_PARAMS__INIT \\ { PROTOBUF_C_MESSAGE_INIT (\u0026amp;statusapi__status_params__descriptor) \\ , 0,0, 0,0 }\n/* Statusapi__StatusRequestType methods */ void statusapi__status_request_type__init (Statusapi__StatusRequestType *message); size_t statusapi__status_request_type__get_packed_size (const Statusapi__StatusRequestType *message); size_t statusapi__status_request_type__pack (const Statusapi__StatusRequestType *message, uint8_t *out); size_t statusapi__status_request_type__pack_to_buffer (const Statusapi__StatusRequestType *message, ProtobufCBuffer *buffer); Statusapi__StatusRequestType * statusapi__status_request_type__unpack (ProtobufCAllocator *allocator, size_t len, const uint8_t *data); void statusapi__status_request_type__free_unpacked (Statusapi__StatusRequestType *message, ProtobufCAllocator allocator); / Statusapi__StatusResponseType methods */ void statusapi__status_response_type__init (Statusapi__StatusResponseType *message); size_t statusapi__status_response_type__get_packed_size (const Statusapi__StatusResponseType *message); size_t statusapi__status_response_type__pack (const Statusapi__StatusResponseType *message, uint8_t *out); size_t statusapi__status_response_type__pack_to_buffer (const Statusapi__StatusResponseType *message, ProtobufCBuffer *buffer); Statusapi__StatusResponseType * statusapi__status_response_type__unpack (ProtobufCAllocator *allocator, size_t len, const uint8_t *data); void statusapi__status_response_type__free_unpacked (Statusapi__StatusResponseType *message, ProtobufCAllocator allocator); / Statusapi__StatusParams methods */ void statusapi__status_params__init (Statusapi__StatusParams *message); size_t statusapi__status_params__get_packed_size (const Statusapi__StatusParams *message); size_t statusapi__status_params__pack (const Statusapi__StatusParams *message, uint8_t *out); size_t statusapi__status_params__pack_to_buffer (const Statusapi__StatusParams *message, ProtobufCBuffer *buffer); Statusapi__StatusParams * statusapi__status_params__unpack (ProtobufCAllocator *allocator, size_t len, const uint8_t *data); void statusapi__status_params__free_unpacked (Statusapi__StatusParams *message, ProtobufCAllocator allocator); / \u0026mdash; per-message closures \u0026mdash; */\ntypedef void (*Statusapi__StatusRequestType_Closure) (const Statusapi__StatusRequestType *message, void *closure_data); typedef void (*Statusapi__StatusResponseType_Closure) (const Statusapi__StatusResponseType *message, void *closure_data); typedef void (*Statusapi__StatusParams_Closure) (const Statusapi__StatusParams *message, void closure_data);\n/ \u0026mdash; services \u0026mdash; */\ntypedef struct Statusapi__Status_Service Statusapi__Status_Service; struct Statusapi__Status_Service { ProtobufCService base; void (*set_status)(Statusapi__Status_Service *service, const Statusapi__StatusParams *input, Statusapi__StatusResponseType_Closure closure, void *closure_data); void (*get_status)(Statusapi__Status_Service *service, const Statusapi__StatusRequestType *input, Statusapi__StatusParams_Closure closure, void *closure_data); }; typedef void (*Statusapi__Status_ServiceDestroy)(Statusapi__Status_Service *); void statusapi__status__init (Statusapi__Status_Service *service, Statusapi__Status_ServiceDestroy destroy); #define STATUSAPI__STATUS__BASE_INIT \\ { \u0026amp;statusapi__status__descriptor, protobuf_c_service_invoke_internal, NULL } #define STATUSAPI__STATUS__INIT(function_prefix) \\ { STATUSAPI__STATUS__BASE_INIT,\\ function_prefix__ ## set_status,\\ function_prefix__ ## get_status } void statusapi__status__set_status(ProtobufCService *service, const Statusapi__StatusParams *input, Statusapi__StatusResponseType_Closure closure, void *closure_data); void statusapi__status__get_status(ProtobufCService *service, const Statusapi__StatusRequestType *input, Statusapi__StatusParams_Closure closure, void closure_data);\n/ \u0026mdash; descriptors \u0026mdash; */\nextern const ProtobufCMessageDescriptor statusapi__status_request_type__descriptor; extern const ProtobufCMessageDescriptor statusapi__status_response_type__descriptor; extern const ProtobufCMessageDescriptor statusapi__status_params__descriptor; extern const ProtobufCServiceDescriptor statusapi__status__descriptor;\nPROTOBUF_C_END_DECLS\n#endif /* PROTOBUF_statusapi_2eproto__INCLUDED */ Message Methods\n**\n**\nFollowing content mostly from http://code.google.com/p/protobuf-c/wiki/Generated_Code.\nTo initialize a message for yourself, use the uppercased __INIT macro: For example:\nStatusapi__StatusParams message = STATUSAPI__STATUS_PARAMS__INIT; This will properly handle default values.\nSometimes, a function that initializes a message of a give type is useful. For that purpose, we provide an __init() function\nStatusapi__StatusParams message; statusapi__status_params__init (\u0026amp;message); We generate some functions for each message are:\ninit(). Equivalent to assigning the __INIT macro to its argument. It\u0026rsquo;s useful in some contexts, like initializing a block of memory allocated by the user.\nunpack(). Unpack data for a particular message-format, using an optional allocator for the data: Statusapi__StatusParams * statusapi__status_params__unpack (ProtobufCAllocator *allocator, size_t length, const unsigned char *data);\nIt\u0026rsquo;s a good idea to not modify the unpacked message. That\u0026rsquo;s because we haven\u0026rsquo;t decided exactly whether the message\u0026rsquo;s fields are allocated separately or together. The only thing you can really assume is that free_unpacked() will always to the right thing with the return value from unpack(). In practice, we will never be allocating memory for required and optional primitive types, so you CAN modify those values before calling free_unpacked().\nTo make other kinds of changes, make a copy and track your own allocations:\nStatusapi__StatusParams *unpacked;\nStatusapi__StatusParams my_params;\nunpacked = statusapi__status_params__unpack (NULL, len, data);\nmy_params = *unpacked;\nmy_params.zoom_status = 1;\n\u0026hellip; when done with unpacked and my_params, call free_unpacked()\nfree_unpacked(). Free a message that you obtained with the unpack method:\nvoid statusapi__status_params__free_unpacked (Statusapi__StatusParams *message, ProtobufCAllocator *allocator);\nget_packed_size(). Find how long the serialized representation of the data will be: size_t statusapi__status_params__get_packed_size (const Statusapi__StatusParams *message);\npack(). Pack message into buffer; assumes that buffer is long enough (use get_packed_size first!). size_t statusapi__status_params__pack(const Statusapi__StatusParams *message, unsigned char *packed_data_out);\npack_to_buffer(). Pack message into virtualized buffer. size_t statusapi__status_params__pack_to_buffer(const Statusapi__StatusParams *message, ProtobufCBuffer *buffer);\nFor the definitions of ProtobufCBuffer and ProtobufCAllocator, see the libprotobuf_c page.\nFinally, note that default-value handling is a little subtle- it\u0026rsquo;ll probably mostly work as you expect (it\u0026rsquo;s mostly modeled after the c++ implementation), but it\u0026rsquo;s got a quirk regarding optional string values. There is no \u0026ldquo;has_field\u0026rdquo; for a string field. To determine if a string-field is set to the default value, use something like:\n#define my_struct_has_field(my_struct) \\ (my_struct.field != NULL \\ \u0026amp;\u0026amp; my_struct.field != my_struct__field__default_value) Now our method is judge the string if it\u0026rsquo;s NULL or not. So it depends on what you want.\nNext topic is to talk about the service and RPC system of the protobuf-c.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-protocol-buffer-message/","summary":"\u003cp\u003eThe statusapi.pb-c.h and statusapi.pb-c.c are generated. Only header file is printing here for further explaination.\u003c/p\u003e\n\u003cp\u003estatusap.pb-c.h\u003c/p\u003e\n\u003cp\u003e/* Generated by the protocol buffer compiler.  DO NOT EDIT! */\u003cbr\u003e\n#ifndef PROTOBUF_C_statusapi_2eproto__INCLUDED #define PROTOBUF_C_statusapi_2eproto__INCLUDED\u003cbr\u003e\n#include \u0026lt;google/protobuf-c/protobuf-c.h\u0026gt;\u003cbr\u003e\nPROTOBUF_C_BEGIN_DECLS\u003c/p\u003e\n\u003cp\u003etypedef struct _Statusapi__StatusRequestType Statusapi__StatusRequestType; typedef struct _Statusapi__StatusResponseType Statusapi__StatusResponseType; typedef struct _Statusapi__StatusParams Statusapi__StatusParams;\u003c/p\u003e\n\u003cp\u003e/* \u0026mdash; enums \u0026mdash; */\u003c/p\u003e\n\u003cp\u003e/* \u0026mdash; messages \u0026mdash; */\u003cbr\u003e\nstruct  _Statusapi__StatusRequestType {   ProtobufCMessage base; }; #define STATUSAPI__STATUS_REQUEST_TYPE__INIT \\  { PROTOBUF_C_MESSAGE_INIT (\u0026amp;statusapi__status_request_type__descriptor) \\      }\u003c/p\u003e\n\u003cp\u003estruct  _Statusapi__StatusResponseType {   ProtobufCMessage base; }; #define STATUSAPI__STATUS_RESPONSE_TYPE__INIT \\  { PROTOBUF_C_MESSAGE_INIT (\u0026amp;statusapi__status_response_type__descriptor) \\      }\u003c/p\u003e","title":"[工作點滴] protocol buffer message"},{"content":"There is protobuf and protobuf-c web site.\n\u0026lt;http://code.google.com/p/protobuf/\u0026gt; \u0026lt;http://code.google.com/p/protobuf-c/\u0026gt; Now we are implementing this way that can be remote control from back-end applications.\nThe protobuf-c has some extension from google\u0026rsquo;s protobuf and we can add the RPC funtion for further.\nThe first experiment is using the message directly. We pack the message into a share memory between the server and the client. Both side can get the message no problem.\nBut our target is to use the RPC way that protobuf-c provided. If we want to use the protobuf-c, we have to create the .proto file first. Here is an example. We create a \u0026lsquo;statusapi.proto\u0026rsquo;.\npackage statusapi;\nmessage StatusRequestType {}\nmessage StatusResponseType {}\nmessage StatusParams {\noptional int32 zoom_status = 1 [default = 0];\noptional int32 focus_status = 2 [default = 0];\n}\nservice Status {\nrpc set_status (StatusParams) returns (StatusResponseType);\nrpc get_status (StatusRequestType) returns (StatusParams);\n}\nBy using the protobuf-c tool withe following command to generate the source code.\n./protobuf-c \u0026ndash;c_out=. statusapi.proto The statusapi.pb-c.c and statusapi.pb-c.h are created in the folder. This is the basic functions we have.\nNow lets doing the RPC server and client for further test.\nstatus_server.c\n#include \u0026lt;stdio.h\u0026gt;\n#include \u0026lt;string.h\u0026gt;\n#include \u0026lt;statusapi.pb-c.h\u0026gt;\nPROTOBUF_C_BEGIN_DECLS\n#include \u0026lt;google/protobuf-c/protobuf-c-rpc.h\u0026gt;\nPROTOBUF_C_END_DECLS\nstatic ProtobufC_RPC_Server *server;\nstatic Statusapi__StatusParams status_params = STATUSAPI__STATUS_PARAMS__INIT;\nvoid statusapi__set_status(Statusapi__Status_Service *service,\nconst Statusapi__StatusParams *input,\nStatusapi__StatusResponseType_Closure closure,\nvoid *closure_data)\n{\nfprintf(stderr,\u0026ldquo;set status.\\n\u0026rdquo;);\nif (input-\u0026gt;has_zoom_status) {\nfprintf(stderr,\u0026ldquo;zstatus=%d.\\n\u0026rdquo;, input-\u0026gt;zoom_status);\nstatus_params.has_zoom_status=input-\u0026gt;has_zoom_status;\nstatus_params.zoom_status=input-\u0026gt;zoom_status;\n}\nif (input-\u0026gt;has_focus_status) { fprintf(stderr,\u0026quot;fstatus=%d.\\n\u0026quot;, input-\u0026gt;focus_status); status_params.has_focus_status=input-\u0026gt;has_focus_status; status_params.focus_status=input-\u0026gt;focus_status; } closure (NULL, closure_data); }\nvoid statusapi__get_status(Statusapi__Status_Service *service,\nconst Statusapi__StatusRequestType *input,\nStatusapi__StatusParams_Closure closure,\nvoid *closure_data)\n{\nfprintf(stderr,\u0026ldquo;get status!!\\n\u0026rdquo;);\nclosure (\u0026amp;status_params, closure_data);\n}\nStatusapi__Status_Service statusapi_service = STATUSAPI__STATUS__INIT(statusapi__);\nint main(int argc, char argv[])\n{\n/ Create a server and wait for the client to connect. */\nserver = protobuf_c_rpc_server_new (PROTOBUF_C_RPC_ADDRESS_LOCAL,\n\u0026ldquo;status_rpc.socket\u0026rdquo;,\n(ProtobufCService *)\u0026amp;statusapi_service, NULL); while(1) { protobuf_c_dispatch_run(protobuf_c_dispatch_default()); } return 0; }\nstatus_client.c\n#include \u0026lt;stdio.h\u0026gt;\n#include \u0026lt;stdlib.h\u0026gt;\n#include \u0026lt;string.h\u0026gt;\n#include \u0026lt;statusapi.pb-c.h\u0026gt;\nPROTOBUF_C_BEGIN_DECLS\n#include \u0026lt;google/protobuf-c/protobuf-c-rpc.h\u0026gt;\nPROTOBUF_C_END_DECLS\nstatic void status_set_response (const Statusapi__StatusResponseType *response,\nvoid *closure_data)\n{\nif (response == NULL) {\nfprintf(stderr, \u0026ldquo;Error processing request.\\n\u0026rdquo;);\n} else {\nfprintf(stderr, \u0026ldquo;server set status params response.\\n\u0026rdquo;);\n}\n*(protobuf_c_boolean *)closure_data = 1;\n}\nstatic void status_get_response (const Statusapi__StatusParams *response,\nvoid *closure_data)\n{\nif (response == NULL) {\nfprintf(stderr, \u0026ldquo;Error processing request.\\n\u0026rdquo;);\n} else {\nfprintf(stderr, \u0026ldquo;server get status params response.\\n\u0026rdquo;);\n}\nfprintf(stderr,\u0026ldquo;get status.\\n\u0026rdquo;);\nif (response-\u0026gt;has_zoom_status) {\nfprintf(stderr,\u0026ldquo;zstatus=%d.\\n\u0026rdquo;, response-\u0026gt;zoom_status);\n}\nif (response-\u0026gt;has_focus_status) {\nfprintf(stderr,\u0026ldquo;fstatus=%d.\\n\u0026rdquo;, response-\u0026gt;focus_status);\n}\n*(protobuf_c_boolean *)closure_data = 1;\n}\nint main (int argc, const char * argv[])\n{\nProtobufCService *service;\nProtobufC_RPC_Client *client;\nprotobuf_c_boolean is_done;\nStatusapi__StatusRequestType request = STATUSAPI__STATUS_REQUEST_TYPE__INIT;\nStatusapi__StatusParams status_params_request = STATUSAPI__STATUS_PARAMS__INIT;\nint test_count;\n// create a client service to stop the extapi thread. service = protobuf_c_rpc_client_new (PROTOBUF_C_RPC_ADDRESS_LOCAL, \u0026quot;status_rpc.socket\u0026quot;, \u0026amp;statusapi__status__descriptor, NULL); if (service == NULL) { // check later if this situation happen, what will going on?? fprintf(stderr,\u0026quot;error creating client\\n\u0026quot;); } client = (ProtobufC_RPC_Client *)service; while (!protobuf_c_rpc_client_is_connected (client)) { protobuf_c_dispatch_run(protobuf_c_dispatch_default()); } test_count = 256; while(test_count--) { statusapi__status_params__init(\u0026amp;status_params_request); status_params_request.has_zoom_status = 1; status_params_request.zoom_status = test_count; status_params_request.has_focus_status = 1; status_params_request.focus_status = test_count; // set status params to server. is_done = 0; statusapi__status__set_status(service, \u0026amp;status_params_request, status_set_response, \u0026amp;is_done); while (!is_done) { protobuf_c_dispatch_run (protobuf_c_dispatch_default()); } // get staus params from server. is_done = 0; statusapi__status__get_status(service, \u0026amp;request, status_get_response, \u0026amp;is_done); while (!is_done) { protobuf_c_dispatch_run (protobuf_c_dispatch_default()); } } // destroy the service. protobuf_c_service_destroy(service); return 0; }\nPrepare two terminal windows. One execute the status_server and another one execute the status_client. The client send the parameters set message to server and the server save the contents in local variables. Then the client send the parameters get message to server and the server return the contents to the clients.\nLater, let\u0026rsquo;s talk more detailed about the functions that protobuf-c provided.\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-protocal-buffer-examples/","summary":"\u003cp\u003eThere is protobuf and protobuf-c web site.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cpre\u003e\u003ccode\u003e     \u0026lt;http://code.google.com/p/protobuf/\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cpre\u003e\u003ccode\u003e     \u0026lt;http://code.google.com/p/protobuf-c/\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eNow we are implementing this way that can be remote control from back-end applications.\u003cbr\u003e\nThe protobuf-c has some extension from google\u0026rsquo;s protobuf and we can add the RPC funtion for further.\u003c/p\u003e\n\u003cp\u003eThe first experiment is using the message directly. We pack the message into a share memory between the server and the client. Both side can get the message no problem.\u003c/p\u003e","title":"[工作點滴] protocal buffer examples"},{"content":"在整理先前在2008年Blog的內容，深覺自己先前不的成熟，不過隨著轉職與更多的經歷時，感到自己似乎也有那麼一丁點的長大。\n2011年1月在即將滿七年時，我下了一個重大的決定，離開了非常熟悉的工作環境，在某種程度來說，也算是離開了舒適圈，讓自己幾乎是重置，對於新工作的決定，則是剛好有機會可以在跨國大企業外商中任職，而此機會恰好符合本身幾個想法，\n跨國大企業以提昇眼界 研發團隊以延續工作經驗 團隊面臨轉變以大展身手 於是乎，就在這全新的環境中開始了工作的第二趟旅程，第一個月並沒有像新鮮人時期的那種不適應的狀況，而且還有點過度亢奮，大量的瀏覽公司內部的網站，一切都非常的新鮮有趣，而後在滿三個月時，就讓我實際接任Team Leader的工作，並帶領一個Team來跑案子，在這期間跟國外的con-call，依公司的的專案流程sop撰寫相關的技術文件。\n除了必要的工作之外，還持續規劃並找出可以研發且並無與其他的RD團隊有衝突的專案，目標也很簡單，想初步先成立一個韌體團隊以增加台灣研發團隊的競爭力。\n依第一個工作上的經驗，電子、機構及軟韌體的人才如果能齊備，加上產品為光機電整合，不但門檻墊高且可讓台灣研發團隊的可見度大大提升。\n2011年9月時，提出了一個這樣的案子看是否有辦法依我的目標去發生，不過可惜的是，公司當時的策略並無法讓這樣的案子成行，接下來能做的就是把現有的專案更完美的執行，增加籌碼，同時間可以再持續修正提案，待時機更加成熟時再進行。\n而後在11月中旬時，恰好有一個機會，跟現在公司的老闆見面，Robert很年輕，不是跟我同年或是小我一歲，其經營公司的方式讓我大開眼界且前所未見，即便是他自己本身也在經營上不斷的嘗試，積極且讓我有一起創業打拼的感覺，這時的想法只有一定要見識一下。研發的彈性大，靠的是工程師自律的研發，對於有想法且不斷自我實現的人可以有很大的發揮。所以最後還是毅然在12月離開到現在的公司，某種程度上挺對不住前公司，但因為與其未來操之於人，還是會想要未來由自己所掌握。\n新工作至今一年多，這段時間研發的速度發常的快速，台灣的團隊效率非常高，除此外從國外的研發團隊也得到很多新的概念，跟這樣的一群人工作非常有意思，不同背景、文化在想法上的出發點完全不同，雖常常有衝突，但激盪出的火花讓我覺得未來是有很大機會能持續成長。\n邁向第十年，期待自己更加成熟，讓眼界更上層樓。\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E9%82%81%E5%90%91%E5%8D%81%E5%B9%B4/","summary":"\u003cp\u003e在整理先前在2008年Blog的內容，深覺自己先前不的成熟，不過隨著轉職與更多的經歷時，感到自己似乎也有那麼一丁點的長大。\u003cbr\u003e\n2011年1月在即將滿七年時，我下了一個重大的決定，離開了非常熟悉的工作環境，在某種程度來說，也算是離開了舒適圈，讓自己幾乎是重置，對於新工作的決定，則是剛好有機會可以在跨國大企業外商中任職，而此機會恰好符合本身幾個想法，\u003c/p\u003e","title":"[工作點滴] 邁向十年"},{"content":"內湖有間好吃的燒烤在麗山國中大門前馬路，靠港墘路的地方，名字叫\u0026quot;串門子燒烤\u0026quot;，還蠻讚的！旁邊是一間漫畫店，營業時間是17:00到24:00，可以先打電話訂購，然後再去拿，那邊是外帶的，不是那種三五好友可以在那聚會聊天的店面。住附近的更可以去試試啦。\n雖然七三七巷的那間路邊攤燒烤比較有名，但無意間吃了串門子，覺得比七三七巷的還不賴！\n","permalink":"https://chenfu.ai/posts/%E9%9B%9C%E4%B8%83%E9%9B%9C%E5%85%AB-%E5%85%A7%E6%B9%96%E5%A5%BD%E5%90%83%E7%9A%84%E7%87%92%E7%83%A4/","summary":"\u003cp\u003e內湖有間好吃的燒烤在麗山國中大門前馬路，靠港墘路的地方，名字叫\u0026quot;串門子燒烤\u0026quot;，還蠻讚的！旁邊是一間漫畫店，營業時間是17:00到24:00，可以先打電話訂購，然後再去拿，那邊是外帶的，不是那種三五好友可以在那聚會聊天的店面。住附近的更可以去試試啦。\u003c/p\u003e","title":"[雜七雜八] 內湖好吃的燒烤"},{"content":"ncftp是一個ftp client，因為剛好案子需要使用ftp功能，\n編譯步驟如下：\n1. 產生Makefile，如果要用到curses得加入相關library，但我們的案子不需使用到！\n./configure \u0026ndash;disable-ccdv \u0026ndash;without-curses \u0026ndash;without-ncurse\n2. 編輯Makefile，將CC跟STRIP修改如下\nCROSS_COMPILE=arm-unknown-linux-gnu-\nCC=${CROSS_COMPILE}gcc\nSTRIP=${CROSS_COMPILE}strip\n3. Make it！！\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-ncftp-321-cross-compiling/","summary":"\u003cp\u003encftp是一個ftp client，因為剛好案子需要使用ftp功能，\u003cbr\u003e\n編譯步驟如下：\u003c/p\u003e\n\u003cp\u003e1. 產生Makefile，如果要用到curses得加入相關library，但我們的案子不需使用到！\u003cbr\u003e\n./configure \u0026ndash;disable-ccdv \u0026ndash;without-curses \u0026ndash;without-ncurse\u003c/p\u003e","title":"[工作點滴] ncftp-3.2.1 cross-compiling"},{"content":"我前陣子在網路上找尋資料時，不小心看到了一個Blog在討論關於安全監控產業的文章，還蠻特別的，平常在網路上看Blog，也沒看到針對這個產業而發表的文章，而且透過Andy的文章，就認識了一個朋友，也分享了一些心得，網址連結如下：\nhttp://febon.blogspot.com/\n如果對安全監控產業有興趣的，也可以一起來討論討論。\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E5%AE%89%E5%85%A8%E7%9B%A3%E6%8E%A7%E7%94%A2%E6%A5%AD%E7%9A%84%E5%A5%BD%E6%96%87/","summary":"\u003cp\u003e我前陣子在網路上找尋資料時，不小心看到了一個Blog在討論關於安全監控產業的文章，還蠻特別的，平常在網路上看Blog，也沒看到針對這個產業而發表的文章，而且透過Andy的文章，就認識了一個朋友，也分享了一些心得，網址連結如下：\u003c/p\u003e","title":"[工作點滴] 安全監控產業的好文"},{"content":"再兩個星期我就要結婚了，標題用的有點…嘿就…相對於人妻就是人夫唄！\n結婚，就是進入人生另一個階段的開始，身邊多了一位相互扶持的人，也許有很多課題必需\n去學習，希望我能學習的很好…XD\n謝謝我的另一半三年多的陪伴，接下來的日子還要麻煩多多指教…\n","permalink":"https://chenfu.ai/posts/%E5%BF%83%E6%83%85%E9%9A%A8%E7%AD%86-%E4%BA%BA%E5%A4%AB/","summary":"\u003cp\u003e再兩個星期我就要結婚了，標題用的有點…嘿就…相對於人妻就是人夫唄！\u003cbr\u003e\n結婚，就是進入人生另一個階段的開始，身邊多了一位相互扶持的人，也許有很多課題必需\u003cbr\u003e\n去學習，希望我能學習的很好…XD\u003cbr\u003e\n謝謝我的另一半三年多的陪伴，接下來的日子還要麻煩多多指教…\u003c/p\u003e","title":"[心情隨筆] 人夫"},{"content":"以下的大部份內容從網路上轉過來，再加上我在設定過程之中，碰到的問題做一點修正。原本 Ubuntu 在內定預設的是採用 GCJ-1.4 ，在執行上效能較不佳)，因此第一步請在您熟悉的套件管理工具裡安裝如下的套件，在Ubuntu下可透過System/Synaptic Package Manage來安裝相關套件：\nsun-java6-jre(執行 Java 軟體必要的環境) sun-java6-jdk****(Java 程序開發者才需要安裝) eclipse-jdt (Eclipse 的 Java 開發工具套件) eclipse-common-nls****(Eclipse 的地區化語言訊息，想要中文的操作介面請裝它) galternatives (update-alternatives 的 GUI 前端工具，用來變更系統預設偏好) 編輯以下的檔案內容，直接vim /etc/jvm\n/etc/jvm (定義系統使用的 JAVA_HOME)\n檢查或增加下列在檔案的最前面 /usr/lib/jvm/java-6-sun 先執行一次 Eclipse 再關閉，來自動產生家目錄中的 .eclipse/ 目錄，新增檔案及下面的內容到 ~/.eclipse/eclipserc (各別使用者自訂的 JAVA_HOME)\n/usr/lib/jvm/java-6-sun 檢查 /etc/eclipse/java_home (定義Eclipse搜尋 JAVA_HOME 的順序)\nUbuntu 7.10: (已有不用追加) Ubuntu 7.04: 必須手動增加下列在第一行\n/usr/lib/jvm/java-6-sun 執行命令：galternatives ，開啟應用程式後，往下尋找下列三個 Alternatives\njar**、java、javac**\n內容option 均挑選開頭為 /usr/lib/jvm/java-6-sun/\u0026hellip;..\n驗證在終端機執行下列命令：\n打開 Eclipse 驗證使用的 JRE\n[Help]- \u0026gt;[About Eclipse Platform]-\u0026gt;[Configuration Detail]\n看看是否有多個\u0026quot;/usr/lib/jvm/java-6-sun- 1.6.0 \u0026hellip;. \u0026ldquo;字詞出現即為正確。如此即建立好Java \u0026amp; Linux開發環境\n當設定完以上的內容之後，為了達到更良的開發效能，除上述的過程設定完成後，再單獨下載Eclipse官方的最新版本，直接解壓縮到您喜愛的資料夾，解開並在桌面建立一個啟動圖示。\n如要設定C/C++的IDE環境，開啟eclipse，並執行以下的選項\n[Help]- \u0026gt;[Software Updates]-\u0026gt;[Find and Install]\n開啟後選擇Search for new features to install選項，按Next。\n在Sites to include in search欄中，勾選Europa Discovery Site，並在下面，勾選Automatically select mirrors，按著按Finish。\n等待一陣子，\n打開Europa Discovery Site的選單，勾選C/C++ Development Tools，然後按完成，即開始下載安裝C/C++的工具，安裝完成後，重新啟動Eclipse，即可新增C/C++的專案。\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-eclipse-ide-under-ubuntu/","summary":"\u003cp\u003e以下的大部份內容從網路上轉過來，再加上我在設定過程之中，碰到的問題做一點修正。原本 Ubuntu 在內定預設的是採用 \u003cstrong\u003eGCJ-1.4\u003c/strong\u003e ，在執行上效能較不佳)，因此第一步請在您熟悉的套件管理工具裡安裝如下的套件，在Ubuntu下可透過System/Synaptic Package Manage來安裝相關套件：\u003c/p\u003e","title":"[工作點滴] Eclipse IDE under Ubuntu"},{"content":"紅字部份，不然在link的時候會出現一堆error\u0026hellip;\u0026hellip;\nCROSS_COMPILE= arm-unknown-linux-gnu-\nCOMPILE_OPTS = $(INCLUDES) -I. -O2 -DSOCKLEN_T=socklen_t -DNO_STRSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64\nC = c\nC_COMPILER = $(CROSS_COMPILE)gcc\nC_FLAGS = $(COMPILE_OPTS)\nCPP = cpp\nCPLUSPLUS_COMPILER = $(CROSS_COMPILE)g++\nCPLUSPLUS_FLAGS = $(COMPILE_OPTS) -Wall -DBSD=1\nOBJ = o\nLINK = $(CROSS_COMPILE)g++ -o\nLINK_OPTS = -L.\nCONSOLE_LINK_OPTS = $(LINK_OPTS)\nLIBRARY_LINK = $(CROSS_COMPILE)ld -o\nLIBRARY_LINK_OPTS = $(LINK_OPTS) -r -Bstatic\nLIB_SUFFIX = a\nLIBS_FOR_CONSOLE_APPLICATION =\nLIBS_FOR_GUI_APPLICATION =\nEXE =\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-live555-streaming-server-quotconfigarmlinuxquot-%E8%A8%AD%E5%AE%9A%E6%AA%94%E4%BF%AE%E6%AD%A3/","summary":"\u003cp\u003e紅字部份，不然在link的時候會出現一堆error\u0026hellip;\u0026hellip;\u003c/p\u003e\n\u003cp\u003eCROSS_COMPILE=        arm-unknown-linux-gnu-\u003cbr\u003e\nCOMPILE_OPTS =        $(INCLUDES) -I. -O2 -DSOCKLEN_T=socklen_t -DNO_STRSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64\u003cbr\u003e\nC =            c\u003cbr\u003e\nC_COMPILER =        $(CROSS_COMPILE)gcc\u003cbr\u003e\nC_FLAGS =        $(COMPILE_OPTS)\u003cbr\u003e\nCPP =            cpp\u003cbr\u003e\nCPLUSPLUS_COMPILER =    $(CROSS_COMPILE)g++\u003cbr\u003e\nCPLUSPLUS_FLAGS =    $(COMPILE_OPTS) -Wall -DBSD=1\u003cbr\u003e\nOBJ =            o\u003cbr\u003e\nLINK =            $(CROSS_COMPILE)g++ -o\u003cbr\u003e\nLINK_OPTS =        -L.\u003cbr\u003e\nCONSOLE_LINK_OPTS =    $(LINK_OPTS)\u003cbr\u003e\nLIBRARY_LINK =        $(CROSS_COMPILE)ld -o\u003cbr\u003e\nLIBRARY_LINK_OPTS =    $(LINK_OPTS) -r -Bstatic\u003cbr\u003e\nLIB_SUFFIX =            a\u003cbr\u003e\nLIBS_FOR_CONSOLE_APPLICATION =\u003cbr\u003e\nLIBS_FOR_GUI_APPLICATION =\u003cbr\u003e\nEXE =\u003c/p\u003e","title":"[工作點滴] Live555 streaming server \u0026quot;config.armlinux\u0026quot; 設定檔修正"},{"content":"這陣子，在不斷嘗試一些新東西的過程之中，配合著一直改變的工作內容，我開始做一些實驗，有的時候，究竟要不要完全了解一個東西，才有辦法去完成這個工作？目前在我的觀察之中，是不必需要了解，就可以去做，然而這是短線，在長線觀點來看，有的時候造成的損失，並不會比較小！可是在實際上，上面看的是短期的績效，不管你隱性的成果如何的優良，只要是看不到，那就是個屁，是的！就是紅衫軍拼出來的字！\n然而，我想實驗的，就是如何去創造出一個隱性的價值，去調整我所能掌握的組織，雖然我不甚認同在無知中去做事情，不過在實現產品的過程之中，完全拘泥於知這件事情上面，會造成許多延遲，而如何在知與無知之間，做很好的調整，真的是一件不容易的事情，但如果真的能好好的拿捏，我想我應該就更成長了。\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E5%9C%A8%E7%9F%A5%E8%88%87%E7%84%A1%E7%9F%A5%E9%96%93%E7%9A%84%E6%8A%89%E6%93%87/","summary":"\u003cp\u003e這陣子，在不斷嘗試一些新東西的過程之中，配合著一直改變的工作內容，我開始做一些實驗，有的時候，究竟要不要完全了解一個東西，才有辦法去完成這個工作？目前在我的觀察之中，是不必需要了解，就可以去做，然而這是短線，在長線觀點來看，有的時候造成的損失，並不會比較小！可是在實際上，上面看的是短期的績效，不管你隱性的成果如何的優良，只要是看不到，那就是個屁，是的！就是紅衫軍拼出來的字！\u003cbr\u003e\n然而，我想實驗的，就是如何去創造出一個隱性的價值，去調整我所能掌握的組織，雖然我不甚認同在無知中去做事情，不過在實現產品的過程之中，完全拘泥於知這件事情上面，會造成許多延遲，而如何在知與無知之間，做很好的調整，真的是一件不容易的事情，但如果真的能好好的拿捏，我想我應該就更成長了。\u003c/p\u003e","title":"[工作點滴] 在知與無知間的抉擇"},{"content":"// 轉化成c風格\nstring str1(\u0026ldquo;hello world\u0026rdquo;);\nconst char *c_str1=str1.c_str();\n//轉化成數組\nconst char *a_str1=0;\na_str1=str1.data();\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-visualc-string%E8%BD%89%E6%88%90const-char/","summary":"\u003cp\u003e// 轉化成c風格\u003cbr\u003e\nstring   str1(\u0026ldquo;hello   world\u0026rdquo;);\u003cbr\u003e\nconst   char   *c_str1=str1.c_str();\u003cbr\u003e\n//轉化成數組\u003cbr\u003e\nconst   char   *a_str1=0;\u003cbr\u003e\na_str1=str1.data();\u003c/p\u003e","title":"[工作點滴] VisualC string轉成const char"},{"content":"在ubuntu/debian添加開發工具package\n如果是 general development\napt-get install build-essential\n如果是 X development\napt-get install x-window-system-dev\n如果是 GNOME development\napt-get install gnome-devel\n如果是 KDE development\napt-get install kde-devel\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E5%9C%A8ubuntudebian%E6%B7%BB%E5%8A%A0%E9%96%8B%E7%99%BC%E5%B7%A5%E5%85%B7package/","summary":"\u003cp\u003e在ubuntu/debian添加開發工具package\u003cbr\u003e\n如果是 general development\u003cbr\u003e\napt-get install build-essential\u003c/p\u003e\n\u003cp\u003e如果是 X development\u003cbr\u003e\napt-get install x-window-system-dev\u003c/p\u003e\n\u003cp\u003e如果是 GNOME development\u003cbr\u003e\napt-get install gnome-devel\u003c/p\u003e\n\u003cp\u003e如果是 KDE development\u003cbr\u003e\napt-get install kde-devel\u003c/p\u003e","title":"[工作點滴] 在ubuntu/debian添加開發工具package"},{"content":"最近幾個星期，工作內容轉換的速度真他X的有夠快，因此我把標題設定為超級變變變，就像在政治上的口水也可以把標題訂為超級騙騙騙，然後可以像網路上面的Flash動畫，製作出一連串的續集，反正接下來半年都是在選舉，用這個標題應該還不錯！剛好我又想到，長馬扁，就是常常騙人的意思。\n回歸正題，我不曉得是我家主管在考驗我還是怎樣，最近工作常常就是：那個Fran，我來分工合作一下，你寫streaming server，我來寫client。一星期後，那個Fran，我在想那個Streaming server我請S公司去問一下價格，那client這邊有VLC、MPlayer，然後還有樓下的CMS，我們就都Try看看，接著，我又被指派到看VLC應用程式，又一星期後，那個Fran，CMS修改已經整理到一個段落，那我們就用這個好了，我工作內容又變處理CMS的軟體，一下，三個星期就這麼過去了，只見一事無成的我，也許，他想讓我學會如何將我的人生multitasking，而上星期五，我的最新任務又來了，又變成要寫協助寫VHDL了……然而，板子有點問題，星期一，我又回去弄CMS了！\n因為這樣，我突然覺得有點Lost，可能主管們不知道系統不斷被中斷，一沒弄好就容易當機咩！我現在的日子就是這麼回事，而我也處於當機的邊緣…\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E8%B6%85%E7%B4%9A%E8%AE%8A%E8%AE%8A%E8%AE%8A/","summary":"\u003cp\u003e最近幾個星期，工作內容轉換的速度真他X的有夠快，因此我把標題設定為超級變變變，就像在政治上的口水也可以把標題訂為超級騙騙騙，然後可以像網路上面的Flash動畫，製作出一連串的續集，反正接下來半年都是在選舉，用這個標題應該還不錯！剛好我又想到，長馬扁，就是常常騙人的意思。\u003cbr\u003e\n回歸正題，我不曉得是我家主管在考驗我還是怎樣，最近工作常常就是：那個Fran，我來分工合作一下，你寫streaming server，我來寫client。一星期後，那個Fran，我在想那個Streaming server我請S公司去問一下價格，那client這邊有VLC、MPlayer，然後還有樓下的CMS，我們就都Try看看，接著，我又被指派到看VLC應用程式，又一星期後，那個Fran，CMS修改已經整理到一個段落，那我們就用這個好了，我工作內容又變處理CMS的軟體，一下，三個星期就這麼過去了，只見一事無成的我，也許，他想讓我學會如何將我的人生multitasking，而上星期五，我的最新任務又來了，又變成要寫協助寫VHDL了……然而，板子有點問題，星期一，我又回去弄CMS了！\u003cbr\u003e\n因為這樣，我突然覺得有點Lost，可能主管們不知道系統不斷被中斷，一沒弄好就容易當機咩！我現在的日子就是這麼回事，而我也處於當機的邊緣…\u003c/p\u003e","title":"[工作點滴] 超級變變變"},{"content":"從小被教導重承諾，守信，現在基本上是遵循著這個規範來待人處世，雖然有的時候會偏離一下，但就會掛在心上甚至不好意思，而在現在的社會這個觀點似乎愈來愈薄，有些人就是愛臨時變卦，諾言有的時候就像屁一下放完就沒了，如果你跟我說至少還有噗一聲，我只能說X！當然如果碰到生死交關，或是什麼變故，我想應該也不會不通人情，但如果只是懶的動之類的鳥事，就可以出爾反爾，那實在讓人覺得十分不快，而這種事總是不斷發生與上演，但這又能怎辦咧？也只能自己摸摸鼻子算了，就當曾交過一個爛朋友就好嚕！何必因為對方讓自己生氣，這麼做對方也不會感到任何的愧疚，實在不值得壓。\n無論如何，做人基本的價值，我覺得多少會反應到人的成就上，雖然不是絕對，但從這點就可以看到自己的未來，堅持你的信仰，毋需為這樣的人生氣難過。\n","permalink":"https://chenfu.ai/posts/%E5%BF%83%E6%83%85%E9%9A%A8%E7%AD%86-%E8%AB%BE%E8%A8%80/","summary":"\u003cp\u003e從小被教導重承諾，守信，現在基本上是遵循著這個規範來待人處世，雖然有的時候會偏離一下，但就會掛在心上甚至不好意思，而在現在的社會這個觀點似乎愈來愈薄，有些人就是愛臨時變卦，諾言有的時候就像屁一下放完就沒了，如果你跟我說至少還有噗一聲，我只能說X！當然如果碰到生死交關，或是什麼變故，我想應該也不會不通人情，但如果只是懶的動之類的鳥事，就可以出爾反爾，那實在讓人覺得十分不快，而這種事總是不斷發生與上演，但這又能怎辦咧？也只能自己摸摸鼻子算了，就當曾交過一個爛朋友就好嚕！何必因為對方讓自己生氣，這麼做對方也不會感到任何的愧疚，實在不值得壓。\u003cbr\u003e\n無論如何，做人基本的價值，我覺得多少會反應到人的成就上，雖然不是絕對，但從這點就可以看到自己的未來，堅持你的信仰，毋需為這樣的人生氣難過。\u003c/p\u003e","title":"[心情隨筆] 諾言"},{"content":"http://www.wretch.cc/blog/cant\n上面的網址聯結到一個\u0026quot;腋闔團\u0026quot;團員的網頁，這是阿姊傳過來的，裡面有幾首歌，\n【我的孩子】沒有你的愛(金條)\n【我的孩子】芭樂歌\n【我的孩子】誰偷走了我的橡皮擦?\n值得推，搞笑之餘，我大概看了一下他Blog，在某種程度上是令人羡慕的，至少，\n他從國中時，就有了自己的夢想，一步步的往目標前進。現代的人，在物質生活不\n缺乏之時，自然沿伸出對於精神上的需求，像我從老爸身上看到的就是實際，雖然\n我不是他，就像我不是偉大的杜公正剩，我怎麼知道他夢周公，但四年級那個年代，\n吃都吃不飽還說什麼理想不理想，然而，爸媽給了我們衣食無缺的環境後，我們有\n多餘的心思去探索我們的夢想，我們要的是什麼，只是說在這個過渡期，父母也無\n法給我們什麼樣子的啟發，因為他們也不了解我們心情，無論如何，我看到有人有\n人生目標，不管他是什麼樣子的志業，我都會替他們感到高興。\n希望大家也都有可追尋的人生目標。\n","permalink":"https://chenfu.ai/posts/%E5%BF%83%E6%83%85%E9%9A%A8%E7%AD%86-%E6%90%9E%E7%AC%91%E7%9A%84%E6%AD%8C/","summary":"\u003cp\u003e\u003ca href=\"http://www.wretch.cc/blog/cant\"\u003ehttp://www.wretch.cc/blog/cant\u003c/a\u003e\u003cbr\u003e\n上面的網址聯結到一個\u0026quot;腋闔團\u0026quot;團員的網頁，這是阿姊傳過來的，裡面有幾首歌，\u003cbr\u003e\n【我的孩子】沒有你的愛(金條)\u003cbr\u003e\n【我的孩子】芭樂歌\u003cbr\u003e\n【我的孩子】誰偷走了我的橡皮擦?\u003cbr\u003e\n值得推，搞笑之餘，我大概看了一下他Blog，在某種程度上是令人羡慕的，至少，\u003cbr\u003e\n他從國中時，就有了自己的夢想，一步步的往目標前進。現代的人，在物質生活不\u003cbr\u003e\n缺乏之時，自然沿伸出對於精神上的需求，像我從老爸身上看到的就是實際，雖然\u003cbr\u003e\n我不是他，就像我不是偉大的杜公正剩，我怎麼知道他夢周公，但四年級那個年代，\u003cbr\u003e\n吃都吃不飽還說什麼理想不理想，然而，爸媽給了我們衣食無缺的環境後，我們有\u003cbr\u003e\n多餘的心思去探索我們的夢想，我們要的是什麼，只是說在這個過渡期，父母也無\u003cbr\u003e\n法給我們什麼樣子的啟發，因為他們也不了解我們心情，無論如何，我看到有人有\u003cbr\u003e\n人生目標，不管他是什麼樣子的志業，我都會替他們感到高興。\u003cbr\u003e\n希望大家也都有可追尋的人生目標。\u003c/p\u003e","title":"[心情隨筆] 搞笑的歌"},{"content":"最近去看一些關於高清發展的相關消息，什麼是高清？沒接觸的人應該不曉得，我第一次看到這個名詞，我腦中第一個浮現的圖案是\u0026hellip;\u0026hellip;\u0026hellip;\u0026hellip;\u0026hellip;..賭神高進！看來我已經中毒甚深！第二個浮現的圖樣是一間公司，接下來的想法是，怎麼有人取一個讓人覺得有點台的公司名稱！最後，我終於了解了，高清=HD，就是High-Definition！就是廣告上常看到的HD高畫質數位電視的那個HD啦！\n標題是一間大陸公司產品使用手冊一開始的標題，看到這個，我真覺得這幾年大陸的發展真的是一日千里，當大陸那如火如荼的發展新一代的技術並開始試著去制定一些標準時，台灣相對上逐漸的落後了，現今來看台灣的競爭力仍然存在，但這個差距逐漸的縮小中。而大陸原本讓人覺得是低價次品牌的東西，慢慢開始為人所接受，因此我們該好好正視這個變化。\n無論如何，HD在數位家庭的位置上，隨著LCDTV的普及，開始有了許多對於高畫質的週邊需求，目前長期著力於HD發展的廠商非Sony莫屬，Sony的一系列規劃佈局，看來逐漸進入收網階段，不可否認，在Blueray和HD-DVD的競爭中，從佈局的配合度及廣度，Blueray在沒有其他特別的事件介入下，在我認為應該是佔了上風，而Sony在未來幾年有很大機會享受到HD所帶的甜美的果實，雖然在遊戲機上被Wii給突襲了！我覺得無損於Sony在這塊市場的發展，我們可以持續觀察這個市場的發展。\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E9%AB%94%E9%A9%97%E9%A0%82%E7%B4%9A%E9%AB%98%E6%B8%85%E5%A8%9B%E6%A8%82%E4%BA%AB%E5%8F%97%E7%B2%BE%E5%BD%A9%E6%95%B8%E5%AD%97%E7%94%9F%E6%B4%BB/","summary":"\u003cp\u003e最近去看一些關於高清發展的相關消息，什麼是高清？沒接觸的人應該不曉得，我第一次看到這個名詞，我腦中第一個浮現的圖案是\u0026hellip;\u0026hellip;\u0026hellip;\u0026hellip;\u0026hellip;..賭神高進！看來我已經中毒甚深！第二個浮現的圖樣是一間公司，接下來的想法是，怎麼有人取一個讓人覺得有點台的公司名稱！最後，我終於了解了，高清=HD，就是High-Definition！就是廣告上常看到的HD高畫質數位電視的那個HD啦！\u003cbr\u003e\n標題是一間大陸公司產品使用手冊一開始的標題，看到這個，我真覺得這幾年大陸的發展真的是一日千里，當大陸那如火如荼的發展新一代的技術並開始試著去制定一些標準時，台灣相對上逐漸的落後了，現今來看台灣的競爭力仍然存在，但這個差距逐漸的縮小中。而大陸原本讓人覺得是低價次品牌的東西，慢慢開始為人所接受，因此我們該好好正視這個變化。\u003cbr\u003e\n無論如何，HD在數位家庭的位置上，隨著LCDTV的普及，開始有了許多對於高畫質的週邊需求，目前長期著力於HD發展的廠商非Sony莫屬，Sony的一系列規劃佈局，看來逐漸進入收網階段，不可否認，在Blueray和HD-DVD的競爭中，從佈局的配合度及廣度，Blueray在沒有其他特別的事件介入下，在我認為應該是佔了上風，而Sony在未來幾年有很大機會享受到HD所帶的甜美的果實，雖然在遊戲機上被Wii給突襲了！我覺得無損於Sony在這塊市場的發展，我們可以持續觀察這個市場的發展。\u003c/p\u003e","title":"[工作點滴] 體驗頂級高清娛樂，享受精彩數字生活"},{"content":"剛剛在新聞看到幾個特別的工作與投資項目，其中一個是清狗屎行業，在美國愈來愈多人懶得自己清掃，而在台灣我也慢慢的看到這個趨勢，大家開始肯花一點金錢，讓別人來做清掃工作，當然平常的清潔工作，還是會自己來做，而年度的大掃除，開始慢慢的會請專門的人來打掃，因此像清狗屎這種工作居然也可以做到可以開分店，年收入達六千多萬美元，當新聞訪問到老闆，他說的也沒錯：「做自己喜歡的事情不能發財，做別人不願意做的事情才能發財。」，而「下個富翁就是你」作者說，有錢人大多是經營凡俗、卑微的生意，而不是衣著光鮮或出入鄉村俱樂部之流。他們買賣廢五金，或是經營乾洗店、養雞場、水管業務。\n而除了做人不想做的想法外，另一種就是大家熟知的創新，而我剛看到了一個就是，投資監獄！美國監獄大爆滿，也開始有所謂的民營監獄…這些民營監獄的年報酬居然高達20%，真是夭壽喔！\n那幹麻有18%，投資200萬蓋監獄，每年就20%的回饋，那醬子我們軍公教的18%就解套啦！政府出資把軍公教的18%投資監獄就好勒…監獄爆滿也不曉得是件好事還是壞事，至少醬看起來想犯罪的人愈來愈多！\n總之，能沉住氣做人家不想做的事與創意工作，應該有可能成為開創事業的機會！\n__\n","permalink":"https://chenfu.ai/posts/%E8%B2%A1%E7%B6%93%E8%A7%80%E9%BB%9E-%E5%8F%A6%E9%A1%9E%E8%A1%8C%E6%A5%AD%E8%88%87%E5%8F%A6%E9%A1%9E%E6%8A%95%E8%B3%87/","summary":"\u003cp\u003e剛剛在新聞看到幾個特別的工作與投資項目，其中一個是清狗屎行業，在美國愈來愈多人懶得自己清掃，而在台灣我也慢慢的看到這個趨勢，大家開始肯花一點金錢，讓別人來做清掃工作，當然平常的清潔工作，還是會自己來做，而年度的大掃除，開始慢慢的會請專門的人來打掃，因此像清狗屎這種工作居然也可以做到可以開分店，年收入達六千多萬美元，當新聞訪問到老闆，他說的也沒錯：「做自己喜歡的事情不能發財，做別人不願意做的事情才能發財。」，而「下個富翁就是你」作者說，有錢人大多是經營凡俗、卑微的生意，而不是衣著光鮮或出入鄉村俱樂部之流。他們買賣廢五金，或是經營乾洗店、養雞場、水管業務。\u003c/p\u003e","title":"[財經觀點] 另類行業與另類投資"},{"content":"早上一睡醒一如往常就會打開電視看比賽，昨天王小民主投，不過卻看到了一場比之前爆掉還慘的比賽，人生壓，也許，挫折早一點來總比晚一點到好，年輕時受挫還有時間可以東山再起，但當王小民到了三十來歲時再受到挫折，也許就報銷了，就像洋基一個痛痛人投手帕瓦諾。\n以前唸書時，不管是比賽，考試，我發現自己會在意自己表現好不好，身體狀況好的時候，表現總是特別差！反而是有些病痛的時候，表現反而出奇的好，也許病痛轉移了部份的思緒，只能以剩下的部份，專注於工作上，得失心，還真的是負分咧。換個方向想，應該是精力過剩吧！但我又沒辦法一心好幾用XD…\n希望王小民能多一點點的霸氣，並在下季季賽前，把幾個球種再好好融合，鍛練更強健的心智，展現更加成熟的球技。\n","permalink":"https://chenfu.ai/posts/%E4%BC%91%E9%96%92%E9%81%8B%E5%8B%95-%E7%8E%8B%E5%B0%8F%E6%B0%91%E8%BC%B8%E4%BA%86/","summary":"\u003cp\u003e早上一睡醒一如往常就會打開電視看比賽，昨天王小民主投，不過卻看到了一場比之前爆掉還慘的比賽，人生壓，也許，挫折早一點來總比晚一點到好，年輕時受挫還有時間可以東山再起，但當王小民到了三十來歲時再受到挫折，也許就報銷了，就像洋基一個痛痛人投手帕瓦諾。\u003cbr\u003e\n以前唸書時，不管是比賽，考試，我發現自己會在意自己表現好不好，身體狀況好的時候，表現總是特別差！反而是有些病痛的時候，表現反而出奇的好，也許病痛轉移了部份的思緒，只能以剩下的部份，專注於工作上，得失心，還真的是負分咧。換個方向想，應該是精力過剩吧！但我又沒辦法一心好幾用XD…\u003cbr\u003e\n希望王小民能多一點點的霸氣，並在下季季賽前，把幾個球種再好好融合，鍛練更強健的心智，展現更加成熟的球技。\u003c/p\u003e","title":"[休閒運動] 王小民輸了"},{"content":"颱風天隔天回家幫爸媽搬新家，早上一早出門就見識到這次颱風的超強程度，機車骨牌，我還第一次見到骨牌是用機車排出來的，我想台北市政府可以重新規劃所有的機車位，環繞所有台北市，下次颱風來，台灣就在金氏世界紀錄上記下一筆，也是另類的台灣之光阿！\n到新家後，就開始我台灣水電工一天的生活，裝電話，插座，檢查各個房間的狀況，快到中午的時候，媽媽說有朋友會來幫忙，結果來了一大堆人，我跟爸媽都傻眼，接著就變身為服務生，買茶水，點心招待客人。因為一切都還沒弄好，只是先進行入厝的儀式，家裡亂糟糟。因此以後要到人家家裡拜訪要看狀況時間，不然會很失禮。\n送走客人後又開始忙碌到晚上，凌晨化身為司機到機場接從韓國回來的小弟，四個小時後，起床開始進行入厝的儀式，老媽忙中有錯沒帶到豬油，我跟小弟就開車到桃園廟後的永安市場去買，拜拜完，就開始我搬運工的一天！\n累攤了，好久沒這樣\u0026quot;運動\u0026quot;，自從我的肚皮很爭氣的不斷成長之後，就再也沒這麼的勞碌過，而這天傍晚我到阿帽家送餅錢時，腦袋只剩一片空白，不，也不算一片空白，至少有一張床的影像不斷的浮現…然後床的周圍，繞著大小不一的Z字…\n","permalink":"https://chenfu.ai/posts/%E9%9B%9C%E4%B8%83%E9%9B%9C%E5%85%AB-%E5%8F%B0%E7%81%A3%E6%B0%B4%E9%9B%BB%E5%B7%A5%E6%90%AC%E9%81%8B%E5%B7%A5%E6%9C%8D%E5%8B%99%E7%94%9F%E5%8F%B8%E6%A9%9F/","summary":"\u003cp\u003e颱風天隔天回家幫爸媽搬新家，早上一早出門就見識到這次颱風的超強程度，機車骨牌，我還第一次見到骨牌是用機車排出來的，我想台北市政府可以重新規劃所有的機車位，環繞所有台北市，下次颱風來，台灣就在金氏世界紀錄上記下一筆，也是另類的台灣之光阿！\u003cbr\u003e\n到新家後，就開始我台灣水電工一天的生活，裝電話，插座，檢查各個房間的狀況，快到中午的時候，媽媽說有朋友會來幫忙，結果來了一大堆人，我跟爸媽都傻眼，接著就變身為服務生，買茶水，點心招待客人。因為一切都還沒弄好，只是先進行入厝的儀式，家裡亂糟糟。因此以後要到人家家裡拜訪要看狀況時間，不然會很失禮。\u003cbr\u003e\n送走客人後又開始忙碌到晚上，凌晨化身為司機到機場接從韓國回來的小弟，四個小時後，起床開始進行入厝的儀式，老媽忙中有錯沒帶到豬油，我跟小弟就開車到桃園廟後的永安市場去買，拜拜完，就開始我搬運工的一天！\u003cbr\u003e\n累攤了，好久沒這樣\u0026quot;運動\u0026quot;，自從我的肚皮很爭氣的不斷成長之後，就再也沒這麼的勞碌過，而這天傍晚我到阿帽家送餅錢時，腦袋只剩一片空白，不，也不算一片空白，至少有一張床的影像不斷的浮現…然後床的周圍，繞著大小不一的Z字…\u003c/p\u003e","title":"[雜七雜八] 台灣水電工+搬運工+服務生+司機"},{"content":"看幾個朋友的Blog，回想起一些記憶，但我大腦的健忘程度，實在是夠高的，前陣子到台南去，在出發前，我試著去回憶台南的生活，不知怎地，我想不起來，但真正到了台南之後，觸發了大腦回憶的中樞，一切就像錄影機快速播放著我的大學生活，在沒有太多的記錄下，我甚至開始有點懷疑了我的過去，我的模樣，我的想法。\n為了婚事，我在找過去照片的過程之中，我不曉得我為啥此時會對於我所看到的照片有種陌生的感覺，而這種陌生的感覺，讓我很容易把影像深刻的刻在我的腦海中，一些忘卻的人事物，在我看到照片後，又再次回來了，讓我覺得生活的記憶就像是練習一個技術需不斷的反覆練習！\n今天颱風天獨自在住處看文章，想事情，突然想到一些像是，學生各時期的學號是什麼？上些什麼課？老師有誰？我居然沒有幾樣答的出來，天殺的！前陣子跟一些高中朋友們聚會，這是我僅存在大學以前，還有聯絡的好朋友們，而拜現在科技發達所賜，還有MSN跟這些朋友們可以沒事線上打打屁，我在想，如果科技沒有進展到這個程度，我還能保有哪些過往聯絡的朋友們？\n雖然微軟不是什麼討喜的公司，但也得在這邊謝謝你！\n","permalink":"https://chenfu.ai/posts/%E5%BF%83%E6%83%85%E9%9A%A8%E7%AD%86-%E9%97%9C%E6%96%BC%E5%9B%9E%E6%86%B6/","summary":"\u003cp\u003e看幾個朋友的Blog，回想起一些記憶，但我大腦的健忘程度，實在是夠高的，前陣子到台南去，在出發前，我試著去回憶台南的生活，不知怎地，我想不起來，但真正到了台南之後，觸發了大腦回憶的中樞，一切就像錄影機快速播放著我的大學生活，在沒有太多的記錄下，我甚至開始有點懷疑了我的過去，我的模樣，我的想法。\u003cbr\u003e\n為了婚事，我在找過去照片的過程之中，我不曉得我為啥此時會對於我所看到的照片有種陌生的感覺，而這種陌生的感覺，讓我很容易把影像深刻的刻在我的腦海中，一些忘卻的人事物，在我看到照片後，又再次回來了，讓我覺得生活的記憶就像是練習一個技術需不斷的反覆練習！\u003cbr\u003e\n今天颱風天獨自在住處看文章，想事情，突然想到一些像是，學生各時期的學號是什麼？上些什麼課？老師有誰？我居然沒有幾樣答的出來，天殺的！前陣子跟一些高中朋友們聚會，這是我僅存在大學以前，還有聯絡的好朋友們，而拜現在科技發達所賜，還有MSN跟這些朋友們可以沒事線上打打屁，我在想，如果科技沒有進展到這個程度，我還能保有哪些過往聯絡的朋友們？\u003cbr\u003e\n雖然微軟不是什麼討喜的公司，但也得在這邊謝謝你！\u003c/p\u003e","title":"[心情隨筆] 關於回憶"},{"content":"偶而在商周內會介紹一些當時優良的企業，不過怪的就是，通常在雜誌上介紹的名牌，在短時間內都很有機會成為冥牌，當然也不是說雜誌上所介紹的不是好公司，而是有種逆向操作的味道，耐吉(Nike)知道吧，就是傳奇的股市作手，當年Nike的老闆在股海浮沉多年之後，順手畫出了這條線，並成立了耐吉，意思就是要有耐心，凡事就會逢兇化吉，很好，扯太多了！\n是的，就是這個線，很多雜誌上曝光之後的股票，有很大機會的走勢就是如同以下的標誌。\n胡扯了那麼多，那，如何買股？！\n1. 先分類，把大漲一波的分一類，把還沒漲過的分一類。\n2. 把資金分成多份，先把一部份資金分散投入沒漲過的部份。\n3. 已大漲過的，就等唄，時間約1~2月，有一個回檔修正後，再將資金分散投入。\n以上的操作方法，是穩健型的，賺多賺少就是命，但應該有很高的機會會賺！那如果你要賺那種好幾倍的，那這種方法不適用，你可以\u0026quot;定孤枝\u0026quot;，但風險比較高，自行評量！除非你有可靠到不行的內線(敏感)。\n","permalink":"https://chenfu.ai/posts/%E8%B2%A1%E7%B6%93%E8%A7%80%E9%BB%9E-%E7%9C%8B%E5%95%86%E5%91%A8%E8%B2%B7%E8%82%A1%E7%A5%A8/","summary":"\u003cp\u003e偶而在商周內會介紹一些當時優良的企業，不過怪的就是，通常在雜誌上介紹的名牌，在短時間內都很有機會成為冥牌，當然也不是說雜誌上所介紹的不是好公司，而是有種逆向操作的味道，耐吉(Nike)知道吧，就是傳奇的股市作手，當年Nike的老闆在股海浮沉多年之後，順手畫出了這條線，並成立了耐吉，意思就是要有耐心，凡事就會逢兇化吉，很好，扯太多了！\u003cbr\u003e\n是的，就是這個線，很多雜誌上曝光之後的股票，有很大機會的走勢就是如同以下的標誌。\u003cbr\u003e\n\u003cimg loading=\"lazy\" src=\"http://pic.pimg.tw/frankuo/1359022894-7495097.jpg?v=1359022895\"\u003e\u003cbr\u003e\n胡扯了那麼多，那，如何買股？！\u003cbr\u003e\n1. 先分類，把大漲一波的分一類，把還沒漲過的分一類。\u003cbr\u003e\n2. 把資金分成多份，先把一部份資金分散投入沒漲過的部份。\u003cbr\u003e\n3. 已大漲過的，就等唄，時間約1~2月，有一個回檔修正後，再將資金分散投入。\u003cbr\u003e\n以上的操作方法，是穩健型的，賺多賺少就是命，但應該有很高的機會會賺！那如果你要賺那種好幾倍的，那這種方法不適用，你可以\u0026quot;定孤枝\u0026quot;，但風險比較高，自行評量！除非你有可靠到不行的內線(敏感)。\u003c/p\u003e","title":"[財經觀點] 看商周買股票"},{"content":"工作之後的體力真是逐年下降，然後愈來愈發福，現在只剩下兩週一次的高爾夫球，如果沒去，就變成一個月一次的高爾夫，今天老師好像已經上到碎碎念了…可能是沒成就感，就跟以前去家教，教到想揍人的感覺是一樣的！不過，我終於覺得好像有一點點進步了！XD，但回頭想想，已經打了八九個月了，結果七號桿還是頂多打個八九十碼，不然就是小便球…真是夠了…我替老師說的！\n","permalink":"https://chenfu.ai/posts/%E5%BF%83%E6%83%85%E9%9A%A8%E7%AD%86-%E6%AE%98%E5%AD%98%E7%9A%84%E9%81%8B%E5%8B%95-%E9%AB%98%E7%88%BE%E5%A4%AB/","summary":"\u003cp\u003e工作之後的體力真是逐年下降，然後愈來愈發福，現在只剩下兩週一次的高爾夫球，如果沒去，就變成一個月一次的高爾夫，今天老師好像已經上到碎碎念了…可能是沒成就感，就跟以前去家教，教到想揍人的感覺是一樣的！不過，我終於覺得好像有一點點進步了！XD，但回頭想想，已經打了八九個月了，結果七號桿還是頂多打個八九十碼，不然就是小便球…真是夠了…我替老師說的！\u003c/p\u003e","title":"[心情隨筆] 殘存的運動-高爾夫"},{"content":"在編譯busybox時，我用預設的config，即\n#make defconfig\n然後再用某toolchain，\n#make ARCH=arm CROSS_COMPILE=arm-linux-\n編譯之後會產生兩個狀況的error，此為其一，另一個為route，\n但我尚未找到解決方法，暫時將其disable就可以編譯過，\n而這個taskset.c我在網路上找到如下一篇文章，\n主要的問題是產生在sched_getaffinity與sched_setaffinity\n這兩個函式的參數個數，\nbusybox主要為uclibc所設計，而在glibc底下剛好就發生了這個mismatch，\n而編譯的狀況跟source code修改如下，如此即可順利編譯成功！\n-\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026ndash;\nCC miscutils/taskset.o\nmiscutils/taskset.c: In function taskset_main': miscutils/taskset.c:78: warning: passing arg 2 of sched_getaffinity\u0026rsquo;\nmakes pointer from integer without a cast\nmiscutils/taskset.c:78: error: too many arguments to function\nsched_getaffinity' miscutils/taskset.c:86: warning: passing arg 2 of sched_setaffinity\u0026rsquo;\nmakes pointer from integer without a cast\nmiscutils/taskset.c:86: error: too many arguments to function\n`sched_setaffinity\u0026rsquo;\nmake[1]: *** [miscutils/taskset.o] Error 1\nmake: *** [miscutils] Error 2\nSomething like this should work, unless there is a more elegant way:\n-\u0026ndash; bk.taskset.c 2007-06-30 11:06:44.000000000 -0400\n+++ taskset.c 2007-09-12 10:12:29.324150000 -0400\n@@ -75,7 +75,13 @@\nif (opt \u0026amp; OPT_p) {\nprint_aff:\n+ /* Pb: glibc has 2 params for this func */\n+#ifdef GLIBC\n+#warning \u0026ldquo;GLIBC DEFINED\u0026rdquo;\n+ if (sched_getaffinity(pid, \u0026amp;mask) \u0026lt; 0)\n+#else\nif (sched_getaffinity(pid, sizeof(mask), \u0026amp;mask) \u0026lt; 0)\n+#endif\nbb_perror_msg_and_die(\u0026ldquo;failed to %cet pid %d\u0026rsquo;s\naffinity\u0026rdquo;, \u0026lsquo;g\u0026rsquo;, pid);\nprintf(\u0026ldquo;pid %d\u0026rsquo;s %s affinity mask: \u0026ldquo;TASKSET_PRINTF_MASK\u0026rdquo;\\n\u0026rdquo;,\npid, state, from_cpuset(mask));\n@@ -83,7 +89,12 @@\nreturn EXIT_SUCCESS;\n}\n+ /* Pb: glibc has 2 params for this func */\n+#ifdef GLIBC\n+ if (sched_setaffinity(pid, \u0026amp;new_mask))\n+#else\nif (sched_setaffinity(pid, sizeof(new_mask), \u0026amp;new_mask))\n+#endif\nbb_perror_msg_and_die(\u0026ldquo;failed to %cet pid %d\u0026rsquo;s affinity\u0026rdquo;,\n\u0026rsquo;s\u0026rsquo;, pid);\nif (opt \u0026amp; OPT_p) {\nstate += 8;\n-\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026ndash;\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-busybox-172-tasksetc%E7%B7%A8%E8%AD%AF%E7%94%A2%E7%94%9Ferror/","summary":"\u003cp\u003e在編譯busybox時，我用預設的config，即\u003cbr\u003e\n#make defconfig\u003cbr\u003e\n然後再用某toolchain，\u003cbr\u003e\n#make ARCH=arm CROSS_COMPILE=arm-linux-\u003cbr\u003e\n編譯之後會產生兩個狀況的error，此為其一，另一個為route，\u003cbr\u003e\n但我尚未找到解決方法，暫時將其disable就可以編譯過，\u003cbr\u003e\n而這個taskset.c我在網路上找到如下一篇文章，\u003cbr\u003e\n主要的問題是產生在sched_getaffinity與sched_setaffinity\u003cbr\u003e\n這兩個函式的參數個數，\u003cbr\u003e\nbusybox主要為uclibc所設計，而在glibc底下剛好就發生了這個mismatch，\u003cbr\u003e\n而編譯的狀況跟source code修改如下，如此即可順利編譯成功！\u003cbr\u003e\n-\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026mdash;\u0026ndash;\u003cbr\u003e\nCC miscutils/taskset.o\u003cbr\u003e\nmiscutils/taskset.c: In function \u003ccode\u003etaskset_main':   miscutils/taskset.c:78: warning: passing arg 2 of \u003c/code\u003esched_getaffinity\u0026rsquo;\u003cbr\u003e\nmakes pointer from integer without a cast\u003cbr\u003e\nmiscutils/taskset.c:78: error: too many arguments to function\u003cbr\u003e\n\u003ccode\u003esched_getaffinity'   miscutils/taskset.c:86: warning: passing arg 2 of \u003c/code\u003esched_setaffinity\u0026rsquo;\u003cbr\u003e\nmakes pointer from integer without a cast\u003cbr\u003e\nmiscutils/taskset.c:86: error: too many arguments to function\u003cbr\u003e\n`sched_setaffinity\u0026rsquo;\u003cbr\u003e\nmake[1]: *** [miscutils/taskset.o] Error 1\u003cbr\u003e\nmake: *** [miscutils] Error 2\u003c/p\u003e","title":"[工作點滴] Busybox 1.7.2 taskset.c編譯產生error"},{"content":"Ubuntu 為了加速開機的速度使用了 dash 來取代傳統的 bash在/bin底下可以看到，/bin/sh -\u0026gt; /bin/dash，如果我們要改為原本傳統的bash，則可以在提示字元底下鍵入：\nsudo dpkg-recofigure dash\n出現了設定視窗之後選擇\u0026rsquo;No\u0026rsquo;即可改回原本的bash，建議有在ubuntu底下開發軟體的伙伴們，如有寫到關於shellscript的部份，還是改回bash比較保險。\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-ubuntu-dash/","summary":"\u003cp\u003eUbuntu 為了加速開機的速度使用了 dash 來取代傳統的 bash在/bin底下可以看到，/bin/sh -\u0026gt; /bin/dash，如果我們要改為原本傳統的bash，則可以在提示字元底下鍵入：\u003cbr\u003e\nsudo dpkg-recofigure dash\u003cbr\u003e\n出現了設定視窗之後選擇\u0026rsquo;No\u0026rsquo;即可改回原本的bash，建議有在ubuntu底下開發軟體的伙伴們，如有寫到關於shellscript的部份，還是改回bash比較保險。\u003c/p\u003e","title":"[工作點滴] ubuntu dash"},{"content":"看著爸媽斑白的頭髮和歲月刻在臉上的痕跡，心中不禁心疼起來，從唸大學後，除了當兵的短暫時光是在家裡渡過，就一直是離家在外求學，到現在工作也是在外打拼，雖然嘴上沒說出來，但也是有那麼一些小小的歉疚埋在心裡。希望爸媽生活平安健康快樂，這是心中最大的祝福。\n我是老爸的兒子，事件紀錄：\n1. 口是心非！\n2. 默默的做著關心親人的事情，但是就是不說！\n3. 有歉疚的事總是愛放在心裡。\n4. 有的時候會發神經的說話大聲。\n\u0026hellip;待發掘\n我是老媽的兒子，事件紀錄：\n1. 糊裡糊塗，忘東忘西。\n2. 有的時候搞不清楚狀況。\n3. 精神不濟打瞌睡。\n\u0026hellip;待發掘\n阿怎都是缺點\u0026hellip;\u0026hellip;優點我也不曉得是什麼，親人都常都會看到缺點！而且還會放大，今天去看阿嬤時跟小舅聊一下，我問表弟現在念書狀況怎樣時，果然，馬上得到印證了！在他口中沒有一個小孩是好了XD\u0026hellip;.\n","permalink":"https://chenfu.ai/posts/%E5%BF%83%E6%83%85%E9%9A%A8%E7%AD%86-%E6%88%91%E6%98%AF%E7%88%B8%E5%AA%BD%E7%9A%84%E5%85%92%E5%AD%90/","summary":"\u003cp\u003e看著爸媽斑白的頭髮和歲月刻在臉上的痕跡，心中不禁心疼起來，從唸大學後，除了當兵的短暫時光是在家裡渡過，就一直是離家在外求學，到現在工作也是在外打拼，雖然嘴上沒說出來，但也是有那麼一些小小的歉疚埋在心裡。希望爸媽生活平安健康快樂，這是心中最大的祝福。\u003c/p\u003e","title":"[心情隨筆] 我是爸媽的兒子"},{"content":"商周1035期焦點新聞，結合網商螞蟻雄兵，郭台銘要做網路飛虎。\n台灣目前製造力最強大的全球佈局企業非鴻海莫屬，為建構鴻海的全新佈局，因此與大陸最大電子商務網站阿里巴巴洽談合作，藉由與網商合作來抓住網路時代最重要的部份，資訊與個人化的力量。四年前鴻海從原本最擅長的3C(電腦、通訊、消費性電子)向上整合，加入了新3C(汽車電子、通路、內容)，如今打通虛擬與實境之間的任督二脈，鴻開始了網路產業的發展，若一氣呵成，鴻海可透過無遠弗屆的網路，一網打盡所有生意。\n身為六年級後半端的我們，恰巧經歷了網路泡沫化的時代，那個時候的不管是數位時代還是什麼的，對於網路的報導，真的是誇張，誇張再誇張，許多全新的名詞就在那個時候建構，抓住眼球…等，但不可抹煞的，就是把這些報導，放到十年後的今天，一切，都成為了可能，雖經歷了泡沫，但許多企業，從這邊再站起來，找到了對的營運模式，創造了新價值，當我能從網路上找數以萬計的資料，到虛擬的商店要進行交易，寫Blog抒發意見與情感，在這十年間，網路已成為民生必需品，每當我回家無法上網之時，總覺得似乎少了什麼？當網路漸成為人生的必需品之時，整個網路產業，已進入了高成長期的階段，在這個時候，如何去思考這一切的變革，歷史巨大的洪流，驅動我們進入一個全新的時代，就讓我們來好好觀察唄！\n節錄文章重點如下：\n網路產業關鍵：需掌握資訊與個人化兩股力量\n網路的贏家，不在於規模的大小，在於你的能力，跟你的彈性。\n整合資訊內容，打通物流、金流，產生新價值。\n網路雖然能打通全球物流、金流、資訊流的血脈，但要讓大象跳舞，讓飛虎騰雲駕霧，關鍵還是在內容。\n電子商務交易七環節：\nA(Access)：連上網路，必需確定自己能連上網路，進入網路世界。\nB(Browse)：蒐尋資料，上網蒐尋或讓別人瀏覽資料，在網路上交換商品、交易資料。\nC(Credit)：付費成交，一旦成交，在網路上收取貨款的方式。\nD(Delivery)：交貨，收款後，把貨品送到買家手上的方式。\nE(Enable)：安裝產品，買家收到貨品後，幫客戶安裝或教他如何使用產品。\nF(Fix)：維修，如果貨品有問題，提供維修服務。\nG(Guarantee)：保固，提供保固服務。\nA到C是虛擬的世界，但D到G是在實體世界才能完成，打通C與D之間的介面，創造全新的價值。\n網路經濟時代，沒有強勢管理，只有領導的責任與資訊的分享。\n一般來講我們分為四種訊息，一個是文字，一個是圖形，一個是聲音，一個是影像。\n文字稱為一媒體，圖形+文字稱為二媒體，圖形+文字+聲音+影像即為多媒體。\n實體網路經濟特色：\n1. 虛擬實境。2. 如虎添翼，大者恆大，小者靈活。3. 無遠弗屆。\n成功三部曲：\n1. 要有一個贏的策略。2. 要有一個必勝的決心。3. 要有科學的發展方向。\n策略簡易分為方向、時機、程度。\n方向：你要發展哪一個地區的客戶？你要做哪一個階層的客戶？你要函蓋的面向是哪些？你要找哪些技術？你要找哪些供應商？這些都與方向有關。\n時機：網路經濟的時機其實現在才剛開始。\n程度：網路交易七環節的工作，如何處理到非常完善。\n贏的策略，第一你要有贏的條件，第二你要有贏的精神，第三你要有贏的的習慣，第四你要有贏的團隊，第五你要有感恩跟回饋的價值觀。\n贏的條件：你要有正確、對的策略，你要有責任制的管理，第三你要有正確的價值觀。\n贏的精神：你要有夢想、你要有自我實現的欲望，第三你要正面思考。\n贏的習慣：計畫與執行，時間與自己，不要仰賴運氣，累積小成功，永不放棄。\n贏的團隊：桶幫理論，一個木桶，每個木桶能夠框在一起，能夠裝水變成力量，不是以最上面的一塊木片，做為你裝多少水的衡量，而是要以最小的木片才能代表你能裝多少水。團隊裡不是以最強能力的人，做為你成功或成就的主要關鍵，而是最弱的那個人，才是代表你團隊的整體實力，所以你必須幫助弱者，學會發覺別人的優點。\n","permalink":"https://chenfu.ai/posts/%E8%B2%A1%E7%B6%93%E8%A7%80%E9%BB%9E-6cip%E9%B4%BB%E6%B5%B7%E6%96%B0%E4%BD%88%E5%B1%80/","summary":"\u003cp\u003e商周1035期焦點新聞，結合網商螞蟻雄兵，郭台銘要做網路飛虎。\u003cbr\u003e\n台灣目前製造力最強大的全球佈局企業非鴻海莫屬，為建構鴻海的全新佈局，因此與大陸最大電子商務網站阿里巴巴洽談合作，藉由與網商合作來抓住網路時代最重要的部份，資訊與個人化的力量。四年前鴻海從原本最擅長的3C(電腦、通訊、消費性電子)向上整合，加入了新3C(汽車電子、通路、內容)，如今打通虛擬與實境之間的任督二脈，鴻開始了網路產業的發展，若一氣呵成，鴻海可透過無遠弗屆的網路，一網打盡所有生意。\u003cbr\u003e\n身為六年級後半端的我們，恰巧經歷了網路泡沫化的時代，那個時候的不管是數位時代還是什麼的，對於網路的報導，真的是誇張，誇張再誇張，許多全新的名詞就在那個時候建構，抓住眼球…等，但不可抹煞的，就是把這些報導，放到十年後的今天，一切，都成為了可能，雖經歷了泡沫，但許多企業，從這邊再站起來，找到了對的營運模式，創造了新價值，當我能從網路上找數以萬計的資料，到虛擬的商店要進行交易，寫Blog抒發意見與情感，在這十年間，網路已成為民生必需品，每當我回家無法上網之時，總覺得似乎少了什麼？當網路漸成為人生的必需品之時，整個網路產業，已進入了高成長期的階段，在這個時候，如何去思考這一切的變革，歷史巨大的洪流，驅動我們進入一個全新的時代，就讓我們來好好觀察唄！\u003c/p\u003e","title":"[財經觀點] 6C+IP鴻海新佈局"},{"content":"快速購併的訣竅在於，迅速決定人事去留，不搞內鬥！\n保險公司發展計畫優先順序應為：引進並創新商品→組織更有效率→增加通路→更好的風險管理→購併\n購併勝出關鍵在於尊重，價錢很重要，但真正的訣竅是不出高價，而購併的真正價值展現在未來股價\n購併的主要問題永遠是人的問題\n在亞洲購併以百分百持有為優先考量，萬不得已才用合資公司(馬來西亞、中國)，了解不同國家的做生意方式，要隨各地風格調整。基本原則為，第一要說實話，第二要堅守本業，第三要有企圖心，第四是領導人要全力投入。\n在中國做生意的經驗，很難纏，因為中國沒有商業機制，他們在發展中想抓的太多，所以忽略了建立完整體制、核心系統、商務法規、正規商業實務、尊重智慧財產權、版權。因此首先必需要很有耐心，申請到執照，然後根據中國法律必需要找對合夥人，選擇一間不懂保險的合資公司，由他們處理宏利跟中國、政府關係與官員打交道。\n堅守價值，保持心胸開闊，終生都希望對人公平，尊重世界上的生物，保持警醒，保持好奇心！\n","permalink":"https://chenfu.ai/posts/%E8%B2%A1%E7%B6%93%E8%A7%80%E9%BB%9E-%E5%85%A8%E7%90%83%E7%AC%AC%E4%BA%94%E5%A4%A7%E4%BF%9D%E9%9A%AA%E5%85%AC%E5%8F%B8%E5%AE%8F%E5%88%A9%E4%BA%BA%E5%A3%BD%E5%A4%9A%E7%B8%BD%E8%A3%81%E6%98%8E%E5%B0%BC%E5%85%8B%E4%B9%8B%E8%B3%BC%E4%BD%B5%E5%BF%83%E6%B3%95/","summary":"\u003cp\u003e快速購併的訣竅在於，迅速決定人事去留，不搞內鬥！\u003c/p\u003e\n\u003cp\u003e保險公司發展計畫優先順序應為：引進並創新商品→組織更有效率→增加通路→更好的風險管理→購併\u003c/p\u003e\n\u003cp\u003e購併勝出關鍵在於尊重，價錢很重要，但真正的訣竅是不出高價，而購併的真正價值展現在未來股價\u003c/p\u003e","title":"[財經觀點] 全球第五大保險公司宏利人壽多總裁明尼克之購併心法"},{"content":"Daemon應用於Linux嵌入式系統實作\nDaemon(或是service)對有玩linux的同好應該是耳熟能詳的東西，Daemon大陸翻譯為守護進程，而我在台灣找網站沒有找到什麼特別的翻譯，在Devin Watson先生的Linux Daemon Writing HOWTO中，有做詳細的入門簡介及一個範例，我透過這個範例將目前專案的幾個程序做了一個小改變，如此可以達到常駐於系統背景的功能，以下是我的一個程式片段，可供各位參考應用。\nint main(void)\n{\nchar message[20]; // Process ID and Session ID pid_t pid, sid; // Fork off the parent process. pid = fork(); if (pid \u0026lt; 0) { exit(EXIT_FAILURE); } // If we got a good pid, then we // can exit the parent process. if(pid \u0026gt; 0) { exit(EXIT_SUCCESS); } // Change the file mode mask umask(0); // Open any logs here // Create a new SID for the child process. sid = setsid(); if(sid \u0026lt; 0) { exit(EXIT_FAILURE); } // Change the working directory. if((chdir(\u0026quot;/\u0026quot;)) \u0026lt; 0) { exit(EXIT_FAILURE); } // Close out the standard file descriptors. close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); // Daemon-specific initialization goes here // Set the GPIO. // 這個部分是我所寫的初始化GPIO的應用程式。 system(\u0026quot;/usr/sbin/setgpio -il\u0026quot;); while(1){ // 這個部份是透過網路上找的另一個程式， // 如果可以透過system，去取得回應值並將之存於一個Buffer中 // 還蠻好用的。 // Get the status. my_system(\u0026quot;/usr/sbin/getgpio --status\u0026quot;, message, 20); if(message[17]=='0'){ system(\u0026quot;/usr/sbin/setgpio -ol\u0026quot;); } else if(message[17]=='1'){ system(\u0026quot;/usr/sbin/setgpio -oh\u0026quot;); } // Sleep for 5sec. sleep(5); } return 0; }\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-daemon%E6%87%89%E7%94%A8%E6%96%BClinux%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%B5%B1%E5%AF%A6%E4%BD%9C/","summary":"\u003cp\u003eDaemon應用於Linux嵌入式系統實作\u003c/p\u003e\n\u003cp\u003eDaemon(或是service)對有玩linux的同好應該是耳熟能詳的東西，Daemon大陸翻譯為守護進程，而我在台灣找網站沒有找到什麼特別的翻譯，在Devin Watson先生的Linux Daemon Writing HOWTO中，有做詳細的入門簡介及一個範例，我透過這個範例將目前專案的幾個程序做了一個小改變，如此可以達到常駐於系統背景的功能，以下是我的一個程式片段，可供各位參考應用。\u003c/p\u003e","title":"[工作點滴] Daemon應用於Linux嵌入式系統實作"},{"content":"這陣子被Assign工作到弄stream server上面，從原本的發展平台上面，使用了patch加上shell script的方式來將檔案從原始碼，透過patch將原始碼變成修改過的檔案，再compile生成需要的聯結檔或著是執行檔，一開始的時後沒有仔細去想說為何要如此做，但最近開始有感覺如此做的好處。\n這些我們需要的原始檔案是可以透過網路方式去取得的open source，而這些檔案就是最初的原始檔，而修改過後的內容，我們透過diff的指令去製作出patch file，當我們一個個將不同功能的應用程式組合起來，我們可以得到一堆壓縮檔和一堆patch file，再透過shell script分別可以命名為，EXTAR：extract tarball，MAKE：make all application與BUILD：build to directory we want，以上三種方式來管理，如此可以讓整個專案的架構看起來很容易理解，目前，我正嘗試用此方式再reconstruct相同的東西，只是是各應用程式的升級版，如果可以順利build起來，那未來要升級相關程式應該是沒有太大的問題，當然這不是指在程式開發過程中，而是已經開發到一個程度之後，對整個專案做一個整理，如果要轉交工作給別人的時候，可以讓別人很快的清楚明白系統的架構。\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-patch-vs-%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%B5%B1%E7%99%BC%E5%B1%95%E5%BF%83%E5%BE%97/","summary":"\u003cp\u003e這陣子被Assign工作到弄stream server上面，從原本的發展平台上面，使用了patch加上shell script的方式來將檔案從原始碼，透過patch將原始碼變成修改過的檔案，再compile生成需要的聯結檔或著是執行檔，一開始的時後沒有仔細去想說為何要如此做，但最近開始有感覺如此做的好處。\u003cbr\u003e\n這些我們需要的原始檔案是可以透過網路方式去取得的open source，而這些檔案就是最初的原始檔，而修改過後的內容，我們透過diff的指令去製作出patch file，當我們一個個將不同功能的應用程式組合起來，我們可以得到一堆壓縮檔和一堆patch file，再透過shell script分別可以命名為，EXTAR：extract tarball，MAKE：make all application與BUILD：build to directory we want，以上三種方式來管理，如此可以讓整個專案的架構看起來很容易理解，目前，我正嘗試用此方式再reconstruct相同的東西，只是是各應用程式的升級版，如果可以順利build起來，那未來要升級相關程式應該是沒有太大的問題，當然這不是指在程式開發過程中，而是已經開發到一個程度之後，對整個專案做一個整理，如果要轉交工作給別人的時候，可以讓別人很快的清楚明白系統的架構。\u003c/p\u003e","title":"[工作點滴] Patch vs 嵌入式系統發展心得"},{"content":"Carey是我未婚妻之前養的狗，而牠在端午節過後沒多久就走了…\n我第一次見牠的時候，就被咬了！我一生到現在被兩隻狗咬過，第一隻叫Lucky，忘了是在我國中還國小的時候吧，但對我來說並不怎麼Lucky，單純只是想摸摸牠就被咬了，而Carey，我也只是想摸摸牠，也是被咬了…只是沒像之前那隻咬的有受傷。\n從第一次\u0026quot;親密\u0026quot;接觸之後，我到小紅帽家，就會聽到Carey歡迎的叫聲！有點吵！\n之後就跑到我旁邊磨蹭撒嬌…要東西吃…因為牠是貪吃鬼！\nCarey對阿帽而言是很重要的一個家人，地位應該連我都比不上…\n因為牠陪伴阿帽渡過許多日子，不管喜怒哀樂，至今，阿帽仍為Carey的過去感到自責…\n我在旁邊看著，安慰的話也說不出口，腦中盤旋許多想說出來安慰的話，還是硬生生的吞回去…\n現在到小紅帽家，雖然已經過了兩個多月，但還是覺得怪怪的，只差像今天看的韓劇中的主角出現幻聽的症狀一樣，就是少了些什麼…當騎車騎到松山醫院回轉的時候，看到仁心(寵物醫院，雖然是仁心，但有時不曉得為啥會覺得他黑心，XD)，還是會想到Carey…\n隨著日子的過去，我在想也許我會慢慢淡忘，但無論如何，還是想記錄我對Carey的記憶…\n對於Carey，我很感謝牠，牠彌補了我的不足，因為我常常是小紅帽眼中的壞傢伙…\n","permalink":"https://chenfu.ai/posts/%E5%BF%83%E6%83%85%E9%9A%A8%E7%AD%86-%E5%BC%B5carey/","summary":"\u003cp\u003eCarey是我未婚妻之前養的狗，而牠在端午節過後沒多久就走了…\u003c/p\u003e\n\u003cp\u003e我第一次見牠的時候，就被咬了！我一生到現在被兩隻狗咬過，第一隻叫Lucky，忘了是在我國中還國小的時候吧，但對我來說並不怎麼Lucky，單純只是想摸摸牠就被咬了，而Carey，我也只是想摸摸牠，也是被咬了…只是沒像之前那隻咬的有受傷。\u003c/p\u003e","title":"[心情隨筆] 張Carey"},{"content":"很久沒這樣的感覺了…\n好想回家，躲在家裡…\n當個任性叛逆的小孩…\n","permalink":"https://chenfu.ai/posts/%E5%BF%83%E6%83%85%E9%9A%A8%E7%AD%86-%E7%B7%8A%E7%B9%83/","summary":"\u003cp\u003e很久沒這樣的感覺了…\u003cbr\u003e\n好想回家，躲在家裡…\u003cbr\u003e\n當個任性叛逆的小孩…\u003c/p\u003e","title":"[心情隨筆] 緊繃"},{"content":"剛好看到這篇，與大家分享！\n來源：http://www.drbataipei.org/wisdom/213/wisdom213_4.htm\n內容：\n做人的責任是什麼呢？就是應該對全世界有所貢獻、有所幫助，要利益世界上所有的人，這是我們每人做人真正的責任。\n今天大家有緣同聚一堂共同討論「人生的需要是什麼？」「我們人為什麼來到這世界上？到這世界上是不是單為吃飯、穿衣、睡覺、享受而來的呢？」\n這些問題若不注意，看來很簡單，但若真正的去研究，就不那麼簡單了。究竟我們人到世界來的工作是什麼？責任是什麼？每一個人都應認真來討個明白。如果認識不清楚，此生做人就沒有什麼意義及價值。故我們應認清楚如何盡責任，如何把我們的任務做好。\n首先要學習如何盡人的任務及天職。小孩剛出世時，只會哭，只知道吃，根本不知道他們將來的任務是什麼。隨著時日一天天成長，父母就送他們到學校去學習做人的責任，以準備將來盡自己的任務。\n學習，每人又有種種志願，有的是為學「明理」─明白道理；有的為學「名利」─將來好出風頭得個好名譽；有的為將來能發財得大利益，根本不管明不明理、合不合法、不擇手段去發財、爭取權利。\n有的人有「領袖慾」，要做領導者。但你先要知如何做人，是否夠得上做一個人的資格。如果明白如何做人，能做別人的模範，那你作領袖是於心無愧。若心存爭 心、貪心、求心、自私心、自利心、打妄語心，向外馳求，作領袖只為自己謀福利而不能為他人謀幸福，那就是走錯路了。做領袖一定要屈己待人、薄己厚人、利益 所有人類。\n做人的責任是什麼呢？就是應該對全世界有所貢獻、有所幫助，要利益世界上所有的人，這是我們每人做人真正的責任。而不是專為自己吃一點好的、穿好的，住一豪華房子。\n若普天下有一人沒有飯吃、沒有衣穿，那是我對不起此人，因我沒有盡到自己的心及能力來幫助他。做人真正的責任，就要真正利益他人，要有功於世、有利於民，這是我應負起的責任，不可推諉。人人都存此心，世界一定和平沒有戰爭。\n我們首先要做人的好模範，不與人爭。世界為什麼壞？就因爭權、爭利、爭名。你能將好事讓給他人，旁人不願之事你接受過來，和所有人都不爭；人人都不爭，世界和平一定有望。\n一般人所貪的，你不貪，你不隨世界瘋狂的風氣跑，而作「疾風中的勁燭，烈火中的精金」，隨緣不變，不變隨緣，抱定自己的宗旨，潛移默化，令人人遵守不爭、不貪、不求、不自利、不自私、不妄語，則世界一定和平。\n從自己修身起，在內心與自己也不爭，則一切發狂妄想皆不起，平平靜靜，這就是真正的快樂。你自己平靜快樂，就能影響旁人都平靜快樂。大家和平相處，世界就 不會有戰爭。為什麼世界有戰爭？就因為人在心裡爭的緣故。人心和平，則世界和平；人心不平，則世界不和平。我們青年人、老年人認識此道理後，就不會賭博、 吸毒、放火、搶劫、強姦。\n要想世界好，先要從自己個人做起。若我不好，世界怎會好呢？不要專指著他人說：「為什麼別人不守規矩？」你要先問你自己：「守規矩沒有？」這些問題，青年人要負起這個責任來，青年們不好好做，世界怎會好？\n青年人從教授及老師處學往正道走，但若找到不好的老師，教他們邪知邪見，青年人也跟著學壞。所謂「近朱者赤，近墨者黑。」故擇友尋師非常重要。有為的青年 應將自己責任認識清楚，不要作個自了漢。做人的責任是要有功於世、有益於民、有利於全人類。我本來想要負起救世的責任，成就全世界人類，但我老了，力量不 夠，故我寄望各位有為的青年，要發救世的心，為全人類謀幸福。\n有為的青年們，應真發大願大力，來成就全世界人類之幸福，拯救那些處在水深火熱者，令彼離苦得樂，自己先要學不抽煙、不喝酒、不發脾氣、不殺生、不偷盜、 不邪淫、不妄語、不吃肉、不賭博、不吸毒，要學正當的行為。若如此，則全世界人類將會得救。我到處大聲疾呼，希望年輕人覺悟，發大慈大悲、大喜大捨之心， 秉著像耶穌、像釋迦牟尼佛，及所有聖人的救世胸懷，那麼世界即使不和平也要和平了。\n今天所講，各位可以研究研究，所講對否？我不知道。我是位極渴望世界和平的人，希望世界人類沒有痛苦，但完成這個理想一定要有智慧才能做到。\n","permalink":"https://chenfu.ai/posts/%E6%96%87%E7%AB%A0%E8%BD%89%E8%BC%89-%E4%BA%BA%E5%88%B0%E4%B8%96%E7%95%8C%E4%BE%86%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%92%8C%E8%B2%AC%E4%BB%BB/","summary":"\u003cp\u003e剛好看到這篇，與大家分享！\u003cbr\u003e\n來源：http://www.drbataipei.org/wisdom/213/wisdom213_4.htm\u003cbr\u003e\n內容：\u003c/p\u003e","title":"[文章轉載] 人到世界來的工作和責任"},{"content":"自從高中以後，就開始買一些像PCDIY的電腦雜誌或是電玩雜誌，那時總會有一種想追逐流行的心態，組裝PC，玩Game，一直到了大四的時候，一個學弟在看商周，我就好奇的問他為什麼要看這個，他說他從高中就在看了，就有興趣，而且內容有提供許多觀點，因此之後我就三不五十偶而的買一本來看，似乎也是為了追逐流行…\n現在我成為了訂戶，從商周裡我得到很多在那時沒感覺得知識，而工作以後，之前模糊的記憶，變成了我的助力。玩股票，讓我從中間了解了不同產業的結構，上下游關係，從而對應到商周內容，了解一間公司所謂\u0026quot;成功\u0026quot;(註1)的方式。在吸收這些知識的過程之中，自然的，慢慢會產生反思與觀點的轉換，畢竟商周也是一個媒體，一個再客觀的媒體，還是有機會會產生不客觀的報導，然而商周力求客觀，這是非常值得稱許，我想說的僅僅是，在看報導時，也要有自己的獨立思考，即使是看不太懂的，就看過唄，也許只是時間未到，someday，你會靈光乍現的！\n除了名稱，商業，內容當然一定要有不能脫離商業的內容，除此之外，我從裡面得到許多政治，教育，社會，人文許許多多不同的觀點，從這些觀點之中，開始將我對人生的看法，拼湊出一點輪廓，雖然我尚未被任何宗教感召，但我現在很喜歡一句話，人活在世界上一定有他的責任，上天賦予我什麼樣子的能力，就是為了讓我能對世界做一些什麼樣子的貢獻。\n至少，我開始有一點點的夢想，已經勝過在工作前從沒夢想的我！\n註：\n1. 此處打引號是因為我有不同的解讀，因為從經營公司的觀點是成功，但不代表人在所有事情都成功，畢竟，現在的社會，總把人在事業上的成功後，就當作是成功的人，但我不這麼認為，有所得必有所失，端看自己想追求什麼樣的事物與生活，學著知足，就是成功的人了。\n","permalink":"https://chenfu.ai/posts/%E8%B2%A1%E7%B6%93%E8%A7%80%E9%BB%9E-%E6%88%91%E7%9C%8B%E5%95%86%E5%91%A8/","summary":"\u003cp\u003e自從高中以後，就開始買一些像PCDIY的電腦雜誌或是電玩雜誌，那時總會有一種想追逐流行的心態，組裝PC，玩Game，一直到了大四的時候，一個學弟在看商周，我就好奇的問他為什麼要看這個，他說他從高中就在看了，就有興趣，而且內容有提供許多觀點，因此之後我就三不五十偶而的買一本來看，似乎也是為了追逐流行…\u003cbr\u003e\n現在我成為了訂戶，從商周裡我得到很多在那時沒感覺得知識，而工作以後，之前模糊的記憶，變成了我的助力。玩股票，讓我從中間了解了不同產業的結構，上下游關係，從而對應到商周內容，了解一間公司所謂\u0026quot;成功\u0026quot;(註1)的方式。在吸收這些知識的過程之中，自然的，慢慢會產生反思與觀點的轉換，畢竟商周也是一個媒體，一個再客觀的媒體，還是有機會會產生不客觀的報導，然而商周力求客觀，這是非常值得稱許，我想說的僅僅是，在看報導時，也要有自己的獨立思考，即使是看不太懂的，就看過唄，也許只是時間未到，someday，你會靈光乍現的！\u003cbr\u003e\n除了名稱，商業，內容當然一定要有不能脫離商業的內容，除此之外，我從裡面得到許多政治，教育，社會，人文許許多多不同的觀點，從這些觀點之中，開始將我對人生的看法，拼湊出一點輪廓，雖然我尚未被任何宗教感召，但我現在很喜歡一句話，人活在世界上一定有他的責任，上天賦予我什麼樣子的能力，就是為了讓我能對世界做一些什麼樣子的貢獻。\u003cbr\u003e\n至少，我開始有一點點的夢想，已經勝過在工作前從沒夢想的我！\u003c/p\u003e","title":"[財經觀點] 我看商周"},{"content":"建立patch檔案使用的命令\ndiff -Naur 舊目錄或檔案 新目錄或檔案 \u0026gt; patch檔案\n如何使用patch 對於一個patch檔案，有兩種常用使用方法：\n1. cat new-patch | patch -p0\n2. patch -p0 \u0026lt; new-patch\npatch命令裡面的層數\n參數-p來指定從第幾層開始比較。比如有一個patch檔案的開頭是：\n-\u0026ndash; old/modules/network JAN 26 12:11:36 2002\n+++ new/modules/network SEP 20 20:07:38 2003\n如果使用參數-p0，就表示從當前目錄，一直找到network的目錄。\n如果使用參數-p1，就代表忽略第一層，表示從當前目錄找modules目錄，一直找到network目錄。\n這樣會忽略掉patch檔案頭提到的old及new目錄。\npatch的結構：\n分別由\u0026mdash;/+++開頭的兩行，表示要patch的檔案。\n一個patch檔案中的多個patch\n一個patch檔案中可能包含以\u0026mdash;/+++開頭的很多區塊，每一區塊用來形成一個patch。\n因此在一個patch檔案中可以包含好多個patch。\n區塊是patch中要修改的地方，通常由不用修改的東西開始和結束。\n他們只是用來表示要修改的位置。\n而區塊通常以**@@** 開始，\n結束於另一個區塊的開始或者一個新的patch head。\n區塊的縮進，區塊會縮進一列，\n而這一列是用來表示這一行是要增加還是要刪除的。\n區塊的第一列\n+號表示這一行是要加上的。\n-號表示這一行是要刪除的。\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-patch-file-in-linux/","summary":"\u003cp\u003e\u003cstrong\u003e建立patch檔案使用的命令\u003c/strong\u003e\u003cbr\u003e\ndiff -Naur 舊目錄或檔案 新目錄或檔案 \u0026gt; patch檔案\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e如何使用patch\u003c/strong\u003e 對於一個patch檔案，有兩種常用使用方法：\u003cbr\u003e\n1. cat new-patch | patch -p0\u003cbr\u003e\n2. patch -p0 \u0026lt; new-patch\u003c/p\u003e","title":"[工作點滴] patch file in Linux"},{"content":"登錄ActiveX：\nregsvr32 mcscal.ocx 反登錄ActiveX：\nregsvr32 /u mcscal.ocx ","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E5%9C%A8windows%E4%B8%8B%E7%99%BB%E9%8C%84activex%E5%85%83%E4%BB%B6%E6%96%B9%E5%BC%8F/","summary":"\u003cp\u003e登錄ActiveX：\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eregsvr32 mcscal.ocx\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e反登錄ActiveX：\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eregsvr32 /u mcscal.ocx\n\u003c/code\u003e\u003c/pre\u003e","title":"[工作點滴] 在windows下登錄ActiveX元件方式"},{"content":".ocx元件是由Third Party所提供的一個可嵌在網頁上的一個元件，然後這個元件的功能有所限制，因此，為了要擴展此一元件的功能，必需要將此ocx檔，包進一個包裏裡(wrapper function)後，再加上自己所需要的一些功能，沒做過的事情初次做果然都是困難重重，雖然大致上的概念已經想的清楚了，但工具的使用實在是不熟悉，視窗程式設計對我而言來說，算是經驗稀少的，待我再搞個幾天，再來發表一下心得…XD！\n","permalink":"https://chenfu.ai/posts/%E5%B7%A5%E4%BD%9C%E9%BB%9E%E6%BB%B4-%E5%B0%87ocx%E5%B5%8C%E5%85%A5%E7%B6%B2%E9%A0%81%E4%B9%8B%E7%8B%80%E6%B3%81%E6%8F%8F%E8%BF%B0/","summary":"\u003cp\u003e.ocx元件是由Third Party所提供的一個可嵌在網頁上的一個元件，然後這個元件的功能有所限制，因此，為了要擴展此一元件的功能，必需要將此ocx檔，包進一個包裏裡(wrapper function)後，再加上自己所需要的一些功能，沒做過的事情初次做果然都是困難重重，雖然大致上的概念已經想的清楚了，但工具的使用實在是不熟悉，視窗程式設計對我而言來說，算是經驗稀少的，待我再搞個幾天，再來發表一下心得…XD！\u003c/p\u003e","title":"[工作點滴] 將ocx嵌入網頁之狀況描述"},{"content":"看到這個名詞，\n我居然想到大學時的系書包跟T恤…翼類…\n有的時候，在想我是不是個異類，\n不是特別的異類，反而是古怪的…\n在長久追尋內心某些人生的答案時，\n我已慢慢做出一些結論，輪廓也許尚未清楚，\n但概念已經有個方向，自從退伍後，\n上來台北工作，談戀愛，人生已不像在學校的輕鬆，\n表面上我對事情成竹在胸，\n但在行為上，\n自己隱隱透出對未來的沒把握與不確定感，\n在遍遊網路找尋工作上的資料時，\n曾到看一個傢伙的Blog，\n名稱是，我一直在努力…\n沒想到我居然會為了一個簡單的名稱，\n而覺得有感觸…\n我不知道我是不是一直在努力…\n但我總覺得我一直不夠努力，\n這種想法把我撕成了許多的碎片，\n然而人腦的多工處理是十足差勁的！\n造成的結果是我開始覺得我的人格在分裂…\n健忘也是副作用嗎？\n","permalink":"https://chenfu.ai/posts/%E5%BF%83%E6%83%85%E9%9A%A8%E7%AD%86-%E7%95%B0%E9%A1%9E/","summary":"\u003cp\u003e看到這個名詞，\u003cbr\u003e\n我居然想到大學時的系書包跟T恤…翼類…\u003cbr\u003e\n有的時候，在想我是不是個異類，\u003cbr\u003e\n不是特別的異類，反而是古怪的…\u003c/p\u003e\n\u003cp\u003e在長久追尋內心某些人生的答案時，\u003cbr\u003e\n我已慢慢做出一些結論，輪廓也許尚未清楚，\u003cbr\u003e\n但概念已經有個方向，自從退伍後，\u003cbr\u003e\n上來台北工作，談戀愛，人生已不像在學校的輕鬆，\u003cbr\u003e\n表面上我對事情成竹在胸，\u003cbr\u003e\n但在行為上，\u003cbr\u003e\n自己隱隱透出對未來的沒把握與不確定感，\u003cbr\u003e\n在遍遊網路找尋工作上的資料時，\u003cbr\u003e\n曾到看一個傢伙的Blog，\u003cbr\u003e\n名稱是，我一直在努力…\u003cbr\u003e\n沒想到我居然會為了一個簡單的名稱，\u003cbr\u003e\n而覺得有感觸…\u003c/p\u003e","title":"[心情隨筆] 異類"},{"content":"三十歲的我，\n回首過往如夢一場…\n沒留下什麼痕跡，\n以往試著寫些東西，\n三分鐘的熱度，\n加上沒多久就被砍掉的Blog，\n一切，\n都遺忘了…\n三十歲的記憶，\n只有工作…\n","permalink":"https://chenfu.ai/posts/%E5%BF%83%E6%83%85%E9%9A%A8%E7%AD%86-%E4%B8%89%E5%8D%81%E6%AD%B2%E7%9A%84%E8%A8%98%E6%86%B6/","summary":"\u003cp\u003e三十歲的我，\u003cbr\u003e\n回首過往如夢一場…\u003cbr\u003e\n沒留下什麼痕跡，\u003cbr\u003e\n以往試著寫些東西，\u003cbr\u003e\n三分鐘的熱度，\u003cbr\u003e\n加上沒多久就被砍掉的Blog，\u003cbr\u003e\n一切，\u003cbr\u003e\n都遺忘了…\u003cbr\u003e\n三十歲的記憶，\u003cbr\u003e\n只有工作…\u003c/p\u003e","title":"[心情隨筆] 三十歲的記憶"}]