<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-11853313141499009</id><updated>2017-08-01T08:56:48.295+08:00</updated><category term="程式-app-android"/><category term="keyword-git"/><category term="電腦-命令-git"/><category term="程式-web-html5"/><category term="閱讀-日記-生活"/><category term="keyword-html5"/><category term="休閒-開箱"/><category term="閱讀-食物"/><category term="電腦-設定-mac"/><category term="keyword-cordova"/><category term="keyword-docker"/><category term="keyword-php"/><category term="keyword-rsa"/><category term="電腦-設定-docker"/><category term="電腦-設定-homebrew"/><category term="電腦-設定-nodejs"/><category term="keyword-caskroom"/><category term="keyword-ionic"/><category term="keyword-jquery"/><category term="keyword-mongodb"/><category term="keyword-proxy"/><category term="keyword-ssh"/><category term="keyword-svn"/><category term="keyword-windows"/><category term="keyword-wordpress"/><category term="無分類"/><category term="程式-語言-php"/><category term="電腦-命令-svn"/><category term="電腦-命令-vim"/><category term="電腦-設定-aws"/><category term="電腦-設定-eclipse"/><category term="電腦-設定-mongodb"/><category term="電腦-設定-sublime"/><category term="電腦-設定-virtualbox"/><category term="centos"/><category term="keyword-brew"/><category term="keyword-chrome"/><category term="keyword-css"/><category term="keyword-homebrew"/><category term="keyword-mac"/><category term="keyword-nat"/><category term="keyword-nginx"/><category term="keyword-plurk"/><category term="keyword-sign"/><category term="keyword-terminal"/><category term="keyword-uglify"/><category term="keyword-vdi"/><category term="keyword-virtualbox"/><category term="程式-web-css"/><category term="電腦-命令-vboxmanage"/><category term="電腦-設定-apache"/><category term="電腦-設定-nginx"/><category term="電腦-設定-proxy"/><category term="電腦-設定-ubuntu"/><category term="電腦-設定-wordpress"/><category term="UNIX-Like"/><category term="bonobo"/><category term="crash"/><category term="epoccam"/><category term="gnome"/><category term="ip"/><category term="jquery-selectOption"/><category term="keyword- raspberry pi"/><category term="keyword-adt"/><category term="keyword-ajax"/><category term="keyword-alertdialog"/><category term="keyword-apk"/><category term="keyword-async_smtp"/><category term="keyword-audio"/><category term="keyword-authentication"/><category term="keyword-aws"/><category term="keyword-cakephp"/><category term="keyword-camera"/><category term="keyword-canvas"/><category term="keyword-cloudwatch"/><category term="keyword-compact"/><category term="keyword-container"/><category term="keyword-dalvik"/><category term="keyword-deep link"/><category term="keyword-dialog"/><category term="keyword-disk usage"/><category term="keyword-e2fsck"/><category term="keyword-ec2"/><category term="keyword-firewall"/><category term="keyword-forever"/><category term="keyword-fsck"/><category term="keyword-gulp"/><category term="keyword-highlight"/><category term="keyword-http"/><category term="keyword-https"/><category term="keyword-icon"/><category term="keyword-idle"/><category term="keyword-iptables"/><category term="keyword-iterm2"/><category term="keyword-javascript"/><category term="keyword-kamailio"/><category term="keyword-keep alive"/><category term="keyword-keytool"/><category term="keyword-lint"/><category term="keyword-linux"/><category term="keyword-localstorage"/><category term="keyword-m3u8"/><category term="keyword-media"/><category term="keyword-memo usage"/><category term="keyword-minify"/><category term="keyword-mongoose"/><category term="keyword-monokai"/><category term="keyword-nvm"/><category term="keyword-openurl"/><category term="keyword-optimize"/><category term="keyword-orientation"/><category term="keyword-partition"/><category term="keyword-pear"/><category term="keyword-pecl"/><category term="keyword-pm2"/><category term="keyword-progressdialog"/><category term="keyword-proguard"/><category term="keyword-psp"/><category term="keyword-ptz"/><category term="keyword-rdp"/><category term="keyword-redmine"/><category term="keyword-requirejs"/><category term="keyword-resizefs"/><category term="keyword-restartpolicy"/><category term="keyword-reverse proxy"/><category term="keyword-root"/><category term="keyword-rpaf"/><category term="keyword-screen"/><category term="keyword-sip"/><category term="keyword-so"/><category term="keyword-ssl"/><category term="keyword-stream"/><category term="keyword-swap"/><category term="keyword-twitch"/><category term="keyword-ubuntu"/><category term="keyword-unzip"/><category term="keyword-url scheme"/><category term="keyword-uuid"/><category term="keyword-version control"/><category term="keyword-viewport"/><category term="keyword-vim"/><category term="keyword-vitamio"/><category term="keyword-vm"/><category term="keyword-vmimport"/><category term="keyword-vpn"/><category term="keyword-vpngate"/><category term="keyword-websocket"/><category term="keyword-wifi"/><category term="keyword-xlinkkai"/><category term="keyword-zip"/><category term="kinoni"/><category term="linux"/><category term="network"/><category term="script"/><category term="skype"/><category term="ubuntu"/><category term="utf8"/><category term="休閒-紀念"/><category term="休閒-遊戲-英雄聯盟"/><category term="程式-app-cordova"/><category term="程式-app-ionic"/><category term="程式-web-canvas"/><category term="程式-web-jquery"/><category term="程式-語言-nodejs"/><category term="閱讀-日記-心情"/><category term="電腦-命令-forever"/><category term="電腦-命令-nvm"/><category term="電腦-命令-zip"/><category term="電腦-設定-android"/><category term="電腦-設定-chrome"/><category term="電腦-設定-ctags"/><category term="電腦-設定-iptables"/><category term="電腦-設定-php"/><category term="電腦-設定-pi"/><category term="電腦-設定-ptz"/><category term="電腦-設定-rdp"/><category term="電腦-設定-redmine"/><category term="電腦-設定-robomongo"/><category term="電腦-設定-sip"/><category term="電腦-設定-ssh"/><category term="電腦-設定-swap"/><category term="電腦-設定-wifi"/><title type='text'>MoA&#39;s 糟糕生活</title><subtitle type='html'>關於電腦技術的一些筆記</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.moa.tw/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>112</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-5961723897362396398</id><published>2017-08-01T08:56:00.002+08:00</published><updated>2017-08-01T08:56:48.302+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-aws"/><title type='text'>取得EC2 instance的instance id</title><content type='html'>&lt;br /&gt;&lt;br /&gt;由於使用的 Amazon CloudWatch Monitoring Scripts for Linux 在建置新環境後會有 cache 在 `/var/tmp/aws-mon` 下&lt;br /&gt;&lt;br /&gt;如果 instance id 改了會造成 aws-mon 回報錯的 id 回去導致新機器沒有資料&lt;br /&gt;&lt;br /&gt;解決辦法可以刪除 `/var/tmp/aws-mon/instance-id` 這個檔案或是透過以下指令取代為新的&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;bash&quot;&gt;&lt;code&gt;&lt;br /&gt;$ wget -q -O - http://169.254.169.254/latest/meta-data/instance-id &gt; /var/tmp/aws-mon&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;除此之外 http://169.254.169.254 裡面還藏了很多資訊&lt;br /&gt;&lt;br /&gt;可以參考 &lt;a href=&quot;http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html&quot;&gt;http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/5961723897362396398/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2017/08/ec2-instanceinstance-id.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/5961723897362396398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/5961723897362396398'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2017/08/ec2-instanceinstance-id.html' title='取得EC2 instance的instance id'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-5806504959006204546</id><published>2017-06-01T14:45:00.001+08:00</published><updated>2017-06-01T15:16:05.875+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-kamailio"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-sip"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-sip"/><title type='text'>在 ubuntu 中建置 kamailio 伺服器</title><content type='html'>&lt;br /&gt;kamailio 是一款 sip server 可以用來做 voip 網路語音通話&lt;br /&gt;&lt;br /&gt;他們前身是 OpenSER, 也有分支 Opensips&lt;br /&gt;&lt;br /&gt;在這邊介紹如何在 ubuntu 14.04 建置 kamailio&lt;br /&gt;&lt;!- more -&gt;&lt;br /&gt;&lt;br /&gt;由於個人比較偏好直接用別人打包好的套件做安裝，剛好官網也有提供 http://deb.kamailio.org/&lt;br /&gt;&lt;br /&gt;安裝 kamailio&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;# 使用 apt-get 安裝&lt;br /&gt;echo &quot;deb http://deb.kamailio.org/kamailio trusty main&quot; &gt;&gt; /etc/apt/sources.list&lt;br /&gt;echo &quot;deb-src http://deb.kamailio.org/kamailio trusty main&quot; &gt;&gt; /etc/apt/sources.list&lt;br /&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install kamailio&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;記得安裝 mysql modules&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install kamailio-mysql-modules kamailio-tls-modules&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;編輯 /etc/kamailio/kamailio.cfg&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;# #!開頭的會是 kamailio 的 script 語法, 在這邊定義啟用 mysql 跟用 db 做認證&lt;br /&gt;#!define WITH_MYSQL&lt;br /&gt;#!define WITH_AUTH&lt;br /&gt;&lt;br /&gt;# 把機器自己的 public ip 設成一個 alias&lt;br /&gt;alias=&quot;aws public ip&quot;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;設定 db&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;# 編輯 /etc/kamailio/kamctlrc&lt;br /&gt;&lt;br /&gt;SIP_DOMAIN=aws public ip&lt;br /&gt;DBENGINE=MYSQL&lt;br /&gt;DBHOST=localhost&lt;br /&gt;DBNAME=kamailio&lt;br /&gt;DBRWUSER=&quot;kamailio&quot;&lt;br /&gt;DBRWPW=&quot;kamailiorw&quot;&lt;br /&gt;DBROUSER=&quot;kamailioro&quot;&lt;br /&gt;DBROPW=&quot;kamailioro&quot;&lt;br /&gt;DBROOTUSER=&quot;root&quot;&lt;br /&gt;USERCOL=&quot;username&quot;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;初始化 db&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;kamdbctl create&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;新增帳號&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;kamctl add 1000 1000 #kamctl add 帳號 密碼&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;全部設完記得重啟&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;sudo /etc/init.d/kamailio restart&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;sip客戶端:&lt;br /&gt;&lt;br /&gt;android 5: linphone、ECOA Sip&lt;br /&gt;android 6: linphone、sipdroid&lt;br /&gt;iOS: linphone&lt;br /&gt;macOS: YateClient</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/5806504959006204546/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2017/06/ubuntu-kamailio.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/5806504959006204546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/5806504959006204546'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2017/06/ubuntu-kamailio.html' title='在 ubuntu 中建置 kamailio 伺服器'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-8451552341629795416</id><published>2017-05-22T09:41:00.000+08:00</published><updated>2017-05-22T09:42:29.726+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-swap"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-swap"/><title type='text'>在 ubuntu 中建立 swap</title><content type='html'>&lt;br /&gt;1. 建立 swap 檔&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;sudo fallocate -l 1G /data/swap&lt;br /&gt;sudo chmod 600 /data/swap&lt;br /&gt;sudo mkswap /data/swap&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2. 編輯 /etc/fstab 加入系統啟動自動掛載&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;/data/swap none swap defaults 0 0&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3. 自動掛載 fstab 設定的 swap&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;sudo swapon -a&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4. 查詢 swap&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;swapon -s&lt;br /&gt;# 或&lt;br /&gt;free&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/8451552341629795416/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2017/05/ubuntuswap.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/8451552341629795416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/8451552341629795416'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2017/05/ubuntuswap.html' title='在 ubuntu 中建立 swap'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-7132451087650748648</id><published>2017-04-19T13:55:00.001+08:00</published><updated>2017-04-19T13:58:37.780+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-pear"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-pecl"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-php"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-so"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-php"/><title type='text'>手動編譯 php *.so 檔</title><content type='html'>&lt;br /&gt;由於在同一環境中有不同版本的 php 同時運作&lt;br /&gt;&lt;br /&gt;所以舊版 php 的 shared object 套件無法使用 pecl/pear 安裝&lt;br /&gt;&lt;br /&gt;那就自己 build 吧&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;以下以 mongo 為例:&lt;br /&gt;&lt;br /&gt;https://pecl.php.net/package/mongo&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;# 下載 source code&lt;br /&gt;$ wget https://pecl.php.net/get/mongo-1.6.14.tgz&lt;br /&gt;&lt;br /&gt;# 解壓縮&lt;br /&gt;$ tar zxvf mongo-1.6.14.tgz &amp;&amp; cd mongo-1.6.14&lt;br /&gt;&lt;br /&gt;$ phpize&lt;br /&gt;&lt;br /&gt;# 設定並指定 php 環境&lt;br /&gt;$ ./configure --with-php-config=/usr/bin/php-config5&lt;br /&gt;&lt;br /&gt;# 開始編譯&lt;br /&gt;$ make&lt;br /&gt;&lt;br /&gt;# 把編好的 so 放到特定的位置&lt;br /&gt;$ cp modules/mongo.so /usr/lib/php5/20xxxxxx+lfs/&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;記得安裝 php devel 套件先啊&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;# php5.4&lt;br /&gt;$ apt-get install php5-dev&lt;br /&gt;&lt;br /&gt;# php5.6&lt;br /&gt;$ apt-get install php-dev &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/7132451087650748648/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2017/04/php-so.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/7132451087650748648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/7132451087650748648'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2017/04/php-so.html' title='手動編譯 php *.so 檔'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-4387730162481273546</id><published>2016-11-29T11:49:00.002+08:00</published><updated>2016-11-29T11:53:18.003+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-async_smtp"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-redmine"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-redmine"/><title type='text'>解決 redmine 在創建/更新 issue 時很慢的方法</title><content type='html'>&lt;br /&gt;&lt;br /&gt;公司內部的 redmine 一直以來都有一個很令人詬病的問題 --速度很慢，導致大家興趣缺缺&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;這幾天終於拿到了登入的權限，有空就來檢查一下&lt;br /&gt;&lt;br /&gt;因為是用 bitnami 安裝的所以有一大堆 built-in 的套件&lt;br /&gt;&lt;br /&gt;apache2, php-fpm 等的一一檢查過了還是無法解決&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;最終發現是卡在送 email 時&lt;br /&gt;&lt;br /&gt;由於當初設定是用 :smtp 方式&lt;br /&gt;&lt;br /&gt;所以在創建/更新 issue 時&lt;br /&gt;&lt;br /&gt;會以同步方式等到 email 傳送完成網頁才會回應&lt;br /&gt;&lt;br /&gt;導致每次都會 delay 約 3 秒&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;解決辦法修改 config/configuration.yml 把它改成 :async_smtp 如下:&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;email_delivery:&lt;br /&gt;  delivery_method: :async_smtp&lt;br /&gt;  async_smtp_settings:&lt;br /&gt;    enable_starttls_auto: true&lt;br /&gt;    address: &quot;xxxxxxxx&quot;&lt;br /&gt;    port: &#39;25&#39;&lt;br /&gt;    domain: &quot;xxxxxx&quot;&lt;br /&gt;    authentication: :plain&lt;br /&gt;    user_name: &quot;xxxx&quot;&lt;br /&gt;    password: &quot;&quot;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;參考:&lt;br /&gt;http://www.redmine.org/projects/redmine/wiki/FAQ#17&lt;br /&gt;http://www.redmine.org/projects/redmine/wiki/EmailConfiguration&lt;br /&gt;http://www.redmine.org/issues/12649</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/4387730162481273546/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/11/redmine-issue.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/4387730162481273546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/4387730162481273546'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/11/redmine-issue.html' title='解決 redmine 在創建/更新 issue 時很慢的方法'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-5799009796797547207</id><published>2016-09-26T09:41:00.001+08:00</published><updated>2016-09-26T09:41:38.523+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-docker"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-nginx"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-docker"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-nginx"/><title type='text'>docker nginx reload</title><content type='html'>&lt;br /&gt;&lt;br /&gt;根據&lt;a href=&quot;https://blog.docker.com/2015/04/tips-for-deploying-nginx-official-image-with-docker/&quot;&gt;官方blog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;當 nginx 設定檔更動時, 你不能直接執行 nginx reload, 但幸好 nginx 支援特定 signal 去做 reload&lt;br /&gt;&lt;br /&gt;/etc/init.d/nginx reload&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;sudo docker kill -s HUP &lt;container_name&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;/etc/init.d/nginx restart&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;sudo docker restart &lt;container_name&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/5799009796797547207/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/09/docker-nginx-reload.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/5799009796797547207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/5799009796797547207'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/09/docker-nginx-reload.html' title='docker nginx reload'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-7013051070449969064</id><published>2016-08-22T09:32:00.001+08:00</published><updated>2016-08-22T09:32:30.469+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-ec2"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-vmimport"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-aws"/><title type='text'>將虛擬機器映像檔 匯入AWS EC2</title><content type='html'>&lt;br /&gt;&lt;br /&gt;由於必須必須把映像檔上傳至 S3 上才能建立 EC2 的 AMI&lt;br /&gt;&lt;br /&gt;所以我們先在S3上建立一個 bucket&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;aws s3api create-bucket --bucket vm-image&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;將映像檔上傳至 S3&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;aws s3 cp ~/ubuntu.ova s3://vm-image/&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;建立一個名為 vmimport 的 role&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;aws iam create-role --role-name vmimport&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;condition 要改為&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&quot;sts:Externalid&quot;:&quot;vmimport&quot;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;開始匯入囉&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;aws ec2 import-image --cli-input-json &quot;{ \&quot;Description\&quot;: \&quot;Ubuntu\&quot;, \&quot;Format\&quot;: \&quot;ova\&quot;, \&quot;UserBucket\&quot;: { \&quot;S3Bucket\&quot;: \&quot;vm-image\&quot;, \&quot;S3Key\&quot;: \&quot;Ubuntu.ova\&quot; } }&quot;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;之後就是等等等, 當然可以查進度&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;aws ec2 describe-import-image-tasks --import-task-ids import-ami-xxxxxxxxxx&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;完成後就會在你的EC2的AMIs看到image囉&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Reference:&lt;br /&gt;http://docs.aws.amazon.com/vm-import/latest/userguide/import-vm-image.html#import-vm&lt;br /&gt;http://docs.aws.amazon.com/vm-import/latest/userguide/vmimport-image-import.html</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/7013051070449969064/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/08/aws-ec2.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/7013051070449969064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/7013051070449969064'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/08/aws-ec2.html' title='將虛擬機器映像檔 匯入AWS EC2'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-4223992451447114879</id><published>2016-07-18T08:49:00.001+08:00</published><updated>2016-07-18T08:49:23.665+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-docker"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-docker"/><title type='text'>docker 解決 container mount檔案</title><content type='html'>&lt;br /&gt;&lt;br /&gt;目前在操作 docker 上會遇到一個問題:&lt;br /&gt;mount 某個檔案或某的目錄到 container 上後修改 host 上的擋案後 container 對應的擋案不會跟著變動&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;首先我們先stat一下這個奇怪的檔案&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;$ stat /data/ssl.conf; sudo docker exec -it yw stat /etc/nginx/conf.d/default.conf&lt;br /&gt;  File: ‘/data/xxxxxx.conf’&lt;br /&gt;  Size: 2138       Blocks: 8          IO Block: 4096   regular file&lt;br /&gt;Device: ca01h/51713d Inode: 795457      Links: 1&lt;br /&gt;Access: (0664/-rw-rw-r--)  Uid: ( 1000/  ubuntu)   Gid: ( 1000/  ubuntu)&lt;br /&gt;Access: 2016-07-15 03:40:45.503636999 +0000&lt;br /&gt;Modify: 2016-07-15 03:39:40.031636999 +0000&lt;br /&gt;Change: 2016-07-15 03:39:40.035636999 +0000&lt;br /&gt; Birth: -&lt;br /&gt;  File: &#39;/etc/nginx/xxxxxx.conf&#39;&lt;br /&gt;  Size: 2137       Blocks: 8          IO Block: 4096   regular file&lt;br /&gt;Device: ca01h/51713d Inode: 795460      Links: 0&lt;br /&gt;Access: (0664/-rw-rw-r--)  Uid: ( 1000/ UNKNOWN)   Gid: ( 1000/ UNKNOWN)&lt;br /&gt;Access: 2016-07-15 03:40:45.503636999 +0000&lt;br /&gt;Modify: 2016-07-15 03:39:40.031636999 +0000&lt;br /&gt;Change: 2016-07-15 03:39:40.035636999 +0000&lt;br /&gt; Birth: -&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;可以看到 Size, Inode, Links 都不一樣&lt;br /&gt;&lt;br /&gt;解決辦法有兩個步驟&lt;br /&gt;&lt;br /&gt;1. 重新啟動docker&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;$ docker restart lol_server&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2. 修改你的 .vimrc 設定, 加入以下一行&lt;br /&gt;&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;&lt;br /&gt;set backupcopy=yes&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/4223992451447114879/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/07/docker-container-mount.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/4223992451447114879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/4223992451447114879'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/07/docker-container-mount.html' title='docker 解決 container mount檔案'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-3557113304690787264</id><published>2016-07-18T08:41:00.000+08:00</published><updated>2016-07-18T08:41:13.547+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-docker"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-docker"/><title type='text'>docker container 預設加入 host 至 /etc/hosts</title><content type='html'>&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;從 docker v1.3.1 起&lt;br /&gt;docker支援了 --add-host 的參數可以再啟動時加入私有主機別名設定 (/etc/hosts)&lt;br /&gt;可參考 &lt;a href=&quot;https://docs.docker.com/v1.8/reference/run/#network-settings&quot;&gt;https://docs.docker.com/v1.8/reference/run/#network-settings&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;我們只要再docker啟動時加入 --add-host $NAME:$IP&lt;br /&gt;例如:&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;docker run -itd --restart=always --name lol_backend -p 80:80 -p $22:22 --add-host db:10.10.10.1 lol_backend&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;有多筆就加多個囉&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;docker run -itd --restart=always --name lol_backend -p 80:80 -p $22:22 --add-host db:10.10.10.1 --add-host db2:10.10.10.2 lol_backend&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/3557113304690787264/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/07/docker-container-host-etchosts.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/3557113304690787264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/3557113304690787264'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/07/docker-container-host-etchosts.html' title='docker container 預設加入 host 至 /etc/hosts'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-4747272741773430674</id><published>2016-07-01T09:40:00.003+08:00</published><updated>2016-07-01T09:42:52.907+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-container"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-docker"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-restartpolicy"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-docker"/><title type='text'>docker 如何修改 container 中的 RestartPolicy</title><content type='html'>&lt;br /&gt;&lt;br /&gt;如何修改 running 狀態的 container 的 RestartPolicy 呢&lt;br /&gt;&lt;br /&gt;docker 在 1.11 版中可以透過 update 去更新了&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;看一下我們現在的版本&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;docker -v&lt;br /&gt;Docker version 1.10.3, build 20f81dd&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;看來有點舊&lt;br /&gt;&lt;br /&gt;更新一下docker&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;$ sudo apt-get update&lt;br /&gt;$ sudo apt-get install docker-engine&lt;br /&gt;$ docker -v&lt;br /&gt;Docker version 1.11.2, build b9f10c9&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;很好, 變成 1.11.2 版了&lt;br /&gt;&lt;br /&gt;再來看一下現在的 RestartPolicy 設定是什麼&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;$ docker inspect -f &quot;{{.HostConfig.RestartPolicy.Name}}&quot; containerName&lt;br /&gt;no&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;我想要設定為 always&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;$ docker update --restart=always containerName&lt;br /&gt;containerName&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;再看一下設定是否有更改成功&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;$ docker inspect -f &quot;{{.HostConfig.RestartPolicy.Name}}&quot; containerName&lt;br /&gt;always&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;水啦～可以安心睡覺了</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/4747272741773430674/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/07/docker-container-restartpolicy.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/4747272741773430674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/4747272741773430674'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/07/docker-container-restartpolicy.html' title='docker 如何修改 container 中的 RestartPolicy'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-6997070941866044975</id><published>2016-06-29T14:17:00.000+08:00</published><updated>2016-06-29T14:18:10.723+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-brew"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-caskroom"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-homebrew"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-iterm2"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-mac"/><title type='text'>非管理員權限在透過 homebrew 安裝 iterm2</title><content type='html'>&lt;br /&gt;&lt;br /&gt;homebrew 又來拯救工程師啦～&lt;br /&gt;&lt;br /&gt;homebrew caskroom的安裝記得先參考以下兩篇:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://blog.moa.tw/2016/05/sublime-text-2-homebrew.html&quot;&gt;非管理員權限在 macOS 安裝 homebrew&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://blog.moa.tw/2016/05/homebrew-robomongo.html&quot;&gt;非管理員權限在透過 homebrew 安裝 robomongo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;安裝 iterm2 指令&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;brew cask install iterm2&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;這樣就完成了!!&lt;br /&gt;&lt;br /&gt;對了, 記得改成將主題改成 monokai&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://github.com/honomoa/monokai.terminal&quot;&gt;https://github.com/honomoa/monokai.terminal&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/6997070941866044975/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/06/homebrew-iterm2.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/6997070941866044975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/6997070941866044975'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/06/homebrew-iterm2.html' title='非管理員權限在透過 homebrew 安裝 iterm2'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-4316403725327210320</id><published>2016-06-21T09:19:00.000+08:00</published><updated>2016-06-22T18:57:55.441+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-vim"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-命令-vim"/><title type='text'>vim 游標背景</title><content type='html'>&lt;br /&gt;&lt;br /&gt;老了...看東西常常看不清楚...&lt;br /&gt;&lt;br /&gt;常常 vim 後找不到游標在哪一行&lt;br /&gt;&lt;br /&gt;這時候就該開啟 set cursorline 的功能&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;你可以在命令列模式直接打上&lt;br /&gt;&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;&lt;br /&gt;:set cursorline&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;或是編輯 .vimrc 加上一行&lt;br /&gt;&lt;pre class=&quot;vim&quot;&gt;&lt;code&gt;&lt;br /&gt;set cursorline&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/4316403725327210320/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/06/vim.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/4316403725327210320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/4316403725327210320'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/06/vim.html' title='vim 游標背景'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-1286298210455506969</id><published>2016-06-18T10:54:00.001+08:00</published><updated>2016-06-22T18:57:42.387+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-idle"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-keep alive"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-mac"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-ssh"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-terminal"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-ssh"/><title type='text'>如何讓你 macOS 的 terminal 連 SSH 不會自動斷線</title><content type='html'>&lt;br /&gt;&lt;br /&gt;這個問題困擾我一陣子了&lt;br /&gt;&lt;br /&gt;常常 ssh 看東西一陣子不動它後就會斷線&lt;br /&gt;&lt;br /&gt;以前在 windows 用的軟體有內建送出防 idle 的字元出去&lt;br /&gt;&lt;br /&gt;不過 macOS 的 terminal 似乎沒這麼聰明啊～&lt;br /&gt;&lt;br /&gt;今天找了3個解決方法&lt;br /&gt;&lt;br /&gt;這三個方法意思相同, 都是透過 ssh 軟體做設定, 只不過是在不同地方而已&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;1. 在 ssh 時加上參數&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;ssh -o ServerAliveInterval=10 yourssh.server&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2. 修改 ~/.ssh/config&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;ServerAliveInterval 10&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3. 修改 /etc/ssh/ssh_config&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;ServerAliveInterval 10&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;在沒有系統管理員權限時採用第2種方法是最方便的！</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/1286298210455506969/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/06/mac-terminal-ssh.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/1286298210455506969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/1286298210455506969'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/06/mac-terminal-ssh.html' title='如何讓你 macOS 的 terminal 連 SSH 不會自動斷線'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-3225540989101837661</id><published>2016-06-16T10:16:00.000+08:00</published><updated>2016-06-22T18:59:18.688+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-aws"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-cloudwatch"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-disk usage"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-memo usage"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-aws"/><title type='text'>利用 cloudwatch 監控 ec2 instance 的 記憶體/磁碟使用率</title><content type='html'>&lt;br /&gt;&lt;br /&gt;環境: Ubuntu 14.04&lt;br /&gt;&lt;br /&gt;1. 安裝相依套件&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;sudo apt-get install unzip libwww-perl libdatetime-perl&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;2. 下載 script&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;cd ~/&lt;br /&gt;curl http://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.1.zip -O&lt;br /&gt;unzip CloudWatchMonitoringScripts-1.2.1.zip&lt;br /&gt;rm CloudWatchMonitoringScripts-1.2.1.zip&lt;br /&gt;cd aws-scripts-mon&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3. 把 script 加到 cronjob 定期執行&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;*/5 * * * * ~/aws-scripts-mon/mon-put-instance-data.pl --mem-util --disk-space-util --disk-path=/ --from-cron&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;記得請先建立以下權限的 policy&lt;br /&gt;cloudwatch:GetMetricStatistics&lt;br /&gt;cloudwatch:ListMetrics&lt;br /&gt;cloudwatch:PutMetricData&lt;br /&gt;ec2:DescribeTags&lt;br /&gt;&lt;br /&gt;4. AWS 建立一個 IAM policy&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;json&quot;&gt;&lt;code&gt;&lt;br /&gt;{&lt;br /&gt;    &quot;Version&quot;: &quot;2012-10-17&quot;,&lt;br /&gt;    &quot;Statement&quot;: [&lt;br /&gt;        {&lt;br /&gt;            &quot;Sid&quot;: &quot;AwsScriptsMonCW&quot;,&lt;br /&gt;            &quot;Effect&quot;: &quot;Allow&quot;,&lt;br /&gt;            &quot;Action&quot;: [&lt;br /&gt;                &quot;cloudwatch:GetMetricStatistics&quot;,&lt;br /&gt;                &quot;cloudwatch:ListMetrics&quot;,&lt;br /&gt;                &quot;cloudwatch:PutMetricData&quot;&lt;br /&gt;            ],&lt;br /&gt;            &quot;Resource&quot;: [&lt;br /&gt;                &quot;*&quot;&lt;br /&gt;            ]&lt;br /&gt;        },&lt;br /&gt;        {&lt;br /&gt;            &quot;Sid&quot;: &quot;AwsScriptsMonEC2&quot;,&lt;br /&gt;            &quot;Effect&quot;: &quot;Allow&quot;,&lt;br /&gt;            &quot;Action&quot;: [&lt;br /&gt;                &quot;ec2:DescribeTags&quot;&lt;br /&gt;            ],&lt;br /&gt;            &quot;Resource&quot;: [&lt;br /&gt;                &quot;*&quot;&lt;br /&gt;            ]&lt;br /&gt;        }&lt;br /&gt;    ]&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;在這邊因為我們 ubuntu 是一個 ec2 instance 所以不用設定 AWSAccessKeyId 、 AWSSecretKey&lt;br /&gt;&lt;br /&gt;你可以在 &lt;a href=&quot;https://console.aws.amazon.com/cloudwatch/&quot;&gt;CloudWatch&lt;/a&gt; 的 Linux System Metrics 找到剛剛的 log 了&lt;br /&gt;&lt;br /&gt;記得設定 Alarm 阿</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/3225540989101837661/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/06/cloudwatch-ec2-instance.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/3225540989101837661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/3225540989101837661'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/06/cloudwatch-ec2-instance.html' title='利用 cloudwatch 監控 ec2 instance 的 記憶體/磁碟使用率'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-8859365650068087721</id><published>2016-06-15T14:18:00.001+08:00</published><updated>2016-06-27T17:25:58.579+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-brew"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-caskroom"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-homebrew"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-screen"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-homebrew"/><title type='text'>解決 macOS 的 screen 無法垂直分割問題</title><content type='html'>&lt;br /&gt;&lt;br /&gt;這個原因是因為我的 screen 版本是 4.00.04 貌似不支援 split -v&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;$ /usr/bin/screen -v&lt;br /&gt;Screen version 4.00.03 (FAU) 23-Oct-06&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;在 mac 下什麼事情用 homebrew 解決就對了&lt;br /&gt;&lt;br /&gt;安裝 screen&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;$ brew install homebrew/dupes/screen&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;如果你的 homebrew 是用非管理員權限安裝的&lt;br /&gt;&lt;br /&gt;那麼記得把 homebrew 的 bin path 加在原本 $PATH 的前面&lt;br /&gt;&lt;br /&gt;這樣在下 screen 的時候才不會找到系統下的喔&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;$ screen -v&lt;br /&gt;Screen version 4.03.01 (GNU) 28-Jun-15&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/8859365650068087721/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/06/macos-screen.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/8859365650068087721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/8859365650068087721'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/06/macos-screen.html' title='解決 macOS 的 screen 無法垂直分割問題'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-5681888458433595690</id><published>2016-05-05T08:29:00.000+08:00</published><updated>2016-06-22T19:02:19.380+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-mac"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-mac"/><title type='text'>在 macOS 中中文輸入時暫時切換英文</title><content type='html'>&lt;br /&gt;&lt;br /&gt;最近才開始使用 mac 系統，有很多地方都不熟悉&lt;br /&gt;&lt;br /&gt;今天心血來潮查了我心中的疑問 --為什麼我輸入中文穿插英文時都會是全形字型&lt;br /&gt;&lt;br /&gt;上網查了查 有！有方法&lt;br /&gt;&lt;br /&gt;原來輸入中想要穿插英數字時可以按 caps lock 就可以暫時輸入半形英數字囉&lt;br /&gt;&lt;br /&gt;再按一次 caps lock 就可以繼續輸入中文！！</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/5681888458433595690/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/05/macos.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/5681888458433595690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/5681888458433595690'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/05/macos.html' title='在 macOS 中中文輸入時暫時切換英文'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-6493875034065831812</id><published>2016-05-04T17:32:00.002+08:00</published><updated>2016-06-22T19:01:43.890+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-mongodb"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-mongoose"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-mongodb"/><title type='text'>mongoose 的 populate 用法</title><content type='html'>一直都有看過 populate 這個東西&lt;br /&gt;&lt;br /&gt;今天終於有時間研究&lt;br /&gt;&lt;br /&gt;首先我們有兩個 collection&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;User&lt;/b&gt;&lt;br /&gt;&lt;pre class=&quot;js&quot;&gt;&lt;code&gt;&lt;br /&gt;var schema   = new Schema({&lt;br /&gt;    name: {type: String},&lt;br /&gt;    gender: {type: String},&lt;br /&gt;    old: {type: Number},&lt;br /&gt;    books: [{&lt;br /&gt;        bookId: {type: ObjectId, ref: &#39;Book&#39;}&lt;br /&gt;    }],&lt;br /&gt;    modified: {type: Date, default: Date.now}&lt;br /&gt;});&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Book&lt;/b&gt;&lt;br /&gt;&lt;pre class=&quot;js&quot;&gt;&lt;code&gt;&lt;br /&gt;var schema   = new Schema({&lt;br /&gt; name: {type: String},&lt;br /&gt; year: {type: Number},&lt;br /&gt; ISDN: {type: String},&lt;br /&gt; price: {type: Number},&lt;br /&gt; // ownerUserId: [{type: ObjectId, ref: &#39;User&#39;}],&lt;br /&gt; modified: {type: Date, default: Date.now}&lt;br /&gt;});&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;使用方法：&lt;br /&gt;&lt;pre class=&quot;js&quot;&gt;&lt;code&gt;&lt;br /&gt;db.User.findOne({}).populate({&lt;br /&gt;  path: &#39;books.bookId&#39;,&lt;br /&gt;  model: &#39;Book&#39;,&lt;br /&gt;  select: &#39;name price&#39;,&lt;br /&gt;  options: {limit: 2}&lt;br /&gt; }).lean().exec();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;不知道這指令跟 mongodb 的 aggregate 有沒有關係...&lt;br /&gt;&lt;br /&gt;等我心血來潮的時候再來研究一下囉！！</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/6493875034065831812/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/05/mongoose-populate.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/6493875034065831812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/6493875034065831812'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/05/mongoose-populate.html' title='mongoose 的 populate 用法'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-587821983650788320</id><published>2016-05-03T09:48:00.001+08:00</published><updated>2016-06-27T17:25:49.272+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-caskroom"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-mongodb"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-homebrew"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-mongodb"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-robomongo"/><title type='text'>非管理員權限在透過 homebrew 安裝 robomongo</title><content type='html'>&lt;br /&gt;&lt;br /&gt;沒有管理員權限真的是非常的 sucks&lt;br /&gt;&lt;br /&gt;還好這世界上還是有優秀的工程師可以繞過去(ex: yoyodiy)&lt;br /&gt;&lt;br /&gt;由於 homebrew 沒有 robomongo 的安裝腳本&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;所以我們該利用 &lt;a href=&quot;https://github.com/caskroom/homebrew-cask&quot;&gt;homebrew-cask&lt;/a&gt; 才能安裝&lt;br /&gt;&lt;br /&gt;步驟如下:&lt;br /&gt;&lt;br /&gt;1. 設定環境變數，不然安裝到一半會要你輸入管理員密碼啊～～～～～&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;export HOMEBREW_CASK_OPTS=&quot;--appdir=${HOME}/Applications --caskroom=${HOME}/.cask&quot;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2. 安裝&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;brew cask install robomongo&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3. 連結到文件以便開啟&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;ln -s ${HOME}/.cask/robomongo/0.9.0-rc7,2b7a8ca/Robomongo.app ${HOME}/Documents/&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;這樣就可以在文件中看到 Robomongo 就可以執行它了</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/587821983650788320/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/05/homebrew-robomongo.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/587821983650788320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/587821983650788320'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/05/homebrew-robomongo.html' title='非管理員權限在透過 homebrew 安裝 robomongo'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-8038789949389096784</id><published>2016-05-02T10:06:00.001+08:00</published><updated>2016-06-22T19:04:00.026+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-sublime"/><title type='text'>sublime 安裝 Package Control</title><content type='html'>&lt;br /&gt;&lt;br /&gt;其實這篇蠻廢的&lt;br /&gt;&lt;br /&gt;不過常常換個新環境就會忘記 Sublime 的 Package Control 是要另外安裝的ＸＤ&lt;br /&gt;&lt;br /&gt;1. 到官網依據你的 Sublime Text 選擇適合的腳本&lt;br /&gt;https://packagecontrol.io/installation&lt;br /&gt;&lt;br /&gt;2. 按下 ctrl+` 並把剛剛複製的東西貼上執行&lt;br /&gt;&lt;br /&gt;3. 重新啟動 Sublime 後, 按下command+shift+p 就可以找到 Package Control 了</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/8038789949389096784/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/05/sublime-package-control.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/8038789949389096784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/8038789949389096784'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/05/sublime-package-control.html' title='sublime 安裝 Package Control'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-6177004983084058869</id><published>2016-05-02T10:01:00.004+08:00</published><updated>2016-06-27T17:26:41.694+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-ctags"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-homebrew"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-mac"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-sublime"/><title type='text'>非管理員權限在 sublime text 2 安裝 ctags</title><content type='html'>&lt;br /&gt;&lt;br /&gt;首先請先參考 &lt;a href=&quot;http://blog.moa.tw/2016/05/sublime-text-2-homebrew.html&quot;&gt;非管理員權限在 macOS 安裝 homebrew&lt;/a&gt; 與 &lt;a href=&quot;http://blog.moa.tw/2016/05/sublime-package-control.html&quot;&gt;sublime 安裝 Package Control&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;將你的 homebrew 安裝起來&lt;br /&gt;&lt;br /&gt;接下來就可以利用 brew 安裝 ctags&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;1. 安裝 ctags&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;brew install ctags&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2. 新增環境變數&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;export CTAGS_PATH=${HOME}/usr/local/Cellar/ctags/5.8_1&lt;br /&gt;export PATH=${PATH}:${HOMEBREW_PREFIX}/bin:${CTAGS_PATH}/bin&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3. 在 sublime 安裝 ctags&lt;br /&gt;Preferences -&gt; Package Control -&gt; Install Package&lt;br /&gt;輸入 ctags&lt;br /&gt;&lt;br /&gt;4. 編輯 ctags settings&lt;br /&gt;Preferences -&gt; Package Settings -&gt; CTags -&gt; Settings - User&lt;br /&gt;內容為&lt;br /&gt;&lt;pre class=&quot;js&quot;&gt;&lt;code&gt;&lt;br /&gt;{&lt;br /&gt;    &quot;command&quot;: &quot;~/usr/local/Cellar/ctags/5.8_1/bin/ctags&quot;, &lt;br /&gt;    &quot;autocomplete&quot;: true            &lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;5. 新增 ctags 的 js 設定檔&lt;br /&gt;參考 https://gist.github.com/tim-smart/199338&lt;br /&gt;儲存至 ~/.ctags&lt;br /&gt;&lt;pre class=&quot;text&quot;&gt;&lt;code&gt;&lt;br /&gt;--langdef=js&lt;br /&gt;--langmap=js:.js&lt;br /&gt;--regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*\{/\5/,object/&lt;br /&gt;--regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*function[ \t]*\(/\5/,function/&lt;br /&gt;--regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*\[/\5/,array/&lt;br /&gt;--regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*[^&quot;]&#39;[^&#39;]*/\5/,string/&lt;br /&gt;--regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*(true|false)/\5/,boolean/&lt;br /&gt;--regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*[0-9]+/\5/,number/&lt;br /&gt;--regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*.+([,;=]|$)/\5/,variable/&lt;br /&gt;--regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*[ \t]*([,;]|$)/\5/,variable/&lt;br /&gt;--regex-js=/function[ \t]+([A-Za-z0-9_$]+)[ \t]*\([^)]*\)/\1/,function/&lt;br /&gt;&lt;br /&gt;--regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*\{/\2/,object/&lt;br /&gt;--regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*function[ \t]*\(/\2/,function/&lt;br /&gt;--regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*\[/\2/,array/&lt;br /&gt;--regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*[^&quot;]&#39;[^&#39;]*/\2/,string/&lt;br /&gt;--regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*(true|false)/\2/,boolean/&lt;br /&gt;--regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*[0-9]+/\2/,number/&lt;br /&gt;--regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*[^=]+([,;]|$)/\2/,variable/&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;6. 產生 Tags&lt;br /&gt;在 sublime 左方找你 js 的根目錄 在上方按滑鼠右鍵選 CTags: Rebuild Tags&lt;br /&gt;&lt;br /&gt;這樣就完成了&lt;br /&gt;&lt;br /&gt;你可以透過以下快速鍵快速切換到代碼定義處&lt;br /&gt;&lt;br /&gt;Go to Defenation: ctrl+shift+.&lt;br /&gt;Return: ctrl+shift+,</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/6177004983084058869/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/05/sublime-text2-ctags.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/6177004983084058869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/6177004983084058869'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/05/sublime-text2-ctags.html' title='非管理員權限在 sublime text 2 安裝 ctags'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-4135029887256894329</id><published>2016-05-02T09:43:00.001+08:00</published><updated>2016-06-22T19:04:42.514+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-homebrew"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-mac"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-sublime"/><title type='text'>非管理員權限在 macOS 安裝 homebrew</title><content type='html'>&lt;br /&gt;&lt;br /&gt;因為沒有那該死的管理員密碼&lt;br /&gt;&lt;br /&gt;所以就要想辦法把所有東西都安裝在家目錄下&lt;br /&gt;&lt;br /&gt;1. 首先先&lt;a href=&quot;https://gist.github.com/skyl/36563a5be809e54dc139&quot;&gt;下載&lt;/a&gt; 別人處理好的安裝腳本存成 install.rb&lt;br /&gt;&lt;br /&gt;2. 修改第1步驟中的 `YOUR_HOME` 變數改成你自己的家目錄&lt;br /&gt;&lt;br /&gt;3. 預先建立目錄&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;mkdir -p ~/usr/local&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4. 執行腳本&lt;br /&gt;&lt;pre class=&quot;ruby&quot;&gt;ruby install.rb&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;5. 新增環境變數 ~/.bash_profile&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;export HOMEBREW_PREFIX=${HOME}/usr/local&lt;br /&gt;export PATH=${PATH}:${HOMEBREW_PREFIX}/bin&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;6. source ~/.bash_profile&lt;br /&gt;&lt;br /&gt;這樣你就可以透過 brew 安裝套件了&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;參考來源：http://superuser.com/questions/619498/can-i-install-homebrew-without-sudo-privileges</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/4135029887256894329/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/05/sublime-text-2-homebrew.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/4135029887256894329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/4135029887256894329'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/05/sublime-text-2-homebrew.html' title='非管理員權限在 macOS 安裝 homebrew'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-4260482207503114697</id><published>2016-04-29T10:22:00.002+08:00</published><updated>2016-06-22T21:45:59.439+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-git"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-命令-git"/><title type='text'>git 如何移除本地端中 remote 已不存在的 branch </title><content type='html'>&lt;br /&gt;&lt;br /&gt;常常我們合併了一個 branch 出去之後必須把該 branch 關掉&lt;br /&gt;&lt;br /&gt;通常 git server 都可以在網頁上操作關閉該 branch&lt;br /&gt;&lt;br /&gt;可是你的 local 並不會自動移除該 remote branch，所以你下 git remote -a 時就會有一堆你曾經 checkout 過的 branch&lt;br /&gt;&lt;br /&gt;可以下&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;git remote prune &quot;你要同步的 remote&quot;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;他就會把 remote 上不存在的分支從你的本地端移除囉</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/4260482207503114697/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/04/git-remote-branch.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/4260482207503114697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/4260482207503114697'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/04/git-remote-branch.html' title='git 如何移除本地端中 remote 已不存在的 branch '/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-8560277859026088126</id><published>2016-04-28T14:01:00.000+08:00</published><updated>2016-06-22T21:45:33.625+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-gulp"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-optimize"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-requirejs"/><category scheme="http://www.blogger.com/atom/ns#" term="keyword-uglify"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-nodejs"/><title type='text'>如何 uglify 你的 RequireJS</title><content type='html'>&lt;br /&gt;&lt;br /&gt;應該有三種方法&lt;br /&gt;&lt;br /&gt;1. gulp-requirejs-optimize&lt;br /&gt;2. gulp-shell + r.js&lt;br /&gt;3. requirejs&lt;br /&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;首先先準備好你的 build.js&lt;br /&gt;&lt;br /&gt;內容類似這樣&lt;br /&gt;&lt;pre class=&quot;js&quot;&gt;&lt;code&gt;&lt;br /&gt;({&lt;br /&gt;    baseUrl: &quot;public&quot;,   // site root path&lt;br /&gt;    paths: {&lt;br /&gt;        &quot;angularRoute&quot;: &quot;empty:&quot;,&lt;br /&gt;        &quot;angularLocalStorage&quot;: &quot;empty:&quot;,&lt;br /&gt;        &quot;angularUiBootstrap&quot;: &quot;empty:&quot;,&lt;br /&gt;        &quot;angularUiRouter&quot;: &quot;empty:&quot;,&lt;br /&gt;        &quot;angularFileUploadShim&quot;: &quot;empty:&quot;,&lt;br /&gt;        &quot;angularFileUpload&quot;: &quot;empty:&quot;,&lt;br /&gt;        &quot;angularLoadingBar&quot;: &quot;empty:&quot;,&lt;br /&gt;        &quot;angularDialog&quot;: &quot;empty:&quot;,&lt;br /&gt;        &quot;underscore&quot;: &quot;empty:&quot;,&lt;br /&gt;        &quot;restangular&quot;: &quot;empty:&quot;,&lt;br /&gt;        // use local file to prevent requireJS optimizer error&lt;br /&gt;        &quot;text&quot;: &quot;js/module/text.min&quot;,&lt;br /&gt;        &quot;angularLocale&quot;: &quot;empty:&quot;&lt;br /&gt;    },&lt;br /&gt;    exclude: [&lt;br /&gt;        &quot;angular&quot;,&lt;br /&gt;        &quot;angularRoute&quot;,&lt;br /&gt;        &quot;angularLocalStorage&quot;,&lt;br /&gt;        &quot;angularUiBootstrap&quot;,&lt;br /&gt;        &quot;angularUiRouter&quot;,&lt;br /&gt;        &quot;angularFileUploadShim&quot;,&lt;br /&gt;        &quot;angularFileUpload&quot;,&lt;br /&gt;        &quot;angularLoadingBar&quot;,&lt;br /&gt;        &quot;angularDialog&quot;,&lt;br /&gt;        &quot;underscore&quot;,&lt;br /&gt;        &quot;restangular&quot;,&lt;br /&gt;        &quot;text&quot;&lt;br /&gt;    ],&lt;br /&gt;    name: &quot;js/config&quot;,&lt;br /&gt;    out: &quot;./_public/js/main-built.min.js&quot;,&lt;br /&gt;    generateSourceMaps: false,&lt;br /&gt;    preserveLicenseComments: false&lt;br /&gt;})&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;第一種方法:&lt;br /&gt;&lt;br /&gt;由於我的 mba 記憶體只有 4G 在安裝套件時會 out of memory...所以無法確認東西是否正確&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;第二種方法:&lt;br /&gt;&lt;br /&gt;首先先將 r.js 下載下來 &lt;a href=&quot;http://requirejs.org/docs/release/2.2.0/r.js&quot; target=&quot;_blank&quot;&gt;v2.2.0載點&lt;/a&gt;&lt;br /&gt;安裝 gulp-shell&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;npm install gulp-shell --save-dev&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;在 gulpfile.js 新增一個專門的 task&lt;br /&gt;&lt;pre class=&quot;js&quot;&gt;&lt;code&gt;&lt;br /&gt;gulp.task(&#39;rjs&#39;, shell.task([&#39;node r.js -o build.js&#39;]));&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;這樣就會把專案用到的所有 js 檔放到 build.js 中的 out 路徑，如果你不想要 uglify 的話 可以改用&lt;br /&gt;&lt;pre class=&quot;js&quot;&gt;&lt;code&gt;&lt;br /&gt;gulp.task(&#39;rjs&#39;, shell.task([&#39;node r.js -o build.js optimize=none&#39;]));&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;第三種方法:&lt;br /&gt;&lt;br /&gt;這種方法更簡單了你只要安裝 reuqirejs&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;npm install reuqirejs --save-dev&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;build.js 改成下面這種格式&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;module.exports = {&lt;br /&gt;    ...&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;新增 gulp 的 task 就完成了&lt;br /&gt;&lt;pre class=&quot;js&quot;&gt;&lt;code&gt;&lt;br /&gt;gulp.task(&#39;rjs&#39;, function(cb) {&lt;br /&gt;    var config = require(&#39;./build.js&#39;);&lt;br /&gt;    rjs.optimize(config, function(buildResponse){&lt;br /&gt;        // console.log(&#39;build response&#39;, buildResponse);&lt;br /&gt;        cb();&lt;br /&gt;    }, cb);&lt;br /&gt;});&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;如果在 optimize 途中遇到類似&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;Error: TypeError: Cannot read property &#39;normalize&#39; of undefined&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;請記得把你的 text 套件改由 local 端載入，就可以解決這個問題了</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/8560277859026088126/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/04/uglify-requirejs.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/8560277859026088126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/8560277859026088126'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/04/uglify-requirejs.html' title='如何 uglify 你的 RequireJS'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-4089391627309491971</id><published>2016-04-27T15:04:00.000+08:00</published><updated>2016-11-28T14:35:59.607+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-git"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-命令-git"/><title type='text'>git 好用的 alias</title><content type='html'>&lt;br /&gt;紀錄一下 git 好用的 alias &lt;strike&gt;以避免公司鎖 evernote 讓我又找不到了&lt;/strike&gt;&lt;br /&gt;&lt;br /&gt;[alias]&lt;br /&gt;co = checkout&lt;br /&gt;ci = commit&lt;br /&gt;di = diff --ignore-space-change --ignore-space-at-eol&lt;br /&gt;st = status -sb&lt;br /&gt;br = branch -v&lt;br /&gt;rt = reset --hard&lt;br /&gt;unstage = reset HEAD&lt;br /&gt;uncommit = reset --soft HEAD^&lt;br /&gt;l = log --pretty=oneline --abbrev-commit --graph --decorate&lt;br /&gt;lg = &quot;log --color --graph --oneline --decorate --pretty=format:&#39;%C(auto)%h%Creset%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)&lt;%an&gt;%Creset&#39; --abbrev-commit&quot;&lt;br /&gt;amend = commit --amend&lt;br /&gt;who = shortlog -n -s --no-merges&lt;br /&gt;g = grep -n --color -E&lt;br /&gt;cp = cherry-pick -x&lt;br /&gt;nb = checkout -b&lt;br /&gt;&lt;br /&gt;# &#39;git add -u&#39; handles deleted files, but not new files&lt;br /&gt;# &#39;git add .&#39; handles any current and new files, but not deleted&lt;br /&gt;# &#39;git addall&#39; now handles all changes&lt;br /&gt;addall = !sh -c &#39;git add . &amp;&amp; git add -u&#39;&lt;br /&gt;&lt;br /&gt;# Handy shortcuts for rebasing&lt;br /&gt;rc = rebase --continue&lt;br /&gt;rs = rebase --skip&lt;br /&gt;ra = rebase --abort&lt;br /&gt;&lt;br /&gt;logf = log --follow&lt;br /&gt;purge = clean -d -f -x&lt;br /&gt;head = !sh -c &#39;git clean -d -f -x &amp;&amp; git reset --hard HEAD&#39;</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/4089391627309491971/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/04/git-alias.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/4089391627309491971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/4089391627309491971'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/04/git-alias.html' title='git 好用的 alias'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11853313141499009.post-9201124906154710533</id><published>2016-04-27T14:48:00.001+08:00</published><updated>2016-11-28T10:01:57.504+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="keyword-nvm"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-命令-nvm"/><category scheme="http://www.blogger.com/atom/ns#" term="電腦-設定-nodejs"/><title type='text'>nvm 一套 nodejs 版本管理程式</title><content type='html'>&lt;br /&gt;沒有管理員權限，照樣安裝nodejs&lt;br /&gt;&lt;br /&gt;幸好有了 nvm 這玩意，可以把 nodejs 裝在自己目錄下&lt;br /&gt;&lt;br /&gt;在安裝 global 套件時也沒問題&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;strike&gt;nvm 被系統鎖權限時好用的 nodejs 安裝程式&lt;/strike&gt;&lt;br /&gt;nvm 一套 nodejs 版本管理程式&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;非常好&lt;br /&gt;&lt;br /&gt;首先我們只要執行 readme 提供的指令就可以了&lt;br /&gt;&lt;br /&gt;我的 mac 沒有 wget 所以選擇 curl 安裝&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;shell&quot;&gt;&lt;code&gt;&lt;br /&gt;curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;安裝前記得先產生 ~/.bashrc 或是 ~/.bash_profile&lt;br /&gt;&lt;br /&gt;不然你的 terminal 不會每次開啟都可以直接設定好喔&lt;br /&gt;&lt;br /&gt;結束...</content><link rel='replies' type='application/atom+xml' href='http://blog.moa.tw/feeds/9201124906154710533/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://blog.moa.tw/2016/04/nvm-nodejs.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/9201124906154710533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11853313141499009/posts/default/9201124906154710533'/><link rel='alternate' type='text/html' href='http://blog.moa.tw/2016/04/nvm-nodejs.html' title='nvm 一套 nodejs 版本管理程式'/><author><name>MoA</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>