[{"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\n\u003cp\u003eJTAG 的 call stack、SWD 的暫存器狀態、Serial Console 的 log——一段貼過去，AI 給建議，我改一下 code，重新 build、flash、再抓 log，再貼回去。來來回回。有時貼錯視窗，有時貼漏了關鍵的那幾行。\u003c/p\u003e\n\u003cp\u003e跟以前純靠自己 debug 比起來，確實快很多。但還是不夠快。Bug 像俄羅斯套娃，抓掉一層，裡面還有一層。每一次的「這次應該好了」到「怎麼又掛了」的迴圈，都讓人想把鍵盤推開。\u003c/p\u003e\n\u003cp\u003e所以我在想，\u003cstrong\u003e如果能消除人為因素的話呢？\u003c/strong\u003e\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"一個想法給-ai-眼睛跟手\"\u003e一個想法：給 AI 眼睛跟手\u003c/h2\u003e\n\u003cp\u003e問題說清楚了就好解決。\u003c/p\u003e\n\u003cp\u003e我需要的不是更聰明的 AI，而是\u003cstrong\u003e讓 AI 能自己看、自己動、自己驗\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003e不再是我充當「人肉資料傳輸管道」，把硬體的訊號用眼睛看完之後再貼給 AI，而是讓 AI 直接接上硬體的感知介面，取得第一手的訊號，做出判斷，然後直接驅動工具鏈——build、flash、reset——再自己確認結果。\u003c/p\u003e\n\u003cp\u003e這個想法就是 \u003cstrong\u003eAI-HIL（AI Hardware-in-the-Loop）\u003c/strong\u003e。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eGiving hardware the soul of AI, realizing automated closed-loop development in the physical world.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch2 id=\"ai-hil-是什麼\"\u003eAI-HIL 是什麼\u003c/h2\u003e\n\u003cp\u003eAI-HIL 把 Claude Code 從「code 產生器」升級成「系統級工程師」。\u003c/p\u003e\n\u003cp\u003e透過 \u003ca href=\"https://modelcontextprotocol.io\"\u003eModel Context Protocol (MCP)\u003c/a\u003e，Claude Code 連接到實體硬體，獲得三種能力：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e感知（Perception）\u003c/strong\u003e：讀 Serial log、JTAG call stack、電流波形、Camera 畫面\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e行動（Action）\u003c/strong\u003e：Build/Flash firmware、硬體 Reset、電源控制\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e閉環驗證（Closed-Loop Validation）\u003c/strong\u003e：自動確認修復是否有效，記錄 bug 模式\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e換句話說，AI 不再只是坐在我旁邊出主意，而是能自己上工的 \u003cstrong\u003eAI Employee\u003c/strong\u003e。\u003c/p\u003e","title":"AI-HIL：當 AI 長出了眼睛和手，讓嵌入式開發閉環自動化"},{"content":"在 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 回應的準確性與即時性。 設計多輪對話管理機制，支援複雜場景的上下文追蹤，讓用戶在不需人工客服介入的情況下完成設定、排障與服務申請。 持續透過用戶對話資料優化模型與知識庫，形成「用戶互動 → 知識優化 → 服務品質提升」的正向循環。 ","permalink":"https://chenfu.ai/impact/","summary":"\u003ch2 id=\"在-ubiquiti-的-14-年規模化的傳承\"\u003e在 Ubiquiti 的 14 年：規模化的傳承\u003c/h2\u003e\n\u003cp\u003e在 Ubiquiti，我的旅程不僅僅關於技術交付，更關於建立驅動全球網路領導品牌的人才與技術基礎設施。\u003c/p\u003e\n\u003ch3 id=\"-組織規模化-從-0-到-1\"\u003e🚀 組織規模化 (從 0 到 1)\u003c/h3\u003e\n\u003cp\u003e我從無到有建立並擴展了多個學科組織，使其發展為成熟且高效的實體：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eBSP 團隊\u003c/strong\u003e：從 \u003cstrong\u003e0 擴展至 26+\u003c/strong\u003e 位成員。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e雲端服務\u003c/strong\u003e：在台北建立雲端組織，從 \u003cstrong\u003e0 到 30\u003c/strong\u003e 位工程師。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e行動應用與 App\u003c/strong\u003e：成立了超過 \u003cstrong\u003e20 位\u003c/strong\u003e 開發者的統一團隊。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAI 核心開發團隊\u003c/strong\u003e：從 \u003cstrong\u003e0 建立至 15 位\u003c/strong\u003e，涵蓋資料工程、模型訓練、AIOps、AIQA 及邊緣設備交付，形成完整的 AI 閉環作戰力量。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e工廠自動化軟體開發團隊\u003c/strong\u003e：從 \u003cstrong\u003e0 建立至 10 位\u003c/strong\u003e，專注製造端智慧化軟體，銜接硬體量產流程與數位化管理，提升良率與生產效率。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e總管理規模\u003c/strong\u003e：目前監督超過 \u003cstrong\u003e250 位\u003c/strong\u003e 專業人才，涵蓋韌體、雲端、AI 與 QA。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"-fabricmatrix橫向串聯的組織綜效\"\u003e🕸️ Fabric/Matrix：橫向串聯的組織綜效\u003c/h3\u003e\n\u003cp\u003e我相信真正的組織力量不在於各自為政的強大，而在於\u003cstrong\u003e跨團隊的協作乘數\u003c/strong\u003e。我刻意打造一種 \u003cstrong\u003eFabric 式的矩陣文化\u003c/strong\u003e，讓 AI、韌體、雲端、QA、行動應用各職能如織物的經緯線，在需要時緊密交織、相互強化，杜絕穀倉效應（Silo Effect）的發生：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e跨部門知識流動\u003c/strong\u003e：定期舉辦跨團隊 Tech Talk 與 Design Review，讓不同學科的洞察橫向傳遞。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e共享基礎能力\u003c/strong\u003e：AI 推論基礎設施、雲端資料平台、QA 自動化框架等，以服務共享方式供各團隊使用，避免重複造輪。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e主動消除摩擦\u003c/strong\u003e：定期盤點跨團隊依賴與協作節點，主動識別整合機會，讓整體效益最佳化。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"-coach-領導賦能而非指揮\"\u003e🎯 Coach 領導：賦能而非指揮\u003c/h3\u003e\n\u003cp\u003e作為一名 \u003cstrong\u003eICF 認證教練 (ACC)\u003c/strong\u003e，我不追求做最聰明的人，而是讓每一位成員和每一支團隊成為\u003cstrong\u003e在自己領域獨當一面的主人\u003c/strong\u003e：\u003c/p\u003e","title":"產品影響力與組織規模化"},{"content":" \u0026ldquo;迎向陽光，然後在未知的荒野中踏出路來。\u0026rdquo;\n這份手冊旨在減少溝通摩擦，幫助我們更高效地協作。在經歷了帶領 250+ 人企業研發團隊的淬鍊後，我正以開放的心態展望下一段職涯，尋找價值觀契合、渴望將新興技術轉化為實質現實影響力的團隊。儘管未來的語境可能改變，我底層的工程師靈魂依舊。這是一份基於我 20 多年的經驗，並反映我當下狀態的動態文件。\n🌟 核心哲學與願景 擁抱模糊性與行動優先 (Action \u0026amp; Resilience)：在探索新興技術（如 AI、機器人、虛實整合系統）的邊界時，前方往往沒有清晰的地圖。我極度看重探索未知時的**韌性 (Resilience)**與解決問題的渴望。行動比語言更有力，告訴我「我們還能怎麼做」，而不是純理論的空談。 公平與關懷 (Fairness Cares)：我非常重視公平。如果團隊成員受到不公平對待或有人的行動負面影響整體利益，我會直接介入處理。 賦能與心理安全感 (Empowerment)：我不喜歡微觀管理 (Micromanagement)。我會給予充分的情境，並期待你掌握方向盤。我們都在面對未知，誠實的試錯是探索邊界的必經之路，看著團隊成員承擔責任並成長，是我最大的成就感。 ⚙️ 技術哲學與開發文化 架構思考 (DDD)：我對領域驅動設計 (Domain-Driven Design, DDD) 有著強烈的偏好。我欣賞「結構化、低耦合、且能真實反映業務實踐」的優雅架構。 探索技術邊界：把功能交付只是及格，對新技術的心之所向才是驅動力。我鼓勵團隊對前沿技術（如 Zig, Zenoh, 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)：我不擅長將豐富的情緒寫在臉上，有時會被誤讀。記住：如果我不開心或不認同，我會直接說；如果不說，請預設系統一切運作良好！ 🗂 協作細則指南 (Collaboration Deep Dive) （以下細節將會持續擴充與更新）\nInput \u0026amp; Output 我如何接收資訊、需要多久反應、如何給出回饋。\nMeeting Manifesto 什麼樣的會議對我來說是高效的。\nAsynchronous First 為什麼我重視文件化勝過口頭交待。\nHuman Sensor 承認自己在情感感知的不足，並邀請夥伴補位。\nTechnical Standards 我對 Code Quality 與 DDD 實踐的底線。\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\n\u003ch3 id=\"-核心哲學與願景\"\u003e🌟 核心哲學與願景\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e擁抱模糊性與行動優先 (Action \u0026amp; Resilience)\u003c/strong\u003e：在探索新興技術（如 AI、機器人、虛實整合系統）的邊界時，前方往往沒有清晰的地圖。我極度看重探索未知時的**韌性 (Resilience)**與解決問題的渴望。行動比語言更有力，告訴我「我們還能怎麼做」，而不是純理論的空談。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e公平與關懷 (Fairness Cares)\u003c/strong\u003e：我非常重視公平。如果團隊成員受到不公平對待或有人的行動負面影響整體利益，我會直接介入處理。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e賦能與心理安全感 (Empowerment)\u003c/strong\u003e：我不喜歡微觀管理 (Micromanagement)。我會給予充分的情境，並期待你掌握方向盤。我們都在面對未知，誠實的試錯是探索邊界的必經之路，看著團隊成員承擔責任並成長，是我最大的成就感。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"-技術哲學與開發文化\"\u003e⚙️ 技術哲學與開發文化\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e架構思考 (DDD)\u003c/strong\u003e：我對領域驅動設計 (Domain-Driven Design, DDD) 有著強烈的偏好。我欣賞「結構化、低耦合、且能真實反映業務實踐」的優雅架構。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e探索技術邊界\u003c/strong\u003e：把功能交付只是及格，對新技術的心之所向才是驅動力。我鼓勵團隊對前沿技術（如 Zig, Zenoh, DePIN, IoT）保持高度的探索精神。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAI 驅動的工作流 (AI-Driven Workflows)\u003c/strong\u003e：我積極擁抱 AI 協作。請不要死守傳統、繁瑣的開發流程；我期待團隊利用 AI 工具達到數倍的生產力提升，將人類的腦力保留給最困難的工程預防與架構決策。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"-溝通與工作偏好\"\u003e💬 溝通與工作偏好\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e非同步與效率優先 (Async \u0026amp; Efficiency First)\u003c/strong\u003e：如同我喜歡自託管基礎設施，我同樣偏好「清爽乾淨的文件化」，這遠勝過冗長低效的會議。但對於緊急事項，\u003cstrong\u003e面對面\u003c/strong\u003e或 \u003cstrong\u003eSlack Huddle\u003c/strong\u003e 絕對優於電子郵件。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e坦承直言與開放心態 (Be Straight \u0026amp; Open Minded)\u003c/strong\u003e：我偏好艱難但誠實的對談，隱瞞問題無濟於事。我將所有回饋視為學習機會，請隨時提供具體範例與改進建議。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e內向者的深度處理 (Deep Processing)\u003c/strong\u003e：身為內向者，我在安靜的環境中處理複雜問題時效率最高。如果我在會議現場保持沉默，絕不代表我反對，通常只是我的大腦正在後台尋找最優解。我的行事曆是公開的，如果我有空，隨時歡迎預約協作。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"-我的掙扎\"\u003e⚠️ 我的掙扎\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e完美架構 vs. 快速迭代 (Speed to Market)\u003c/strong\u003e：我的工程師直覺總是渴望打造「最優雅的架構」，但為了讓產品對世界產生實質影響，往往需要推向市場進行快速迭代。我經常在這兩者間自我拉扯。如果你發現我們此刻只需要 MVP，我卻陷入過度工程化 (Over-engineering)，請直接提醒我。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e缺乏耐心 (Impatience)\u003c/strong\u003e：對於邏輯不通或充滿行政摩擦的互動，我很容易失去耐心。如果我顯得冷酷或急躁，請多包涵——或者直接向我提出更有效率的解法。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e撲克臉 (Poker Face)\u003c/strong\u003e：我不擅長將豐富的情緒寫在臉上，有時會被誤讀。記住：如果我不開心或不認同，我會直接說；如果不說，請預設系統一切運作良好！\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch3 id=\"-協作細則指南-collaboration-deep-dive\"\u003e🗂 協作細則指南 (Collaboration Deep Dive)\u003c/h3\u003e\n\u003cp\u003e\u003cem\u003e（以下細節將會持續擴充與更新）\u003c/em\u003e\u003c/p\u003e","title":"領導力使用手冊：如何與我合作"},{"content":"20 年研發領導經驗 我是一位以結果為導向的軟硬體研發總監，在科技產業擁有超過 20 年的經驗。在我的職業生涯中，我專長於從「零到一」建立並擴展多學科的工程團隊。\n目前，我擔任 Ubiquiti Inc. 的軟硬體總監，管理一個超過 250 位專業人士 的組織，涵蓋 BSP、韌體、雲端、AI 以及行動應用程式。\n我的歷程 Ubiquiti Inc.：14 年的成長歷程，領導 UniFi 生態系統的多項技術里程碑，包含建構端到端的 AI 閉環研發體系 (Data → Data Labeling → Model Training → AIOps → AIQA → Edge Devices)。 Robert Bosch：監控攝影機軟體與系統架構團隊負責人。 Dynacolor：副理，協調複雜安全解決方案的產品生命週期。 不只是工程師 作為一名 ICF 助理認證教練 (ACC)，我致力於建立一種以信任為基礎、賦能為核心的領導文化。我不追求做最聰明的人，而是讓每一支團隊成為在自己領域獨當一面的主人。我刻意以教練式對話取代指令，以最小化過度介入取代微管理，讓工程師在自主中成長。同時，我推崇 Fabric 式的矩陣組織文化，讓跨職能團隊（AI、韌體、雲端、QA、行動應用）能橫向串聯、共享知識與能力，以整體綜效對抗穀倉效應（Silo Effect）。\n全面擁抱 AI：手感實作哲學 (All in AI) 在經歷了二十年的技術迭代與領導生涯後，我選擇全面擁抱 AI 革命——不僅僅是作為一名戰略管理者，更是作為一名積極的實踐者。我堅信 「動手實作，不畏艱難 (hands-on and getting my hands dirty)」。要真正發揮 AI 的力量，必須直接參與建構。我的方法是深入鑽研技術、撰寫程式碼、不斷實驗並持續學習。這種手感實作的心態確保了我的領導策略能根植於技術現實，讓我能充分掌握 AI 的潛力與實際侷限。\n我所帶領的 AI 核心開發部門，已建立起從資料收集、標注、模型訓練、AIOps 運維、AIQA 驗證，到 Camera 與 AI Key 硬體交付的 完整閉環架構，形成自我強化的 AI 進化飛輪。\n未來視野 (Future Horizons) 展望未來，我的熱情在於新興技術與具備實質現實影響力的結合。我未來關注的核心領域包括：\n人工智慧 (AI) 🕊️ 機器人學 (Robotics) 嵌入式系統 (Embedded Systems) 區塊鏈技術 (Blockchain) 虛實整合系統 (Cyber-Physical Systems) 對人類社會有貢獻且能驅動正面影響的應用 教育背景 碩士學位，航空太空工程 | 國立成功大學 學士學位，航空太空工程 | 國立成功大學 讓我們聯繫 (Let\u0026rsquo;s Connect) 無論是討論研發領導力、探索新技術視野，還是合作具影響力的專案，我都非常期待與您交流：\nEmail: kuochenfu88@gmail.com GitHub: kuochenfu LinkedIn: Fran Kuo ","permalink":"https://chenfu.ai/about/","summary":"\u003ch2 id=\"20-年研發領導經驗\"\u003e20 年研發領導經驗\u003c/h2\u003e\n\u003cp\u003e我是一位以結果為導向的軟硬體研發總監，在科技產業擁有超過 20 年的經驗。在我的職業生涯中，我專長於從「零到一」建立並擴展多學科的工程團隊。\u003c/p\u003e\n\u003cp\u003e目前，我擔任 \u003cstrong\u003eUbiquiti Inc. 的軟硬體總監\u003c/strong\u003e，管理一個超過 \u003cstrong\u003e250 位專業人士\u003c/strong\u003e 的組織，涵蓋 BSP、韌體、雲端、AI 以及行動應用程式。\u003c/p\u003e\n\u003ch3 id=\"我的歷程\"\u003e我的歷程\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eUbiquiti Inc.\u003c/strong\u003e：14 年的成長歷程，領導 UniFi 生態系統的多項技術里程碑，包含建構端到端的 \u003cstrong\u003eAI 閉環研發體系\u003c/strong\u003e (Data → Data Labeling → Model Training → AIOps → AIQA → Edge Devices)。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRobert Bosch\u003c/strong\u003e：監控攝影機軟體與系統架構團隊負責人。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eDynacolor\u003c/strong\u003e：副理，協調複雜安全解決方案的產品生命週期。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"不只是工程師\"\u003e不只是工程師\u003c/h3\u003e\n\u003cp\u003e作為一名 \u003cstrong\u003eICF 助理認證教練 (ACC)\u003c/strong\u003e，我致力於建立一種以信任為基礎、賦能為核心的領導文化。我不追求做最聰明的人，而是讓每一支團隊成為\u003cstrong\u003e在自己領域獨當一面的主人\u003c/strong\u003e。我刻意以教練式對話取代指令，以最小化過度介入取代微管理，讓工程師在自主中成長。同時，我推崇 \u003cstrong\u003eFabric 式的矩陣組織文化\u003c/strong\u003e，讓跨職能團隊（AI、韌體、雲端、QA、行動應用）能橫向串聯、共享知識與能力，以整體綜效對抗穀倉效應（Silo Effect）。\u003c/p\u003e\n\u003ch3 id=\"全面擁抱-ai手感實作哲學-all-in-ai\"\u003e全面擁抱 AI：手感實作哲學 (All in AI)\u003c/h3\u003e\n\u003cp\u003e在經歷了二十年的技術迭代與領導生涯後，我選擇全面擁抱 AI 革命——不僅僅是作為一名戰略管理者，更是作為一名積極的實踐者。我堅信 \u003cstrong\u003e「動手實作，不畏艱難 (hands-on and getting my hands dirty)」\u003c/strong\u003e。要真正發揮 AI 的力量，必須直接參與建構。我的方法是深入鑽研技術、撰寫程式碼、不斷實驗並持續學習。這種手感實作的心態確保了我的領導策略能根植於技術現實，讓我能充分掌握 AI 的潛力與實際侷限。\u003c/p\u003e\n\u003cp\u003e我所帶領的 \u003cstrong\u003eAI 核心開發部門\u003c/strong\u003e，已建立起從資料收集、標注、模型訓練、AIOps 運維、AIQA 驗證，到 Camera 與 AI Key 硬體交付的 \u003cstrong\u003e完整閉環架構\u003c/strong\u003e，形成自我強化的 AI 進化飛輪。\u003c/p\u003e","title":"關於 郭振甫 (Fran Kuo)"},{"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模板路徑：專案目錄下 doc/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\n\u003chr\u003e\n\u003ch2 id=\"第一階段基礎連結與路徑優化\"\u003e第一階段：基礎連結與路徑優化\u003c/h2\u003e\n\u003cp\u003e首先，將 Obsidian 作為 Hugo 專案的專屬編輯器，讓本地檔案與 Vault 直接連結。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e開啟專案\u003c/strong\u003e：啟動 Obsidian，選擇 \u003ccode\u003eOpen folder as vault\u003c/code\u003e。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e路徑設定\u003c/strong\u003e：導向本地專案路徑 \u003ccode\u003e/Users/chenfu/Labs/chenfu.ai\u003c/code\u003e。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e優化目錄視圖\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e主要創作區：\u003ccode\u003econtent/posts/\u003c/code\u003e (部落格文章)。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e核心頁面區：\u003ccode\u003econtent/\u003c/code\u003e (關於我、專案介紹等)。\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr\u003e\n\u003ch2 id=\"第二階段git-整合達成自動化發佈\"\u003e第二階段：Git 整合達成自動化發佈\u003c/h2\u003e\n\u003cp\u003e為了實現寫完即發佈，我們利用 \u003cstrong\u003eObsidian Git\u003c/strong\u003e 插件將 GitHub 與編輯器串連。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e安裝插件\u003c/strong\u003e：在 \u003ccode\u003eCommunity plugins\u003c/code\u003e 中搜尋並安裝 \u003cstrong\u003eObsidian Git\u003c/strong\u003e (by Vinzent03)。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e同步設定\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e手動觸發 (推薦)\u003c/strong\u003e：使用快捷鍵 \u003ccode\u003eCmd + P\u003c/code\u003e，輸入 \u003ccode\u003eGit: Push\u003c/code\u003e 即可將更新推送到 GitHub。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e自動備份\u003c/strong\u003e：可設定 \u003ccode\u003eVault backup interval\u003c/code\u003e (如 60 分鐘) 自動同步。\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e部署流程\u003c/strong\u003e：一旦 Push 成功，Cloudflare Pages 會自動偵測更新並在 3 分鐘內完成部署。\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\n\u003cp\u003e我之所以想做這種設備，源於我在大學時期的研究。我曾在航太系修讀力學，大學加碩士總共沉浸了六年。在台灣，因為環境因素，這類職涯機會相對較少。許多同學選擇加入半導體產業，在台積電或奇美電子等公司擔任設備工程師。少部分人（包括我）選擇了一條不同的路，在其他產業擔任研發工程師。\u003c/p\u003e\n\u003cp\u003e我的第一份履歷投考的是機構工程師，但命運引領我成為了監控系統的軟體工程師。幸運的是，我見證了監控產業最重要的轉型期：從封閉系統到開放系統，再從開放系統轉向智慧化系統。這其中最顯著的變革是 IP 網路基礎設施的快速成長。網路技術克服了 2000 年的泡沫，重新形塑了許多產業的遊戲規則。隨著開放系統逐漸成熟，我們正邁向智慧化的未來。\u003c/p\u003e\n\u003cp\u003e四旋翼無人機就是這類型設備的一個縮影。\n影片連結：\u003ca href=\"http://www.ted.com/speakers/raffaello_d_andrea.html\"\u003eRaffaello D\u0026rsquo;Andrea on TED\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e我對影片中第一個「倒立單擺 (Inverted Pendulum)」的演示印象極深，這是在學校最基礎的控制實驗，如今竟然在四旋翼無人機上實現了，簡直太神奇了！我原本的構思僅是讓它在不同基地台間巡邏，但現在的發展已遠超我的想像。\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\n\u003cp\u003e我在第一份和第二份工作中面試過許多人。目前與猎頭推薦的候選人進行面試，感覺更有趣。為什麼？因為許多因素會決定你到底需要哪種類型的開發者。\u003c/p\u003e\n\u003cp\u003e以我的第一份工作為例，公司並不傾向為資深工程師支付高昂薪資，因為過去與資深人才合作的歷史並不佳，存在不確定性。因此，我們當時偏好找尋社會新鮮人。尋找新血的策略相對簡單：第一，查看在校成績，確認他們是否認真對待學生的本分；第二，進行適向測驗 (Aptitude test)，了解邏輯與耐心等指標。根據結果，我們還會進行不同主題的對談，觀察其態度、表達能力，以及最重要的——潛力 (Potential)。綜合以上考量，我們就能判斷是否值得一試。相對來說，這簡單許多，對吧？\u003c/p\u003e\n\u003cp\u003e回到我現在的面試經驗。我們正在尋找非常資深且極度優秀的開發者。這裡不再看成績單或適向測驗，取而代之的是，我們必須評判他們在職涯中所經手的具體工作。雖然獵頭理應幫忙過濾履歷，但有些獵頭就像房屋仲介，因此我們仍得透過不同管道獲取資訊，確保求職者正是我們想要的人才。此外，我必須設置不同類型的測試，例如 30 分鐘的即時編碼、詢問高難度的技術難題等。評判這名開發者是否合用變得複雜許多，因為我們不再像以前看待新人那樣有大量的時間進行培訓。這是一項挑戰，但也非常有趣。希望我們能儘快找到像藍波 (Rambo) 一樣的核心工程戰力。\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\n\u003cp\u003e在類比電視的時代，複合影像基頻訊號 (CVBS) 是最常見的訊號格式。它的普及性、易用性與穩定性已成為我們生活的一部分。事實上，CVBS 是類比監控系統中實質上的訊號標準。隨著全球類比電視訊號停播 (ASO) 期到來，我們正在跨入數位電視時代。DVB-T、ISDB-T 與 ATSC 等數位技術已像類比時代的 CVBS 一樣變得普及且不可或缺。ccHDtv 槓桿了數位電視極其強大的 AV 傳輸能量，能輕鬆且無縫地將類比 CCTV 監控系統升級至數位全高畫質。可以預見，ccHDtv 在未來將成為數位影像監控系統的實質標準。\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\n\u003cp\u003e雖然這份紀錄未必完全精確，但我仍想記下我在這裡看到的點滴。根據網頁資訊，我簡單畫出了我個人認為的公司產品地圖及其核心思考。\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\n\u003cp\u003e在技術規範中都有明確定義，我們可以直接查閱。這裡附上由 Wireshark 擷取的封包時序圖 (Packet sequence diagram)。\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\n\u003cp\u003e基本上，維基百科列出了四種部署模型。私有雲無法滿足監控系統的各項需求。我們也不探討社群雲 (Community Cloud)，因為那在監控實務中並不常見。\u003c/p\u003e\n\u003cp\u003e有一家著名的網路攝錄影機公司名為 Dropcam，它是採用純公有雲模型的典型案例。安裝設備時，我們必須建立帳號並註冊。據我所知，Dropcam 使用 Amazon Web Service (AWS) 作為基礎設施。我畫了一些簡單的方塊圖來描述這個架構。\u003c/p\u003e\n\u003cp\u003eDropcam 的模式（圖左下）中，所有服務皆由 Dropcam 提供並託管於 AWS。Dropcam 的角色不再僅是設備製造商，更是服務提供者。這種方式使整體系統變得最簡單且直觀。\u003c/p\u003e\n\u003cp\u003e而其他三種方塊圖則越來越複雜。一些監控公司仍希望基於傳統模式擴展系統，這可能導致整體架構變得像圖片上方那樣極其複雜，他們很快就會陷入泥淖。\u003c/p\u003e\n\u003cp\u003e不過，仍有一個大哉問：並非所有人都喜歡將私有影像內容餵給服務提供者。這也是為什麼傳統監控系統依然存在並掌握大部分市場佔有率的原因。但我認為這種情況在近幾年將會發生巨變。\u003c/p\u003e\n\u003cp\u003e經過研究與學習，我傾向將部署簡化為兩種。一種是 Dropcam 的模式，優點如前文所述。另一種則是因為目前純公有雲仍有部分弱點尚無法克服。\u003c/p\u003e\n\u003cp\u003e究竟是左邊還是右邊比較好？讓我們拭目以待。\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\n\u003cp\u003e經過數小時的調查，我發現當參數設定為「非阻塞模式 (non-blocking mode)」時，該插件可能會在 While 迴圈中導致忙碌等待 (busy wait)。我對程式碼進行了簡單修改並重新執行，結果 CPU 使用率降低到 12%。雖然略有改進，但我依然感到有些沮喪。\u003c/p\u003e\n\u003cp\u003e於是，我開始嘗試不同的參數組合，因為我同事發現了 \u003ccode\u003ealsasrc\u003c/code\u003e 與測試工具間的三個差異點：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003ccode\u003ealsasrc\u003c/code\u003e 設定為「非阻塞模式」，而測試工具為「阻塞模式 (block mode)」。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ealsasrc\u003c/code\u003e 的聲道設定為 1，而測試工具設定為 2。\u003c/li\u003e\n\u003cli\u003e測試工具限制了緩衝區大小 (buffer size)，而 \u003ccode\u003ealsasrc\u003c/code\u003e 沒有這項限制。\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e針對第一點：我原以為非阻塞模式應該更有效率，但關鍵在於必須改善其忙碌等待的機制。\n針對第二點：這非常奇特，因為當我在 \u003ccode\u003ealsasrc\u003c/code\u003e 插件將聲道數設定為 2 時，CPU 使用率竟然大幅降低。這讓我開始懷疑這是否與 I2S 匯流排的特性有關。我在網路上搜尋，並未發現任何資料指明「當音訊匯流排為 I2S 時，必須在 GStreamer 的 \u003ccode\u003ealsasrc\u003c/code\u003e 插件中將聲道參數設為 2」。稍後我會進一步確認此現象。\n針對第三點：我認為限制緩衝區大小以優化效能是合理的做法。\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\n\u003cp\u003eFrom wiki: \u003ca href=\"http://en.wikipedia.org/wiki/Standard_Template_Library\"\u003ehttp://en.wikipedia.org/wiki/Standard_Template_Library\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThe 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.\u003c/p\u003e\n\u003cp\u003eThe 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.\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\n\u003cp\u003eSVN版本控制下要移除所有目錄底下.svn\u003cbr\u003e\n$ rm -rf \u003ccode\u003efind . -type d -name .svn\u003c/code\u003e\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\n\u003cul\u003e\n\u003cli\u003e跨國大企業以提昇眼界\u003c/li\u003e\n\u003cli\u003e研發團隊以延續工作經驗\u003c/li\u003e\n\u003cli\u003e團隊面臨轉變以大展身手\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e於是乎，就在這全新的環境中開始了工作的第二趟旅程，第一個月並沒有像新鮮人時期的那種不適應的狀況，而且還有點過度亢奮，大量的瀏覽公司內部的網站，一切都非常的新鮮有趣，而後在滿三個月時，就讓我實際接任Team Leader的工作，並帶領一個Team來跑案子，在這期間跟國外的con-call，依公司的的專案流程sop撰寫相關的技術文件。\u003cbr\u003e\n除了必要的工作之外，還持續規劃並找出可以研發且並無與其他的RD團隊有衝突的專案，目標也很簡單，想初步先成立一個韌體團隊以增加台灣研發團隊的競爭力。\u003cbr\u003e\n依第一個工作上的經驗，電子、機構及軟韌體的人才如果能齊備，加上產品為光機電整合，不但門檻墊高且可讓台灣研發團隊的可見度大大提升。\u003cbr\u003e\n2011年9月時，提出了一個這樣的案子看是否有辦法依我的目標去發生，不過可惜的是，公司當時的策略並無法讓這樣的案子成行，接下來能做的就是把現有的專案更完美的執行，增加籌碼，同時間可以再持續修正提案，待時機更加成熟時再進行。\u003cbr\u003e\n而後在11月中旬時，恰好有一個機會，跟現在公司的老闆見面，Robert很年輕，不是跟我同年或是小我一歲，其經營公司的方式讓我大開眼界且前所未見，即便是他自己本身也在經營上不斷的嘗試，積極且讓我有一起創業打拼的感覺，這時的想法只有一定要見識一下。研發的彈性大，靠的是工程師自律的研發，對於有想法且不斷自我實現的人可以有很大的發揮。所以最後還是毅然在12月離開到現在的公司，某種程度上挺對不住前公司，但因為與其未來操之於人，還是會想要未來由自己所掌握。\u003cbr\u003e\n新工作至今一年多，這段時間研發的速度發常的快速，台灣的團隊效率非常高，除此外從國外的研發團隊也得到很多新的概念，跟這樣的一群人工作非常有意思，不同背景、文化在想法上的出發點完全不同，雖常常有衝突，但激盪出的火花讓我覺得未來是有很大機會能持續成長。\u003cbr\u003e\n邁向第十年，期待自己更加成熟，讓眼界更上層樓。\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\n\u003cp\u003e雖然七三七巷的那間路邊攤燒烤比較有名，但無意間吃了串門子，覺得比七三七巷的還不賴！\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\n\u003cp\u003e2. 編輯Makefile，將CC跟STRIP修改如下\u003cbr\u003e\nCROSS_COMPILE=arm-unknown-linux-gnu-\u003cbr\u003e\nCC=${CROSS_COMPILE}gcc\u003cbr\u003e\nSTRIP=${CROSS_COMPILE}strip\u003c/p\u003e\n\u003cp\u003e3. Make it！！\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\n\u003cp\u003e\u003ca href=\"http://febon.blogspot.com/\"\u003ehttp://febon.blogspot.com/\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e如果對安全監控產業有興趣的，也可以一起來討論討論。\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\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://pic.pimg.tw/frankuo/1359022893-3792372920.jpg?v=1359022894\"\u003e\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\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003esun-java6-jre\u003c/strong\u003e(執行 Java 軟體必要的環境)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003esun-java6-jdk\u003c/strong\u003e****(Java 程序開發者才需要安裝)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eeclipse-jdt\u003c/strong\u003e (Eclipse 的 Java 開發工具套件)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eeclipse-common-nls\u003c/strong\u003e****(Eclipse 的地區化語言訊息，想要中文的操作介面請裝它)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003egalternatives\u003c/strong\u003e (update-alternatives 的 GUI 前端工具，用來變更系統預設偏好)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e編輯以下的檔案內容，直接vim /etc/jvm\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e/etc/jvm\u003c/strong\u003e (定義系統使用的 JAVA_HOME)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e檢查或增加下列在檔案的最前面\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e/usr/lib/jvm/java-6-sun\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e先執行一次 Eclipse 再關閉，來自動產生家目錄中的 \u003cstrong\u003e.eclipse/\u003c/strong\u003e 目錄，新增檔案及下面的內容到 ~/.eclipse/\u003cstrong\u003eeclipserc\u003c/strong\u003e (各別使用者自訂的 JAVA_HOME)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e/usr/lib/jvm/java-6-sun\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e檢查 /etc/eclipse/java_home\u003c/strong\u003e (定義Eclipse搜尋 JAVA_HOME 的順序)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUbuntu 7.10: (已有不用追加)\u003c/li\u003e\n\u003cli\u003eUbuntu 7.04: 必須手動增加下列在\u003cstrong\u003e第一行\u003c/strong\u003e\u003cbr\u003e\n\u003cstrong\u003e/usr/lib/jvm/java-6-sun\u003c/strong\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e執行命令：\u003cstrong\u003egalternatives\u003c/strong\u003e ，開啟應用程式後，往下尋找下列三個 Alternatives\u003cbr\u003e\n\u003cstrong\u003ejar\u003c/strong\u003e**、java、javac**\u003cbr\u003e\n內容option 均挑選開頭為 \u003cstrong\u003e/usr/lib/jvm/java-6-sun/\u0026hellip;..\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e驗證在終端機執行下列命令：\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e打開 Eclipse 驗證使用的 JRE\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e[Help]- \u0026gt;[About Eclipse Platform]-\u0026gt;[Configuration Detail]\u003c/strong\u003e\u003cbr\u003e\n看看是否有多個\u0026quot;\u003cstrong\u003e/usr/lib/jvm/java-6-sun- 1.6.0 \u0026hellip;.\u003c/strong\u003e \u0026ldquo;字詞出現即為正確。如此即建立好\u003cstrong\u003eJava \u0026amp; Linux開發環境\u003c/strong\u003e\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\n\u003cp\u003e而除了做人不想做的想法外，另一種就是大家熟知的創新，而我剛看到了一個就是，投資監獄！美國監獄大爆滿，也開始有所謂的民營監獄…這些民營監獄的年報酬居然高達20%，真是夭壽喔！\u003c/p\u003e\n\u003cp\u003e那幹麻有18%，投資200萬蓋監獄，每年就20%的回饋，那醬子我們軍公教的18%就解套啦！政府出資把軍公教的18%投資監獄就好勒…監獄爆滿也不曉得是件好事還是壞事，至少醬看起來想犯罪的人愈來愈多！\u003c/p\u003e\n\u003cp\u003e總之，能沉住氣做人家不想做的事與創意工作，應該有可能成為開創事業的機會！\u003cbr\u003e\n__\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\n\u003cp\u003e我是老爸的兒子，事件紀錄：\u003cbr\u003e\n1. 口是心非！\u003cbr\u003e\n2. 默默的做著關心親人的事情，但是就是不說！\u003cbr\u003e\n3. 有歉疚的事總是愛放在心裡。\u003cbr\u003e\n4. 有的時候會發神經的說話大聲。\u003cbr\u003e\n\u0026hellip;待發掘\u003c/p\u003e\n\u003cp\u003e我是老媽的兒子，事件紀錄：\u003cbr\u003e\n1. 糊裡糊塗，忘東忘西。\u003cbr\u003e\n2. 有的時候搞不清楚狀況。\u003cbr\u003e\n3. 精神不濟打瞌睡。\u003cbr\u003e\n\u0026hellip;待發掘\u003c/p\u003e\n\u003cp\u003e阿怎都是缺點\u0026hellip;\u0026hellip;優點我也不曉得是什麼，親人都常都會看到缺點！而且還會放大，今天去看阿嬤時跟小舅聊一下，我問表弟現在念書狀況怎樣時，果然，馬上得到印證了！在他口中沒有一個小孩是好了XD\u0026hellip;.\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\n\u003cp\u003e節錄文章重點如下：\u003c/p\u003e\n\u003cp\u003e網路產業關鍵：需掌握資訊與個人化兩股力量\u003c/p\u003e\n\u003cp\u003e網路的贏家，不在於規模的大小，在於你的能力，跟你的彈性。\u003c/p\u003e\n\u003cp\u003e整合資訊內容，打通物流、金流，產生新價值。\u003c/p\u003e\n\u003cp\u003e網路雖然能打通全球物流、金流、資訊流的血脈，但要讓大象跳舞，讓飛虎騰雲駕霧，關鍵還是在內容。\u003c/p\u003e\n\u003cp\u003e電子商務交易七環節：\u003cbr\u003e\nA(Access)：連上網路，必需確定自己能連上網路，進入網路世界。\u003cbr\u003e\nB(Browse)：蒐尋資料，上網蒐尋或讓別人瀏覽資料，在網路上交換商品、交易資料。\u003cbr\u003e\nC(Credit)：付費成交，一旦成交，在網路上收取貨款的方式。\u003cbr\u003e\nD(Delivery)：交貨，收款後，把貨品送到買家手上的方式。\u003cbr\u003e\nE(Enable)：安裝產品，買家收到貨品後，幫客戶安裝或教他如何使用產品。\u003cbr\u003e\nF(Fix)：維修，如果貨品有問題，提供維修服務。\u003cbr\u003e\nG(Guarantee)：保固，提供保固服務。\u003cbr\u003e\nA到C是虛擬的世界，但D到G是在實體世界才能完成，打通C與D之間的介面，創造全新的價值。\u003c/p\u003e\n\u003cp\u003e網路經濟時代，沒有強勢管理，只有領導的責任與資訊的分享。\u003c/p\u003e\n\u003cp\u003e一般來講我們分為四種訊息，一個是文字，一個是圖形，一個是聲音，一個是影像。\u003cbr\u003e\n文字稱為一媒體，圖形+文字稱為二媒體，圖形+文字+聲音+影像即為多媒體。\u003c/p\u003e\n\u003cp\u003e實體網路經濟特色：\u003cbr\u003e\n1. 虛擬實境。2. 如虎添翼，大者恆大，小者靈活。3. 無遠弗屆。\u003c/p\u003e\n\u003cp\u003e成功三部曲：\u003cbr\u003e\n1. 要有一個贏的策略。2. 要有一個必勝的決心。3. 要有科學的發展方向。\u003c/p\u003e\n\u003cp\u003e策略簡易分為方向、時機、程度。\u003cbr\u003e\n方向：你要發展哪一個地區的客戶？你要做哪一個階層的客戶？你要函蓋的面向是哪些？你要找哪些技術？你要找哪些供應商？這些都與方向有關。\u003cbr\u003e\n時機：網路經濟的時機其實現在才剛開始。\u003cbr\u003e\n程度：網路交易七環節的工作，如何處理到非常完善。\u003c/p\u003e\n\u003cp\u003e贏的策略，第一你要有贏的條件，第二你要有贏的精神，第三你要有贏的的習慣，第四你要有贏的團隊，第五你要有感恩跟回饋的價值觀。\u003cbr\u003e\n贏的條件：你要有正確、對的策略，你要有責任制的管理，第三你要有正確的價值觀。\u003cbr\u003e\n贏的精神：你要有夢想、你要有自我實現的欲望，第三你要正面思考。\u003cbr\u003e\n贏的習慣：計畫與執行，時間與自己，不要仰賴運氣，累積小成功，永不放棄。\u003cbr\u003e\n贏的團隊：桶幫理論，一個木桶，每個木桶能夠框在一起，能夠裝水變成力量，不是以最上面的一塊木片，做為你裝多少水的衡量，而是要以最小的木片才能代表你能裝多少水。團隊裡不是以最強能力的人，做為你成功或成就的主要關鍵，而是最弱的那個人，才是代表你團隊的整體實力，所以你必須幫助弱者，學會發覺別人的優點。\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\n\u003cp\u003e購併的主要問題永遠是人的問題\u003c/p\u003e\n\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\n\u003cp\u003eint main(void)\u003c/p\u003e\n\u003cp\u003e{\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e    char message[20];  \n\n\n\n    // Process ID and Session ID  \n\n    pid_t pid, sid;  \n\n\n\n    // Fork off the parent process.  \n\n    pid = fork();  \n\n    if (pid \u0026lt; 0) {  \n\n            exit(EXIT_FAILURE);  \n\n    }  \n\n\n\n    // If we got a good pid, then we  \n\n    // can exit the parent process.  \n\n    if(pid \u0026gt; 0) {  \n\n            exit(EXIT_SUCCESS);  \n\n    }  \n\n\n\n    // Change the file mode mask  \n\n    umask(0);  \n\n\n\n    // Open any logs here  \n\n      \n\n    // Create a new SID for the child process.  \n\n    sid = setsid();  \n\n    if(sid \u0026lt; 0) {  \n\n            exit(EXIT_FAILURE);  \n\n    }  \n\n      \n\n    // Change the working directory.  \n\n    if((chdir(\u0026quot;/\u0026quot;)) \u0026lt; 0) {  \n\n            exit(EXIT_FAILURE);  \n\n    }  \n\n      \n\n    // Close out the standard file descriptors.  \n\n    close(STDIN_FILENO);  \n\n    close(STDOUT_FILENO);  \n\n    close(STDERR_FILENO);  \n\n\n\n    // Daemon-specific initialization goes here  \n\n    // Set the GPIO.  \n\n    // 這個部分是我所寫的初始化GPIO的應用程式。  \n\n    system(\u0026quot;/usr/sbin/setgpio -il\u0026quot;);  \n\n\n\n    while(1){  \n\n            // 這個部份是透過網路上找的另一個程式，  \n\n            // 如果可以透過system，去取得回應值並將之存於一個Buffer中  \n\n            // 還蠻好用的。  \n\n            // Get the status.  \n\n            my_system(\u0026quot;/usr/sbin/getgpio --status\u0026quot;, message, 20);  \n\n            if(message[17]=='0'){  \n\n                    system(\u0026quot;/usr/sbin/setgpio -ol\u0026quot;);  \n\n            }  \n\n            else if(message[17]=='1'){  \n\n                    system(\u0026quot;/usr/sbin/setgpio -oh\u0026quot;);  \n\n            }  \n\n\n\n            // Sleep for 5sec.  \n\n            sleep(5);  \n\n    }  \n\n\n\nreturn 0;  \n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e}\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\n\u003cp\u003e從第一次\u0026quot;親密\u0026quot;接觸之後，我到小紅帽家，就會聽到Carey歡迎的叫聲！有點吵！\u003cbr\u003e\n之後就跑到我旁邊磨蹭撒嬌…要東西吃…因為牠是貪吃鬼！\u003c/p\u003e\n\u003cp\u003eCarey對阿帽而言是很重要的一個家人，地位應該連我都比不上…\u003cbr\u003e\n因為牠陪伴阿帽渡過許多日子，不管喜怒哀樂，至今，阿帽仍為Carey的過去感到自責…\u003c/p\u003e\n\u003cp\u003e我在旁邊看著，安慰的話也說不出口，腦中盤旋許多想說出來安慰的話，還是硬生生的吞回去…\u003cbr\u003e\n現在到小紅帽家，雖然已經過了兩個多月，但還是覺得怪怪的，只差像今天看的韓劇中的主角出現幻聽的症狀一樣，就是少了些什麼…當騎車騎到松山醫院回轉的時候，看到仁心(寵物醫院，雖然是仁心，但有時不曉得為啥會覺得他黑心，XD)，還是會想到Carey…\u003c/p\u003e\n\u003cp\u003e隨著日子的過去，我在想也許我會慢慢淡忘，但無論如何，還是想記錄我對Carey的記憶…\u003cbr\u003e\n對於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\n\u003cp\u003e做人的責任是什麼呢？就是應該對全世界有所貢獻、有所幫助，要利益世界上所有的人，這是我們每人做人真正的責任。\u003c/p\u003e\n\u003cp\u003e\u003cimg loading=\"lazy\" src=\"http://www.drbataipei.org/wisdom/images/ven_master/ven_master6.jpg\"\u003e今天大家有緣同聚一堂共同討論「人生的需要是什麼？」「我們人為什麼來到這世界上？到這世界上是不是單為吃飯、穿衣、睡覺、享受而來的呢？」\u003c/p\u003e\n\u003cp\u003e這些問題若不注意，看來很簡單，但若真正的去研究，就不那麼簡單了。究竟我們人到世界來的工作是什麼？責任是什麼？每一個人都應認真來討個明白。如果認識不清楚，此生做人就沒有什麼意義及價值。故我們應認清楚如何盡責任，如何把我們的任務做好。\u003c/p\u003e\n\u003cp\u003e首先要學習如何盡人的任務及天職。小孩剛出世時，只會哭，只知道吃，根本不知道他們將來的任務是什麼。隨著時日一天天成長，父母就送他們到學校去學習做人的責任，以準備將來盡自己的任務。\u003c/p\u003e\n\u003cp\u003e學習，每人又有種種志願，有的是為學「明理」─明白道理；有的為學「名利」─將來好出風頭得個好名譽；有的為將來能發財得大利益，根本不管明不明理、合不合法、不擇手段去發財、爭取權利。\u003c/p\u003e\n\u003cp\u003e有的人有「領袖慾」，要做領導者。但你先要知如何做人，是否夠得上做一個人的資格。如果明白如何做人，能做別人的模範，那你作領袖是於心無愧。若心存爭 心、貪心、求心、自私心、自利心、打妄語心，向外馳求，作領袖只為自己謀福利而不能為他人謀幸福，那就是走錯路了。做領袖一定要屈己待人、薄己厚人、利益 所有人類。\u003c/p\u003e\n\u003cp\u003e做人的責任是什麼呢？就是應該對全世界有所貢獻、有所幫助，要利益世界上所有的人，這是我們每人做人真正的責任。而不是專為自己吃一點好的、穿好的，住一豪華房子。\u003c/p\u003e\n\u003cp\u003e若普天下有一人沒有飯吃、沒有衣穿，那是我對不起此人，因我沒有盡到自己的心及能力來幫助他。做人真正的責任，就要真正利益他人，要有功於世、有利於民，這是我應負起的責任，不可推諉。人人都存此心，世界一定和平沒有戰爭。\u003c/p\u003e\n\u003cp\u003e我們首先要做人的好模範，不與人爭。世界為什麼壞？就因爭權、爭利、爭名。你能將好事讓給他人，旁人不願之事你接受過來，和所有人都不爭；人人都不爭，世界和平一定有望。\u003c/p\u003e\n\u003cp\u003e一般人所貪的，你不貪，你不隨世界瘋狂的風氣跑，而作「疾風中的勁燭，烈火中的精金」，隨緣不變，不變隨緣，抱定自己的宗旨，潛移默化，令人人遵守不爭、不貪、不求、不自利、不自私、不妄語，則世界一定和平。\u003c/p\u003e\n\u003cp\u003e從自己修身起，在內心與自己也不爭，則一切發狂妄想皆不起，平平靜靜，這就是真正的快樂。你自己平靜快樂，就能影響旁人都平靜快樂。大家和平相處，世界就 不會有戰爭。為什麼世界有戰爭？就因為人在心裡爭的緣故。人心和平，則世界和平；人心不平，則世界不和平。我們青年人、老年人認識此道理後，就不會賭博、 吸毒、放火、搶劫、強姦。\u003c/p\u003e\n\u003cp\u003e要想世界好，先要從自己個人做起。若我不好，世界怎會好呢？不要專指著他人說：「為什麼別人不守規矩？」你要先問你自己：「守規矩沒有？」這些問題，青年人要負起這個責任來，青年們不好好做，世界怎會好？\u003c/p\u003e\n\u003cp\u003e青年人從教授及老師處學往正道走，但若找到不好的老師，教他們邪知邪見，青年人也跟著學壞。所謂「近朱者赤，近墨者黑。」故擇友尋師非常重要。有為的青年 應將自己責任認識清楚，不要作個自了漢。做人的責任是要有功於世、有益於民、有利於全人類。我本來想要負起救世的責任，成就全世界人類，但我老了，力量不 夠，故我寄望各位有為的青年，要發救世的心，為全人類謀幸福。\u003c/p\u003e\n\u003cp\u003e有為的青年們，應真發大願大力，來成就全世界人類之幸福，拯救那些處在水深火熱者，令彼離苦得樂，自己先要學不抽煙、不喝酒、不發脾氣、不殺生、不偷盜、 不邪淫、不妄語、不吃肉、不賭博、不吸毒，要學正當的行為。若如此，則全世界人類將會得救。我到處大聲疾呼，希望年輕人覺悟，發大慈大悲、大喜大捨之心， 秉著像耶穌、像釋迦牟尼佛，及所有聖人的救世胸懷，那麼世界即使不和平也要和平了。\u003c/p\u003e\n\u003cp\u003e今天所講，各位可以研究研究，所講對否？我不知道。我是位極渴望世界和平的人，希望世界人類沒有痛苦，但完成這個理想一定要有智慧才能做到。\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\n\u003cp\u003e註：\u003cbr\u003e\n1. 此處打引號是因為我有不同的解讀，因為從經營公司的觀點是成功，但不代表人在所有事情都成功，畢竟，現在的社會，總把人在事業上的成功後，就當作是成功的人，但我不這麼認為，有所得必有所失，端看自己想追求什麼樣的事物與生活，學著知足，就是成功的人了。\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\n\u003cp\u003e\u003cstrong\u003epatch命令裡面的層數\u003c/strong\u003e\u003cbr\u003e\n參數-p來指定從第幾層開始比較。比如有一個patch檔案的開頭是：\u003cbr\u003e\n-\u0026ndash; old/modules/network JAN 26 12:11:36 2002\u003cbr\u003e\n+++ new/modules/network SEP 20 20:07:38 2003\u003cbr\u003e\n如果使用參數-p0，就表示從當前目錄，一直找到network的目錄。\u003cbr\u003e\n如果使用參數-p1，就代表忽略第一層，表示從當前目錄找modules目錄，一直找到network目錄。\u003cbr\u003e\n這樣會忽略掉patch檔案頭提到的old及new目錄。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003epatch的結構：\u003c/strong\u003e\u003cbr\u003e\n分別由\u0026mdash;/+++開頭的兩行，表示要patch的檔案。\u003cbr\u003e\n一個patch檔案中的多個patch\u003cbr\u003e\n一個patch檔案中可能包含以\u0026mdash;/+++開頭的很多區塊，每一區塊用來形成一個patch。\u003cbr\u003e\n因此在一個patch檔案中可以包含好多個patch。\u003cbr\u003e\n區塊是patch中要修改的地方，通常由不用修改的東西開始和結束。\u003cbr\u003e\n他們只是用來表示要修改的位置。\u003cbr\u003e\n而區塊通常以**@@** 開始，\u003cbr\u003e\n結束於另一個區塊的開始或者一個新的patch head。\u003cbr\u003e\n區塊的縮進，區塊會縮進一列，\u003cbr\u003e\n而這一列是用來表示這一行是要增加還是要刪除的。\u003cbr\u003e\n區塊的第一列\u003cbr\u003e\n+號表示這一行是要加上的。\u003cbr\u003e\n-號表示這一行是要刪除的。\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\n\u003cp\u003e我不知道我是不是一直在努力…\u003cbr\u003e\n但我總覺得我一直不夠努力，\u003cbr\u003e\n這種想法把我撕成了許多的碎片，\u003cbr\u003e\n然而人腦的多工處理是十足差勁的！\u003cbr\u003e\n造成的結果是我開始覺得我的人格在分裂…\u003c/p\u003e\n\u003cp\u003e健忘也是副作用嗎？\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":"[心情隨筆] 三十歲的記憶"}]