<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>文章 on @metavige</title><link>https://metavige.github.io/posts/</link><description>Recent content in 文章 on @metavige</description><generator>Hugo</generator><language>zh-TW</language><lastBuildDate>Tue, 28 Jul 2026 19:45:00 +0800</lastBuildDate><atom:link href="https://metavige.github.io/posts/atom.xml" rel="self" type="application/rss+xml"/><item><title>當修改變便宜，驗證變昂貴：AI 時代的工作新思維</title><link>https://metavige.github.io/2026/07/28/verification-is-the-new-bottleneck/</link><pubDate>Tue, 28 Jul 2026 19:45:00 +0800</pubDate><guid>https://metavige.github.io/2026/07/28/verification-is-the-new-bottleneck/</guid><description>&lt;p&gt;最近在重新設計 AI Agent 的 Skill，有一個蠻大的體悟。&lt;/p&gt;</description></item><item><title>Aspire 13</title><link>https://metavige.github.io/2025/11/19/2025-11-19-aspire/</link><pubDate>Wed, 19 Nov 2025 09:30:00 +0800</pubDate><guid>https://metavige.github.io/2025/11/19/2025-11-19-aspire/</guid><description>&lt;h2 id="一個專案的開始" class="relative group"&gt;一個專案的開始 &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#%e4%b8%80%e5%80%8b%e5%b0%88%e6%a1%88%e7%9a%84%e9%96%8b%e5%a7%8b" aria-label="定位點"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;開發專案時，通常會在本地端進行，並結合 Database 和 Cache 等服務。目前常見的做法是使用 Docker 啟動 Database 或 Cache container 來建立本地測試環境，而非直接連線到公司提供的測試環境。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#7ee787"&gt;version&lt;/span&gt;:&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#39;3.9&amp;#39;&lt;/span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#7ee787"&gt;services&lt;/span&gt;:&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#7ee787"&gt;postgres&lt;/span&gt;:&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#7ee787"&gt;image&lt;/span&gt;:&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;postgres:16&lt;/span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#7ee787"&gt;container_name&lt;/span&gt;:&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;my_postgres&lt;/span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#7ee787"&gt;restart&lt;/span&gt;:&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;always&lt;/span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#7ee787"&gt;environment&lt;/span&gt;:&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#7ee787"&gt;POSTGRES_USER&lt;/span&gt;:&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;myuser&lt;/span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#7ee787"&gt;POSTGRES_PASSWORD&lt;/span&gt;:&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;mypassword&lt;/span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#7ee787"&gt;POSTGRES_DB&lt;/span&gt;:&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;mydb&lt;/span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#7ee787"&gt;ports&lt;/span&gt;:&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;- &lt;span style="color:#a5d6ff"&gt;&amp;#34;5432:5432&amp;#34;&lt;/span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#7ee787"&gt;volumes&lt;/span&gt;:&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;- &lt;span style="color:#a5d6ff"&gt;pg_data:/var/lib/postgresql/data&lt;/span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#7ee787"&gt;volumes&lt;/span&gt;:&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#7ee787"&gt;pg_data&lt;/span&gt;:&lt;span style="color:#6e7681"&gt; &lt;/span&gt;{}&lt;span style="color:#6e7681"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;以上面的例子來說，你需要先有以下的知識：&lt;/p&gt;</description></item><item><title>Sentry 10 onpremise installation</title><link>https://metavige.github.io/2020/05/13/sentry10-installiation/</link><pubDate>Wed, 13 May 2020 09:18:07 +0800</pubDate><guid>https://metavige.github.io/2020/05/13/sentry10-installiation/</guid><description>&lt;p&gt;Log 紀錄，在 DevOps 的情境中，其實是一個很重要的項目，所有的系統在上線的時候，都應該要有適當的 Log 紀錄&lt;br&gt;
以方便後續的問題追蹤，尤其是在 Microservice 的設計上面&lt;/p&gt;
&lt;p&gt;當你的服務或系統是以 &lt;code&gt;docker&lt;/code&gt; container 的方式啟動，如果只是以 container stdout/stderr 的方式來取得紀錄，實際上後續的追蹤並不容易，所以我自己找了一下網路上的解決方案，找到了 &lt;a href="https://sentry.io/" target="_blank" rel="noreferrer"&gt;sentry&lt;/a&gt; 的這套系統。&lt;/p&gt;
&lt;p&gt;而在公司內部使用，如果公司環境並不允許 Log 紀錄在外部的網站，就需要考慮 Self-Hosted 的建置，剛好 sentry 有提供 onpremise 的部分，就找了這個 source 來驗證一下在本地端建置 sentry 的步驟。&lt;/p&gt;</description></item><item><title>GitOps - use fluxcd</title><link>https://metavige.github.io/2019/12/16/gitops-use-fluxcd/</link><pubDate>Mon, 16 Dec 2019 12:00:00 +0800</pubDate><guid>https://metavige.github.io/2019/12/16/gitops-use-fluxcd/</guid><description>&lt;p&gt;&lt;a href=""&gt;https://fluxcd.io/&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Flux 目前是 CNCF 的 Sandbox 項目 (2019.08.20)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;






 
 
&lt;figure&gt;&lt;img src="https://rammusxu.github.io/2019/07/03/gitops-flux-note/flux-flow.png" alt="" class="mx-auto my-0 rounded-md" /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;圖片出處: &lt;a href="https://rammusxu.github.io/2019/07/03/gitops-flux-note/flux-flow.png" target="_blank" rel="noreferrer"&gt;https://rammusxu.github.io/2019/07/03/gitops-flux-note/flux-flow.png&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Docker 的反模式</title><link>https://metavige.github.io/2019/12/10/docker-anti-patterns/</link><pubDate>Tue, 10 Dec 2019 19:00:00 +0800</pubDate><guid>https://metavige.github.io/2019/12/10/docker-anti-patterns/</guid><description>&lt;p&gt;針對網路上面的文章，加上自己的解釋，說明如何避免做到 Docker 的反模式&lt;/p&gt;
&lt;p&gt;原始文章: &lt;a href="https://medium.com/containers-101/docker-anti-patterns-ad2a1fcd5ce1" target="_blank" rel="noreferrer"&gt;Docker Anti-Pattern&lt;/a&gt;&lt;/p&gt;</description></item><item><title>.Net Standard 筆記</title><link>https://metavige.github.io/2017/08/31/dotnet-standard-note/</link><pubDate>Thu, 31 Aug 2017 21:09:47 +0800</pubDate><guid>https://metavige.github.io/2017/08/31/dotnet-standard-note/</guid><description>&lt;h2 id="簡單筆記" class="relative group"&gt;簡單筆記 &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#%e7%b0%a1%e5%96%ae%e7%ad%86%e8%a8%98" aria-label="定位點"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;標準的基礎程式庫 API 介面定義&lt;/li&gt;
&lt;li&gt;可以跨平台&lt;/li&gt;
&lt;li&gt;目前 .Net framework 4.6.1 支援 .Net Standard 2.0 (.Net Standard 1.x 僅有 .Net Code 1.x 支援)&lt;/li&gt;
&lt;li&gt;.Net Standard 版本控制規則
&lt;ul&gt;
&lt;li&gt;累加：較新的版本會包含較舊版本的 API&lt;/li&gt;
&lt;li&gt;不可變：版本提交後，該版本便已凍結&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;自行根據 PCL (Portable Class Library)，決定設定檔集合 (就是決定要用哪套實作的程式庫，看是要用 .Net framework 或是 .Net Core)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="架構圖" class="relative group"&gt;架構圖 &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#%e6%9e%b6%e6%a7%8b%e5%9c%96" aria-label="定位點"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;






 
 
&lt;figure&gt;&lt;img src="https://docs.microsoft.com/zh-tw/dotnet/standard/media/components.png" alt="" class="mx-auto my-0 rounded-md" /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="網路介紹文章" class="relative group"&gt;網路介紹文章 &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#%e7%b6%b2%e8%b7%af%e4%bb%8b%e7%b4%b9%e6%96%87%e7%ab%a0" aria-label="定位點"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.darkthread.net/post-2016-09-27-net-standard-2-0.aspx" target="_blank" rel="noreferrer"&gt;2016.09.27 .NET Standard 2.0 是什麼？可以吃嗎？ (黑暗執行緒)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dotblogs.com.tw/aspnetshare/2016/04/10/20160409-netcore-netstandard" target="_blank" rel="noreferrer"&gt;2016.04.10 ASP.NET Core 與 .Net Core, .Net Platform Standard, 以及 Shared Runtime 之間的關係 (微軟開發工具的資訊分享)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bruceyclee.tw/2017/02/25/netstandard/" target="_blank" rel="noreferrer"&gt;2017.02.25 再來多聊一點 .Net Standard (大毛電腦科學筆記)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dotblogs.com.tw/gelis/2017/08/20/143437" target="_blank" rel="noreferrer"&gt;2017-08-20 .NET Standard 2.0 與 .NET 的未來與發展 (gelis 技術隨筆)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Makefile for Docker Build</title><link>https://metavige.github.io/2017/03/28/makefile-for-dockerbuild/</link><pubDate>Tue, 28 Mar 2017 21:34:06 +0800</pubDate><guid>https://metavige.github.io/2017/03/28/makefile-for-dockerbuild/</guid><description>&lt;p&gt;其實我對 Makefile 算是一知半解，趁此機會學習一下&lt;/p&gt;</description></item><item><title>Golang Day 3</title><link>https://metavige.github.io/2017/03/09/golang-day3/</link><pubDate>Thu, 09 Mar 2017 21:55:40 +0800</pubDate><guid>https://metavige.github.io/2017/03/09/golang-day3/</guid><description>&lt;p&gt;學習其實很無聊～沒有特別要做什麼的話，看著看著就想睡了～
所以後來決定，之後就把程式碼做好放到 &lt;a href="https://github.com/metavige/golang.learn" target="_blank" rel="noreferrer"&gt;github&lt;/a&gt; 去好了&lt;br&gt;
一次想一個想要做的小功能，這樣或許比較有趣&lt;/p&gt;</description></item><item><title>Golang Day 2</title><link>https://metavige.github.io/2017/03/08/golang-day2/</link><pubDate>Wed, 08 Mar 2017 00:00:00 +0800</pubDate><guid>https://metavige.github.io/2017/03/08/golang-day2/</guid><description>&lt;h2 id="golang-語法注意" class="relative group"&gt;Golang 語法注意 &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#golang-%e8%aa%9e%e6%b3%95%e6%b3%a8%e6%84%8f" aria-label="定位點"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;格式很重要，不管是空行或者是 TAB、大括號等位置，很重要，會編譯不過。不過可以用 gofmt 工具幫你自動排版程式。&lt;/li&gt;
&lt;li&gt;所有的程式需要用 package 整理，有點像是 java package/module 的觀念&lt;/li&gt;
&lt;li&gt;主程式一定是 &lt;code&gt;package main&lt;/code&gt;, 而且一定會呼叫 &lt;code&gt;func main()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;引用不必要的 packages 會錯誤&lt;/li&gt;
&lt;li&gt;沒用到的變數也會錯誤&lt;/li&gt;
&lt;li&gt;不需要分號結尾&lt;/li&gt;
&lt;li&gt;條件式不需要用 () 包起來 (這我就有點不習慣了～因為 Java, javascript, C# 都要)&lt;/li&gt;
&lt;li&gt;golang 應該不算是 OOP, 所以要習慣沒有類別 (Class) 封裝這件事情&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="reference" class="relative group"&gt;Reference &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#reference" aria-label="定位點"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="https://wizardforcel.gitbooks.io" target="_blank" rel="noreferrer"&gt;GO 聖經 - gitbook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Golang Day 1</title><link>https://metavige.github.io/2017/03/06/golang-day1/</link><pubDate>Mon, 06 Mar 2017 22:00:00 +0800</pubDate><guid>https://metavige.github.io/2017/03/06/golang-day1/</guid><description>&lt;h2 id="安裝" class="relative group"&gt;安裝 &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#%e5%ae%89%e8%a3%9d" aria-label="定位點"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;brew install golang
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="環境設定" class="relative group"&gt;環境設定 &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#%e7%92%b0%e5%a2%83%e8%a8%ad%e5%ae%9a" aria-label="定位點"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GOROOT&lt;/code&gt;: GO 安裝的地方，用 &lt;code&gt;brew&lt;/code&gt; 安裝的，可以設定 &lt;code&gt;/usr/local/opt/go/libexec&lt;/code&gt; 就可以&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GOPATH&lt;/code&gt;: GO 執行的時候要的路徑，看專案在哪邊就設定在哪邊&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="gopath" class="relative group"&gt;GOPATH &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#gopath" aria-label="定位點"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;一般是指向專案位置，裡面還會切分三個目錄&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;src: 一般程式碼放的地方，可以包含網址．比如說 github.com/golang/golint 這樣的方式&lt;/li&gt;
&lt;li&gt;pkg: 編譯後的檔案&lt;/li&gt;
&lt;li&gt;bin: binary file&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="empty-go" class="relative group"&gt;Empty Go &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#empty-go" aria-label="定位點"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-golang" data-lang="golang"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;package&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;main&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff7b72"&gt;func&lt;/span&gt;&lt;span style="color:#6e7681"&gt; &lt;/span&gt;&lt;span style="color:#d2a8ff;font-weight:bold"&gt;main&lt;/span&gt;()&lt;span style="color:#6e7681"&gt; &lt;/span&gt;{&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&lt;span style="color:#6e7681"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;注意空行以及大括弧的位置，golang 很注意&lt;strong&gt;程式碼格式&lt;/strong&gt;！&lt;/p&gt;</description></item><item><title>Akka.Net 不錯用</title><link>https://metavige.github.io/2017/02/13/akkadotnet-good/</link><pubDate>Mon, 13 Feb 2017 00:00:00 +0800</pubDate><guid>https://metavige.github.io/2017/02/13/akkadotnet-good/</guid><description>&lt;p&gt;真的使用之後，越來越覺得 Actor Model 是個好物，因為他本來就是拿來做平行運算用的。&lt;/p&gt;
&lt;p&gt;建議可以先從以下的幾篇文章以及 Github 的範例開始&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://petabridge.com/training/akka-design-patterns/" target="_blank" rel="noreferrer"&gt;Akka.Net Application Architecture and Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://petabridge.com/training/akka-remoting/" target="_blank" rel="noreferrer"&gt;Building Networked .NET Applications with Akka.Remote&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://petabridge.com/training/akka-clustering/" target="_blank" rel="noreferrer"&gt;.NET Distributed Systems Architecture and Design with Akka.Cluster&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="好處" class="relative group"&gt;好處 &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#%e5%a5%bd%e8%99%95" aria-label="定位點"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;我剛開始做的時候，其實是想到 Sequence Diagram。因為 Actor Model 的重點其實就是在訊息的傳遞與處理，只是在整體架構上有一個 ActorSystem 幫忙做處理&lt;/p&gt;
&lt;p&gt;根據以下的圖片&lt;/p&gt;
&lt;p&gt;






 
 
&lt;figure&gt;&lt;img src="http://getakka.net/docs/images/actor.png" alt="" class="mx-auto my-0 rounded-md" /&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;一個 Actor 在建立之後，&lt;a href="http://getakka.net" target="_blank" rel="noreferrer"&gt;AkkaDotNet&lt;/a&gt; 會幫你建立整個 Actor 的基本行為。
包含一個 Mailbox、預設的狀態等，而且也預設了每個 Actor 都有可以有 Children Actors
所以，當你傳遞一個訊息給 Actor 的時候，其實不是直接呼叫 Actor 中處理訊息的方法，而是先進入 Mailbox，類似郵件的方式排隊處理。&lt;/p&gt;
&lt;p&gt;當處理有問題的時候，你是可以在 Handle 方法中，直接拋出錯誤，讓 Actor 失敗。如此一來就會觸發上層 Actor 的 SupervisorStrategy。預設的 Strategy 可以參考 &lt;a href="http://getakka.net/docs/Fault%20tolerance" target="_blank" rel="noreferrer"&gt;Fault Tolerance&lt;/a&gt; 文件&lt;/p&gt;</description></item><item><title>ElasticSearch Curator</title><link>https://metavige.github.io/2016/11/18/es_curator/</link><pubDate>Fri, 18 Nov 2016 13:34:30 +0800</pubDate><guid>https://metavige.github.io/2016/11/18/es_curator/</guid><description>&lt;p&gt;&lt;a href="https://github.com/elastic/curator" target="_blank" rel="noreferrer"&gt;Curator&lt;/a&gt; 一個用來管理 ElasticSearch indices/snapshots 的工具&lt;/p&gt;</description></item><item><title>Docker Live Migration</title><link>https://metavige.github.io/2016/11/11/Migration/</link><pubDate>Fri, 11 Nov 2016 13:13:12 +0800</pubDate><guid>https://metavige.github.io/2016/11/11/Migration/</guid><description>&lt;iframe src="//www.slideshare.net/slideshow/embed_code/key/GvdO7izO4dp714" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen&gt; &lt;/iframe&gt; &lt;div style="margin-bottom:5px"&gt; &lt;strong&gt; &lt;a href="//www.slideshare.net/PhilEstes/live-container-migration-openstack-summit-barcelona-2016" title="Live Container Migration: OpenStack Summit Barcelona 2016" target="_blank"&gt;Live Container Migration: OpenStack Summit Barcelona 2016&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a target="_blank" href="//www.slideshare.net/PhilEstes"&gt;Phil Estes&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;</description></item><item><title>Ceph RBD 使用</title><link>https://metavige.github.io/2016/09/05/ceph-rbd/</link><pubDate>Mon, 05 Sep 2016 17:29:00 +0800</pubDate><guid>https://metavige.github.io/2016/09/05/ceph-rbd/</guid><description>&lt;p&gt;簡單記錄一下 Ceph RBD 使用的紀錄 &amp;mdash;&amp;gt;&lt;/p&gt;
&lt;!-- more --&gt;
&lt;h4 id="先安裝-ceph-common" class="relative group"&gt;先安裝 ceph-common &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#%e5%85%88%e5%ae%89%e8%a3%9d-ceph-common" aria-label="定位點"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;apt-get install ceph-common
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;目前在 ubuntu trusty 內安裝的版本是&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ rbd -v
ceph version 0.80.11 (8424145d49264624a3b0a204aedb127835161070)
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id="建立-image-動作-假設-image-name-是-test" class="relative group"&gt;建立 Image 動作 (假設 image name 是 test): &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#%e5%bb%ba%e7%ab%8b-image-%e5%8b%95%e4%bd%9c-%e5%81%87%e8%a8%ad-image-name-%e6%98%af-test" aria-label="定位點"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;sudo rbd create --size &amp;lt;MB&amp;gt; test
&lt;/code&gt;&lt;/pre&gt;&lt;h5 id="mapping-到-dev" class="relative group"&gt;Mapping 到 dev &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#mapping-%e5%88%b0-dev" aria-label="定位點"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h5&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;sudo rbd map test
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;這邊預設會把 image mapping 到 /dev/rbd/rbd 下面，名稱就是 image name&lt;br&gt;
所以會放在 /dev/rbd/rbd/test&lt;/p&gt;</description></item><item><title>Visual Studio Code (launch with babel, mocha)</title><link>https://metavige.github.io/2016/08/10/vscode-es2015-with-mocha/</link><pubDate>Wed, 10 Aug 2016 09:16:53 +0800</pubDate><guid>https://metavige.github.io/2016/08/10/vscode-es2015-with-mocha/</guid><description>&lt;p&gt;Visual Studio Code 是個不錯的編輯器，不過設定上，還是有很多需要手動的動作&lt;br&gt;
特此記錄&lt;/p&gt;</description></item><item><title>Redux Study Day4 - Store</title><link>https://metavige.github.io/2016/06/22/redux-study-day4/</link><pubDate>Wed, 22 Jun 2016 21:19:28 +0800</pubDate><guid>https://metavige.github.io/2016/06/22/redux-study-day4/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://metavige.github.io/2015/10/14/redux-study-day1/"&gt;Redux Study Day1 - Start&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metavige.github.io/2015/10/19/redux-study-day2/"&gt;Redux Study Day2 - Action&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metavige.github.io/2016/06/21/redux-study-day-3/"&gt;Redux Study Day3 - Reducer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metavige.github.io/2016/06/22/redux-study-day4/"&gt;Redux Study Day4 - Store&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;繼前面的 action/reducer 之後，接下來就是要把這兩者結合起來了～&lt;/p&gt;</description></item><item><title>Redux Study Day3 - Reducer</title><link>https://metavige.github.io/2016/06/21/redux-study-day-3/</link><pubDate>Tue, 21 Jun 2016 20:21:39 +0800</pubDate><guid>https://metavige.github.io/2016/06/21/redux-study-day-3/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://metavige.github.io/2015/10/14/redux-study-day1/"&gt;Redux Study Day1 - Start&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metavige.github.io/2015/10/19/redux-study-day2/"&gt;Redux Study Day2 - Action&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metavige.github.io/2016/06/21/redux-study-day-3/"&gt;Redux Study Day3 - Reducer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metavige.github.io/2016/06/22/redux-study-day4/"&gt;Redux Study Day4 - Store&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;隔了半年多，重新真的找一個專案來實作 &lt;a href="https://github.com/reactjs/redux" target="_blank" rel="noreferrer"&gt;Redux&lt;/a&gt;，不得不說，半年的變化&lt;br&gt;
跟我當初看 &lt;a href="https://github.com/reactjs/redux" target="_blank" rel="noreferrer"&gt;Redux&lt;/a&gt; 差異還是蠻大的。當然，觀念什麼的是差不多，只是可能很多程式碼會有所調整&lt;/p&gt;
&lt;p&gt;這次重新再開始，之前兩天的東西，找時間修改。今天就從 &lt;a href="https://github.com/reactjs/redux" target="_blank" rel="noreferrer"&gt;Redux&lt;/a&gt; 核心的 Reducer 開始好了～&lt;/p&gt;</description></item><item><title>How to Get Node.js Logging Right</title><link>https://metavige.github.io/2016/05/31/how-to-get-nodejs-logging-right/</link><pubDate>Tue, 31 May 2016 21:24:33 +0800</pubDate><guid>https://metavige.github.io/2016/05/31/how-to-get-nodejs-logging-right/</guid><description>&lt;p&gt;&lt;a href="https://blog.risingstack.com/node-js-logging-tutorial/" target="_blank" rel="noreferrer"&gt;How to Get Node.js Logging Right&lt;/a&gt;&lt;/p&gt;</description></item><item><title>用 Ansible 管理 Windows</title><link>https://metavige.github.io/2016/01/19/ansible-windows-manage-start/</link><pubDate>Tue, 19 Jan 2016 22:14:24 +0800</pubDate><guid>https://metavige.github.io/2016/01/19/ansible-windows-manage-start/</guid><description>&lt;p&gt;嗯～&lt;a href="http://www.ansible.com" target="_blank" rel="noreferrer"&gt;Ansible&lt;/a&gt; 很好用&lt;br&gt;
所以很希望也可以用在 Windows 上～&lt;/p&gt;</description></item><item><title>First Electron App</title><link>https://metavige.github.io/2015/12/30/First-Electron-App/</link><pubDate>Wed, 30 Dec 2015 20:59:10 +0800</pubDate><guid>https://metavige.github.io/2015/12/30/First-Electron-App/</guid><description>&lt;p&gt;很早就想要用 &lt;a href="http://electron.atom.io" target="_blank" rel="noreferrer"&gt;Electron&lt;/a&gt; 來開發 App 了，因為 Web 其實用起來有時候卡卡的&lt;br&gt;
尤其 &lt;a href="http://electron.atom.io" target="_blank" rel="noreferrer"&gt;Electron&lt;/a&gt; 出現之後，開發 Web 等同於開發 App，真是令人感到興奮～&lt;/p&gt;</description></item><item><title>在 .Net 專案使用 gulp build</title><link>https://metavige.github.io/2015/12/12/dotnet-proj-with-gulp/</link><pubDate>Sat, 12 Dec 2015 09:58:06 +0800</pubDate><guid>https://metavige.github.io/2015/12/12/dotnet-proj-with-gulp/</guid><description>&lt;p&gt;一直以來，開發 .Net 專案，因為只能在 Windows 上使用 Visual Studio 開發&lt;br&gt;
Build Project 的 Performance 總是我一個覺得很麻煩的事情&lt;/p&gt;</description></item><item><title>快速撰寫好看的 REST API 文件 - 使用 RAML</title><link>https://metavige.github.io/2015/11/16/raml-easy-start-npm/</link><pubDate>Mon, 16 Nov 2015 15:02:53 +0800</pubDate><guid>https://metavige.github.io/2015/11/16/raml-easy-start-npm/</guid><description>&lt;p&gt;寫文件大概是工程師最討厭的事情，沒有之一&lt;/p&gt;</description></item><item><title>Nginx 透過 HTTP Method 來做 Proxy Pass</title><link>https://metavige.github.io/2015/11/13/nginx-proxy-pass-by-http-method/</link><pubDate>Fri, 13 Nov 2015 14:36:41 +0800</pubDate><guid>https://metavige.github.io/2015/11/13/nginx-proxy-pass-by-http-method/</guid><description>&lt;h2 id="目的" class="relative group"&gt;目的 &lt;span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"&gt;&lt;a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style="text-decoration-line: none !important;" href="#%e7%9b%ae%e7%9a%84" aria-label="定位點"&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;開發一套系統，把資料處理 (POST/PUT/DELETE) 與查詢 (GET) 的功能分開做&lt;br&gt;
變成提供兩套服務，但對 Client 來說，還是需要整合成相同的 Uri&lt;br&gt;
所以就透過 Nginx 來做到前端介面的整合&lt;/p&gt;</description></item><item><title>Make Java 8 docker image based Alpinelinux</title><link>https://metavige.github.io/2015/11/03/docker-alpine-java8/</link><pubDate>Tue, 03 Nov 2015 22:52:59 +0800</pubDate><guid>https://metavige.github.io/2015/11/03/docker-alpine-java8/</guid><description>&lt;p&gt;製作 Java base docker image based &lt;a href="http://alpinelinux.org/" target="_blank" rel="noreferrer"&gt;Alpinelinux&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Redux Study Day2 - Action</title><link>https://metavige.github.io/2015/10/19/redux-study-day2/</link><pubDate>Mon, 19 Oct 2015 20:03:15 +0800</pubDate><guid>https://metavige.github.io/2015/10/19/redux-study-day2/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://metavige.github.io/2015/10/14/redux-study-day1/"&gt;Redux Study Day1 - Start&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metavige.github.io/2015/10/19/redux-study-day2/"&gt;Redux Study Day2 - Action&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metavige.github.io/2016/06/21/redux-study-day-3/"&gt;Redux Study Day3 - Reducer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metavige.github.io/2016/06/22/redux-study-day4/"&gt;Redux Study Day4 - Store&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;延續&lt;a href="https://metavige.github.io/2015/10/14/redux-study-day1/"&gt;前一天&lt;/a&gt;的學習，今天進入 Redux Day2!&lt;/p&gt;</description></item><item><title>iTune Connect 啟用的兩光問題</title><link>https://metavige.github.io/2015/10/15/itune-connect-activate-error/</link><pubDate>Thu, 15 Oct 2015 13:26:54 +0800</pubDate><guid>https://metavige.github.io/2015/10/15/itune-connect-activate-error/</guid><description>&lt;p&gt;為了要開發 App 上架，要設定 iTune Connect，收到了 Apple 這邊寄來的信，準備啟用&lt;/p&gt;</description></item><item><title>Redux Study Day1 - Start</title><link>https://metavige.github.io/2015/10/14/redux-study-day1/</link><pubDate>Wed, 14 Oct 2015 20:25:24 +0800</pubDate><guid>https://metavige.github.io/2015/10/14/redux-study-day1/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://metavige.github.io/2015/10/14/redux-study-day1/"&gt;Redux Study Day1 - Start&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metavige.github.io/2015/10/19/redux-study-day2/"&gt;Redux Study Day2 - Action&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metavige.github.io/2016/06/21/redux-study-day-3/"&gt;Redux Study Day3 - Reducer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://metavige.github.io/2016/06/22/redux-study-day4/"&gt;Redux Study Day4 - Store&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;準備開始學習使用 &lt;a href="https://github.com/rackt/redux" target="_blank" rel="noreferrer"&gt;Redux&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Homebrew - Github Rate Limit Exceeded.....</title><link>https://metavige.github.io/2015/06/02/homebrew-github-token/</link><pubDate>Tue, 02 Jun 2015 09:06:51 +0800</pubDate><guid>https://metavige.github.io/2015/06/02/homebrew-github-token/</guid><description>&lt;p&gt;早上使用 brew 發生錯誤&lt;/p&gt;</description></item><item><title>Try Docker Swarm</title><link>https://metavige.github.io/2015/04/29/try-docker-swarm/</link><pubDate>Wed, 29 Apr 2015 20:40:01 +0800</pubDate><guid>https://metavige.github.io/2015/04/29/try-docker-swarm/</guid><description>&lt;p&gt;&lt;a href="https://www.docker.com" target="_blank" rel="noreferrer"&gt;Docker&lt;/a&gt; 最近出了 1.6 版，&lt;a href="https://docs.docker.com/swarm/" target="_blank" rel="noreferrer"&gt;Docker Swarm&lt;/a&gt; 也隨之更新了。&lt;/p&gt;
&lt;p&gt;參考了以下的網站，自己嘗試做做看～
&lt;a href="https://www.voxxed.com/blog/2015/04/clustering-using-docker-swarm-0-2-0/" target="_blank" rel="noreferrer"&gt;原文連結&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Proxy.pac is not working at Yosemite</title><link>https://metavige.github.io/2015/04/24/mac-yosemite-proxypac-not-working/</link><pubDate>Fri, 24 Apr 2015 13:32:30 +0800</pubDate><guid>https://metavige.github.io/2015/04/24/mac-yosemite-proxypac-not-working/</guid><description>&lt;p&gt;嘗試在本機設定 pac，結果搞了很久，才知道是 Yosemite 的問題～&lt;/p&gt;</description></item><item><title>Github Cheat Sheet</title><link>https://metavige.github.io/2015/04/20/github-chest-sheet/</link><pubDate>Mon, 20 Apr 2015 21:45:46 +0800</pubDate><guid>https://metavige.github.io/2015/04/20/github-chest-sheet/</guid><description>&lt;p&gt;這是我今天幫忙 &lt;a href=""&gt;https://github.com/tiimgreen/github-cheat-sheet&lt;/a&gt; 做一個簡單繁體中文版本的 PR，其實只是把簡體中文版本稍微轉換一下而已～&lt;/p&gt;
&lt;p&gt;不過其實這篇蠻有意思的，很多值得參考～&lt;/p&gt;</description></item><item><title>Übersicht</title><link>https://metavige.github.io/2015/04/20/uebersicht/</link><pubDate>Mon, 20 Apr 2015 21:45:46 +0800</pubDate><guid>https://metavige.github.io/2015/04/20/uebersicht/</guid><description>&lt;p&gt;&lt;a href="http://tracesof.net/uebersicht/" target="_blank" rel="noreferrer"&gt;Übersicht&lt;/a&gt;，如果你用過 &lt;a href="http://projects.tynsoe.org/en/geektool/" target="_blank" rel="noreferrer"&gt;Geektool&lt;/a&gt;，你應該對這種工具不陌生。&lt;/p&gt;</description></item><item><title>kitematic</title><link>https://metavige.github.io/2015/04/12/kitematic/</link><pubDate>Sun, 12 Apr 2015 13:41:59 +0800</pubDate><guid>https://metavige.github.io/2015/04/12/kitematic/</guid><description>&lt;p&gt;上個月底的新聞：&lt;br&gt;
&lt;a href="http://www.ithome.com.tw/news/94527" target="_blank" rel="noreferrer"&gt;Docker 收購新創公司 Kitematic：讓 Mac 電腦輕鬆部署容器&lt;/a&gt;&lt;/p&gt;</description></item><item><title>docker-machine for AmazonEC2</title><link>https://metavige.github.io/2015/04/12/docker-machine-aws-provider/</link><pubDate>Sun, 12 Apr 2015 09:49:28 +0800</pubDate><guid>https://metavige.github.io/2015/04/12/docker-machine-aws-provider/</guid><description>&lt;p&gt;前兩天在公司上了 Introduction Docker 的課程，回家就來試驗新的 docker-machine&lt;br&gt;
花了一點時間，研究了怎樣連接到 &lt;a href="https://aws.amazon.com/tw/" target="_blank" rel="noreferrer"&gt;AWS&lt;/a&gt; 去～&lt;/p&gt;</description></item><item><title>安裝 Vagrant 在 Mac 上</title><link>https://metavige.github.io/2015/04/11/vagrant-install-on-mac/</link><pubDate>Sat, 11 Apr 2015 11:31:09 +0800</pubDate><guid>https://metavige.github.io/2015/04/11/vagrant-install-on-mac/</guid><description>&lt;p&gt;簡單的在 Mac 安裝 &lt;a href="https://www.vagrantup.com/" target="_blank" rel="noreferrer"&gt;Vagrant&lt;/a&gt; 環境&lt;/p&gt;</description></item><item><title>Entity Framework FakeDbSet</title><link>https://metavige.github.io/2015/03/25/entityframework-fakedbset/</link><pubDate>Wed, 25 Mar 2015 11:56:15 +0800</pubDate><guid>https://metavige.github.io/2015/03/25/entityframework-fakedbset/</guid><description>&lt;p&gt;為了單元測試，需要作假資料，如果用資料庫來做，就需要考慮測試資料的建立以及 Transaction 的問題，因為建立測試資料後還得刪除。&lt;/p&gt;
&lt;p&gt;所以可以使用 Mock 的方式，把 &lt;em&gt;IDbSet&lt;/em&gt; 改成使用 InMemory&lt;/p&gt;
&lt;p&gt;目前 &lt;a href=""&gt;Nuget.org&lt;/a&gt; 就有一個套件，可以幫忙你實作 &lt;em&gt;InMemorySet&lt;/em&gt;
我目前是安裝 &lt;a href="https://www.nuget.org/packages/AnotherFakeDbSet/" target="_blank" rel="noreferrer"&gt;AnotherFakeDbSet&lt;/a&gt;，Source 在 &lt;a href="https://github.com/realistschuckle/FakeDbSet" target="_blank" rel="noreferrer"&gt;Github-AnotherFakeDbSet&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;這個 Source 的原始版本是 &lt;a href="https://github.com/a-h/FakeDbSet" target="_blank" rel="noreferrer"&gt;FakeDbSet&lt;/a&gt;
不過我也覺得 &lt;a href="https://www.nuget.org/packages/AnotherFakeDbSet/" target="_blank" rel="noreferrer"&gt;AnotherFakeDbSet&lt;/a&gt; 改的不錯，而且因為陸續有推出新版本，所以我自己也是採用這個 Nuget Package&lt;/p&gt;</description></item><item><title>log4net Action Log 設定</title><link>https://metavige.github.io/2015/03/25/log4net-actionlog/</link><pubDate>Wed, 25 Mar 2015 09:00:00 +0800</pubDate><guid>https://metavige.github.io/2015/03/25/log4net-actionlog/</guid><description>&lt;p&gt;我之前設定網站執行的 Action Log 的一個記錄，有些東西都是拼拼湊湊出來的，並不見得是最佳版本&lt;/p&gt;
&lt;p&gt;log4net 設定檔&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;25
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-weight:bold;font-style:italic"&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;utf-8&amp;#34; ?&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#7ee787"&gt;&amp;lt;log4net&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;level&lt;/span&gt; value=&lt;span style="color:#a5d6ff"&gt;&amp;#34;DEBUG&amp;#34;&lt;/span&gt; &lt;span style="color:#7ee787"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;appender-ref&lt;/span&gt; ref=&lt;span style="color:#a5d6ff"&gt;&amp;#34;stdout&amp;#34;&lt;/span&gt; &lt;span style="color:#7ee787"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;appender-ref&lt;/span&gt; ref=&lt;span style="color:#a5d6ff"&gt;&amp;#34;ActionLogRollingFile&amp;#34;&lt;/span&gt; &lt;span style="color:#7ee787"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;/root&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;appender&lt;/span&gt; name=&lt;span style="color:#a5d6ff"&gt;&amp;#34;ActionLogRollingFile&amp;#34;&lt;/span&gt; type=&lt;span style="color:#a5d6ff"&gt;&amp;#34;log4net.Appender.RollingFileAppender&amp;#34;&lt;/span&gt;&lt;span style="color:#7ee787"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;file&lt;/span&gt; type=&lt;span style="color:#a5d6ff"&gt;&amp;#34;log4net.Util.PatternString&amp;#34;&lt;/span&gt; value=&lt;span style="color:#a5d6ff"&gt;&amp;#34;action.log&amp;#34;&lt;/span&gt; &lt;span style="color:#7ee787"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;appendToFile&lt;/span&gt; value=&lt;span style="color:#a5d6ff"&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span style="color:#7ee787"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;encoding&lt;/span&gt; value=&lt;span style="color:#a5d6ff"&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt; &lt;span style="color:#7ee787"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;maxSizeRollBackups&lt;/span&gt; value=&lt;span style="color:#a5d6ff"&gt;&amp;#34;30&amp;#34;&lt;/span&gt; &lt;span style="color:#7ee787"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;rollingStyle&lt;/span&gt; value=&lt;span style="color:#a5d6ff"&gt;&amp;#34;Date&amp;#34;&lt;/span&gt; &lt;span style="color:#7ee787"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;datePattern&lt;/span&gt; value=&lt;span style="color:#a5d6ff"&gt;&amp;#34;&amp;#39;.&amp;#39;yyyy-MM-dd&amp;#34;&lt;/span&gt; &lt;span style="color:#7ee787"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;layout&lt;/span&gt; type=&lt;span style="color:#a5d6ff"&gt;&amp;#34;log4net.Layout.PatternLayout&amp;#34;&lt;/span&gt;&lt;span style="color:#7ee787"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;conversionPattern&lt;/span&gt; value=&lt;span style="color:#a5d6ff"&gt;&amp;#34;(%date{HH:mm:ss,fff}) [%t] - %u %5property{Duration} %property{StatusCode} %6property{Method} %property{Uri} %m%n &amp;#34;&lt;/span&gt; &lt;span style="color:#7ee787"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;/layout&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;filter&lt;/span&gt; type=&lt;span style="color:#a5d6ff"&gt;&amp;#34;log4net.Filter.LoggerMatchFilter&amp;#34;&lt;/span&gt;&lt;span style="color:#7ee787"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;acceptOnMatch&lt;/span&gt; value=&lt;span style="color:#a5d6ff"&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span style="color:#7ee787"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;LoggerToMatch&lt;/span&gt; value=&lt;span style="color:#a5d6ff"&gt;&amp;#34;Sample.Web.Filters.WebApiActionFilter&amp;#34;&lt;/span&gt; &lt;span style="color:#7ee787"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;/filter&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;filter&lt;/span&gt; type=&lt;span style="color:#a5d6ff"&gt;&amp;#34;log4net.Filter.DenyAllFilter&amp;#34;&lt;/span&gt; &lt;span style="color:#7ee787"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7ee787"&gt;&amp;lt;/appender&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#7ee787"&gt;&amp;lt;/log4net&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;其中要注意的是&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;log4net.Filter.LoggerMatchFilter: 用來設定特定的 class 記錄才使用這個 Appender
&lt;ul&gt;
&lt;li&gt;acceptOnMatch: 這個設定有點像是 blacklist/whitelist，true 表示有 match 才是，相當於 whitelist&lt;/li&gt;
&lt;li&gt;LoggerToMatch: 設定要篩選的類別名稱&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;log4net.Filter.DenyAllFilter: 篩選掉其他的 Log，不會在這個 Appender 裡面記錄&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>JWT</title><link>https://metavige.github.io/2015/03/11/2015-03-11-jwt/</link><pubDate>Wed, 11 Mar 2015 16:24:30 +0800</pubDate><guid>https://metavige.github.io/2015/03/11/2015-03-11-jwt/</guid><description>&lt;p&gt;&lt;a href="http://oauth.net/2/" target="_blank" rel="noreferrer"&gt;OAuth2&lt;/a&gt; 現在已經很多的網站都有實作了，像是 &lt;a href="https://twitter.com" target="_blank" rel="noreferrer"&gt;Twitter&lt;/a&gt;, &lt;a href="https://www.google.com" target="_blank" rel="noreferrer"&gt;Google&lt;/a&gt;, &lt;a href="https://www.facebook.com" target="_blank" rel="noreferrer"&gt;Facebook&lt;/a&gt;, &lt;a href="https://github.com" target="_blank" rel="noreferrer"&gt;Github&lt;/a&gt; 等網站本身都有支援 &lt;a href="http://oauth.net/2/" target="_blank" rel="noreferrer"&gt;OAuth2&lt;/a&gt; 的驗證與授權機制&lt;/p&gt;
&lt;p&gt;最近因為專案需求，特地去研究了一下有關 Web API 做驗證授權的機制，看到網路上有很多的範例，在講解 AngularJS SPA 的登入作法，想說可以把類似的機制放到 RESTful Service 的驗證上面&lt;/p&gt;</description></item><item><title>修改 iPhone USB 個人熱點，在 Mac 的 DNS 設定</title><link>https://metavige.github.io/2015/01/22/iphone-usb-hotspot-dns-setting/</link><pubDate>Thu, 22 Jan 2015 09:01:00 +0800</pubDate><guid>https://metavige.github.io/2015/01/22/iphone-usb-hotspot-dns-setting/</guid><description>&lt;p&gt;執行以下指令就可以～&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo networksetup -setdnsservers &lt;span style="color:#a5d6ff"&gt;&amp;#34;iPhone USB&amp;#34;&lt;/span&gt; 8.8.8.8
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Docker service behind proxy - Ubuntu</title><link>https://metavige.github.io/2014/12/17/docker-behind-proxy-ubuntu/</link><pubDate>Wed, 17 Dec 2014 17:27:00 +0800</pubDate><guid>https://metavige.github.io/2014/12/17/docker-behind-proxy-ubuntu/</guid><description>&lt;p&gt;編輯 &lt;code&gt;/etc/default/docker&lt;/code&gt;&lt;br&gt;
把以下 &lt;code&gt;export http_proxy&lt;/code&gt; 的那一行 unmark, 然後改成你的 proxy 設定&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# Docker Upstart and SysVinit configuration file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# Customize location of Docker binary (especially for development testing).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#DOCKER=&amp;#34;/usr/local/bin/docker&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# Use DOCKER_OPTS to modify the daemon startup options.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#DOCKER_OPTS=&amp;#34;--dns 8.8.8.8 --dns 8.8.4.4&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# If you need Docker to use an HTTP proxy, it can also be specified here.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;export &lt;span style="color:#79c0ff"&gt;http_proxy&lt;/span&gt;&lt;span style="color:#ff7b72;font-weight:bold"&gt;=&lt;/span&gt;&lt;span style="color:#a5d6ff"&gt;&amp;#34;http://127.0.0.1:3128/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;# This is also a handy place to tweak where Docker&amp;#39;s temporary files go.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8b949e;font-style:italic"&gt;#export TMPDIR=&amp;#34;/mnt/bigdrive/docker-tmp&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;重新啟動 docker service &amp;mdash; &lt;code&gt;service docker restart&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Git-Tf 協同作業，Git 的一些小設定</title><link>https://metavige.github.io/2014/07/16/git-tf-collaboration-git-some-small-set/</link><pubDate>Wed, 16 Jul 2014 20:04:00 +0800</pubDate><guid>https://metavige.github.io/2014/07/16/git-tf-collaboration-git-some-small-set/</guid><description>&lt;p&gt;本身有用 Windows, Mac 在開發系統，我其實是偏好在 Mac 編輯，因為我喜歡 &lt;a href="http://www.sublimetext.com/3" target="_blank" rel="noreferrer"&gt;Sublime Text&lt;/a&gt; !!!&lt;/p&gt;
&lt;p&gt;不過，在 Windows 中用 Visual Studio 2013, 公司內部是規定使用 TFS （老實說我不是很喜歡，不過整個團隊以及公司都是這樣，也不得不用～）&lt;/p&gt;
&lt;p&gt;有些時候，不想使用笨重的 VS2013，像是開發 Web Project，我還是喜歡用 &lt;a href="http://www.sublimetext.com/3" target="_blank" rel="noreferrer"&gt;Sublime Text&lt;/a&gt; 編輯，像是 javascript/html 都有不錯的開發經驗～
所以只好用 &lt;a href="https://gittf.codeplex.com" target="_blank" rel="noreferrer"&gt;git-tf&lt;/a&gt; 來做界接～&lt;/p&gt;</description></item><item><title>dotNetConf 2014</title><link>https://metavige.github.io/2014/07/12/dotNetConf-2014/</link><pubDate>Sat, 12 Jul 2014 10:00:00 +0800</pubDate><guid>https://metavige.github.io/2014/07/12/dotNetConf-2014/</guid><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/b/dotnet/archive/2014/07/02/dotnetconf-2014-wrapup.aspx" target="_blank" rel="noreferrer"&gt;dotNetConf 2014&lt;/a&gt; 的影片已經可以在 Channel 9 找到了&lt;/p&gt;
&lt;p&gt;我看了三個項目&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/dotnetConf/2014/The-State-of-NET" target="_blank" rel="noreferrer"&gt;(KeyNote) .Net State&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/dotnetConf/2014/MVC-6" target="_blank" rel="noreferrer"&gt;Asp.Net MVC 6&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://channel9.msdn.com/Events/dotnetConf/2014/New-Innovations-in-NET-Runtime" target="_blank" rel="noreferrer"&gt;New Innovation in .Net&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;老實說改變很大&lt;/p&gt;</description></item><item><title>5 javascript debugging tips you'll start using today</title><link>https://metavige.github.io/2014/03/07/5-javascript-debugging-tips-youll-start-using-today/</link><pubDate>Fri, 07 Mar 2014 08:11:00 +0800</pubDate><guid>https://metavige.github.io/2014/03/07/5-javascript-debugging-tips-youll-start-using-today/</guid><description>&lt;p&gt;&lt;a href="http://berzniz.com/post/78260747646/5-javascript-debugging-tips-youll-start-using-today" target="_blank" rel="noreferrer"&gt;原文出處&lt;/a&gt;&lt;br&gt;
這是前幾天在網路上看到的一篇文章，我懶得翻譯標題的部份 (其實我不太會翻譯)
我個人覺得很有幫助，剛好最近有在寫 &lt;a href="https://en.wikipedia.org/wiki/Single-page_application" target="_blank" rel="noreferrer"&gt;SPA&lt;/a&gt; 的專案&lt;/p&gt;
&lt;p&gt;以下是我對原文的一些自己的理解，也算是簡單的翻譯啦。&lt;br&gt;
下面用到的瀏覽器都是 Chrome (不得不說，這真的是 Web 開發者的一大利器，比起 ie 好太多了～又快～)&lt;/p&gt;</description></item><item><title>Hubot first try</title><link>https://metavige.github.io/2013/12/17/hubot-first-try/</link><pubDate>Tue, 17 Dec 2013 00:06:00 +0800</pubDate><guid>https://metavige.github.io/2013/12/17/hubot-first-try/</guid><description>&lt;p&gt;最近剛好想學 CoffeeScript，前幾天又看到有 hubot 的新聞，所以就想說來玩一下 &lt;a href="http://hubot.github.com/" target="_blank" rel="noreferrer"&gt;Hubot&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Unity + SharpRepository</title><link>https://metavige.github.io/2013/11/19/unity-sharprepository/</link><pubDate>Tue, 19 Nov 2013 15:38:00 +0800</pubDate><guid>https://metavige.github.io/2013/11/19/unity-sharprepository/</guid><description>&lt;p&gt;最近在學習使用 &lt;a href="https://github.com/SharpRepository/SharpRepository" target="_blank" rel="noreferrer"&gt;SharpRepository&lt;/a&gt;，剛好專案中有使用 IoC Container - Unity, 所以需要把兩者做一個結合&lt;/p&gt;</description></item><item><title>zero-records</title><link>https://metavige.github.io/2013/09/18/zero-records/</link><pubDate>Wed, 18 Sep 2013 08:49:00 +0800</pubDate><guid>https://metavige.github.io/2013/09/18/zero-records/</guid><description>&lt;p&gt;&lt;a href="http://zeromq.org/" target="_blank" rel="noreferrer"&gt;官方網站&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;這是在官方網站上面 &lt;a href="http://zeromq.org/intro:ask-for-help" target="_blank" rel="noreferrer"&gt;Solve a Problem&lt;/a&gt; 的一句話&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Most of us, when we start using ØMQ, come with mental models of how things &amp;ldquo;should&amp;rdquo; work, which are often wrong. If you come looking for specific solutions, you may be disappointed.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Backbone Study</title><link>https://metavige.github.io/2013/02/13/backbone-study/</link><pubDate>Wed, 13 Feb 2013 11:52:00 +0800</pubDate><guid>https://metavige.github.io/2013/02/13/backbone-study/</guid><description>&lt;p&gt;在學習 Backbone 的時候，針對 Backbone 比較重要的一些事件、方法與屬性作個記錄&lt;/p&gt;
&lt;p&gt;&lt;a href="http://backbonejs.org/" target="_blank" rel="noreferrer"&gt;Backbonejs&lt;/a&gt;&lt;/p&gt;</description></item><item><title>版本管理的一些觀念說明</title><link>https://metavige.github.io/2011/07/13/about-version-control/</link><pubDate>Wed, 13 Jul 2011 15:31:00 +0800</pubDate><guid>https://metavige.github.io/2011/07/13/about-version-control/</guid><description>&lt;p&gt;前幾天跟公司內部同事分享了一些版本管理的觀念&lt;br&gt;
順便作個紀錄，避免以後還要找資料&lt;/p&gt;</description></item><item><title>有人用的架構，才是好架構</title><link>https://metavige.github.io/2011/07/07/architecture-think-2/</link><pubDate>Thu, 07 Jul 2011 02:56:00 +0800</pubDate><guid>https://metavige.github.io/2011/07/07/architecture-think-2/</guid><description>&lt;p&gt;做架構設計幾年了，發現這幾年來，做最多的不是去研究學習怎樣做，而是去說服人家用這個架構。其實，有時候很討厭聽到下面這句話：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;為什麼我們要這樣做？&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>愈來愈不喜歡講架構了，因為講的人痛苦，聽的人也痛苦</title><link>https://metavige.github.io/2010/09/20/architecture-think-1/</link><pubDate>Mon, 20 Sep 2010 18:30:00 +0800</pubDate><guid>https://metavige.github.io/2010/09/20/architecture-think-1/</guid><description>&lt;p&gt;近幾年來的感覺特別明顯，尤其是跟不太熟的人講的時候&lt;/p&gt;</description></item></channel></rss>