<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>安迪兒隨手貼</title>
    <link>https://bowwow.tips/index.xml</link>
    <description>Recent content on 安迪兒隨手貼</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-US</language>
    <lastBuildDate>Sun, 05 Feb 2017 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://bowwow.tips/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>[開箱]Nintendo Classic Mini童年回憶日本懷舊mini紅白機(破解)</title>
      <link>https://bowwow.tips/projects/20170205/</link>
      <pubDate>Sun, 05 Feb 2017 00:00:00 +0000</pubDate>
      
      <guid>https://bowwow.tips/projects/20170205/</guid>
      <description>

&lt;p&gt;&lt;strong&gt;任天堂之前公佈的「mini紅白機」
未上市前市場就熱列討論&lt;br /&gt;
上市後馬上造成搶風潮，價格一直標漲&lt;br /&gt;
對於大部份玩家而言，這是美好的童年回憶&lt;br /&gt;
除了有收藏價值，又可以實際重玩當年的懷舊遊戲&lt;br /&gt;
不買一台似乎說不過去~XD。&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&#34;nintendo-classic-mini規格&#34;&gt;Nintendo Classic Mini規格&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;SoC: Allwinner R16 (4x Cortex A7, Mali400MP2 GPU)&lt;/li&gt;
&lt;li&gt;RAM: SKHynix (256MB DDR3)&lt;/li&gt;
&lt;li&gt;Flash: Spansion 512MB SLC NAND flash, TSOP48&lt;/li&gt;
&lt;li&gt;PMU: AXP223&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;開箱嘍&#34;&gt;開箱嘍&lt;/h2&gt;

&lt;p&gt;某天早上起來突然有個盒子出現!&lt;br /&gt;
(傳說中的半夜小精靈是真的)&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/evQGpq&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;裡面有內建30個任天堂經典代表作&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/AAxY1H&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;實際的大小&lt;/strong&gt;&lt;br /&gt;
好懷念呀~~~~~真的是縮小版的紅白機耶&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/U82L8M&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/g4pCKE&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;趕快試玩一下&lt;/strong&gt;&lt;br /&gt;
接上電源、hdmi螢幕線&lt;br /&gt;
(迷你任天堂電源拉一個普通的USB埠就可以了，不一定要買專用的插頭)&lt;br /&gt;
左邊的開關往上推~右邊的按鈕是reset回到主畫面&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/Ep0aPj&#34; width=&#34;100%&#34;&gt;
&lt;img src=&#34;https://goo.gl/wcYFy4&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;先設定一下畫面&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/dF21sA&#34; width=&#34;100%&#34;&gt;
&lt;img src=&#34;https://goo.gl/4M9U2z&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;開玩嘍!!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/F7K0qc&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/QAlX5y&#34; width=&#34;50%&#34;&gt;
&lt;img src=&#34;https://goo.gl/CB1m5r&#34; width=&#34;100%&#34;&gt;
&lt;img src=&#34;https://goo.gl/GqxKlX&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/RqdPPR&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;可以隨時記錄&lt;/strong&gt;&lt;br /&gt;
按右邊的鈕回到主畫面按下，就會出現4個記錄，家人可以不同的記錄&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/VEK8bD&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h2 id=&#34;以上-收工了嗎&#34;&gt;以上…收工了嗎?&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;當然沒有XD&lt;/strong&gt;&lt;/p&gt;

&lt;h3 id=&#34;以下純屬測試實驗用-有興趣可以玩玩-測試完記得恢復原狀&#34;&gt;以下純屬測試實驗用，有興趣可以玩玩，測試完記得恢復原狀&lt;/h3&gt;

&lt;h3 id=&#34;測試有風險-任何損壞要自行處理&#34;&gt;測試有風險!任何損壞要自行處理!&lt;/h3&gt;

&lt;hr /&gt;

&lt;h2 id=&#34;part-ii&#34;&gt;Part II&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nintendo Classic Mini的硬體不弱&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4核 ARM Cortex-A7 CPU&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;雙核的Mali-400 GPU&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;256MB DDR3&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;這規格比wii和3DS還好!&lt;/strong&gt;&lt;br /&gt;
而且任天堂全部2165個遊戲也才252MB&lt;br /&gt;
只能玩內建的30個遊戲太可惜了&lt;br /&gt;
(Nintendo Classic Mini無法擴充)&lt;/p&gt;

&lt;p&gt;有位俄羅斯的駭客最近公布了一個破解的方法，他表示可以透過Linux的 FEL 方式來添加遊戲，玩家只要用 USB 資料線把復刻版主機連到電腦後，即可自行添加遊戲。&lt;/p&gt;

&lt;p&gt;關於刷機，安迪兒找了一下&lt;br /&gt;
可以參考下列的資料&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/ClusterM/hakchi2&#34;&gt;https://github.com/ClusterM/hakchi2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://gbatemp.net/threads/hakchi2-nes-mini-very-simple-pimp-tool.456256&#34;&gt;https://gbatemp.net/threads/hakchi2-nes-mini-very-simple-pimp-tool.456256&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;https://www.v2ex.com/t/337293&#34;&gt;https://www.v2ex.com/t/337293&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;因為原來俄羅斯madmonkey的hakchi工具有難度&lt;br /&gt;
所以這位ClusterM大大幫他弄了一個好用的ui開源給大家測試&lt;br /&gt;
他的github裡面也有提到原理&lt;br /&gt;
大約是用FEL的方式取得linux的操控&lt;br /&gt;
然後加遊戲重寫NES Mini的內核映像&lt;br /&gt;
關於原來的遊戲目錄是只讀分區&lt;br /&gt;
新加的是用沙箱資料匣掛載在原始遊戲文件夾&lt;br /&gt;
(意思是不會改到原來的資料，都是另外加掛上去的)&lt;/p&gt;

&lt;h2 id=&#34;馬上來試試吧&#34;&gt;馬上來試試吧&lt;/h2&gt;

&lt;h3 id=&#34;1-首先找台windows&#34;&gt;1. 首先找台windows&lt;/h3&gt;

&lt;p&gt;安迪兒是用mac上模擬的win7&lt;br /&gt;
打開Nintendo Classic Mini&lt;br /&gt;
指定mac轉接到windows的usb埠&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/r4OQoa&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;2-捉下hakchi2的工具來執行&#34;&gt;2. 捉下hakchi2的工具來執行&lt;/h2&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/GWKV5i&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;3-備份一下原來的img吧&#34;&gt;3. 備份一下原來的img吧&lt;/h2&gt;

&lt;p&gt;這邊他說要先安裝driver&lt;br /&gt;
[Dump kernel]&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/R95l1U&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://goo.gl/5X38t0&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;但安迪兒在這裡碰到雷一直失敗&#34;&gt;但安迪兒在這裡碰到雷一直失敗&lt;/h2&gt;

&lt;p&gt;安迪兒Nintendo Classic Mini driver一直裝不起來&lt;br /&gt;
直接去hakchi的driver資料匣裡直接安裝也是失敗&lt;br /&gt;
後來查了一下&lt;br /&gt;
&lt;a href=&#34;http://www.amobbs.com/forum.php?mod=viewthread&amp;amp;tid=5598249&#34;&gt;http://www.amobbs.com/forum.php?mod=viewthread&amp;amp;tid=5598249&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;找到windowos可以先用zadig裝上這類的USB驅動&lt;br /&gt;
&lt;a href=&#34;http://zadig.akeo.ie/&#34;&gt;http://zadig.akeo.ie/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;但…還是失敗&lt;br /&gt;
就算用zadig後還是找不到CLV-S-HVCY的driver&lt;/p&gt;

&lt;p&gt;後來安迪兒又看了一下他dump kernel有說到&lt;br /&gt;
按住Nintendo Classic Mini reset和power鈕&lt;/p&gt;

&lt;p&gt;原來和手機一樣有刷機模式那類的&lt;br /&gt;
於是安迪兒就試了一下關機&lt;br /&gt;
然後&lt;strong&gt;hold reset and turn on the Power&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&#34;突然mac捉到的usb設備不一樣了&#34;&gt;突然MAC捉到的usb設備不一樣了&lt;/h2&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/NBXE92&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zading可以用了!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unknown Device#1&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;USB ID:1F3A EFE8&lt;/strong&gt;&lt;br /&gt;
(對照一下id，是這個id就對了)&lt;/p&gt;

&lt;p&gt;按下[install driver]&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/p0QJbk&#34; alt=&#34;&#34; /&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/OLGaCA&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;裝完後到hackchi2的driver測試一下&#34;&gt;裝完後到hackchi2的driver測試一下&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;執行nesmini_driver.exe&lt;/strong&gt;&lt;br /&gt;
正常可以使用了，順便再安裝一下&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/WHQZH2&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;執行主程式&#34;&gt;執行主程式&lt;/h2&gt;

&lt;p&gt;裝完driver，執行一下主程式&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/ADk5DR&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;dump-kernel&#34;&gt;Dump Kernel&lt;/h2&gt;

&lt;p&gt;順利的Dump出來了~XD&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/Jf8WYV&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/P2tG2R&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;Dump完，多了一個Dump資料匣&lt;br /&gt;
裡面有這台mini nes的原始Kernel.img&lt;br /&gt;
&lt;strong&gt;要好好的保存!!!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/zrYODN&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/PW8U5E&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;h2 id=&#34;hackchi2的設定&#34;&gt;hackchi2的設定&lt;/h2&gt;

&lt;p&gt;看一下其它的設定，大約是像github上有提到的&lt;br /&gt;
* Allows to change any game settings including command line arguments&lt;br /&gt;
* Fills all game data automatically using included database&lt;br /&gt;
* Automatically checks for supported games&lt;br /&gt;
* Allows to automatically search for box art using Google Images&lt;br /&gt;
* Game Genie support&lt;br /&gt;
* Can automatically patch problem games, patches for some popular games included in the package&lt;br /&gt;
* Allows to upload hundreds of games at once&lt;br /&gt;
* Allows to exit to menu using button combination instead if reset button&lt;br /&gt;
* Allows to enable autofire&lt;br /&gt;
* Allows to simulate start button on second controller for Famicom Mini&lt;br /&gt;
* Allows to disable epilepsy protection&lt;br /&gt;
* Allows to disable menu music&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/hlSSDI&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;測試hackchi2&#34;&gt;測試hackchi2&lt;/h2&gt;

&lt;p&gt;單純測試!&lt;/p&gt;

&lt;p&gt;按下&lt;strong&gt;[add more games]&lt;/strong&gt;&lt;br /&gt;
加入要測試的Rom&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;估狗關鍵字&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;FC 任天堂模擬器 + 2165個遊戲 Rom (Nes) 完整版下載！  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/231VZ5&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/VFlDHn&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;h2 id=&#34;設定一下每個rom的內容&#34;&gt;設定一下每個Rom的內容&lt;/h2&gt;

&lt;p&gt;新版的hackchi2可以按google搜圖&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/7xxEsO&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;設定完後-開始製做新的客製kernel&#34;&gt;設定完後，開始製做新的客製kernel&lt;/h2&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/2sb5N0&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/jJQ48F&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;h2 id=&#34;完成後-會開始刷nintendo-classic-mini&#34;&gt;完成後，會開始刷Nintendo Classic Mini&lt;/h2&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/qeVUUS&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/yyaA8z&#34; width=&#34;50%&#34;&gt;
&lt;img src=&#34;https://goo.gl/TLvBrb&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;緊張的時刻來嘍-重開電源看看成果吧&#34;&gt;緊張的時刻來嘍!!重開電源看看成果吧!&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;噢！！出現新的項目&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/jK6zMH&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;試玩一下&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/ij50do&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/fsCgj7&#34; width=&#34;50%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/SJCJIm&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/tujU8e&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;h2 id=&#34;收工了&#34;&gt;收工了!&lt;/h2&gt;

&lt;p&gt;放在書桌旁，還不賴，以後睡前可以玩一下懷舊小遊戲~XD&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/Jl3mCf&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>[開箱]Akitio Node之搶救老舊MacbookPro外接顯卡大作戰(EGPU)</title>
      <link>https://bowwow.tips/projects/20170128/</link>
      <pubDate>Sat, 28 Jan 2017 00:00:00 +0000</pubDate>
      
      <guid>https://bowwow.tips/projects/20170128/</guid>
      <description>

&lt;p&gt;&lt;strong&gt;安迪兒手上的MacBook Pro是13吋2012年版本的老舊筆電了&lt;br /&gt;
趁過新年整理一下，再次強化它，提升他的效能。&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&#34;先上結論&#34;&gt;先上結論&lt;/h2&gt;

&lt;p&gt;安迪兒手上這台2012年版13吋Macbook Pro升級後配備如下:&lt;br /&gt;
1. 雙SSD做raid 0(拆掉光碟機)&lt;br /&gt;
2. 16G RAM&lt;br /&gt;
3. 外接nvida顯卡&lt;br /&gt;
4. 新的筆電電池&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/qysSjM&#34; width=&#34;100%&#34;&gt;
&lt;img src=&#34;https://goo.gl/M7oWfn&#34; width=&#34;100%&#34;&gt;
&lt;img src=&#34;https://goo.gl/w4e1jJ&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;早期Macbook Pro還不錯，耐用且可以自己隨意的更換零件&lt;/strong&gt;&lt;br /&gt;
第1、2、4項安迪兒之前就換了&lt;br /&gt;
但顯卡和cpu這塊一直沒辦法有很好的方式做升級&lt;/p&gt;

&lt;h2 id=&#34;mac的痛一直是顯卡不夠力&#34;&gt;&lt;strong&gt;mac的痛一直是顯卡不夠力&lt;/strong&gt;&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;謎之音：&lt;/strong&gt; &lt;del&gt;我也想用mac打電動呀~ＸＤ&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;關於外接顯卡，網路上有一些修改方式&lt;br /&gt;
例如:&lt;br /&gt;
* 犧牲無線網卡，拆機拉線出來接轉接卡再接顯卡&lt;br /&gt;
* 找個pcie外接盒，剪線改電源，再接顯卡&lt;/p&gt;

&lt;p&gt;但最近，EGPU、電競的流行，專門的顯卡外接盒出現在市場上&lt;br /&gt;
安迪兒發現最近有一款ATIKIO Node剛推出上市&lt;br /&gt;
蠻符合安迪兒的需求，內建Power 400W、Thunderbolt 3&lt;br /&gt;
差不多市面上的高級顯卡都能跑&lt;br /&gt;
&lt;strong&gt;重點是不用改硬體線路!!!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;於是…&lt;br /&gt;
一個箱子就出現在辦公室，不小心踢到XD&lt;br /&gt;
首先來開箱一下&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/ZJWdU7&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://goo.gl/x2lViC&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://goo.gl/AHiaAS&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://goo.gl/G0HAj1&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://goo.gl/oFkAkh&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;使用ATIKIO Node後的感想&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;優點:&lt;/strong&gt;&lt;br /&gt;
1. 有送一條1千多的Thunderbolt 3 的線&lt;br /&gt;
2. 有風扇散熱&lt;br /&gt;
3. 有把手方便整盒提起來&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;缺點:&lt;/strong&gt;&lt;br /&gt;
1. 比想像中大&lt;br /&gt;
2. 有點重&lt;br /&gt;
3. 有風扇免不了有聲音&lt;br /&gt;
4. Thunderbolt3的線&amp;hellip;只有2016後新的mac才能用&lt;br /&gt;
(加買一條3轉2的線要2千元…太坑了)&lt;/p&gt;

&lt;p&gt;以上開箱完畢!&lt;br /&gt;
再來正式說明一下&lt;/p&gt;

&lt;h2 id=&#34;如何修改mac外接顯卡&#34;&gt;如何修改MAC外接顯卡&lt;/h2&gt;

&lt;h2 id=&#34;開始前-很重要&#34;&gt;開始前…很重要!!!!&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;顯卡的跑分資料:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&#34;http://www.videocardbenchmark.net/gpu_list.php&#34;&gt;http://www.videocardbenchmark.net/gpu_list.php&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mac上ATIKIO Node盒子的顯卡支援程度:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/CUDA&#34;&gt;https://en.wikipedia.org/wiki/CUDA&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mac升級至最新的Sierra 10.12.3(相容較多的顯示卡)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;安迪兒在顯卡這邊踩到雷，用了GTX1060&lt;br /&gt;
但在mac上做了很多的修改和測試&lt;br /&gt;
頂多只能捉到卡，但沒辦法驅動&lt;br /&gt;
後來查了很多資料看了人家的討論才知道&lt;br /&gt;
在mac上外接顯卡NVIDA只支援到Maxwell和之前的架構&lt;br /&gt;
新的Pascal系列，目前不支援(可以參考上面的連結列表)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;以上在windows10有支援不用擔心&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;mac可用bootcamp方式安裝win10&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&#34;1-關掉mac-system-integrity-protection&#34;&gt;1. 關掉MAC System Integrity Protection&lt;/h2&gt;

&lt;p&gt;MAC有SIP的機制，防止我們去對系統做深層的修改。&lt;br /&gt;
所以要先把 SIP 關掉。&lt;br /&gt;
步驟如下&lt;br /&gt;
重開機
按住command+R 進回復模式
打開終端機&lt;br /&gt;
輸入&lt;/p&gt;

&lt;p&gt;&lt;code&gt;csrutil disable&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/nZKjeF&#34; alt=&#34;&#34; /&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/PBKZo7&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;如果指令不能用的話&lt;br /&gt;
可能和安迪兒一樣磁區有點不同&lt;br /&gt;
這時可以做一隻mac的安裝碟&lt;br /&gt;
用安裝碟開機進終端機執行指令就可以了&lt;/p&gt;

&lt;p&gt;安裝碟的製做方式&lt;br /&gt;
參考安迪兒以前寫的文章&lt;br /&gt;
&lt;a href=&#34;https://dotblogs.com.tw/bowwowxx/2015/10/03/153487&#34;&gt;自製Mac OS X El Capitan 10.11 USB安裝碟&amp;amp;修復RAID功能&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&#34;2-解鎖thunderbolt-3外接顯卡&#34;&gt;2. 解鎖Thunderbolt 3外接顯卡&lt;/h2&gt;

&lt;p&gt;mac上其實有限制非特定的Thunderbolt硬體不給用&lt;br /&gt;
接上ATIKIO Node，看一下硬體明細&lt;br /&gt;
Thunderbolt那邊, 如果有Unsupported字眼的&lt;br /&gt;
表示mac不支援此硬體，要解開tb3&lt;br /&gt;
原理大約是在外接kext裡加入相關驅動資料&lt;br /&gt;
可以參考&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/KhaosT/tb3-enabler&#34;&gt;https://github.com/KhaosT/tb3-enabler&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/UIYbqg&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://goo.gl/sn48ks&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;捉下tb3-enabler，然後執行&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;chmod +x tb3-enabler.py
sudo tb3-enabler.py apply
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/kSGd0i&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;看一下狀態&lt;br /&gt;
&lt;code&gt;tb3-enabler.py status&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/TZ4iDD&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;最後restart筆電&lt;/p&gt;

&lt;h2 id=&#34;3-寫入mac相關硬體資訊-安裝相關的driver&#34;&gt;3. 寫入mac相關硬體資訊&amp;amp;安裝相關的driver&lt;/h2&gt;

&lt;p&gt;可以參考&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/goalque/automate-eGPU&#34;&gt;https://github.com/goalque/automate-eGPU&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;捉下來後&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;chmod +x automate-eGPU.sh
sudo ./automate-eGPU.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;其實也可以自己去安裝相關的mac driver&lt;br /&gt;
或是automate-eGPU安裝過程會詢問(都選y)&lt;br /&gt;
裝完後，再按更新就可以了&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;nvidia在mac上的driver是web driver&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&#34;http://www.nvidia.com/download/driverResults.aspx/114669/en-us&#34;&gt;QUADRO &amp;amp; GEFORCE MACOS DRIVER RELEASE 367.15.10.35&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;順便裝一下cuda&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&#34;http://www.nvidia.com.tw/object/mac-driver-archive-tw.html&#34;&gt;CUDA&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/YaVZt4&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://goo.gl/db166q&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;裝完後系統編好設定裡會有相關選項&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/ZwAVrY&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;這張是mac有捉到顯卡但沒driver的&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/W7j8Ot&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;有支援的話會像這樣子&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/zM76M8&#34; alt=&#34;&#34; /&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/6dhQBc&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;4-以上都完成的話就可以關機-接好外接螢幕-重開機&#34;&gt;4. 以上都完成的話就可以關機，接好外接螢幕，重開機&lt;/h2&gt;

&lt;p&gt;順利的話，外接螢幕的畫面就會出現了&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/OfEbVO&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;5-蓋上筆電單獨用外接顯卡的螢幕也ok&#34;&gt;5. 蓋上筆電單獨用外接顯卡的螢幕也ok&lt;/h2&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/4Uif9L&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;6-看一下相關的資訊&#34;&gt;6. 看一下相關的資訊&lt;/h2&gt;

&lt;p&gt;在外接螢幕上可以看見是張外接顯卡&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/m0NWmr&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;好像沒用到外接顯卡的效能&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/p33ZoD&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;p&gt;測試一下，跑一下4k影片看看&lt;br /&gt;
嗯嗯，有用上了，應該有效&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/pvL1OR&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;7-跑一下分吧&#34;&gt;7. 跑一下分吧&lt;/h2&gt;

&lt;p&gt;安迪兒用了&lt;a href=&#34;http://www.luxrender.net/wiki/LuxMark#Binaries&#34;&gt;LuxMark&lt;/a&gt;來測試一下&lt;br /&gt;
真的有差~XD&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/5wICW7&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://goo.gl/l21nzm&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://goo.gl/S4VtvA&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;8-玩一下cs-有點順xd&#34;&gt;8. 玩一下cs，有點順XD&lt;/h2&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/wkWH38&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://goo.gl/AJlUj1&#34; alt=&#34;&#34; /&gt;
&lt;img src=&#34;https://goo.gl/ejrlGD&#34; alt=&#34;&#34; /&gt;&lt;/p&gt;

&lt;h2 id=&#34;2012老舊mbp再戰3年吧&#34;&gt;2012老舊mbp再戰3年吧!!!&lt;/h2&gt;

&lt;h2 id=&#34;以上是安迪兒macbook-pro外接顯卡的記錄&#34;&gt;以上是安迪兒macbook pro外接顯卡的記錄&lt;/h2&gt;

&lt;h2 id=&#34;收工嘍&#34;&gt;收工嘍!&lt;/h2&gt;
</description>
    </item>
    
    <item>
      <title>打造TensorFlow深度學習Slack聊天機器人</title>
      <link>https://bowwow.tips/post/20170122/</link>
      <pubDate>Sun, 22 Jan 2017 00:00:00 +0000</pubDate>
      
      <guid>https://bowwow.tips/post/20170122/</guid>
      <description>

&lt;p&gt;&lt;strong&gt;去年友人大竹講師在COSCUP 2016
和大家分享的議程是關於nas上用TensorFlow做圖形辨識&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;透過大竹的講解，也讓安迪兒開始接觸TensorFlow&lt;br /&gt;
&lt;strong&gt;謎之音：&lt;/strong&gt; &lt;del&gt;感謝大竹帶安迪兒去講者晚宴大吃大喝的~ＸＤ&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;安迪兒那時就一直想試試用TensorFlow分析文字語意之類&lt;br /&gt;
直到最近安迪兒看到很熱門的AlphaGo就是棋靈王裡的sai~ＸＤ&lt;br /&gt;
就好玩也試著弄了聊天機器人(為了讓首領同事開心)&lt;br /&gt;
以下記錄一下建這隻bot過程&lt;/p&gt;

&lt;h2 id=&#34;相關文章&#34;&gt;[相關文章]&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;大竹的COSCUP 2016 - NAS也會揀土豆&lt;/strong&gt;&lt;br /&gt;
原文網址：&lt;a href=&#34;http://kaichu.io/2016/08/22/retrain-inception-model-for-nas/&#34;&gt;http://kaichu.io/2016/08/22/retrain-inception-model-for-nas/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TensorFlow Sequence-to-Sequence Models&lt;/strong&gt;&lt;br /&gt;
原文網址：&lt;a href=&#34;https://www.tensorflow.org/tutorials/seq2seq/&#34;&gt;https://www.tensorflow.org/tutorials/seq2seq/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TensorFlowのSeq2Seqモデルでチャットボットっぽいものを作ってみた&lt;/strong&gt;&lt;br /&gt;
原文網址：&lt;a href=&#34;http://qiita.com/San_/items/128bf1b5a898ad5c18f1&#34;&gt;http://qiita.com/San_/items/128bf1b5a898ad5c18f1&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&#34;關於sequence-to-sequence-models&#34;&gt;&lt;strong&gt;關於Sequence-to-Sequence Models&lt;/strong&gt;&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Sequence to Sequence模型是近幾年來熱門的一個基於RNN的模型&lt;br /&gt;
廣範的用在機器翻譯、自動問答系統等領域&lt;br /&gt;
並有不錯的成效果&lt;br /&gt;
有興趣可以參考上方相關文章裡面的連結&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&#34;事前準備&#34;&gt;&lt;strong&gt;事前準備&lt;/strong&gt;&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;TensorFlow安裝:&lt;a href=&#34;https://bowwow.tips/post/20170121&#34;&gt;MAC上安裝TENSORFLOW&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;slack機器人key申請:&lt;a href=&#34;#&#34;&gt;改天補上XD&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;開始製作對話機器人&#34;&gt;&lt;strong&gt;開始製作對話機器人&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;安迪兒參考了日本的San關於他的會話AI製作文章&lt;br /&gt;
(附在上方相關文章裡)&lt;/p&gt;

&lt;p&gt;TensorFlow最重要的就是符合相關目的資料來源&lt;br /&gt;
但怎麼收集中文的對話資料是有點麻煩的&lt;br /&gt;
資料餵不對，答非所問就算了，機器人會練歪喔&lt;/p&gt;

&lt;h3 id=&#34;資料怎麼來&#34;&gt;&lt;strong&gt;資料怎麼來?&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;安迪兒搜了一下 電影、字幕、小說等&lt;br /&gt;
最找到了這個&lt;br /&gt;
(流淚感謝好心大大的開源分享)&lt;br /&gt;
&amp;gt;dgk_lost_conv
chinese conversation corpus
可以用作聊天机器人的训练语料&lt;br /&gt;
&lt;a href=&#34;https://github.com/rustch3n/dgk_lost_conv&#34;&gt;https://github.com/rustch3n/dgk_lost_conv&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&#34;整理資料&#34;&gt;&lt;strong&gt;整理資料&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;參考San文章的內容&lt;br /&gt;
&amp;gt;&lt;a href=&#34;http://qiita.com/San_/items/128bf1b5a898ad5c18f1&#34;&gt;http://qiita.com/San_/items/128bf1b5a898ad5c18f1&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;https://github.com/sanshirookazaki/chat&#34;&gt;https://github.com/sanshirookazaki/chat&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;找到資料後要整理一下訓練的資料&lt;/strong&gt;&lt;br /&gt;
 - 先utf8、繁簡轉換原始dkg_lost_conv&lt;br /&gt;
 - 切分問、答2個詞檔&lt;br /&gt;
 - 切分問、答2個測試檔用來跑評估模型用&lt;br /&gt;
 - 建decode encode對話表&lt;br /&gt;
 - 然後把以上的檔，文字內容轉向量化，讓TensorFlow跑訓練&lt;/p&gt;

&lt;h3 id=&#34;開始訓練機器人了&#34;&gt;&lt;strong&gt;開始訓練機器人了&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;執行 python 3.translate.py&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;import tensorflow as tf
from tensorflow.models.rnn.translate import seq2seq_model
import os
import numpy as np
import math

PAD_ID = 0
GO_ID = 1
EOS_ID = 2
UNK_ID = 3

train_encode_vec = &#39;train_encode.vec&#39;
train_decode_vec = &#39;train_decode.vec&#39;
test_encode_vec = &#39;test_encode.vec&#39;
test_decode_vec = &#39;test_decode.vec&#39;

vocabulary_encode_size = 5000
vocabulary_decode_size = 5000
buckets = [(5, 10), (10, 15), (20, 25), (40, 50)]
layer_size = 256
num_layers = 3
batch_size =  64

def read_data(source_path, target_path, max_size=None):
	data_set = [[] for _ in buckets]
	with tf.gfile.GFile(source_path, mode=&amp;quot;r&amp;quot;) as source_file:
		with tf.gfile.GFile(target_path, mode=&amp;quot;r&amp;quot;) as target_file:
			source, target = source_file.readline(), target_file.readline()
			counter = 0
			while source and target and (not max_size or counter &amp;lt; max_size):
				counter += 1
				source_ids = [int(x) for x in source.split()]
				target_ids = [int(x) for x in target.split()]
				target_ids.append(EOS_ID)
				for bucket_id, (source_size, target_size) in enumerate(buckets):
					if len(source_ids) &amp;lt; source_size and len(target_ids) &amp;lt; target_size:
						data_set[bucket_id].append([source_ids, target_ids])
						break
				source, target = source_file.readline(), target_file.readline()
	return data_set

model = seq2seq_model.Seq2SeqModel(source_vocab_size=vocabulary_encode_size, target_vocab_size=vocabulary_decode_size,
                                   buckets=buckets, size=layer_size, num_layers=num_layers, max_gradient_norm= 5.0,
                                   batch_size=batch_size, learning_rate=0.5, learning_rate_decay_factor=0.97, forward_only=False)

config = tf.ConfigProto()
config.gpu_options.allocator_type = &#39;BFC&#39;

with tf.Session(config=config) as sess:

	ckpt = tf.train.get_checkpoint_state(&#39;.&#39;)
	if ckpt != None:
		print(ckpt.model_checkpoint_path)
		model.saver.restore(sess, ckpt.model_checkpoint_path)
	else:
		sess.run(tf.global_variables_initializer())

	train_set = read_data(train_encode_vec, train_decode_vec)
	test_set = read_data(test_encode_vec, test_decode_vec)

	train_bucket_sizes = [len(train_set[b]) for b in range(len(buckets))]
	train_total_size = float(sum(train_bucket_sizes))
	train_buckets_scale = [sum(train_bucket_sizes[:i + 1]) / train_total_size for i in range(len(train_bucket_sizes))]

	loss = 0.0
	total_step = 0
	previous_losses = []

	while True:
		random_number_01 = np.random.random_sample()
		bucket_id = min([i for i in range(len(train_buckets_scale)) if train_buckets_scale[i] &amp;gt; random_number_01])

		encoder_inputs, decoder_inputs, target_weights = model.get_batch(train_set, bucket_id)
		_, step_loss, _ = model.step(sess, encoder_inputs, decoder_inputs, target_weights, bucket_id, False)

		loss += step_loss / 500
		total_step += 1

		print(total_step)
		if total_step % 5000 == 0:
			print(model.global_step.eval(), model.learning_rate.eval(), loss)


			if len(previous_losses) &amp;gt; 2 and loss &amp;gt; max(previous_losses[-3:]):
				sess.run(model.learning_rate_decay_op)
			previous_losses.append(loss)

			checkpoint_path = &amp;quot;seq2seq.ckpt&amp;quot;
			model.saver.save(sess, checkpoint_path, global_step=model.global_step)
			loss = 0.0

			for bucket_id in range(len(buckets)):
				if len(test_set[bucket_id]) == 0:
					continue
				encoder_inputs, decoder_inputs, target_weights = model.get_batch(test_set, bucket_id)
				_, eval_loss, _ = model.step(sess, encoder_inputs, decoder_inputs, target_weights, bucket_id, True)
				eval_ppx = math.exp(eval_loss) if eval_loss &amp;lt; 300 else float(&#39;inf&#39;)
				print(bucket_id, eval_ppx)

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/h2hCCB&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/QwpzFx&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/4ZxsbO&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h3 id=&#34;會跑很久&#34;&gt;&lt;strong&gt;會跑很久&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;安迪兒用Mac只有用CPU在跑&lt;br /&gt;
跑了1星期不關機，每天都100%(有點可怕XD)&lt;br /&gt;
也才跑了30多萬筆&lt;br /&gt;
沒顯卡跑超慘的&lt;/p&gt;

&lt;p&gt;如果跑不完可以停下，下次會在接著跑&lt;br /&gt;
程式跑一陣子會定期存檔&lt;/p&gt;

&lt;p&gt;checkpoint裡面會有記錄跑到那&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/H1rP1A&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h3 id=&#34;執行bot&#34;&gt;&lt;strong&gt;執行bot&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;執行安迪兒的 4.bot01.py&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;export BOT_ID=&amp;quot;slack bot的id&amp;quot;
export SLACK_TOKEN=&amp;quot;slack bot的api key&amp;quot;
python 4.bot01.py &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;程式碼:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;import tensorflow as tf
from tensorflow.models.rnn.translate import seq2seq_model
import os
import numpy as np
import time
from slackclient import SlackClient

BOT_ID = os.environ[&amp;quot;BOT_ID&amp;quot;]
AT_BOT = &amp;quot;&amp;lt;@&amp;quot; + BOT_ID + &amp;quot;&amp;gt;&amp;quot;
EXAMPLE_COMMAND = &amp;quot;orange&amp;quot;
slack_token = os.environ[&amp;quot;SLACK_TOKEN&amp;quot;]
slack_client = SlackClient(slack_token)

PAD_ID = 0
GO_ID = 1
EOS_ID = 2
UNK_ID = 3

train_encode_vocabulary = &#39;train_encode_vocabulary&#39;
train_decode_vocabulary = &#39;train_decode_vocabulary&#39;

def handle_command(command, channel):
    response = str(command)
    if command.startswith(EXAMPLE_COMMAND):
       response = &amp;quot;Sure...write some more code then I can do that!&amp;quot;
    slack_client.api_call(&amp;quot;chat.postMessage&amp;quot;, channel = channel, text = response, as_user = True)

def parse_slack_output(slack_rtm_output):
    output_list = slack_rtm_output
    if output_list and len(output_list) &amp;gt; 0:
        for output in output_list:
            if output and &#39;text&#39; in output and AT_BOT in output[&#39;text&#39;]:
               return output[&#39;text&#39;].split(AT_BOT)[1].strip().lower(),output[&#39;channel&#39;]
    return None, None

def read_vocabulary(input_file):
    tmp_vocab = []
    with open(input_file, &amp;quot;r&amp;quot;) as f:
         tmp_vocab.extend(f.readlines())
    tmp_vocab = [line.strip() for line in tmp_vocab]
    vocab = dict([(x, y) for (y, x) in enumerate(tmp_vocab)])
    return vocab, tmp_vocab

vocab_en, _, = read_vocabulary(train_encode_vocabulary)
_, vocab_de, = read_vocabulary(train_decode_vocabulary)

vocabulary_encode_size = 5000
vocabulary_decode_size = 5000

buckets = [(5, 10), (10, 15), (20, 25), (40, 50)]
layer_size = 256
num_layers = 3
batch_size = 1

model = seq2seq_model.Seq2SeqModel(source_vocab_size = vocabulary_encode_size, target_vocab_size = vocabulary_decode_size,
    buckets = buckets, size = layer_size, num_layers = num_layers, max_gradient_norm = 5.0,
    batch_size = batch_size, learning_rate = 0.5, learning_rate_decay_factor = 0.99, forward_only = True)
model.batch_size = 1
READ_WEBSOCKET_DELAY = 1

with tf.Session() as sess:
    ckpt = tf.train.get_checkpoint_state(&#39;.&#39;)
if ckpt != None:
    print(ckpt.model_checkpoint_path)
    model.saver.restore(sess, ckpt.model_checkpoint_path)
else :
    print(&amp;quot;none ckpt modle&amp;quot;)

if slack_client.rtm_connect():
    print(&amp;quot;StarterBot connected and running!&amp;quot;)
    while True:
        command, channel = parse_slack_output(slack_client.rtm_read())
        if command and channel:
            print type(command)
            input_string = command.encode(&amp;quot;utf8&amp;quot;)
            input_string_vec = []
            for words in input_string.strip():
                 input_string_vec.append(vocab_en.get(words, UNK_ID))
            bucket_id = min([b for b in range(len(buckets)) if buckets[b][0] &amp;gt; len(input_string_vec)])
            encoder_inputs, decoder_inputs, target_weights = model.get_batch({bucket_id: [(input_string_vec, [])]}, bucket_id)
            _, _, output_logits = model.step(sess, encoder_inputs, decoder_inputs, target_weights, bucket_id, True)
            outputs = [int(np.argmax(logit, axis = 1)) for logit in output_logits]
            if EOS_ID in outputs:
                outputs = outputs[: outputs.index(EOS_ID)]

            response = &amp;quot;&amp;quot;.join([tf.compat.as_str(vocab_de[output]) for output in outputs])
            print(&amp;quot;response:&amp;quot; + response)
            # handle_command(response, channel) unicode(unicodestring,&amp;quot;utf-8&amp;quot;) response.encode(&amp;quot;utf8&amp;quot;)
            slack_client.api_call(&amp;quot;chat.postMessage&amp;quot;, channel = channel, text = unicode(response,&amp;quot;utf-8&amp;quot;), as_user = True)
        time.sleep(READ_WEBSOCKET_DELAY)

else :
     print(&amp;quot;Connection failed. Invalid Slack token or bot ID?&amp;quot;)

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/xTVGQG&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;以上安迪兒跑不完，所以只跑了數天就停了&lt;br /&gt;
只用train了一點點的模型去跑，結果出現一堆在未知列表裡的字(&amp;ndash;UNK&amp;ndash;)&lt;br /&gt;
人生吶~需要更好的顯卡~XD&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;附上安迪兒的程式碼和沒訓練完的檔案&lt;br /&gt;
想訓練的人可以接著跑，或是直接執行來玩玩&lt;/strong&gt;
 &amp;gt; &lt;a href=&#34;https://github.com/bowwowxx/tensorbot.git&#34;&gt;https://github.com/bowwowxx/tensorbot.git&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&#34;來看一下成果&#34;&gt;&lt;strong&gt;來看一下成果&lt;/strong&gt;&lt;/h3&gt;

&lt;p&gt;登入slack 和BOT聊一下天&lt;br /&gt;
雖然對話還是怪怪的，不過還算蠻有趣的&lt;br /&gt;
感覺問一下，奇怪的問題小三啥的比較會回&lt;br /&gt;
正常的問題不太知道，或是沒在清單列表裡&lt;br /&gt;
可能和都是電影八卦對白有點關係~XD&lt;br /&gt;
真是太好笑了…&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/fyM8aU&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/e1NyYF&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h3 id=&#34;以上是安迪兒試玩tensorflow的記錄-收工嘍&#34;&gt;以上是安迪兒試玩tensorflow的記錄，收工嘍!&lt;/h3&gt;
</description>
    </item>
    
    <item>
      <title>MAC上安裝TensorFlow</title>
      <link>https://bowwow.tips/post/20170121/</link>
      <pubDate>Sat, 21 Jan 2017 00:00:00 +0000</pubDate>
      
      <guid>https://bowwow.tips/post/20170121/</guid>
      <description>

&lt;p&gt;&lt;strong&gt;安迪兒之前是在nas上試玩docker的TensorFlow&lt;br /&gt;
最近剛好做個小東西，趁機會記錄一下安裝TensorFlow在mac筆電的步驟&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&#34;相關文章&#34;&gt;[相關文章]&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;為何Google要推開源機器學習系統TensorFlow？&lt;/strong&gt;&lt;br /&gt;
原文網址：&lt;a href=&#34;https://www.bnext.com.tw/article/37925/BN-2015-11-10-184646-40&#34;&gt;https://www.bnext.com.tw/article/37925/BN-2015-11-10-184646-40&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TensorFlow官方安裝文件&lt;/strong&gt;&lt;br /&gt;
原文網址：&lt;a href=&#34;https://www.tensorflow.org/get_started/os_setup&#34;&gt;https://www.tensorflow.org/get_started/os_setup&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4 id=&#34;安裝方式&#34;&gt;安裝方式&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pip install:&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install TensorFlow on your machine, possibly upgrading previously installed Python packages. May impact existing Python programs on your machine.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Virtualenv install:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install TensorFlow in its own directory, not impacting any existing Python programs on your machine.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anaconda install:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install TensorFlow in its own environment for those running the Anaconda Python distribution. Does not impact existing Python programs on your machine.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker install:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run TensorFlow in a Docker container isolated from all other programs on your machine.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Installing from sources:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Install TensorFlow by building a pip wheel that you then install using pip.&lt;/p&gt;

&lt;h4 id=&#34;安裝pip&#34;&gt;安裝pip&lt;/h4&gt;

&lt;p&gt;如果沒pip的話可以先安裝一下&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#Mac OS X  
$ sudo easy_install pip  
$ sudo easy_install --upgrade six  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/nw3aZk&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;安裝tensorflow&#34;&gt;安裝TensorFlow&lt;/h4&gt;

&lt;p&gt;安迪兒的Mac筆電沒有顯卡，只能裝CPU版的&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;CPU版:
 pip install tensorflow  

GPU版:
pip install tensorflow-gpu
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&#34;然後踩了一下雷&#34;&gt;然後踩了一下雷&lt;/h4&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/4KtN2N&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
查了一下發現mac好像都會有這問題&lt;br /&gt;
(其實官方文件下面一些有提到不能安裝時的方式)&lt;/p&gt;

&lt;p&gt;安迪兒挑了mac內建的python2.7來用&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Mac OS X, CPU only, Python 2.7:  
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.12.1-py2-none-any.whl
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;更新一下tensorflow&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;# Python 2
$ sudo pip install --upgrade $TF_BINARY_URL
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&#34;再次踩雷&#34;&gt;再次踩雷&lt;/h4&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/zzRMHy&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
還是error&lt;br /&gt;
安迪兒看了一下文件，覺的可能是和python的版本有關&lt;br /&gt;
就手動升了一下mac的python到2.7.13&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;brew install python  
brew info python  
brew linkapps python
source ~/.bash_profile
python -v
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/JxlDbs&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/znqmvV&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/jekSNW&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;重來一次&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.12.1-py2-none-any.whl  
sudo pip install --upgrade $TF_BINARY_URL  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;安裝成功了&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/lB22vX&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;來測試一下tensorflow能不能用吧&#34;&gt;來測試一下tensorflow能不能用吧&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;$ python
&amp;gt;&amp;gt;&amp;gt; import tensorflow as tf
&amp;gt;&amp;gt;&amp;gt; hello = tf.constant(&#39;Hello, TensorFlow!&#39;)
&amp;gt;&amp;gt;&amp;gt; sess = tf.Session()
&amp;gt;&amp;gt;&amp;gt; print(sess.run(hello))
Hello, TensorFlow!
&amp;gt;&amp;gt;&amp;gt; a = tf.constant(10)
&amp;gt;&amp;gt;&amp;gt; b = tf.constant(32)
&amp;gt;&amp;gt;&amp;gt; print(sess.run(a + b))
42
&amp;gt;&amp;gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&#34;成功嘍&#34;&gt;成功嘍&lt;/h4&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/KpS4Yr&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;以上是安迪兒整個在mac安裝tensorflow的過程-收工嘍&#34;&gt;以上是安迪兒整個在mac安裝tensorflow的過程，收工嘍!&lt;/h4&gt;
</description>
    </item>
    
    <item>
      <title>Docker 1.12的黑魔法</title>
      <link>https://bowwow.tips/post/20160730/</link>
      <pubDate>Sat, 30 Jul 2016 00:00:00 +0000</pubDate>
      
      <guid>https://bowwow.tips/post/20160730/</guid>
      <description>

&lt;p&gt;今年2016 Docker Conf 發表後&lt;br /&gt;
引起大家狂熱的討論，整個會場都高潮了~XD&lt;/p&gt;

&lt;p&gt;[引用一下相關的結論文章]&lt;br /&gt;
&lt;strong&gt;DockerCon 2016會議：發布內容的總結及主要收穫&lt;/strong&gt;
原文網址：&lt;a href=&#34;https://kknews.cc/tech/mmx4yp.html&#34;&gt;https://kknews.cc/tech/mmx4yp.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker Swarm 已死！Docker Swarm 萬歲！&lt;/strong&gt;
原文網址：&lt;a href=&#34;https://kknews.cc/tech/8e2egq.html&#34;&gt;https://kknews.cc/tech/8e2egq.html&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&#34;官方無敵威的展示影片&#34;&gt;官方無敵威的展示影片&lt;/h4&gt;

&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=F7hoq0KwHD4&#34;&gt;&lt;img src=&#34;https://img.youtube.com/vi/F7hoq0KwHD4/0.jpg&#34; alt=&#34;Alt text&#34; /&gt;&lt;/a&gt;&lt;br /&gt;
看完影片後，安迪兒超期待新版Docker1.12的發表&lt;br /&gt;
等到了rc2，就迫不急待的試玩一下&lt;br /&gt;
因為安迪兒想把舊式的swarm換成新的docker swarm&lt;br /&gt;
就這樣一路從Docker1.12 rc2 rc3 rc4都玩了一遍&lt;br /&gt;
(因為不少問題和bug，所以才會一直試到rc4 &amp;hellip;orz)&lt;/p&gt;

&lt;p&gt;終於今天Docker v1.12.0正式定版&lt;br /&gt;
Docker大大們開發的能量超強大&lt;br /&gt;
每一版都更新很快，也修了一大堆東西~XD&lt;br /&gt;
&lt;a href=&#34;https://github.com/docker/docker/releases&#34;&gt;https://github.com/docker/docker/releases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;既然Docker v1.12定版了&lt;br /&gt;
安迪兒也馬上全新安裝&lt;br /&gt;
順便記錄一下和分享試用Docker 1.12的心得&lt;/p&gt;

&lt;h4 id=&#34;這次的docker增加不少新功能&#34;&gt;[這次的docker增加不少新功能]&lt;/h4&gt;

&lt;h4 id=&#34;swarm&#34;&gt;Swarm&lt;/h4&gt;

&lt;p&gt;安迪兒其實是為了這個功能&lt;br /&gt;
才會一直的在try
因為舊版的Swarm其實有點麻煩&lt;br /&gt;
要建置Consul Key Store daemon&lt;br /&gt;
要建overlay的網路&lt;br /&gt;
還要再自已寫一堆腳本去監控和偵測狀態和處理的方式&lt;/p&gt;

&lt;p&gt;而新版的docker 1.12整合了Swarm&lt;br /&gt;
也有了新的swarm cluster使用和管理方式&lt;br /&gt;
大大的簡化了整個的流程&lt;/p&gt;

&lt;h4 id=&#34;新的功能&#34;&gt;新的功能:&lt;/h4&gt;

&lt;h4 id=&#34;docker-service-stack-cloud&#34;&gt;Docker Service、Stack、Cloud&lt;/h4&gt;

&lt;p&gt;整合stack與service的管理，可以使用deploy把stack部署到cloud上&lt;/p&gt;

&lt;h4 id=&#34;health-check&#34;&gt;Health check&lt;/h4&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/docker/docker/pull/23218&#34;&gt;https://github.com/docker/docker/pull/23218&lt;/a&gt;&lt;br /&gt;
可以自訂節點的健康&lt;br /&gt;
&amp;ndash;health-cmd (health用的指令檔)&lt;br /&gt;
&amp;ndash;health-interval (health的秒數)&lt;br /&gt;
然後用一般的docker inspect就可以查詢check的結果&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;docker inspect --format=&#39;&#39; xxname healthy
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&#34;live-restore&#34;&gt;Live restore&lt;/h4&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/docker/docker/pull/23213&#34;&gt;https://github.com/docker/docker/pull/23213&lt;/a&gt;&lt;br /&gt;
啟動時增加這個參數，daemon掛了也不會影響到container
&amp;ndash;live-restore&lt;/p&gt;

&lt;h4 id=&#34;overlay2&#34;&gt;overlay2&lt;/h4&gt;

&lt;p&gt;&lt;a href=&#34;https://github.com/docker/docker/pull/22126&#34;&gt;https://github.com/docker/docker/pull/22126&lt;/a&gt;&lt;br /&gt;
裡面有benchmark的數據可以參考一下&lt;/p&gt;

&lt;p&gt;其它還有很多細的東西、指令、參數之類&lt;br /&gt;
有興趣的，可以多查查官方的說明&lt;br /&gt;
看了這些，應該手癢了吧&lt;/p&gt;

&lt;p&gt;[實作時間到嘍!]&lt;/p&gt;

&lt;h4 id=&#34;1-安裝新版docker-for-1-12&#34;&gt;1. 安裝新版docker for 1.12&lt;/h4&gt;

&lt;p&gt;參考這頁的說明&lt;br /&gt;
&lt;a href=&#34;https://github.com/docker/docker/releases&#34;&gt;https://github.com/docker/docker/releases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;執行安裝指令&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl -fsSL https://experimental.docker.com/ | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt;sudo usermod -aG docker andy
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/EMIf5a&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/zogzGo&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;2-玩玩container的叢集-建一個swarm來玩玩吧&#34;&gt;2. 玩玩Container的叢集，建一個swarm來玩玩吧&lt;/h4&gt;

&lt;p&gt;首先在master機器上，建立管理的節點&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;docker swarm init --listen-addr docker112-swarm-admin:2377
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/ymP7Z4&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;再來，在其它台node機器上輸入&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;docker swarm join \
 --token SWMTKN-1-55xrvnhhax0eqc0hi4iu6aihh8msqvlfjdgqetaqvlf8qm4n0z-7ekdghz9an5d4jpx4ibdaigtx \
 10.240.0.3:2377
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/CjM4D4&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
都加入叢集後，可以在主節點master那台，查一下所有的node&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;docker node ls
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/hPGhT6&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;看看，超神奇的，就這樣一個跨機器的Container cluster就立完成了&lt;br /&gt;
這是不是docker的 &lt;strong&gt;黑魔法&lt;/strong&gt; 吶~~~太可怕了，合併swarm後簡化許多繁雜的東西&lt;/p&gt;

&lt;h4 id=&#34;3-新增自已用的network&#34;&gt;3. 新增自已用的network&lt;/h4&gt;

&lt;p&gt;用docker network 建立一個自已的overlay來玩玩&lt;br /&gt;
建完並指定Container的overlay後，Container就能視為同網段，跨各種機器運行了&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;docker network create --driver overlay bowwow-net  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/xY51ig&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;4-來見識一下讓大家瘋狂的docker-service威力吧&#34;&gt;4. 來見識一下讓大家瘋狂的Docker Service威力吧&lt;/h4&gt;

&lt;p&gt;建個postgresql database，直接replicas 2台&lt;br /&gt;
2台都是同樣的database&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;docker service create --replicas 2 -p 5432:5432 -p 8000:5432 --name=postgresql --network=bowwow-net --env=&amp;quot;constraint:node==docker-swarm-node1&amp;quot; --mount type=volume,source=/home/app/metadb,target=/var/lib/postgresql -e POSTGRESQL_USER=postgres -e POSTGRESQL_PASS=1234 -e POSTGRESQL_DB=demodb bowwow/posttgresql9.4
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt;docker service ls
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/Vb5Xax&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;可以看到postgresql啟動完成，2台分散在不同的機器上&lt;/p&gt;

&lt;p&gt;直接來玩一下，2台機器的postgresql同時都能連上&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/6W7Eox&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;隨便改一下其中一台，建一個新的table&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/6W7Eox&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;過一會另一台就跟都同步了&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/gWsS1S&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
而且因為用了bowwow-net的關係&lt;br /&gt;
開三台機器，三台機器都能互相找的到&lt;br /&gt;
也就是說，連上3台機器的ip，都能接上這個postgresql db&lt;br /&gt;
但這個postgresql db是分散成2個Container在跑&lt;br /&gt;
&lt;strong&gt;docker都幫你做了ha、scale和cluster了&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;只能說:超~&lt;del&gt;神&lt;/del&gt;~的!!!&lt;/strong&gt;&lt;/p&gt;

&lt;h5 id=&#34;隨興的新增和刪除container節點&#34;&gt;隨興的新增和刪除Container節點&lt;/h5&gt;

&lt;pre&gt;&lt;code&gt;docker service ps postgresql
docker service scale postgresql=3
docker service scale postgresql=1
docker service update --replicas 2 postgresql
&lt;/code&gt;&lt;/pre&gt;

&lt;h5 id=&#34;新版docker有rolling-update服務&#34;&gt;新版docker有rolling update服務&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;&amp;ndash;update-delay&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;他會慢慢的更版，不會一次都換掉&lt;br /&gt;
ex:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;docker service create \
  --replicas 3 \
  --name redis \
  --update-delay 10s \
  redis:3.0.6
&lt;/code&gt;&lt;/pre&gt;

&lt;h5 id=&#34;試一下swarm-container-cluster移轉的功能&#34;&gt;試一下Swarm Container Cluster移轉的功能&lt;/h5&gt;

&lt;p&gt;惡意關掉刪除其中一台的postgresql Container&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/xVWrW9&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/EiFWMM&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;果然夠優~馬上又自動的在別台機器上重啟了一個相同的服務&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;一次開10個來玩玩吧&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/fDCI28&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;不想要服務了，刪除它&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;docker service rm postgresql
docker service ls
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/pYzbDR&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;新的Docker以上這些功能&lt;br /&gt;
跟本就是有k8s(Kubernetes)的影子&lt;br /&gt;
連相關指令名稱都有點相近&lt;br /&gt;
難怪大家整個看到傻眼，進化後的Docker太強大了。&lt;/p&gt;

&lt;h4 id=&#34;5-部署docker-stack&#34;&gt;5. 部署Docker Stack&lt;/h4&gt;

&lt;p&gt;大致上看起來&lt;br /&gt;
新的docker swarm像是用service就可以處理&amp;amp;管理相關的container服務&lt;br /&gt;
如果想用之前compose之類的一次啟動管理的方式呢??
安迪兒找了找，發現docker有一個deploy的相關功能&lt;br /&gt;
看了他文字上有說，要用dab來部署&lt;br /&gt;
忍不住好奇試了一下&lt;br /&gt;
真的是可以用&lt;/p&gt;

&lt;p&gt;首先，先裝上最新版的docker-compose(1.8)&lt;br /&gt;
參考這頁&lt;br /&gt;
&lt;a href=&#34;https://github.com/docker/compose/releases&#34;&gt;https://github.com/docker/compose/releases&lt;/a&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` &amp;gt; /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/6dB7jy&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;編寫一下docker-compose file&lt;br /&gt;
啟動它，成功後，可以再自行下指令bundle成dab檔&lt;br /&gt;
再使用docker deploy去部署&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo docker-compose up -d
sudo docker-compose bundle -o elk.dab
docker deploy elk
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/Jfuq9q&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/FlZqKI&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/mqRVTu&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;看一下結果吧&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/Cr71Mu&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/QERLf3&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;呼&amp;hellip;終於，東西實在太多了，安迪就也沒辦法一次說完試完&lt;br /&gt;
總之，這次的docker 1.12非常的強大&lt;br /&gt;
如果想要有較簡易的，除了k8s或mesos另外選擇的&lt;br /&gt;
也許考慮一下原生的docker看看嘍&lt;br /&gt;
應該不會失望的~~~XD&lt;br /&gt;
收工嘍~收工嘍!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>在NAS上把IPAD Air2當小電腦</title>
      <link>https://bowwow.tips/projects/IsAppleRemotWorkingForIpadAir/</link>
      <pubDate>Wed, 15 Jun 2016 00:00:00 +0000</pubDate>
      
      <guid>https://bowwow.tips/projects/IsAppleRemotWorkingForIpadAir/</guid>
      <description>

&lt;p&gt;有時候出門在外，或是在客廰，其實會有點懶的拿筆電&lt;br /&gt;
剛好IPAD很方便攜帶&lt;br /&gt;
因此安迪兒想說試著用IPAD來打打文章&lt;br /&gt;
玩玩windows10&lt;/p&gt;

&lt;p&gt;試玩一下覺的還不賴&lt;br /&gt;
安迪兒就把IPAD當小電腦用了~XD&lt;/p&gt;

&lt;p&gt;步驟如下:&lt;/p&gt;

&lt;h3 id=&#34;首先在nas上裝上虛擬機station&#34;&gt;首先在nas上裝上虛擬機station&lt;/h3&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/kxiAbE&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/n0Xrpt&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h5 id=&#34;設定一張新的網路卡&#34;&gt;設定一張新的網路卡&lt;/h5&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/07ZWOM &#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h5 id=&#34;建立機器&#34;&gt;建立機器&lt;/h5&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/snmRWz&#34; width=&#34;100%&#34;&gt;
&lt;img src=&#34;https://goo.gl/lT73Bi&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h5 id=&#34;設定windows10&#34;&gt;設定windows10&lt;/h5&gt;

&lt;p&gt;安裝完成後，可以使用安裝時設定的vnc網頁連線進虛擬機&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/NYQsvg&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/zaGvSD&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h5 id=&#34;設定遠端連線&#34;&gt;設定遠端連線&lt;/h5&gt;

&lt;p&gt;安迪兒大約試了一下連線軟體
splashtop、teamviewer、chrome remote desktop、微軟原生的Remote Desktop&lt;/p&gt;

&lt;h5 id=&#34;最後選用&#34;&gt;最後選用&lt;/h5&gt;

&lt;p&gt;在家時用splashtop(較方便)&lt;br /&gt;
出門在咖啡廰時用Chrome遠端連線(google帳號認證安全性較高)&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/ReLjzJ&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/OwXtmI&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;安迪兒這邊用chrome的遠端連線&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/BeYt28&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;讓ipad和藍芽鍵盤連線&#34;&gt;讓IPAD和藍芽鍵盤連線&lt;/h4&gt;

&lt;p&gt;順利的話，再加上遠端連線&lt;br /&gt;
應該就可以在上面打打字&lt;br /&gt;
看看word、網頁之類的&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/crKJRO&#34; width=&#34;100%&#34;&gt;&lt;img src=&#34;https://goo.gl/Ax9qMc&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/9C7LNo&#34; width=&#34;100%&#34;&gt;&lt;img src=&#34;https://goo.gl/v3LeLL&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;滑鼠呢&#34;&gt;滑鼠呢?&lt;/h4&gt;

&lt;p&gt;大家都知道的IPAD不支援滑鼠&lt;br /&gt;
除非JB安裝第三方相關藍芽套件&lt;/p&gt;

&lt;p&gt;這時好的遠端軟體就很重要了&lt;br /&gt;
一般大多是用手指直接當滑鼠點&lt;/p&gt;

&lt;p&gt;在自家的話，安迪兒是NAS上外接USB滑鼠&lt;br /&gt;
然後把USB設定給裡面windows10&lt;/p&gt;

&lt;p&gt;設定好後滑鼠移動，遠端桌面裡的指標也會跟著移動&lt;br /&gt;
感覺有慢一些些，不過還ok啦有像在用滑鼠的fu&lt;br /&gt;
用NAS上的虛擬機這類需求都超方便的~XD&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/THlDL2&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;因為在NAS上，其實win10不用理會它&lt;br /&gt;
不用特別關機，放著就可以了&lt;br /&gt;
在家或在外面IPAD隨時透過連線&lt;br /&gt;
就馬上連回來使用了&lt;/p&gt;

&lt;p&gt;不用再帶筆電出門，整個就還蠻方便的~&lt;br /&gt;
(IPAD PRO應該更大更好用吧)&lt;br /&gt;
(本篇文章是在IPAD上完成的~XD)&lt;br /&gt;
以上!收工嘍~&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>微軟windows10更新擁抱linux系統-win10 ubuntu shell</title>
      <link>https://bowwow.tips/post/20160610/</link>
      <pubDate>Tue, 14 Jun 2016 00:00:00 +0000</pubDate>
      
      <guid>https://bowwow.tips/post/20160610/</guid>
      <description>

&lt;p&gt;微軟在今年3月Build 2016開發者大會，拋出了一個震撼彈&lt;br /&gt;
就是windows10竟然可以使用ubuntu的bash shell&lt;br /&gt;
而且不是虛擬機器，是原生的!&lt;br /&gt;
(微軟馬上洗白變好人了~XD)&lt;/p&gt;

&lt;p&gt;這實在太有話題了，微軟當時有說今年夏季會提供相關更新&lt;br /&gt;
直到最近這陣子，安迪兒發現有新的win10 Preview版本&lt;br /&gt;
Link:&lt;br /&gt;
&lt;a href=&#34;https://blogs.windows.com/windowsexperience/2016/04/06/announcing-windows-10-insider-preview-build-14316/&#34;&gt;Windows 10 Insider Preview Build 14316&lt;/a&gt;&lt;br /&gt;
&lt;a href=&#34;http://winaero.com/blog/download-windows-10-build-14316-iso-images/&#34;&gt;Download Windows 10 build 14316 ISO images&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;這太有趣了，安迪兒立馬試玩一下~XD&lt;/p&gt;

&lt;h5 id=&#34;記錄一下win10開啟ubuntu-shell的方式&#34;&gt;記錄一下win10開啟ubuntu shell的方式&lt;/h5&gt;

&lt;h4 id=&#34;1-開啟開發人員功能模式&#34;&gt;1. 開啟開發人員功能模式&lt;/h4&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/2yLSWP&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/GQcVyg&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;2-控制台-程式和功能-程式集-windows功能&#34;&gt;2. 控制台-&amp;gt;程式和功能-&amp;gt;程式集-&amp;gt;windows功能&lt;/h4&gt;

&lt;h4 id=&#34;勾選-windows-subsystem-for-linux&#34;&gt;勾選[windows subsystem for linux]&lt;/h4&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/s6skUd&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
 &lt;img src=&#34;https://goo.gl/DhBw4g&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;3-執行bash-直接用尋找bash並執行它&#34;&gt;3. 執行bash 直接用尋找bash並執行它&lt;/h4&gt;

&lt;p&gt;(download&amp;amp;安裝 &lt;strong&gt;Bash on ubuntu on windows&lt;/strong&gt;)&lt;br /&gt;
  &lt;img src=&#34;https://goo.gl/hCkJsE&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
  &lt;img src=&#34;https://goo.gl/5bdD4k&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;4-搜尋-執行-裝好的bash-on-ubuntu-on-windows&#34;&gt;4. 搜尋&amp;amp;執行 裝好的Bash on Ubuntu on Windows&lt;/h4&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/5tVky4&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;噢&#34;&gt;噢！！！！！&lt;/h4&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/qjL2qO&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;太開心了吶-xd&#34;&gt;太開心了吶~XD&lt;/h4&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/s0heJC&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;原來在shell裡面windows的東西在這-很特別的感覺-xd&#34;&gt;原來在shell裡面windows的東西在這，很特別的感覺~XD&lt;/h4&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/tkpBwe&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;win10 build 14316真是太帥氣了吶~~&lt;/strong&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>免費開啟MAC正常讀寫入NTFS磁碟</title>
      <link>https://bowwow.tips/post/20160608/</link>
      <pubDate>Mon, 13 Jun 2016 00:00:00 +0000</pubDate>
      
      <guid>https://bowwow.tips/post/20160608/</guid>
      <description>

&lt;h2 id=&#34;為啥隨身碟寫不進去&#34;&gt;為啥隨身碟寫不進去!&lt;/h2&gt;

&lt;p&gt;在mac上碰到了windows ntfs格式的磁碟其實是件有點小煩人的事&lt;br /&gt;
偏偏ntfs又是大宗，大部份拿隨身碟copy檔案都是ntfs格式&lt;/p&gt;

&lt;p&gt;mac對於ntfs預設都是只能讀取不能寫入&lt;br /&gt;
(不知道用意是啥~XD)&lt;/p&gt;

&lt;p&gt;想要寫入ntfs隨身碟，都要裝一些FUSE還是Paragon NTFS等軟體&lt;br /&gt;
除了要付費之外，寫入的速度也不快&lt;/p&gt;

&lt;p&gt;之前安迪兒有看到文章說mac其實本身系統有內建NTFS的讀寫&lt;br /&gt;
試了一下，果然是真的XD~&lt;/p&gt;

&lt;h5 id=&#34;記錄一下過程&#34;&gt;&amp;lt;記錄一下過程&amp;gt;&lt;/h5&gt;

&lt;h4 id=&#34;1-接上隨身碟-打開終端機&#34;&gt;1. 接上隨身碟，打開終端機&lt;/h4&gt;

&lt;p&gt;輸入mount，看一下隨身碟mount的路徑&lt;br /&gt;
下圖是&lt;strong&gt;/dev/disk3s1&lt;/strong&gt;掛在&lt;strong&gt;/Volumes/16G&lt;/strong&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/5C0Uj3&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;2-umount一下目前掛的路徑&#34;&gt;2. umount一下目前掛的路徑&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;sudo umount /Volumes/16G  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/QmOs4U&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;3-建立新的資料匣-等會用來掛隨身碟用&#34;&gt;3. 建立新的資料匣，等會用來掛隨身碟用&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;mkdir /tmp/usb16G  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/g76QvJ&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;4-重掛一次usb磁區到剛建的資料匣上&#34;&gt;4. 重掛一次usb磁區到剛建的資料匣上&lt;/h4&gt;

&lt;p&gt;(就是這邊，重掛一次ntfs，並指定為rw可讀寫)&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo mount -o rw,auto,nobrowse -t ntfs /dev/disk3s1 ./usb16g/
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/wVjuyx&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;5-ok嘍-打開一下資料匣-copy檔案進去試試&#34;&gt;5. ok嘍，打開一下資料匣，copy檔案進去試試&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;open .
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/XYmkLp&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;6-最後如果不用時-記得umount一下&#34;&gt;6. 最後如果不用時，記得umount一下&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;sudo umount /private/tmp/usb16G
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/5bzvr4&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;以上~~收工嘍~XD&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>刪掉惱人的Mac .DS_Store文件</title>
      <link>https://bowwow.tips/post/20160607/</link>
      <pubDate>Tue, 07 Jun 2016 00:00:00 +0000</pubDate>
      
      <guid>https://bowwow.tips/post/20160607/</guid>
      <description>

&lt;p&gt;使用mac筆電的，應該都有個切身之痛&lt;br /&gt;
就是只要用Finder進過的資料匣&lt;br /&gt;
都會自動生出一個&lt;strong&gt;.DS_Store&lt;/strong&gt;檔&lt;/p&gt;

&lt;p&gt;真的是超煩的&lt;br /&gt;
不論是git上code、&lt;br /&gt;
ftp傳輸、或是資料匣copy&lt;br /&gt;
一不注意，裡面總是會有這個檔&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;.DS_Store&lt;/strong&gt;檔有點像是&lt;br /&gt;
Windows上的&lt;strong&gt;desktop.ini&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;安迪兒這邊記錄一下停用這個惱人的檔案&lt;/p&gt;

&lt;h4 id=&#34;1-搜尋-刪除mac裡所有的-ds-store-檔&#34;&gt;1. 搜尋&amp;amp;刪除mac裡所有的&lt;strong&gt;.DS_Store&lt;/strong&gt;檔&lt;/h4&gt;

&lt;p&gt;打開「Terminal終端機」&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo find . -name &amp;quot;.DS_Store&amp;quot; -depth -exec rm {} \;  
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&#34;2-禁止-ds-store生成&#34;&gt;2. 禁止.DS_store生成&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;defaults write com.apple.desktopservices DSDontWriteNetworkStores true  
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&#34;3-恢復-ds-store生成&#34;&gt;3. 恢復.DS_store生成&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;defaults delete com.apple.desktopservices DSDontWriteNetworkStores  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;開掉終端機，重開mac後就會生效了&lt;br /&gt;
收工嘍~&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>修改Ubuntu ulimit限制</title>
      <link>https://bowwow.tips/post/20160604/</link>
      <pubDate>Sat, 04 Jun 2016 00:00:00 +0000</pubDate>
      
      <guid>https://bowwow.tips/post/20160604/</guid>
      <description>

&lt;p&gt;安迪兒最近在壓測時碰上了&lt;br /&gt;
Too many open files in system&lt;/p&gt;

&lt;p&gt;看了一下gce上機器的資源其實還好&lt;br /&gt;
應該可以再榨一點效能出來&lt;br /&gt;
想說檔案數再開大一點試試&lt;/p&gt;

&lt;p&gt;記錄一下調整的方式&lt;br /&gt;
先登入看一下系統預設數量是多少&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ulimit -n
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;嗯~1024，應該可以再開多一些&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/yEVVY6&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;改一下數字&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo ulimit -n 65535  
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&#34;呃-command-not-found&#34;&gt;呃~command not found&lt;/h4&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/6yAXrv&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;sudo無法執行ulimit&lt;br /&gt;
原因是ulimit是bash内置命令&lt;br /&gt;
改一下用su -，再輸入ulimit&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;su -  
ulimit -n 65536  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;查一下改完後的數量，應該ok了&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ulimit -n
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/CPrByn&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;以上手動設定，&lt;strong&gt;重開機後會消失~XD&lt;/strong&gt;&lt;/p&gt;

&lt;h4 id=&#34;安迪兒查了一些開機自動設定的方式&#34;&gt;安迪兒查了一些開機自動設定的方式&lt;/h4&gt;

&lt;p&gt;記錄一下最後試的設定&lt;/p&gt;

&lt;h4 id=&#34;1-修改-etc-security-limits-conf&#34;&gt;1. 修改/etc/security/limits.conf&lt;/h4&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/Tg5nxZ&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;* soft nofile 65535   
* hard nofile 65535
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&#34;2-修改-etc-pam-d-common-session&#34;&gt;2.修改 /etc/pam.d/common-session&lt;/h4&gt;

&lt;p&gt;加上這行&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;session required pam_limits.so  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/muLvxD&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;3-編輯-etc-profile&#34;&gt;3.編輯/etc/profile&lt;/h4&gt;

&lt;p&gt;加上ulimit -SHn 65535&lt;/p&gt;

&lt;h4 id=&#34;4-收工了-重啟一下&#34;&gt;4.收工了，重啟一下&lt;/h4&gt;

&lt;pre&gt;&lt;code&gt;sudo reboot  
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 id=&#34;5-看看有沒效&#34;&gt;5.看看有沒效&lt;/h4&gt;

&lt;p&gt;查一下ulimit&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ulimit -a  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/jNIRG5&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;看來這樣就ok了&lt;br /&gt;
以上!收工嘍~&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>匯入匯出MongoDB資料成JSON CSV檔案</title>
      <link>https://bowwow.tips/post/20160601/</link>
      <pubDate>Wed, 01 Jun 2016 00:00:00 +0000</pubDate>
      
      <guid>https://bowwow.tips/post/20160601/</guid>
      <description>

&lt;p&gt;前陣子安迪兒剛好碰到要匯出mongodb資料&lt;br /&gt;
需要轉csv給其它人員使用&lt;br /&gt;
查了一下，發現mongodb直接有支援資料匯出成json、csv格式&lt;br /&gt;
(超強XD)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;兩者的區別：&lt;/strong&gt;&lt;br /&gt;
- JSON 是 mongoexport 默認的匯出格式，不需要指定&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CSV 格式需要明確指定欄位屬性名&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;一般大多使用json，特殊需求像是需要用到excel之類的文件編輯的，會比較偏向使用csv格式。&lt;br /&gt;
參考以下官方文件&lt;/p&gt;

&lt;p&gt;[mongoexport]&lt;br /&gt;
&lt;a href=&#34;https://docs.mongodb.com/master/reference/program/mongoexport&#34;&gt;https://docs.mongodb.com/master/reference/program/mongoexport&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[mongoimport]&lt;br /&gt;
&lt;a href=&#34;https://docs.mongodb.com/manual/reference/program/mongoimport/#use&#34;&gt;https://docs.mongodb.com/manual/reference/program/mongoimport/#use&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;安迪兒貼一下用的指令&lt;/p&gt;

&lt;h3 id=&#34;匯出&#34;&gt;匯出:&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;mongodb collection指定欄位匯出資料轉csv&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mongoexport --host localhost --db xxdata --collection unknown_data --username xx --password xx --csv --out text.csv --fields _id,lang,pinyin,artists,phonetic,hash_code,created_at,title,vocal_track,filename,hash_method,words
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;mongodb collection資料匯出轉json&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mongoexport --host localhost -d xxdata -c unknown_songs -u xxuser -p xxpassword -o output.json

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/FP6y0y&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h3 id=&#34;匯入&#34;&gt;匯入:&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;測試一下匯入&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mongoimport  --host localhost --db xxdata --collection test --username xx --password xx --type csv --headerline --file ./text.csv
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/54DixU&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;附上mongo-db-dump-restore資料庫&#34;&gt;附上mongo db dump &amp;amp; restore資料庫&lt;/h4&gt;

&lt;p&gt;全部db dump&amp;amp;restore&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mongodump -h localhost -u xx -p xx -d metadata -o ./dump  

mongorestore -h localhost -u xx -p xx -d metadata --directoryperdb ./dump  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;單一collection回復&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mongodump -h localhost -u xx -p xx -d metadata --collection unknown_songs  

mongorestore -h localhost -u xx -p x -d metadata --collection test ./dump/metadata/unknown_songs.bson  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;一些參數&lt;/strong&gt;&lt;br /&gt;
- -h：mongo位址&lt;br /&gt;
- -d：db name&lt;br /&gt;
- &amp;ndash;directoryperdb：dump的目錄&lt;br /&gt;
- &amp;ndash;drop：restore時，先刪掉資料再恢復&lt;/p&gt;

&lt;p&gt;以上~~收工嘍!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>2016 Computex 直擊
(台北國際電腦展)</title>
      <link>https://bowwow.tips/projects/computex2016/</link>
      <pubDate>Tue, 31 May 2016 00:00:00 +0000</pubDate>
      
      <guid>https://bowwow.tips/projects/computex2016/</guid>
      <description>

&lt;p&gt;日期：5/31（二）至 6/4（六）&lt;br /&gt;
地點：南港展覽館、世貿一館、世貿三館、國際會議中心&lt;/p&gt;

&lt;p&gt;2016的台北國際電腦展熱鬧登場了&lt;br /&gt;
安迪兒超愛這類的電腦展~XD&lt;/p&gt;

&lt;p&gt;會場可以看到各家廠商無不費盡心力&lt;br /&gt;
使出所有招數，展示新的成果來爭取國外的訂單&lt;br /&gt;
所以都會有一些新潮和有趣的東西&lt;/p&gt;

&lt;p&gt;因為今年是VR元年&lt;br /&gt;
大家都狂推VR的展示和應用&lt;br /&gt;
安迪兒當然也不能放過，一定要進去參觀增見識的&lt;/p&gt;

&lt;p&gt;國際電腦展的前幾天都是針對國外的廠商和商務客戶開放&lt;br /&gt;
最後一天會開放給一般民眾參觀&lt;/p&gt;

&lt;p&gt;第一天早上10點多外面其實就排滿了超多的外國人&lt;br /&gt;
整個很熱鬧ＸＤ&lt;/p&gt;

&lt;p&gt;安迪兒和同事們開心的來到另一個入口&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/fn7rRl&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/C3ORK6&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;剛開展就看到了這隻軟銀的機器人&lt;br /&gt;
(這也是大會服務人員之一嗎?)&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/lzywyM&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;再來是看到和安迪兒同名的高檔POWER&lt;br /&gt;
(所以有點高級~大誤)&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/kvRS1j&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;然後安迪兒看到了超大瓶的液態氮嗎?&lt;br /&gt;
可能要噴5天，所以特別大罐&lt;br /&gt;
(嘴角抖了一下…這，玩這麼大喔)&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/p7VHcN&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;旁邊是他們家的模特兒&lt;br /&gt;
而且很特別的都是外國人&lt;/p&gt;

&lt;p&gt;大家果然是一陣狂照&lt;br /&gt;
(福利吶~~廠商成功吸睛了XD)&lt;/p&gt;

&lt;p&gt;安迪兒照完相，覺的液態氮有點大瓶，所以還是閃遠點好了~XD&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/JBTqGX&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;展示會場中也看到一堆改裝超漂亮的電腦&lt;br /&gt;
水冷、雙顯卡、多色led燈、拉拉熊、鋼彈造型&lt;br /&gt;
整個造型超酷炫的&lt;br /&gt;
好讚吶~~&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/w7xNjN&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/gzTMtN&#34; width=&#34;50%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/90B3Ti&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/rC5Uyt&#34; width=&#34;50%&#34;&gt;
&lt;img src=&#34;https://goo.gl/dRwYB2&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/syAthz&#34; width=&#34;50%&#34;&gt;
&lt;img src=&#34;https://goo.gl/er13Jo&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/aMClEn&#34; width=&#34;50%&#34;&gt;
&lt;img src=&#34;https://goo.gl/QgDI5n&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/Chn7tz&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;不忘貼一下廠商們水水的&lt;strong&gt;模特兒&lt;/strong&gt;~XD&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/dYPcpR&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/swuOF4&#34; width=&#34;50%&#34;&gt;
&lt;img src=&#34;https://goo.gl/6il5UR&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/DKvdRB&#34; width=&#34;50%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/S3PdY6&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/GYBZOF&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;這是v-color的場，蠻熱鬧的&lt;br /&gt;
後面一些老外在大喊「Yes!Yes!」&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/7ERtsV&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;一些有趣造型的佈景&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/8HdFtH&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/YZPlRR&#34; width=&#34;50%&#34;&gt;
&lt;img src=&#34;https://goo.gl/hi5ja7&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/UhOYgd&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;h3 id=&#34;今年主題vr虛擬實境超熱的&#34;&gt;今年主題VR虛擬實境超熱的&lt;/h3&gt;

&lt;p&gt;看一下會場各家有趣的VR應用&lt;/p&gt;

&lt;h4 id=&#34;oculus-玩一下球類小遊戲&#34;&gt;Oculus 玩一下球類小遊戲&lt;/h4&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/QivOyn&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/csNIVJ&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;htc-vive-這個蠻有趣的&#34;&gt;HTC VIVE 這個蠻有趣的&lt;/h4&gt;

&lt;p&gt;營造出射擊實境的籠子&lt;br /&gt;
在裡面玩VR好有氣氛&lt;br /&gt;
(有生死格鬥的fu~~XD)&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/BXSZB3&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/WnkGiV&#34; width=&#34;50%&#34;&gt;
&lt;img src=&#34;https://goo.gl/ZfbLKF&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/VGW3E8&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;背包vr&#34;&gt;背包VR&lt;/h4&gt;

&lt;p&gt;HTV的VIVE VR因為有線的關係，所以難免會有點覺的有時會踩到&lt;br /&gt;
把主機放到背包裡玩，是個很好的點子，感覺受限制比較少&lt;br /&gt;
模擬一下登山、攀岩，背上背包應該蠻有臨場感的&lt;br /&gt;
(可能主機不能太重就是了~XD)&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/BKHD9W&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;背上就變成外國VR背包客~好健康吶XD&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/U23qVb&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/Fq4BPx&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;降落傘vr&#34;&gt;降落傘VR&lt;/h4&gt;

&lt;p&gt;這個有猛!!&lt;br /&gt;
感覺像是極限運動&lt;br /&gt;
直接把人上架子，模擬操控降落傘飛行&lt;br /&gt;
一般要玩又有點貴的飛行傘，這時也可以靠VR來體驗一下&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/ib7pME&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/wxvS7g&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;qnap-nas-vr&#34;&gt;QNAP NAS VR&lt;/h4&gt;

&lt;p&gt;這個也超猛的!!&lt;/p&gt;

&lt;p&gt;全場都是一般PC裝上VR&lt;br /&gt;
QNAP是把它弄到家用NAS上&lt;br /&gt;
還可以多成員使用&lt;br /&gt;
一邊看電影一邊玩VR&lt;br /&gt;
以後的應用應該指日可待~XD&lt;/p&gt;

&lt;p&gt;剛好有人在採訪&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/h0yQU6&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;World&amp;rsquo;s First VR Ready NAS&lt;br /&gt;
 &lt;img src=&#34;https://goo.gl/MepDgp&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/iEscfL&#34; width=&#34;50%&#34;&gt;
 &lt;img src=&#34;https://goo.gl/wfVn8H&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/TAOFHy&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;順便看了一下NAS旁邊的iot之類的東西&lt;br /&gt;
 &lt;img src=&#34;https://goo.gl/1TXOrI&#34; width=&#34;50%&#34;&gt;
 &lt;img src=&#34;https://goo.gl/EtrUK6&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;nas和raspberry pi的一些小實驗&lt;/strong&gt;&lt;br /&gt;
 &lt;img src=&#34;https://goo.gl/nVA61o&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;再來是今天另一個重點&lt;br /&gt;
 ASUS在今天實機發表的&lt;strong&gt;Zenbo機器人&lt;/strong&gt;&lt;br /&gt;
 號稱一隻高階手機的價格(2萬內)&lt;br /&gt;
 你家就有可愛的&lt;strong&gt;家庭機器人管家&lt;/strong&gt;&lt;br /&gt;
 (長相有點無辜呀)&lt;/p&gt;

&lt;p&gt;下午1點開始發表&lt;br /&gt;
 12點多舞台前就擠滿了人&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/eMT3BX&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/S699HY&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;喔喔!出現了!&lt;br /&gt;
2位主持人模擬在家裡和Zenbo聊天&lt;br /&gt;
叫Zenbo開電視，開購物網站之類的&lt;/p&gt;

&lt;p&gt;大家都拿起相機、錄影機狂拍&lt;br /&gt;
Zenbo可是比展場的模特兒們還紅吶&lt;br /&gt;
~~XD&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/IHXXMP&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/9zEu2L&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/nbpLlZ&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/GVpqEE&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;iframe width=&#34;420&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/rMcKexy2cO0&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;    

&lt;p&gt;看完Zenbo，安迪兒跑去其它地方晃晃&lt;br /&gt;
看到的一些有趣的東西&lt;/p&gt;

&lt;p&gt;安迪兒蠻歡這個Vive音樂VR&lt;br /&gt;
這個老外正在配各種有趣的音樂~XD&lt;br /&gt;
&lt;iframe width=&#34;420&#34; height=&#34;315&#34; src=&#34;https://www.youtube.com/embed/yy5fIYSkX8k&#34; frameborder=&#34;0&#34; allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;

&lt;p&gt;防水的手持裝置、透明螢幕的廣告箱子&lt;br /&gt;
販賣機、高速照相的裝置&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/MgyFHe&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/nR00OC&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/UDKSxN&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/ruHsTj&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;手機的空拍機、多視角的賽車、倉庫搬貨用的智慧搬運機&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/EpjGXG&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/CAa1Ih&#34; width=&#34;50%&#34;&gt;
&lt;img src=&#34;https://goo.gl/hf3a7X&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/4MpWlD&#34; width=&#34;50%&#34;&gt;
&lt;img src=&#34;https://goo.gl/VuKPrv&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/0rDZFq&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;另外又看到一個有趣的產品&lt;br /&gt;
asus的光碟機&lt;strong&gt;ZenDrive&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;這個光碟機很特別，除了隨身攜帶、木紋還&lt;strong&gt;支援android&lt;/strong&gt;&lt;br /&gt;
也就是說他支援手機播放，超妙的~XD&lt;/p&gt;

&lt;p&gt;ZenDrive的上蓋打開裡面還可以放一片光碟片&lt;br /&gt;
(愛好音樂，收集cd的人應該會很愛它吧!)&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/6Wexvo&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/stGrMF&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;其它還有投影機、感測器、工研院UV LED殺菌的環保筷(這超受注目的)&lt;/p&gt;

&lt;p&gt;Kickstarter上有名的辦公桌上魚菜共生系統「香草與魚」&lt;br /&gt;
醫療上使用看x光片的電腦…等等&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/ngynIn&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/utnk7z&#34; width=&#34;50%&#34;&gt;
&lt;img src=&#34;https://goo.gl/I5kVgD&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/2VYgXg&#34; width=&#34;50%&#34;&gt;
&lt;img src=&#34;https://goo.gl/0AFV5R&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/yMREbU&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;另外還有老牌機殼廠商&lt;strong&gt;聯力&lt;/strong&gt;打造的電腦桌&lt;br /&gt;
他真的是&lt;strong&gt;電腦桌&lt;/strong&gt;&lt;br /&gt;
整個電腦放在桌子裡，桌面上是透明玻璃&lt;br /&gt;
桌子本身有自動升降的調整，外觀超高級又大方&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/XdmwHw&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/i1cfAM&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;安迪兒還有去試一下邊寫程式邊踏飛輪的椅子&lt;br /&gt;
還真是不錯，感覺寫程式有靈感~XD&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/XLTx8m&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/Rrx3m2&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;有一位老外Maker做了一台遙控推土機&lt;br /&gt;
可以投球，用xbox的控制器遙控&lt;/p&gt;

&lt;p&gt;同事大竹很開心的上去和那位老外玩了好一陣子&lt;br /&gt;
(很熱情的老外Maker喔^^)&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/qiZF6T&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/UCrEe5&#34; width=&#34;50%&#34;&gt;
&lt;img src=&#34;https://goo.gl/OpnlLB&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/b00FVS&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;最後在&lt;strong&gt;Benq&lt;/strong&gt;那，安迪兒一群人被騎車的健身教練叫住&lt;br /&gt;
一時好奇，大家就一起去體驗&lt;br /&gt;
Benq結合物聯網雲端健身的概念&lt;/p&gt;

&lt;p&gt;一群人就都坐上腳踏車&lt;br /&gt;
教練幫大家調整車子後&lt;br /&gt;
大家就開始狂踩、或是拍照&lt;br /&gt;
另外手上會有&lt;strong&gt;Benq&lt;/strong&gt;的感測手環&lt;/p&gt;

&lt;p&gt;前方畫面會有即時數據顯示&lt;br /&gt;
車輪可以調輕重，所以不用怕太累踩不動&lt;br /&gt;
(安迪兒有偷偷調輕~XD)&lt;/p&gt;

&lt;p&gt;教練很貼心的怕我們一群太無聊&lt;br /&gt;
也跟著上腳踏車陪我們一群人踩&lt;br /&gt;
然後說&lt;strong&gt;「要踏一小時喔!!!」&lt;/strong&gt;&lt;br /&gt;
(安迪兒聽到這，車輪調更輕了~~~XD)&lt;/p&gt;

&lt;p&gt;最後教練嚇完我們之後，和我們說一點會有比賽&lt;br /&gt;
&lt;strong&gt;「到時來比賽吧!」&lt;/strong&gt;&lt;br /&gt;
(馬上落跑XD)&lt;/p&gt;

&lt;p&gt;一起連線運動的過程還蠻有趣的&lt;br /&gt;
在家裡面如果也能有這樣的備配，就太完美了!&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/hsLE7I&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/5aiWoH&#34; width=&#34;50%&#34;&gt;
&lt;img src=&#34;https://goo.gl/OwtlAJ&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/P2azkt&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;玩完腳踏車後&lt;br /&gt;
順便看了一下旁邊Benq的概念商店&lt;br /&gt;
整間店的東西都有連線&lt;br /&gt;
在商品那掃描，前面櫃檯的電子看板就會列出商品之類的訊息&lt;br /&gt;
(客制化支援各種平台直接付款或是掃QRcode去前面結帳之類的)&lt;br /&gt;
然後再走到前面，此時老闆娘就在櫃檯包裝好禮品給你嘍&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/QZtPgm&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/LyO5YO&#34; width=&#34;50%&#34;&gt;
&lt;img src=&#34;https://goo.gl/UuNl1t&#34; width=&#34;50%&#34;&gt;&lt;img src=&#34;https://goo.gl/S7g0NQ&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;p&gt;最後試玩的差不多了&lt;br /&gt;
安迪兒一群人心滿意足的要離開嘍!&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/OUP3SL&#34; width=&#34;50%&#34;&gt;&lt;/p&gt;

&lt;h4 id=&#34;結論&#34;&gt;結論:&lt;/h4&gt;

&lt;p&gt;這次的&lt;strong&gt;2016 Computex&lt;/strong&gt;展覽&lt;br /&gt;
安迪兒逛的超開心的&lt;br /&gt;
看到很多有趣的東西，也試玩了不少東西&lt;br /&gt;
今年熱門的VR、四軸也都好好的玩了一輪&lt;br /&gt;
真是賺到了~XD&lt;/p&gt;

&lt;h4 id=&#34;一起期待明年2017的展出吧&#34;&gt;一起期待明年2017的展出吧&lt;/h4&gt;
</description>
    </item>
    
    <item>
      <title>關於MongoDB設定權限</title>
      <link>https://bowwow.tips/post/20160531/</link>
      <pubDate>Tue, 31 May 2016 00:00:00 +0000</pubDate>
      
      <guid>https://bowwow.tips/post/20160531/</guid>
      <description>&lt;p&gt;大家在使用MongoDB，裝完預設其實是沒設定權限的&lt;br /&gt;
因為MongoDB預設你不會對外開放&lt;br /&gt;
一般是會鎖定只給api的機器讀取資料&lt;br /&gt;
但…有資料庫就一定會有權限&lt;br /&gt;
所以遇上要使用帳號密碼登入時要怎辦&lt;br /&gt;
這邊安迪兒記錄一下使用的方式&lt;br /&gt;
大至分為幾個步驟&lt;br /&gt;
1、設定一個管權限的使用者&lt;br /&gt;
2、設定要開放MongoDB的使用者
3、關掉MongoDB，改換用權限啟動的參數，重新啟動MongoDB&lt;/p&gt;

&lt;p&gt;1.首先登入MongoDB&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mongo  
use admin ;
db.createUser(
{
user: &amp;quot;xx&amp;quot;,
pwd: &amp;quot;xx&amp;quot;,
roles: [ { role: &amp;quot;userAdminAnyDatabase&amp;quot;, db: &amp;quot;metadata&amp;quot; } ]
}
);
show users;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;2.再來設定一下要開放帳號密碼的metadata db&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;use metadata;
{
user: &amp;quot;xx&amp;quot;,
pwd: &amp;quot;xx&amp;quot;,
roles: [ { role: &amp;quot;dbOwner&amp;quot;, db: &amp;quot;metadata&amp;quot; } ]
};
show users;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/H8RmtH&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;弄完了就下exit離開MongoDB的shell吧&lt;br /&gt;
查一下mongo的process&lt;br /&gt;
然後kill它&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ps aux | grep mongo
sudo kill xxx
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;3.最後重啟一下MongoDB，帶上權限的參數，完成嘍 !&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mongod --auth
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;試一下帳號是否可登入&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;mongo --port 27017 -u &amp;quot;xx&amp;quot; -p &amp;quot;xx&amp;quot; --authenticationDatabase &amp;quot;admin&amp;quot;

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/uPPmL9&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;另外記錄一下admin資料庫的其它特殊權限&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;readAnyDatabase &amp;gt; 讀取所有資料庫
readWriteAnyDatabase &amp;gt; 讀寫所有資料庫
userAdminAnyDatabase &amp;gt; 管理所有資料庫使用者
dbAdminAnyDatabase &amp;gt; 所有資料庫的管理者
root &amp;gt; 最高權限
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;以上~~收工嘍!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>PostgreSQL的備份與復原</title>
      <link>https://bowwow.tips/post/20160530/</link>
      <pubDate>Mon, 30 May 2016 00:00:00 +0000</pubDate>
      
      <guid>https://bowwow.tips/post/20160530/</guid>
      <description>&lt;p&gt;安迪兒最較常用到PostgreSQL備資料倒資料&lt;br /&gt;
記錄一下操作的方式&lt;/p&gt;

&lt;p&gt;1、備份data&lt;br /&gt;
PostgreSQL內建使用&lt;strong&gt;pg_dump&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;pg_dump [資料庫名] -U [帳號] -f [備份檔案.sql]

另一種備份整個db的  
 pg_dump -h x.x.x.x -p 5432 -U admin -F c -b -v -f &amp;quot;xx.dbf&amp;quot; xxdatabase
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt;pg_dump meta_development -U posxxx -f postgres-db-20160530.sql  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/LEwRb1&#34; width=&#34;70%&#34;&gt;&lt;/p&gt;

&lt;p&gt;2、還原
PostgreSQL內建使用&lt;strong&gt;psql&lt;/strong&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;psql -f [備份檔案名稱] [資料庫] [帳號]  

還原整個db的   
pg_restore -h x.x.x.x -p 5432 -U admin -d xxdatabase -v &amp;quot;xx.dbf&amp;quot;  
&lt;/code&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;code&gt;psql -f xx.sql test posxxx
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/CL69Hh&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;看一下是不是有把資料回灌到test database了&lt;br /&gt;
嗯~~資料已經進去原來的test嘍&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/ExCJDm&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;其它:設定不輸入密碼&lt;br /&gt;
1.  /etc/profile.local 加上&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;export PGPASSWORD=&amp;quot;密碼&amp;quot;  
&lt;/code&gt;&lt;/pre&gt;

&lt;ol&gt;
&lt;li&gt;使用者的家目錄($HOME)下，新增一個.pgpass檔&lt;br /&gt;
&lt;code&gt;
hostname:port:database:username:password   
&lt;/code&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;差別是第2種可以指定特定的database不輸入密碼&lt;/p&gt;

&lt;p&gt;以上~~收工嘍!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Qnap nas掛上遠端Synology磁碟資料</title>
      <link>https://bowwow.tips/post/20160518/</link>
      <pubDate>Wed, 18 May 2016 00:00:00 +0000</pubDate>
      
      <guid>https://bowwow.tips/post/20160518/</guid>
      <description>

&lt;p&gt;安迪兒新的qnap NAS剛整理完所有資料，&lt;br /&gt;
剩下一些新的資料都放在原舊的Synology nas上&lt;/p&gt;

&lt;p&gt;安迪兒想掛上別台nas的samba磁區，然後再對拷檔案&lt;br /&gt;
但…安迪兒發現，qnap的nas怎麼設定都沒辦法掛上Synology的samba磁碟&lt;br /&gt;
～囧&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/E8n9kz&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/mhh1rD&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;查了一下，發現好像有人有反應這件事~XD&lt;/p&gt;

&lt;p&gt;安迪兒試了一下發現可以直接用指令mount上Synology的samba磁碟資料&lt;br /&gt;
貼一下過程&lt;/p&gt;

&lt;p&gt;首先SSH登入nas&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ssh admin@x.x.x.x
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;找個資料匣準備掛上別台nas的samba&lt;br /&gt;
安迪兒這邊建了一個共用的資料匣叫tmp&lt;br /&gt;
裡面打算掛Synology的照片和電影2個資料匣&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cd /share/CACHEDEV1_DATA/tmp
mkdir video photo
mount.cifs //10.0.0.7/video -o user=xx password=xx
mount.cifs //10.0.0.7/photo -o user=xx password=xx  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/IK5ocL&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;掛完後使用nas上File Station打開資料匣，開始狂copy資料到新nas上吧&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/W9AdwQ&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;邊copy data邊看一下效能&lt;br /&gt;
嗯&amp;hellip;網路每秒約100MB，碟碟IOPS 快300&lt;br /&gt;
還ok啦&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;https://goo.gl/LgNJqj&#34; width=&#34;100%&#34;&gt;&lt;br /&gt;
&lt;img src=&#34;https://goo.gl/tHGykJ&#34; width=&#34;100%&#34;&gt;&lt;/p&gt;

&lt;p&gt;copy完umount一下&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;umount ./video ./photo  
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;copy完資料後，新nas也差不多完整了&lt;br /&gt;
可以開心的接電視直播電影了&lt;br /&gt;
(有hdmi接電視的nas好讚呀~xd)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;記錄一些mount方式&lt;/strong&gt;&lt;br /&gt;
比較新的Smaba只能用cifs的mount方式&lt;/p&gt;

&lt;h5 id=&#34;smbmount&#34;&gt;[smbmount]&lt;/h5&gt;

&lt;pre&gt;&lt;code&gt;smbmount -o username=&amp;quot;xx&amp;quot;,password=&amp;quot;xx&amp;quot; //ip/share /mnt/smb

smbumount /mnt/smb
&lt;/code&gt;&lt;/pre&gt;

&lt;h5 id=&#34;mount&#34;&gt;[mount]&lt;/h5&gt;

&lt;pre&gt;&lt;code&gt;mount -t smbfs -o username=&amp;quot;xx&amp;quot;,password=&amp;quot;xx&amp;quot; //ip/share /mnt/smb  

umount /mnt/smb  
&lt;/code&gt;&lt;/pre&gt;

&lt;h5 id=&#34;cifs&#34;&gt;[cifs]&lt;/h5&gt;

&lt;pre&gt;&lt;code&gt;mount -t cifs -o username=&amp;quot;xx&amp;quot;,password=&amp;quot;xx&amp;quot; //ip/share /mnt/smb
umount /mnt/smb

mount.cifs -o username=&amp;quot;xx&amp;quot;,password=&amp;quot;xx&amp;quot; //ip/share /mnt/smb
umount.cifs /mnt/smb
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;以上~~收工嘍!&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>