<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title><![CDATA[Ryan Wu]]></title>
  <subtitle><![CDATA[I code to make people live better.]]></subtitle>
  <link href="/atom.xml" rel="self"/>
  <link href="http://blog.ryanwu.me/"/>
  <updated>2015-03-20T03:47:06.000Z</updated>
  <id>http://blog.ryanwu.me/</id>
  
  <author>
    <name><![CDATA[Ryan Wu]]></name>
    <email><![CDATA[hello@ryanwu.me]]></email>
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title><![CDATA[Upgrade to Hexo 3]]></title>
    <link href="http://blog.ryanwu.me/2015/03/Upgrade-to-Hexo-3.html"/>
    <id>http://blog.ryanwu.me/2015/03/Upgrade-to-Hexo-3.html</id>
    <published>2015-03-20T03:32:16.000Z</published>
    <updated>2015-03-20T03:47:06.000Z</updated>
    <content type="html"><![CDATA[<p>I’ve use <a href="http://hexo.io" target="_blank" rel="external">Hexo</a> for a while and deply my blog on Github. Upgrade to Hexo 3 is extremely simple.</p>
<ol>
<li><p>Upgrade Hexo command line tool</p>
<figure class="highlight"><table><tr><td class="code"><pre><span class="line">$ npm install hexo-cli -g</span><br></pre></td></tr></table></figure>
</li>
<li><p>Update your package.json</p>
<ul>
<li><p>Basically replace old dependencies</p>
<figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"></span><br><span class="line">   <span class="string">"dependencies"</span>: &#123;</span><br><span class="line">-    <span class="string">"hexo-renderer-ejs"</span>: <span class="string">"*"</span>,</span><br><span class="line">-    <span class="string">"hexo-renderer-stylus"</span>: <span class="string">"*"</span>,</span><br><span class="line">-    <span class="string">"hexo-renderer-marked"</span>: <span class="string">"*"</span></span><br><span class="line">+    <span class="string">"hexo"</span>: <span class="string">"^3.0.0"</span>,</span><br><span class="line">+    <span class="string">"hexo-generator-archive"</span>: <span class="string">"^0.1.0"</span>,</span><br><span class="line">+    <span class="string">"hexo-generator-category"</span>: <span class="string">"^0.1.0"</span>,</span><br><span class="line">+    <span class="string">"hexo-generator-index"</span>: <span class="string">"^0.1.0"</span>,</span><br><span class="line">+    <span class="string">"hexo-generator-tag"</span>: <span class="string">"^0.1.0"</span>,</span><br><span class="line">+    <span class="string">"hexo-renderer-ejs"</span>: <span class="string">"^0.1.0"</span>,</span><br><span class="line">+    <span class="string">"hexo-renderer-marked"</span>: <span class="string">"^0.2.4"</span>,</span><br><span class="line">+    <span class="string">"hexo-renderer-stylus"</span>: <span class="string">"^0.2.0"</span>,</span><br><span class="line">+    <span class="string">"hexo-server"</span>: <span class="string">"^0.1.2"</span></span><br><span class="line">   &#125;</span><br></pre></td></tr></table></figure>
</li>
<li><p>Add Hexo version <strong>This step is very important, your hexo cli wont work if you didn’t add this</strong></p>
<figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="string">"hexo"</span> : &#123;</span><br><span class="line">    <span class="string">"version"</span> : <span class="number">3.0</span><span class="number">.0</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
</li>
</ul>
</li>
<li><p>Update deployer settings</p>
<ul>
<li><p>Install deployer first</p>
<figure class="highlight"><table><tr><td class="code"><pre><span class="line">$ npm install hexo-deployer-git --save</span><br></pre></td></tr></table></figure>
</li>
<li><p>Update deployer config</p>
<figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line">-  type: github</span><br><span class="line">-  repository: git@github.com:ryanhanwu/ryanhanwu.github.io.git</span><br><span class="line">+  type: git</span><br><span class="line">+  repo: git@github.com:ryanhanwu/ryanhanwu.github.io.git</span><br></pre></td></tr></table></figure>
</li>
</ul>
</li>
</ol>
<p>It’s done, happy blogging.</p>
]]></content>
    <summary type="html">
    <![CDATA[<p>I’ve use <a href="http://hexo.io" target="_blank" rel="external">Hexo</a> for a while and deply my blog on Github. Upgrade to Hexo 3 is e]]>
    </summary>
    
  </entry>
  
  <entry>
    <title><![CDATA[Upgrade to Sublime Text 3]]></title>
    <link href="http://blog.ryanwu.me/2014/10/Upgrade-to-Sublime-Text-3.html"/>
    <id>http://blog.ryanwu.me/2014/10/Upgrade-to-Sublime-Text-3.html</id>
    <published>2014-10-08T03:16:15.000Z</published>
    <updated>2014-10-08T03:25:19.000Z</updated>
    <content type="html"><![CDATA[<p>Moved all my settings and snippets from Sublime Text 2 to 3, the <a href="http://www.sublimelinter.com/" target="_blank" rel="external">Sublimelinter</a> is much better, especially for a Node.js developer.</p>
<p>Backup all my settings on Github</p>
<script src="https://gist.github.com/ryanhanwu/e0b449f8ac1339eaf5e5.js"></script>

<p>Download whole project <a href="https://github.com/ryanhanwu/Sublime-Text-Settings/blob/master/Package%20Control.sublime-settings" target="_blank" rel="external">here</a></p>
<p>On the other hand, some packages are snippets and syntax highlights (LESS, Jade …etc), some are productivity tools.</p>
<p>Find more details on <a href="https://sublime.wbond.net/" target="_blank" rel="external">Package Control</a>.</p>
]]></content>
    <summary type="html">
    <![CDATA[<p>Moved all my settings and snippets from Sublime Text 2 to 3, the <a href="http://www.sublimelinter.com/" target="_blank" rel="external">S]]>
    </summary>
    
      <category term="Editor" scheme="http://blog.ryanwu.me/tags/Editor/"/>
    
      <category term="Sublime Text" scheme="http://blog.ryanwu.me/tags/Sublime-Text/"/>
    
      <category term="Shared" scheme="http://blog.ryanwu.me/categories/shared/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[How to monitor iPhone's HTTP traffic]]></title>
    <link href="http://blog.ryanwu.me/2013/11/how-to-monitor-iphone's-http-traffic.html"/>
    <id>http://blog.ryanwu.me/2013/11/how-to-monitor-iphone's-http-traffic.html</id>
    <published>2013-11-13T09:54:51.000Z</published>
    <updated>2013-11-14T05:41:46.000Z</updated>
    <content type="html"><![CDATA[<p>I usually wonder how my iPhone apps communicate with their servers. I had a debate with my ex-coworker about the security of app communication. He thinks we can use simple HTTP protocol for app communication, including authentication. But I insist that we should use more secure way for transmission in apps.</p>
<p>Let me use an example to demonstrate how little an app protects the content and how easy it is to monitor the traffic of an iPhone app.</p>
<p>According to Apple’s document <a href="https://developer.apple.com/library/mac/qa/qa1176/_index.html" target="_blank" rel="external">here</a>. I choose <strong><em>tcpdump</em></strong> and take <a href="https://itunes.apple.com/app/id403756560?mt=8" target="_blank" rel="external">7-11 Taiwan app</a> as an example.</p>
<p><a href="/images/20131113_app1.png"><img src="/images/20131113_app1.PNG" alt=""></a></p>
<p>This app provides coupon for Starbucks. I want to get the content of this coupon.</p>
<p>The steps are as following :<br><a id="more"></a></p>
<h3 id="1-_Connect_Device">1. Connect Device</h3><ul>
<li>Connect your iPhone to your Mac via USB.</li>
</ul>
<h3 id="2-_Remote_Control">2. Remote Control</h3><ul>
<li>use <strong><em>rvictl</em></strong> to connect your device via UUID (20 characters, you can find it in iTunes or organizer in XCode)</li>
</ul>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">&gt;rvictl <span class="operator">-s</span> UUID</span><br></pre></td></tr></table></figure>
<h3 id="3-_Check_whether_your_device_is_activated">3. Check whether your device is activated</h3><figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">&gt; rvictl <span class="operator">-l</span></span><br><span class="line">Current Active Devices:</span><br><span class="line">    [<span class="number">1</span>] YOUR UUID</span><br></pre></td></tr></table></figure>
<h3 id="4-_Start_monitering">4. Start monitering</h3><h5 id="Simplest_way">Simplest way</h5><figure class="highlight stylus"><table><tr><td class="code"><pre><span class="line">sudo tcpdump -n -t -<span class="tag">i</span> rvi0 -<span class="tag">q</span> -A tcp</span><br></pre></td></tr></table></figure>
<h5 id="Including_request_and_response_headers_and_message_body">Including request and response headers and message body</h5><figure class="highlight stylus"><table><tr><td class="code"><pre><span class="line">sudo tcpdump -t -<span class="tag">i</span> rvi0 -A -s <span class="number">0</span> <span class="string">'tcp port 80 and (((ip[2:2] - ((ip[0]&amp;0xf)&lt;&lt;2)) - ((tcp[12]&amp;0xf0)&gt;&gt;2)) != 0)'</span></span><br></pre></td></tr></table></figure>
<h5 id="GET_Only">GET Only</h5><figure class="highlight stylus"><table><tr><td class="code"><pre><span class="line">sudo tcpdump -t -<span class="tag">i</span> rvi0 -s <span class="number">0</span> -A <span class="string">'tcp[((tcp[12:1] &amp; 0xf0) &gt;&gt; 2):4] = 0x47455420'</span></span><br></pre></td></tr></table></figure>
<h5 id="POST_Only">POST Only</h5><figure class="highlight stylus"><table><tr><td class="code"><pre><span class="line">sudo tcpdump -t -<span class="tag">i</span> rvi0 -s <span class="number">0</span> -A <span class="string">'tcp dst port 80 and (tcp[((tcp[12:1] &amp; 0xf0) &gt;&gt; 2):4] = 0x504f5354)'</span></span><br></pre></td></tr></table></figure>
<h3 id="Result">Result</h3><p>The result will be like this</p>
<p><a href="/images/20131113_app2.png"><img src="/images/20131113_app2.PNG" alt=""></a></p>
<figure class="highlight lasso"><table><tr><td class="code"><pre><span class="line">IP XXXXXXXX<span class="number">.61956</span> <span class="subst">&gt;</span> static<span class="attribute">-ip</span><span class="subst">-</span><span class="number">38</span><span class="subst">-</span><span class="number">69</span><span class="subst">-</span><span class="number">56</span><span class="subst">-</span><span class="number">61.</span>rev<span class="built_in">.</span>dyxnet<span class="built_in">.</span>com<span class="built_in">.</span>http</span><br><span class="line"><span class="attribute">...</span><span class="built_in">.</span>X<span class="attribute">...</span><span class="number">1.</span><span class="attribute">...</span><span class="built_in">.</span>E<span class="attribute">...</span><span class="built_in">..</span>@<span class="built_in">.</span>@<span class="attribute">...</span><span class="attribute">...</span>i<span class="subst">=</span><span class="number">8</span>E<span class="subst">&amp;</span><span class="attribute">...</span>P<span class="built_in">..</span>z<span class="built_in">.</span>h<span class="attribute">...</span><span class="built_in">.. </span><span class="attribute">...</span><span class="attribute">...</span><span class="built_in">..</span><br><span class="line"></span><span class="subst">/</span><span class="built_in">.</span>&#125;<span class="built_in">..</span>Q<span class="built_in">.</span>AGET /Starbucks/act_ns/<span class="number">2013</span>_chrismas/css/images/ajax<span class="attribute">-loader</span><span class="built_in">.</span>gif HTTP/<span class="number">1.1</span></span><br><span class="line">Host: event<span class="built_in">.</span>e21magicmedia<span class="built_in">.</span>com<span class="built_in">.</span>tw</span><br><span class="line"><span class="keyword">Referer</span>: http:<span class="comment">//event.e21magicmedia.com.tw/Starbucks/act_ns/2013_chrismas/index.html</span></span><br><span class="line">Accept<span class="attribute">-Encoding</span>: gzip, deflate</span><br><span class="line">Accept: <span class="subst">*</span><span class="comment">/*</span><br><span class="line">Cookie: _ga=GA1.<span class="label">XXXXXXXXX</span></span><br><span class="line">Accept-Language: en-us</span><br><span class="line">Connection: keep-alive</span><br><span class="line">User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_3 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/11B511</span></span><br></pre></td></tr></table></figure>
<p>Wow ~ <a href="http://event.e21magicmedia.com.tw/Starbucks/act_ns/2013_chrismas/index.html" target="_blank" rel="external">http://event.e21magicmedia.com.tw/Starbucks/act_ns/2013_chrismas/index.html</a></p>
<blockquote>
<p>Now you can get the Christmas discount(Buy 1 get 1 free) without downloading the app.</p>
</blockquote>
<p>Then you can use Chrome Developer Tool and <strong><em>inspect</em></strong> the <a href="http://event.e21magicmedia.com.tw/Starbucks/act_ns/2013_chrismas/images/coupon.jpg" target="_blank" rel="external">image</a> for you</p>
<h3 id="Wrap_Up">Wrap Up</h3><p>Don’t use simple web view to protect your content. HTTPs and session based authentication could be a better solution.</p>
<p><strong><em>This article can be only used for education. All rights of images belong to original company </em></strong></p>
<p>Reference :<br><a href="http://stackoverflow.com/questions/4777042/can-i-use-tcpdump-to-get-http-requests-response-header-and-response-body" target="_blank" rel="external">Can I use tcpdump to get HTTP requests, response header and response body?</a><br><a href="http://useyourloaf.com/blog/2012/02/07/remote-packet-capture-for-ios-devices.html" target="_blank" rel="external">Remote Packet Capture for iOS Devices</a></p>
]]></content>
    <summary type="html">
    <![CDATA[<p>I usually wonder how my iPhone apps communicate with their servers. I had a debate with my ex-coworker about the security of app communication. He thinks we can use simple HTTP protocol for app communication, including authentication. But I insist that we should use more secure way for transmission in apps.</p>
<p>Let me use an example to demonstrate how little an app protects the content and how easy it is to monitor the traffic of an iPhone app.</p>
<p>According to Apple’s document <a href="https://developer.apple.com/library/mac/qa/qa1176/_index.html">here</a>. I choose <strong><em>tcpdump</em></strong> and take <a href="https://itunes.apple.com/app/id403756560?mt=8">7-11 Taiwan app</a> as an example.</p>
<p><a href="/images/20131113_app1.png"><img src="/images/20131113_app1.PNG" alt=""></a></p>
<p>This app provides coupon for Starbucks. I want to get the content of this coupon.</p>
<p>The steps are as following :<br>]]>
    
    </summary>
    
      <category term="App" scheme="http://blog.ryanwu.me/tags/App/"/>
    
      <category term="Network" scheme="http://blog.ryanwu.me/tags/Network/"/>
    
      <category term="iOS" scheme="http://blog.ryanwu.me/tags/iOS/"/>
    
      <category term="Shared" scheme="http://blog.ryanwu.me/categories/shared/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[My Default Shell Configuration - Oh-my-zsh]]></title>
    <link href="http://blog.ryanwu.me/2013/07/oh-my-zsh-config.html"/>
    <id>http://blog.ryanwu.me/2013/07/oh-my-zsh-config.html</id>
    <published>2013-07-27T16:45:02.000Z</published>
    <updated>2014-10-08T03:14:32.000Z</updated>
    <content type="html"><![CDATA[<h3 id="History_of_my_default_shell">History of my default shell</h3><p>I started to learn <a href="http://en.wikipedia.org/wiki/C_shelluse" target="_blank" rel="external">C Shell</a> because of the part-time job I had got during university. They were using <a href="http://www.freebsd.org/" target="_blank" rel="external">FreeBSD</a> as the default working environment. At the second year of the job, I tried <a href="http://zh.wikipedia.org/wiki/Tcsh" target="_blank" rel="external">Tcsh</a> and <a href="https://en.wikipedia.org/wiki/Bash" target="_blank" rel="external">Bash</a>, then made <strong>Bash</strong> my default shell.</p>
<p>From time to time, I started to use Mac in recent years and also changed to use <a href="http://www.zsh.org/" target="_blank" rel="external">zsh</a>.</p>
<a id="more"></a>
<h3 id="What_is_Z_Shell_?">What is Z Shell ?</h3><blockquote><p>Zsh is a shell designed for interactive use, although it is also a powerful scripting language.</p>
<footer><strong>[http://www.zsh.org/]</strong></footer></blockquote>
<p>The reason I use zsh is all about <a href="https://github.com/robbyrussell/oh-my-zsh" target="_blank" rel="external">Oh my zsh</a></p>
<h3 id="What_is_OH_MY_ZSHELL_?">What is OH MY ZSHELL ?</h3><blockquote>
<p>oh-my-zsh is an open source, community-driven framework for managing your ZSH configuration. It comes bundled with a ton of helpful functions, helpers, plugins, themes, and few things that make you shout…</p>
</blockquote>
<h3 id="How_to_Install?">How to Install?</h3><p>Check <a href="https://github.com/robbyrussell/oh-my-zsh#setup" target="_blank" rel="external">Setup section</a></p>
<h3 id="My_Configuration">My Configuration</h3><ul>
<li><p>Basic</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="comment">#Theme (with git status character)</span></span><br><span class="line">ZSH_THEME=<span class="string">"dpoggi"</span></span><br><span class="line"></span><br><span class="line">CASE_SENSITIVE=<span class="string">"true"</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#Aliases of zsh</span></span><br><span class="line"><span class="built_in">alias</span> zshconfig=<span class="string">"vim ~/.zshrc"</span></span><br><span class="line"><span class="built_in">alias</span> ohmyzsh=<span class="string">"vim ~/.oh-my-zsh"</span></span><br><span class="line"></span><br><span class="line"><span class="comment">#Prevent tragedy</span></span><br><span class="line"><span class="built_in">alias</span> rm=<span class="string">'rm -i'</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">source</span> <span class="variable">$ZSH</span>/oh-my-zsh.sh</span><br></pre></td></tr></table></figure>
</li>
<li><p>Node.js Related</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line">. ~/.nvm/nvm.sh</span><br><span class="line">nvm use default</span><br><span class="line">. &lt;(npm completion)</span><br></pre></td></tr></table></figure>
</li>
<li><p><a href="https://github.com/joelthelion/autojump" target="_blank" rel="external">Autojump</a> - <strong>Very useful tool for jumping to path i’ve visit most</strong></p>
<figure class="highlight lua"><table><tr><td class="code"><pre><span class="line">#autojump</span><br><span class="line"><span class="string">[[ -s `brew --prefix`/etc/autojump.sh ]]</span> &amp;&amp; . `brew <span class="comment">--prefix`/etc/autojump.sh</span></span><br></pre></td></tr></table></figure>
</li>
<li><p>Plugins Summary</p>
<figure class="highlight fix"><table><tr><td class="code"><pre><span class="line"><span class="attribute">plugins</span>=<span class="string">(brew copydir copyfile encode64 git node osx rsync sublime urltools vagrant)</span></span><br></pre></td></tr></table></figure>
<ul>
<li><p>brew</p>
<ul>
<li><code>brews</code> : List installed brews</li>
</ul>
</li>
<li><p>copydir &amp; copyfile</p>
<ul>
<li><code>copydir</code> : Copy current directory</li>
<li><code>copyfile $file</code> : Copy specific file</li>
<li>Use <code>copypaste &gt; [filename]</code> to paste file/dir to whereever you want</li>
</ul>
</li>
<li><p>encode64</p>
<ul>
<li><code>encode64 myfile</code> : Encode myfile, shortcut <code>e64</code></li>
<li><code>decode64 myfile</code> : Decode myfile, shortcut <code>d64</code></li>
</ul>
</li>
<li><p>git</p>
<ul>
<li>Enable a punch of <a href="https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/git.plugin.zsh" target="_blank" rel="external">alias</a> and auto completion</li>
</ul>
</li>
<li>github<ul>
<li><code>empty_gh repo</code> : Create empty Github repository <strong>repo</strong></li>
<li><code>exist_gh repo</code> : Add existed project to repository <strong>repo</strong></li>
</ul>
</li>
<li>node<ul>
<li><code>node-docs domain</code> : Open Node.js document of current version of node and go to <strong>domain</strong> section</li>
</ul>
</li>
<li>osx <strong>Very Useful</strong><ul>
<li><code>tab</code> : Open new tab</li>
<li><code>vsplit_tab</code>  : Vertical split tab</li>
<li><code>split_tab</code> : Horizontal split tab</li>
<li><code>pfd</code> : Current directory of <strong>Finder</strong></li>
<li><code>pfs</code> : Current file of <strong>Finder</strong></li>
<li><code>cdf</code> : Change directory(cd) to current directory of <strong>Finder</strong></li>
<li><code>pushdf</code> : Remember current directory of <strong>Finder</strong></li>
<li><code>quick-look myfile</code> : Open a quick look window of myfile like selecting file in Finder</li>
<li><code>man-preview ls</code> : Open a preview window with <strong>ls</strong>‘s manual</li>
<li><code>trash myfile</code> : Move myfile to trash</li>
<li><code>vncviewer dummy.com</code> : Open VNCViewer</li>
</ul>
</li>
<li>rsync<ul>
<li><code>rsync-copy</code></li>
<li><code>rsync-move</code></li>
<li><code>rsync-update</code></li>
<li><code>rsync-synchronize</code></li>
<li>Easy to understand… <code>COMMAND path1 path2</code></li>
</ul>
</li>
<li>sublime<ul>
<li><code>st</code> : Open Sublime Text2</li>
<li><code>stt</code> : Open current directory in Sublime Text2</li>
</ul>
</li>
<li>urltools<ul>
<li><code>urlencode url</code> : Encode URL</li>
<li><code>urldecode url</code> : Decode URL</li>
</ul>
</li>
<li>vagrant<ul>
<li>Auto completion support</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>I only installed a few plugins. There’re still a lot of plugins you can use, please check the <a href="https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins" target="_blank" rel="external">plugin list here</a>.</p>
<p>After noting down all the plugin I’ve installed as a reminder. I decided to review all the supported plugins of Oh-my-zsh, I found out there’re so many ruby/rails related plugins. Maybe I could create some plugin for Node.js. Any ideas ? please tell me.</p>
]]></content>
    <summary type="html">
    <![CDATA[<h3 id="History_of_my_default_shell">History of my default shell</h3><p>I started to learn <a href="http://en.wikipedia.org/wiki/C_shelluse">C Shell</a> because of the part-time job I had got during university. They were using <a href="http://www.freebsd.org/">FreeBSD</a> as the default working environment. At the second year of the job, I tried <a href="http://zh.wikipedia.org/wiki/Tcsh">Tcsh</a> and <a href="https://en.wikipedia.org/wiki/Bash">Bash</a>, then made <strong>Bash</strong> my default shell.</p>
<p>From time to time, I started to use Mac in recent years and also changed to use <a href="http://www.zsh.org/">zsh</a>.</p>]]>
    
    </summary>
    
      <category term="Config" scheme="http://blog.ryanwu.me/tags/Config/"/>
    
      <category term="Oh My Zsh" scheme="http://blog.ryanwu.me/tags/Oh-My-Zsh/"/>
    
      <category term="Shell" scheme="http://blog.ryanwu.me/tags/shell/"/>
    
      <category term="System Admin" scheme="http://blog.ryanwu.me/tags/System-Admin/"/>
    
      <category term="Zsh" scheme="http://blog.ryanwu.me/tags/ZSH/"/>
    
      <category term="Shared" scheme="http://blog.ryanwu.me/categories/shared/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[Effeckt.css - CSS library of performant transitions and animations for mobile]]></title>
    <link href="http://blog.ryanwu.me/2013/07/effecktcss-css-library-of-performant-transitions-and-animations-for-mobile.html"/>
    <id>http://blog.ryanwu.me/2013/07/effecktcss-css-library-of-performant-transitions-and-animations-for-mobile.html</id>
    <published>2013-07-20T07:19:16.000Z</published>
    <updated>2014-10-08T03:14:18.000Z</updated>
    <content type="html"><![CDATA[<video class="videoElement"><br>    <source src="http://www.youtube.com/watch?v=Qc40YDFA4Bg" type="video/youtube"><br></video>

<p>Very impressive trailer. Check the <a href="http://h5bp.github.io/Effeckt.css/dist/" target="_blank" rel="external">Effeckt.css Github</a></p>
]]></content>
    <summary type="html">
    <![CDATA[<video class="videoElement"><br>    <source src="http://www.youtube.com/watch?v=Qc40YDFA4Bg" type="video/youtube"><br></video>

<p>Very impr]]>
    </summary>
    
      <category term="CSS" scheme="http://blog.ryanwu.me/tags/CSS/"/>
    
      <category term="Framework" scheme="http://blog.ryanwu.me/tags/Framework/"/>
    
      <category term="shared" scheme="http://blog.ryanwu.me/categories/shared/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[Using Node.js to redirect and proxy normal HTTP+WebSocket traffics based on hostnames]]></title>
    <link href="http://blog.ryanwu.me/2013/07/using-nodejs-to-redirect-and-proxy-normal-http+websockets-traffic-based-on-hostname.html"/>
    <id>http://blog.ryanwu.me/2013/07/using-nodejs-to-redirect-and-proxy-normal-http+websockets-traffic-based-on-hostname.html</id>
    <published>2013-07-18T17:23:46.000Z</published>
    <updated>2014-05-11T07:26:41.000Z</updated>
    <content type="html"><![CDATA[<p>Usually I used to use a single server to host several developing or experimental projects. Thus I need a quick solution to forward different request to these services. I had tried to use <a href="http://nginx.org/" target="_blank" rel="external">nginx</a> before. But now I have a easier way to do so.</p>
<ol>
<li><p><strong>require modules</strong></p>
<ul>
<li><a href="http://underscorejs.org/" target="_blank" rel="external">underscode</a></li>
<li><a href="https://github.com/nodejitsu/node-http-proxy" target="_blank" rel="external">node-http-proxy</a><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">var</span> http = <span class="built_in">require</span>(<span class="string">'http'</span>),</span><br><span class="line">    _ = <span class="built_in">require</span>(<span class="string">'underscore'</span>),</span><br><span class="line">    httpProxy = <span class="built_in">require</span>(<span class="string">'http-proxy'</span>);</span><br></pre></td></tr></table></figure>
</li>
</ul>
</li>
<li><p><strong>config proxy(forward) and redirect mappings</strong> (hostname based)</p>
<figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">var</span> proxyOptions = &#123;</span><br><span class="line">  router: &#123;</span><br><span class="line">    <span class="string">"api.testAppX.com"</span>     : <span class="string">'localhost:2041'</span>,</span><br><span class="line">    <span class="string">"dev.api.testAppX.com"</span> : <span class="string">'localhost:2042'</span>,</span><br><span class="line">    <span class="string">"www.testAppY.com"</span>     : <span class="string">'localhost:10520'</span>,</span><br><span class="line">    <span class="string">"test.oldApps.com"</span>     : <span class="string">'localhost:10520'</span>,</span><br><span class="line">    <span class="string">'bc.ryanwu.co'</span>         : <span class="string">'localhost:8888'</span></span><br><span class="line">  &#125;</span><br><span class="line">&#125;,</span><br><span class="line">  redirectOptions = &#123;</span><br><span class="line">    <span class="string">'olddomain.com'</span>      : <span class="string">'http://newdomain.com/'</span>,</span><br><span class="line">    <span class="string">'www.olddomain.com'</span>  : <span class="string">'http://newdomain.com/'</span>,</span><br><span class="line">    <span class="string">'blog.olddomain.com'</span> : <span class="string">'http://newdomain.com/blog/'</span></span><br><span class="line">  &#125;;</span><br></pre></td></tr></table></figure>
</li>
</ol>
<a id="more"></a>
<ol>
<li><p><strong>Create an instance of node-http-proxy’s RoutingProxy</strong></p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="keyword">var</span> proxy = <span class="keyword">new</span> httpProxy.RoutingProxy(proxyOptions);</span><br></pre></td></tr></table></figure>
</li>
<li><p><strong>Proxy normal HTTP requests</strong></p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line"><span class="keyword">var</span> server = http.createServer(<span class="function"><span class="keyword">function</span><span class="params">(req, res)</span> </span>&#123;</span><br><span class="line">    <span class="keyword">var</span> oriHost = req.headers.host,</span><br><span class="line">        <span class="comment">//remove port number from original host</span></span><br><span class="line">        host = oriHost.indexOf(<span class="string">":"</span>) ? oriHost.split(<span class="string">':'</span>)[<span class="number">0</span>] : oriHost;</span><br><span class="line"></span><br><span class="line">  <span class="comment">//Check matches of redirect hostnames</span></span><br><span class="line">  <span class="keyword">if</span>(_.has(redirectOptions, host)) &#123;</span><br><span class="line">    res.writeHead(<span class="number">301</span>, &#123; <span class="comment">//You can use 301, 302 or whatever status code</span></span><br><span class="line">      <span class="string">'Location'</span>: redirectOptions[host],</span><br><span class="line">      <span class="string">'Expires'</span>: (<span class="keyword">new</span> <span class="built_in">Date</span>()).toGMTString()</span><br><span class="line">    &#125;);</span><br><span class="line">    res.end();</span><br><span class="line">  &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">    <span class="comment">//Routing proxy will handle the rest of requests</span></span><br><span class="line">    proxy.proxyRequest(req, res);</span><br><span class="line">  &#125;</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
</li>
<li><p><strong>Proxy websocket requests and listen the main service on specific port</strong></p>
<figure class="highlight js"><table><tr><td class="code"><pre><span class="line">server.on(<span class="string">'upgrade'</span>, <span class="function"><span class="keyword">function</span><span class="params">(req, socket, head)</span> </span>&#123;</span><br><span class="line">  proxy.proxyWebSocketRequest(req, socket, head);</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line">server.listen(<span class="number">80</span>);</span><br></pre></td></tr></table></figure>
</li>
</ol>
<p>Its very convenient and then I can use a simple <a href="https://github.com/nodejitsu/forever" target="_blank" rel="external">forever</a> service to manage this service.</p>
<ul>
<li><p>Download original JavaScript file on <a href="https://gist.github.com/ryanhanwu/6031480" target="_blank" rel="external">here - Gist</a></p>
</li>
<li><p>Ref:</p>
<ul>
<li><a href="https://gist.github.com/konklone/5006662" target="_blank" rel="external">node-http-proxy-with-redirects.js</a></li>
</ul>
</li>
</ul>
]]></content>
    <summary type="html">
    <![CDATA[<p>Usually I used to use a single server to host several developing or experimental projects. Thus I need a quick solution to forward different request to these services. I had tried to use <a href="http://nginx.org/">nginx</a> before. But now I have a easier way to do so.</p>
<ol>
<li><p><strong>require modules</strong></p>
<ul>
<li><a href="http://underscorejs.org/">underscode</a></li>
<li><a href="https://github.com/nodejitsu/node-http-proxy">node-http-proxy</a><figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">var</span> http = <span class="built_in">require</span>(<span class="string">'http'</span>),</span><br><span class="line">    _ = <span class="built_in">require</span>(<span class="string">'underscore'</span>),</span><br><span class="line">    httpProxy = <span class="built_in">require</span>(<span class="string">'http-proxy'</span>);</span><br></pre></td></tr></table></figure>
</li>
</ul>
</li>
<li><p><strong>config proxy(forward) and redirect mappings</strong> (hostname based)</p>
<figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="keyword">var</span> proxyOptions = &#123;</span><br><span class="line">  router: &#123;</span><br><span class="line">    <span class="string">"api.testAppX.com"</span>     : <span class="string">'localhost:2041'</span>,</span><br><span class="line">    <span class="string">"dev.api.testAppX.com"</span> : <span class="string">'localhost:2042'</span>,</span><br><span class="line">    <span class="string">"www.testAppY.com"</span>     : <span class="string">'localhost:10520'</span>,</span><br><span class="line">    <span class="string">"test.oldApps.com"</span>     : <span class="string">'localhost:10520'</span>,</span><br><span class="line">    <span class="string">'bc.ryanwu.co'</span>         : <span class="string">'localhost:8888'</span></span><br><span class="line">  &#125;</span><br><span class="line">&#125;,</span><br><span class="line">  redirectOptions = &#123;</span><br><span class="line">    <span class="string">'olddomain.com'</span>      : <span class="string">'http://newdomain.com/'</span>,</span><br><span class="line">    <span class="string">'www.olddomain.com'</span>  : <span class="string">'http://newdomain.com/'</span>,</span><br><span class="line">    <span class="string">'blog.olddomain.com'</span> : <span class="string">'http://newdomain.com/blog/'</span></span><br><span class="line">  &#125;;</span><br></pre></td></tr></table></figure>
</li>
</ol>]]>
    
    </summary>
    
      <category term="Node.js" scheme="http://blog.ryanwu.me/tags/Node-js/"/>
    
      <category term="Proxy" scheme="http://blog.ryanwu.me/tags/Proxy/"/>
    
      <category term="Redirect" scheme="http://blog.ryanwu.me/tags/Redirect/"/>
    
      <category term="WebSocket" scheme="http://blog.ryanwu.me/tags/WebSocket/"/>
    
      <category term="Coding" scheme="http://blog.ryanwu.me/categories/Coding/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[Best way of singleton in Objective-C]]></title>
    <link href="http://blog.ryanwu.me/2013/07/best-way-of-singleton-in-objective-c.html"/>
    <id>http://blog.ryanwu.me/2013/07/best-way-of-singleton-in-objective-c.html</id>
    <published>2013-06-30T16:46:39.000Z</published>
    <updated>2013-06-30T16:56:12.000Z</updated>
    <content type="html"><![CDATA[<p>It’s very useful during iOS development</p>
<figure class="highlight"><table><tr><td class="code"><pre><span class="line">static GeneralData __strong *generalDataObject = nil;&#10; &#10;@synthesize currentUser;&#10; &#10;+(GeneralData *) getInstance&#10;&#123;&#10;    static dispatch_once_t pred;&#10;    dispatch_once(&#38;pred, ^&#123;&#10;        generalDataObject = [self new];&#10;    &#125;);&#10;    return generalDataObject;&#10;&#125;</span><br></pre></td></tr></table></figure>
<h3 id="Usage">Usage</h3><ol>
<li><p>Add Data</p>
<figure class="highlight"><figcaption><span>firstViewController.m</span></figcaption><table><tr><td class="code"><pre><span class="line">#import &#34;GeneralData.h&#34;;&#10;&#10;- (IBAction) passValueButton:(id)sender &#123; &#10;&#123;&#10;    User *user = [User new];&#10;    user.name = &#34;Mary Jane&#34;;&#10;    user.age = &#34;21&#34;;&#10;    [GeneralData sharedInstance].currentUser = user;&#10;&#125;</span><br></pre></td></tr></table></figure>
</li>
<li><p>Read Data</p>
<figure class="highlight"><figcaption><span>secondViewController.m</span></figcaption><table><tr><td class="code"><pre><span class="line">#import &#34;GeneralData.h&#34;;&#10;&#10;- (void)viewDidLoad&#10;&#123;&#10;    [super viewDidLoad];&#10;    User *loggedInUser = [GeneralData sharedInstance].currentUser;&#10;    NSLog(@&#34;Name : %@&#34;, loggedInUser.name);&#10;    NSLog(@&#34;Age : %@&#34;, loggedInUser.age);&#10;    &#10;&#125;</span><br></pre></td></tr></table></figure>
</li>
</ol>
<p>Reference : <a href="http://stackoverflow.com/questions/5720029/create-singleton-using-gcds-dispatch-once-in-objective-c" target="_blank" rel="external">StackOverflow</a></p>
]]></content>
    <summary type="html">
    <![CDATA[<p>It’s very useful during iOS development</p>
<figure class="highlight"><table><tr><td class="code"><pre><span class="line">static GeneralD]]>
    </summary>
    
      <category term="Design Pattern" scheme="http://blog.ryanwu.me/tags/Design-Pattern/"/>
    
      <category term="Singleton" scheme="http://blog.ryanwu.me/tags/Singleton/"/>
    
      <category term="iOS" scheme="http://blog.ryanwu.me/tags/iOS/"/>
    
      <category term="Coding" scheme="http://blog.ryanwu.me/categories/Coding/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[JavaScript number only lock]]></title>
    <link href="http://blog.ryanwu.me/2013/07/javascript-number-only-lock.html"/>
    <id>http://blog.ryanwu.me/2013/07/javascript-number-only-lock.html</id>
    <published>2013-06-30T16:42:08.000Z</published>
    <updated>2013-07-19T16:18:26.000Z</updated>
    <content type="html"><![CDATA[<figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span><span class="params">(event)</span> </span>&#123;</span><br><span class="line">    <span class="comment">// Allow: backspace, delete, tab, escape, and enter</span></span><br><span class="line">    <span class="keyword">if</span> ( event.keyCode == <span class="number">46</span> || </span><br><span class="line">         event.keyCode == <span class="number">8</span> || </span><br><span class="line">         event.keyCode == <span class="number">9</span> ||</span><br><span class="line">         event.keyCode == <span class="number">27</span> || </span><br><span class="line">         event.keyCode == <span class="number">13</span> || </span><br><span class="line">         <span class="comment">// Allow: Ctrl+A</span></span><br><span class="line">        (event.keyCode == <span class="number">65</span> &amp;&amp; event.ctrlKey === <span class="literal">true</span>) || </span><br><span class="line">         <span class="comment">// Allow: home, end, left, right</span></span><br><span class="line">        (event.keyCode &gt;= <span class="number">35</span> &amp;&amp; event.keyCode &lt;= <span class="number">39</span>)) &#123;</span><br><span class="line">             <span class="comment">// let it happen, don't do anything</span></span><br><span class="line">             <span class="keyword">return</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">else</span> &#123;</span><br><span class="line">        <span class="comment">// Ensure that it is a number and stop the keypress</span></span><br><span class="line">        <span class="keyword">if</span> (event.shiftKey || (event.keyCode &lt; <span class="number">48</span> || event.keyCode &gt; <span class="number">57</span>) &amp;&amp; </span><br><span class="line">            (event.keyCode &lt; <span class="number">96</span> || event.keyCode &gt; <span class="number">105</span> )) &#123;</span><br><span class="line">            event.preventDefault(); </span><br><span class="line">        &#125;   </span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    <summary type="html">
    <![CDATA[<figure class="highlight javascript"><table><tr><td class="code"><pre><span class="line"><span class="function"><span class="keyword">functi]]>
    </summary>
    
      <category term="Dom Event" scheme="http://blog.ryanwu.me/tags/Dom-Event/"/>
    
      <category term="JavaScript" scheme="http://blog.ryanwu.me/tags/js/"/>
    
      <category term="jQuery" scheme="http://blog.ryanwu.me/tags/jQuery/"/>
    
      <category term="Coding" scheme="http://blog.ryanwu.me/categories/Coding/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[Make UILabel glow]]></title>
    <link href="http://blog.ryanwu.me/2013/06/make-uilabel-glow.html"/>
    <id>http://blog.ryanwu.me/2013/06/make-uilabel-glow.html</id>
    <published>2013-06-29T17:24:52.000Z</published>
    <updated>2013-06-30T16:37:30.000Z</updated>
    <content type="html"><![CDATA[<p>You have to import QuartzCore</p>
<figure class="highlight"><table><tr><td class="code"><pre><span class="line">#import &#60;QuartzCore/QuartzCore.h&#62;</span><br></pre></td></tr></table></figure>
<p>Then apply effect on your <code>UILabel</code> or <code>titleLabel</code>.</p>
<figure class="highlight objc"><table><tr><td class="code"><pre><span class="line">myLabel<span class="variable">.layer</span><span class="variable">.shadowOffset</span> = CGSizeMake(<span class="number">0.0</span>, <span class="number">0.0</span>);</span><br><span class="line">myLabel<span class="variable">.layer</span><span class="variable">.shadowRadius</span> = <span class="number">20.0</span>;</span><br><span class="line">myLabel<span class="variable">.layer</span><span class="variable">.shadowOpacity</span> = <span class="number">0.5</span>;</span><br><span class="line">myLabel<span class="variable">.layer</span><span class="variable">.masksToBounds</span> = <span class="literal">NO</span>;</span><br></pre></td></tr></table></figure>]]></content>
    <summary type="html">
    <![CDATA[<p>You have to import QuartzCore</p>
<figure class="highlight"><table><tr><td class="code"><pre><span class="line">#import &#60;QuartzCore/Q]]>
    </summary>
    
      <category term="UILabel" scheme="http://blog.ryanwu.me/tags/UILabel/"/>
    
      <category term="iOS" scheme="http://blog.ryanwu.me/tags/iOS/"/>
    
      <category term="Coding" scheme="http://blog.ryanwu.me/categories/Coding/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[Display remote Node.JS service logs on Chrome Console]]></title>
    <link href="http://blog.ryanwu.me/2013/06/display-remote-nodejs-service-logs-on-chrome-console.html"/>
    <id>http://blog.ryanwu.me/2013/06/display-remote-nodejs-service-logs-on-chrome-console.html</id>
    <published>2013-06-25T04:24:03.000Z</published>
    <updated>2014-05-11T07:28:22.000Z</updated>
    <content type="html"><![CDATA[<p>In recent years, we got plenty of <a href="http://en.wikipedia.org/wiki/Platform_as_a_service" target="_blank" rel="external">PaaS</a> services which provide very simple and easy way to deploy our&nbsp;Node.JS services.</p>
<p>Usually after deploying my service, I have to use the command line tools or visit some very slow web pages to access the server logs. It’s really waste my time.</p>
<p>But today, I want to introduce a tool, <strong><a href="http://craig.is/writing/chrome-logger" target="_blank" rel="external">Chrome Logger</a>, </strong>it provides a way to <strong><span style="color: #e69138;">display server logs into Chrome Developer Tool’s Console.</span></strong></p>
<p><a href="/images/20130625_test1.png"><img src="/images/20130625_test1.png" alt=""></a></p>
<p><a href="https://chrome.google.com/webstore/detail/chromephp/noaneddfkdjfnfdakjjmocngnfkfehhd" target="_blank" rel="external">Install it</a>,&nbsp;then&nbsp;visit my <a href="http://chromelogger.herokuapp.com/" target="_blank" rel="external">sample project on Heroku</a>&nbsp;to see what’s going on.</p>
<p><a href="/images/20130625_test1.png"><img src="/images/20130625_test1.png" alt=""></a></p>
<ul>
<li>Sample Test Project on Github</li>
</ul>
<p><strong>Update 06/25 00:40:</strong></p>
<ul>
<li>If you’re using <a href="http://expressjs.com/" target="_blank" rel="external">ExpressJS</a>, you can simple log your error like following error handling middleware<script src="//gist.github.com/66d5ac94916c6ab0a545.js"></script>
</li>
</ul>
<p><strong>Update 06/25 01:50:</strong></p>
<ul>
<li>After reading the <a href="http://devtoolsecrets.com/" target="_blank" rel="external">Secret of Browser Developer Tool</a>. I updated ChromeLogger(<a href="https://github.com/ryanhanwu/chromelogger" target="_blank" rel="external">my forked repo</a>) and express-chrome-logger(<a href="https://github.com/ryanhanwu/express-chrome-logger" target="_blank" rel="external">my forked repo</a>). Now it supports&nbsp;<strong>TABLE display</strong></li>
</ul>
<p><a href="/images/20130625_test2.png"><img src="/images/20130625_test2.png" alt=""></a></p>
<p>Pull requests sent :&nbsp;<a href="https://github.com/ccampbell/chromelogger/pull/24" target="_blank" rel="external">chromelogger</a>&nbsp;&amp;&nbsp;<a href="https://github.com/olahol/express-chrome-logger/pull/1" target="_blank" rel="external">express-chrome-logger</a>.</p>
<p>Good luck to myself.</p>
]]></content>
    <summary type="html">
    <![CDATA[<p>In recent years, we got plenty of <a href="http://en.wikipedia.org/wiki/Platform_as_a_service" target="_blank" rel="external">PaaS</a> se]]>
    </summary>
    
      <category term="JavaScript" scheme="http://blog.ryanwu.me/tags/js/"/>
    
      <category term="Node.js" scheme="http://blog.ryanwu.me/tags/Node-js/"/>
    
      <category term="Tools" scheme="http://blog.ryanwu.me/categories/Tools/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[取得中華電信(Hinet)光世代Wifi基地台內的密碼]]></title>
    <link href="http://blog.ryanwu.me/2013/04/hinetwifi.html"/>
    <id>http://blog.ryanwu.me/2013/04/hinetwifi.html</id>
    <published>2013-04-03T18:08:02.000Z</published>
    <updated>2013-08-15T02:41:28.000Z</updated>
    <content type="html"><![CDATA[<p>最近申辦了中華電信光世代50M/10M，並且申請了免費附贈的Wifi。</p>
<p>拿到的機器是D-Link 的 <strong>WBR-2200</strong></p>
<p>剛剛參考一些<a href="http://briian.com/?p=4756" target="_blank" rel="external">網路上的文章</a>，把固定IP申請好，連入基地台</p>
<ul>
<li>連入基地台的方法<figure class="highlight nsis"><table><tr><td class="code"><pre><span class="line">Normal User：<span class="literal">user</span>/<span class="literal">user</span></span><br><span class="line">Super User：cht/chtap</span><br></pre></td></tr></table></figure>
</li>
</ul>
<p>卻發現裡面有一個神祕的帳號：xxxxxxxx@wifi.hinet.net ?!</p>
<p>找了一下<a href="http://www.mobile01.com/topicdetail.php?f=110&amp;t=2317597&amp;p=1" target="_blank" rel="external">Mobile01</a>，這一組帳號的密碼，居然要打電話自己去跟中華電信要…… orz<br>礙於懶得打電話，就只好靠自己來。</p>
<p>步驟1.<br>我用的是谷歌(Chrome)瀏覽器，對這密碼欄位點選右鍵(Right Click)，然後選檢查元素(Inspect Element)。</p>
<p>然後就會看到在跳出的視窗中，有著以下類似的東西…</p>
<figure class="highlight stylus"><table><tr><td class="code"><pre><span class="line">&lt;<span class="tag">input</span> value=<span class="string">"123456"</span> /&gt;</span><br></pre></td></tr></table></figure>
<p>我想這個號碼應該可能大概不是那個密碼，就把它複製下來試試看，</p>
<p>接下來… 如有雷同純屬巧合。</p>
<p>謝謝。</p>
<p><em>可能</em>僅適用於Hinet(中華電信)光世代附贈的家用Wi-Fi機器 <strong>WBR-2200</strong></p>
]]></content>
    <summary type="html">
    <![CDATA[<p>最近申辦了中華電信光世代50M/10M，並且申請了免費附贈的Wifi。</p>
<p>拿到的機器是D-Link 的 <strong>WBR-2200</strong></p>
<p>剛剛參考一些<a href="http://briian.com/?p=4756" targ]]>
    </summary>
    
      <category term="Hack" scheme="http://blog.ryanwu.me/tags/Hack/"/>
    
      <category term="Life" scheme="http://blog.ryanwu.me/categories/Life/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[Responsive Media Query Quick Reference]]></title>
    <link href="http://blog.ryanwu.me/2013/03/responsive-media-query-quick-reference.html"/>
    <id>http://blog.ryanwu.me/2013/03/responsive-media-query-quick-reference.html</id>
    <published>2013-03-21T17:51:12.000Z</published>
    <updated>2013-07-17T18:07:44.000Z</updated>
    <content type="html"><![CDATA[<p><a href="/images/20120322_responsive-reference.png"><img src="/images/20120322_responsive-reference.png" alt="media-query"></a></p>
<p>Just a reminder which&nbsp;helps me doing responsive design’s&nbsp;<a href="http://www.w3.org/TR/css3-mediaqueries/" target="_blank" rel="external">Media Query</a>.</p>
<ul>
<li>@media (max-width: 767px)</li>
<li>@media (max-width: 480px)&nbsp;</li>
<li>@media (min-width: 768px) and (max-width: 979px)</li>
<li>@media (min-width: 980px)</li>
<li>@media (min-width: 1200px)</li>
</ul>
<p>注意 ：<strong>上面的順序是有意義的 更改順序會導致CSS被蓋掉</strong></p>
]]></content>
    <summary type="html">
    <![CDATA[<p><a href="/images/20120322_responsive-reference.png"><img src="/images/20120322_responsive-reference.png" alt="media-query"></a></p>
<p>Ju]]>
    </summary>
    
      <category term="CSS3" scheme="http://blog.ryanwu.me/tags/CSS3/"/>
    
      <category term="Media Query" scheme="http://blog.ryanwu.me/tags/Media-Query/"/>
    
      <category term="Coding" scheme="http://blog.ryanwu.me/categories/Coding/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[Get current location and city name]]></title>
    <link href="http://blog.ryanwu.me/2012/12/ios-get-current-location-and-city-name.html"/>
    <id>http://blog.ryanwu.me/2012/12/ios-get-current-location-and-city-name.html</id>
    <published>2012-12-06T07:27:00.000Z</published>
    <updated>2013-07-19T16:19:16.000Z</updated>
    <content type="html"><![CDATA[<p>1. Add <strong>CoreLocation.framework</strong> to your project</p>
<p>2.&nbsp;Add <strong>CLLocationManagerDelegate</strong> to your <u>viewController</u></p>
<p>3. Initialize <strong>CLLocationManager</strong> in viewDidLoad</p>
<p>4. Get current location in &nbsp;the delegate method<br><span class="p" style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 16.78333282470703px; margin: 0px; padding: 0px; white-space: pre;"><strong>- </strong>(</span><span class="kt" style="color: #445588; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; font-weight: bold; line-height: 16.78333282470703px; margin: 0px; padding: 0px; white-space: pre;">void</span><span class="p" style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 16.78333282470703px; margin: 0px; padding: 0px; white-space: pre;">)</span><span class="nf" style="color: #990000; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; font-weight: bold; line-height: 16.78333282470703px; margin: 0px; padding: 0px; white-space: pre;">locationManager:</span><span class="p" style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 16.78333282470703px; margin: 0px; padding: 0px; white-space: pre;">(</span><span class="n" style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 16.78333282470703px; margin: 0px; padding: 0px; white-space: pre;">CLLocationManager</span><span class="o" style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; font-weight: bold; line-height: 16.78333282470703px; margin: 0px; padding: 0px; white-space: pre;"><em></em></span><span class="p" style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 16.78333282470703px; margin: 0px; padding: 0px; white-space: pre;">)</span><span class="nv" style="color: teal; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 16.78333282470703px; margin: 0px; padding: 0px; white-space: pre;">manager</span><span class="nf" style="color: #990000; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; font-weight: bold; line-height: 16.78333282470703px; margin: 0px; padding: 0px; white-space: pre;">didUpdateLocations:</span><span class="p" style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 16.78333282470703px; margin: 0px; padding: 0px; white-space: pre;">(</span><span class="n" style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 16.78333282470703px; margin: 0px; padding: 0px; white-space: pre;">NSArray</span><span class="o" style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; font-weight: bold; line-height: 16.78333282470703px; margin: 0px; padding: 0px; white-space: pre;"></span><span class="p" style="font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 16.78333282470703px; margin: 0px; padding: 0px; white-space: pre;">)</span><span class="nv" style="color: teal; font-family: 'Bitstream Vera Sans Mono', Courier, monospace; font-size: 12px; line-height: 16.78333282470703px; margin: 0px; padding: 0px; white-space: pre;">locations;</span></p>
<div style="text-align: left;"><br>5.&nbsp;Use <strong>CLGeocoder</strong> to reverseGeocodeLocation<br><br><script src="https://gist.github.com/4222448.js?file=myViewController.m"></script> Full Code <a href="https://gist.github.com/4222448" target="_blank" rel="external">here</a></div>]]></content>
    <summary type="html">
    <![CDATA[<p>1. Add <strong>CoreLocation.framework</strong> to your project</p>
<p>2.&nbsp;Add <strong>CLLocationManagerDelegate</strong> to your <u>v]]>
    </summary>
    
      <category term="Geolocation" scheme="http://blog.ryanwu.me/tags/Geolocation/"/>
    
      <category term="Objective-C" scheme="http://blog.ryanwu.me/tags/Objective-C/"/>
    
      <category term="iOS" scheme="http://blog.ryanwu.me/tags/iOS/"/>
    
      <category term="Coding" scheme="http://blog.ryanwu.me/categories/Coding/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[My Mac App List V1.1]]></title>
    <link href="http://blog.ryanwu.me/2012/11/my-mac-app-list-v11.html"/>
    <id>http://blog.ryanwu.me/2012/11/my-mac-app-list-v11.html</id>
    <published>2012-11-08T07:54:00.000Z</published>
    <updated>2013-07-18T19:21:26.000Z</updated>
    <content type="html"><![CDATA[<div><span style="font-family: Times;">更新了一下軟體列表，請參考。有*的是要付費才能好好使用的。</span></div>

<ul>
<li><p>生產力軟體(Productivity)</p>
</li>
<li><p><a href="http://www.irradiatedsoftware.com/sizeup/" target="_blank" rel="external">SizeUp</a>：多視窗管理，很方便 (免費使用，會跳Demo視窗，但不礙事)</p>
</li>
<li><a href="http://mouapp.com/" target="_blank" rel="external">Mou</a>：Markdown 即時預覽編輯器</li>
<li><p><a href="http://itunes.apple.com/us/app/dash-docs-snippets/id458034879?mt=12" target="_blank" rel="external">Dash</a><em>：快速Snippets與文件查詢工具 (2012之後會一直叫你花NT300買不然就會一直干擾…請謹慎)</em>   瀏覽器(Browser)</p>
</li>
<li><p>Firefox </p>
</li>
<li>Chrome</li>
<li><p><a href="https://tools.google.com/dlpage/chromesxs" target="_blank" rel="external">Chrome Canary</a> : For Web Developer Only, power new future chrome*   儲存(Storage)</p>
</li>
<li><p><a href="https://www.dropbox.com/home" target="_blank" rel="external">Dropbox</a> : Best Cloud File Storage</p>
</li>
<li><a href="https://skydrive.live.com/" target="_blank" rel="external">SkyDrive</a>：Microsoft <span style="font-family: Times;">Cloud File Storage </span>因為有之前活動獲得的25G，所以還是用一下。</li>
<li><p><a href="https://drive.google.com/start" target="_blank" rel="external">Google Drive</a> : Google<span style="font-family: Times;"> </span><span style="font-family: Times;">Cloud File Storage</span>*   開發與編輯器(Development &amp; Editor)</p>
</li>
<li><p><a href="http://www.sublimetext.com/" target="_blank" rel="external">Sublime Text</a>：我最愛的純文字編輯器，設定可以<a href="http://blog.flyworld.me/2012/03/my-sublime-text-2-on-windows-7-64bit.html" target="_blank" rel="external">參考這篇</a></p>
</li>
<li><a href="http://www.syntevo.com/smartgit/index.html" target="_blank" rel="external">SmartGit</a>：目前覺得最好用的Git Client (SourceTree把我repo搞爛過…)</li>
<li><a href="http://evernote.com/" target="_blank" rel="external">Evernote</a> : 日常生活必備的筆記App</li>
<li><a href="http://ditchnet.org/httpclient/" target="_blank" rel="external">HTTP Client</a>* : 視覺模擬HTTP Request用</li>
<li><p>XCode：iOS Development*   網路與多媒體(Network &amp; Mutimedia)</p>
</li>
<li><p><a href="http://www.haozhaopian.com/" target="_blank" rel="external">好照片</a>：方便的照片特效處理軟體</p>
</li>
<li><a href="http://firealpaca.com/" target="_blank" rel="external">FireAlpaca</a> : 免費的圖像編輯軟體</li>
<li><a href="http://skitch.com/" target="_blank" rel="external">Skitch</a>：螢幕截圖軟體，附上基本畫筆可以標記</li>
<li><a href="http://tw.kkbox.com/" target="_blank" rel="external">KKBox</a>* : 到處聽音樂，不用下載占空間 (支持台灣軟體發展！高雄Oh~Ya)</li>
<li><a href="http://www.videolan.org/vlc/" target="_blank" rel="external">VLC Player</a> : 目前找到最通用的Video Player </li>
<li><a href="http://handbrake.fr/" target="_blank" rel="external">HandBrake</a> : 步驟很簡單的影片轉檔軟體</li>
<li><p><a href="http://www.igetter.net/index.html" target="_blank" rel="external">iGetter</a> : 續傳軟體*   終端機相關(Terminal)</p>
</li>
<li><p><a href="http://itunes.apple.com/us/app/go2shell/id445770608?mt=12" target="_blank" rel="external">Go2Shell</a>：可以直接在Finder上開啟該目錄的Terminal</p>
</li>
<li><p><a href="http://www.iterm2.com/" target="_blank" rel="external">iTerm2</a>：加強版Terminal，自動完成/畫面切割對於CLI愛好者很適合*   社交軟體(Social)</p>
</li>
<li><p><a href="http://www.tweetdeck.com/" target="_blank" rel="external">TweetDeck</a>：Twitter Client, 管理多帳號的時候很方便(我還有jsdc.tw的帳號…)</p>
</li>
<li><a href="http://www.skype.com" target="_blank" rel="external">Skype</a> : 微軟沒了MSN，只剩下他了</li>
<li><a href="http://line.naver.jp/" target="_blank" rel="external">Line</a> : 目前最夯的即時通訊App*   系統軟體</li>
</ul>
]]></content>
    <summary type="html">
    <![CDATA[<div><span style="font-family: Times;">更新了一下軟體列表，請參考。有*的是要付費才能好好使用的。</span></div>

<ul>
<li><p>生產力軟體(Productivity)</p>
</li>
<li><p><a href=]]>
    </summary>
    
      <category term="App" scheme="http://blog.ryanwu.me/tags/App/"/>
    
      <category term="MAC" scheme="http://blog.ryanwu.me/tags/MAC/"/>
    
      <category term="Shared" scheme="http://blog.ryanwu.me/categories/shared/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[看Steve Jobs - The Lost Interview 後感]]></title>
    <link href="http://blog.ryanwu.me/2012/10/steve-jobs---the-lost-interview.html"/>
    <id>http://blog.ryanwu.me/2012/10/steve-jobs---the-lost-interview.html</id>
    <published>2012-10-26T19:11:23.000Z</published>
    <updated>2013-07-17T18:23:04.000Z</updated>
    <content type="html"><![CDATA[<p>因為週末實在太忙，下週又都排滿了，所以就很趕時髦的，在這部電影上映的今天就去看了。</p>
<p>結果… 不得不讓我再次覺得，Steve Jobs 真的是非常非常厲害。</p>
<p>（以下有部分電影內容 不喜者請勿繼續看)</p>
<hr>
<p>Steve Jobs 在受訪時，顯得有點緊張，<strong>當時是1995年</strong>（隔年NeXT才被Apple買下)，其中很多他的觀點，在現今的公司（不管是大企業或是新創公司）都可以作為參考。</p>
<p>以下，就以我理解的話來闡述這些觀點，如果有什麼問題，歡迎指教。</p>
<blockquote>
<p><strong>行銷跟業務只有在非獨佔性的事業（像是可樂公司）會領導整個企業，因為產品本身沒有更新的很快，在這部份著手才是上策，但科技業並不是這樣。</strong><br>如果有些公司要copy國外的點子來做，卻將重點放在技術研發，那只能說，失敗率會很高，因為放錯重點…</p>
</blockquote>
<p>獨佔性的企業不見得是大公司，可能只是一個小點子但沒人做（出來），或者是擁有特定的技術與架構的科技。執行面上，我相當認同EZTABLE CEO所說的，<a href="http://www.hey-ac.com/5/post/2012/10/precious.html" target="_blank" rel="external">專注在產品細節</a>。</p>
<blockquote>
<p><strong>很多人認為好的點子就占了90%，但實際上執行是非常重要的。<br>頂尖的點子跟頂尖的產品之間，有著頂尖的技術。點子會在開發（執行）的過程中逐漸進化，並且變的更好；<br>所以必須雇用A咖，這些頂尖人才，會互相激勵，有時候還會爭論，吵架；但這對團隊目標是好的。</strong></p>
<p><strong>但這些A咖是最難管理的，所以他們需要一個領導者（就是講Steve Jobs自己）</strong><br>要好管的A咖是絕對不可能的，訪問者也提到Apple中一堆跟隨Steve Jobs的人後來都跑了XDDDD <span style="text-decoration: underline;">一個好的軟體公司，就一定會希望建立好的文化，帶起整個團隊的正向循環，從不斷的嘗試與失敗中，做出最好的產品</span>。只是很常見的是用錯了人，只懂得執行或者沒有辦法在細節上琢磨思考，最後只為了遵循原本粗略的規格與規範，反而被限制，無法在產品中真正的去帶給使用者想要傳遞的價值。</p>
</blockquote>
<p>時常有人認為Steve Jobs是獨裁者，但在影片中他不斷強調，<strong><u>公司是員工的不是老闆的</u></strong>。回家路上，我想起前幾天看到很喜歡的一篇文章：<a href="http://woundero.wordpress.com/2012/10/25/team-and-hero/" target="_blank" rel="external">為什麼我們常愛說外國人「個人英雄主義」，但又常說「外國人比臺灣人懂得團隊合作」</a>。</p>
<p>我們可以說，Steve Jobs是一個擁有強勢領導到風格的領導者。<u>他樂於受到團隊成員的遲疑，不妥協的團員對他而言是助力，不是阻力。他也很能夠直來直往的與團員們溝通，甚至進而說服自己的團員讓彼此一起往同一個方向走</u>，是很正確的作法。訪談中，Steve Jobs認為:<strong>“真正的頂尖人才，是不需要去呵護(Baby Care)他們的自尊心”</strong>。只有暢所欲言的領導人，才有暢所欲言的團隊成員。</p>
<p>上面那篇文章中，所提到台灣的產業中，有著”<span style="background-color: white; color: #444444; font-family: Georgia, Cambria, 'Palatino Linotype', serif; font-size: 15px; line-height: 25px;"><em>一群不敢發問，大家沉默，排擠跳出來思考、發問的人，一群冷漠的寒蟬便形成了妥協而安靜的團隊”，</em></span>問題可能不只是台灣的教育教出不發問的小孩，<strong>而是團隊領導者沒有辦法接受不妥協</strong>（原因？顧慮團員面子/太愛面子/官僚保位/思考紊亂/脾氣不好/…自行想像）。最終下場都是採取高壓政策，請下面的人閉嘴。這樣的團隊，甭說是好產品，可能連產品都還沒做出來就被終止了。</p>
<blockquote>
<p><strong>產品的內容(Content)遠比程序(Process)來的重要，真正的靈魂是內容，不是那些程序。</strong><br>這跟前一陣子XDiteㄉㄉ寫的文章&nbsp;<a href="http://blog.xdite.net/posts/2012/10/07/maybe-you-should-listen-what-your-rd-said/" target="_blank" rel="external">也許你該停下來聽聽工程師怎麼說</a>&nbsp;不謀而合。常見的像是一個只懂得管理進度不在乎內容文化的Project Manager，就很有可能搞爛一整個產品。</p>
</blockquote>
<p>當然，反過來說，R&amp;D懂得的內容，也不能僅止於技術部分，而是將需求/人性等納入考量，並以技術的邏輯實現。最後，將文化帶入產品，讓使用者親身感受到。（再次呼應上面，A咖才做的到這些)</p>
<blockquote>
<p><strong>真正的懂得內容的人，也才能將產品所需的成本給估算清楚。</strong><br>有些主管or老闆認為，R&amp;D只是資產，今天寫了這些Code能動就好，不要太在乎架構，進度比較重要。</p>
</blockquote>
<p>過一陣子，換了一批新的&lt;del&gt;肝&lt;/del&gt;R&amp;D，所花費的維護成本卻高的嚇人，這也是理所當然的，因為前人考量的少，後人就多花點功砍掉重練再加再改。這些成本，都是隱性的，只有從內容的角度去了解，才不會傻傻的花費額外的時間精力，最終導致產品失敗或錯失良機。</p>
<blockquote>
<p><strong>Programming將在未來十年大行其道，每個人都該寫程式。</strong></p>
<p><strong>寫程式這件事情是訓練人們的釐清自己的思考。人們寫程式是因為想分享他們的感覺，想用這個工具創造出自己的世界。</strong><br>1995年的Steve Jobs… 預言了2012年的<a href="http://www.codeyear.com/" target="_blank" rel="external"> Code Year</a>&nbsp;這趨勢正夯。訪問中也提到了他對未來十年的看法，當時Jobs非常看好網路的發展，認為不管是印表機還是個人電腦都會因為網路而讓整個產業大變動。他還順便裱了一下Micro$oft，說還好網路技術不是被這個<em>不會創新</em>的公司所擁有。最後，他甚至預言，網路會成為未來社交的重要媒介。</p>
</blockquote>
<p>今天，2012年，事實證明，Facebook/Twitter，</p>
<p>到後來Apple的 Air Print 都仍然是在他的視野內發展，真的不得不佩服他的先知灼見。</p>
<p>順手打打心得居然三點多了… 剩下想到再補上…</p>
]]></content>
    <summary type="html">
    <![CDATA[<p>因為週末實在太忙，下週又都排滿了，所以就很趕時髦的，在這部電影上映的今天就去看了。</p>
<p>結果… 不得不讓我再次覺得，Steve Jobs 真的是非常非常厲害。</p>
<p>（以下有部分電影內容 不喜者請勿繼續看)</p>
<hr>
<p>Steve Jobs 在]]>
    </summary>
    
      <category term="Steve Jobs" scheme="http://blog.ryanwu.me/tags/Steve-Jobs/"/>
    
      <category term="Thinking" scheme="http://blog.ryanwu.me/categories/Thinking/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[Update Enterprise Apps for iOS Devices only ONE TAP ! (faster OTA)]]></title>
    <link href="http://blog.ryanwu.me/2012/10/update-enterprise-apps-for-ios-devices.html"/>
    <id>http://blog.ryanwu.me/2012/10/update-enterprise-apps-for-ios-devices.html</id>
    <published>2012-10-25T09:33:00.000Z</published>
    <updated>2013-07-18T19:41:02.000Z</updated>
    <content type="html"><![CDATA[<p>We all know that Apple provides an <a href="http://help.apple.com/iosdeployment-apps/mac/1.1/#app43ad871e" target="_blank" rel="external">easy way</a>(OTA - Over The Air) to distribute your in-house application through a simple web link like following.</p>
<figure class="highlight xml"><table><tr><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="title">a</span> <span class="attribute">href</span>=<span class="value">"itms-services://?action=download-manifest&amp;url=http://example.com/maniifest.plist"</span>&gt;</span>Install App<span class="tag">&lt;/<span class="title">a</span>&gt;</span></span><br></pre></td></tr></table></figure>
<p>Sure, we can use the same way to update the app.&nbsp;That means we have to send a email or url to our device owner, then they can click it. But in my case, we serve some people who are very busy. Thus we need a faster to update the app.</p>
<p><span style="font-size: large;"><strong>Usage :&nbsp;</strong></span><br>Simply One Tap on the <strong>AutoUpdate Icon</strong></p>
<div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-Y6MaFg8weKQ/UIrZz5yOnCI/AAAAAAAACe4/j973qStJTX0/s1600/p1.png" target="_blank" rel="external"><img src="http://1.bp.blogspot.com/-Y6MaFg8weKQ/UIrZz5yOnCI/AAAAAAAACe4/j973qStJTX0/s1600/p1.png" alt=""></a></div><strong>
</strong><br>Then the browser will show up and ask you to update the app<br><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-uJnluXhnT0s/UIrZ7M0pFDI/AAAAAAAACfA/jdnBUhJE5pQ/s1600/p2.PNG" target="_blank" rel="external"><img src="http://2.bp.blogspot.com/-uJnluXhnT0s/UIrZ7M0pFDI/AAAAAAAACfA/jdnBUhJE5pQ/s640/p2.PNG" alt=""></a></div>

<p><strong><span style="font-size: large;">How to :&nbsp;</span></strong><br>1. Create a html file with following code</p>
<p><script src="https://gist.github.com/3951519.js?file=ota-test.html"></script> 2. Add it to the home screen.</p>
<p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-V05YdZ0HGiw/UIkFXXCqJpI/AAAAAAAACcE/IPOoyKHyVME/s1600/p3.png" target="_blank" rel="external"><img src="http://4.bp.blogspot.com/-V05YdZ0HGiw/UIkFXXCqJpI/AAAAAAAACcE/IPOoyKHyVME/s320/p3.png" alt=""></a></div><div class="separator" style="clear: both; text-align: left;">Remember to update the <a href="http://developer.apple.com/library/ios/#documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html" target="_blank" rel="external">apple-touch-icon</a> link&nbsp;</div><br><strong><span style="font-size: large;">Demo:</span></strong><br>Use you iOS device browser :&nbsp;<a href="http://goo.gl/HNJuV" target="_blank" rel="external">http://goo.gl/HNJuV</a></p>
<p><strong><span style="font-size: large;">Download:</span></strong><br><a href="https://dl.dropbox.com/u/15540367/Forever/ota-test.zip" target="_blank" rel="external">ota-test.zip</a> - This zip include the sample app-touch-icon, sample-plist, and sample html.</p>
<p><strong>
</strong></p>
]]></content>
    <summary type="html">
    <![CDATA[<p>We all know that Apple provides an <a href="http://help.apple.com/iosdeployment-apps/mac/1.1/#app43ad871e" target="_blank" rel="external"]]>
    </summary>
    
      <category term="App" scheme="http://blog.ryanwu.me/tags/App/"/>
    
      <category term="Apple" scheme="http://blog.ryanwu.me/tags/Apple/"/>
    
      <category term="OTA" scheme="http://blog.ryanwu.me/tags/OTA/"/>
    
      <category term="iOS" scheme="http://blog.ryanwu.me/tags/iOS/"/>
    
      <category term="Shared" scheme="http://blog.ryanwu.me/categories/shared/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[推薦 XCode Plug-in - ColorSense + CodePilot]]></title>
    <link href="http://blog.ryanwu.me/2012/10/xcode-plug-in-colorsense-codepilot.html"/>
    <id>http://blog.ryanwu.me/2012/10/xcode-plug-in-colorsense-codepilot.html</id>
    <published>2012-10-24T09:47:00.000Z</published>
    <updated>2013-07-18T19:20:25.000Z</updated>
    <content type="html"><![CDATA[<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-Ns45tdOFU94/UIraNuH1njI/AAAAAAAACfI/OwiurWlAmTs/s1600/new_hero20110308.jpeg" target="_blank" rel="external"><img src="http://4.bp.blogspot.com/-Ns45tdOFU94/UIraNuH1njI/AAAAAAAACfI/OwiurWlAmTs/s1600/new_hero20110308.jpeg" alt=""></a></div><br>以目前來說，iOS的Developer大部分都還是使用XCode來做為主要的開發工具。<br>但只要用過就知道，XCode充滿了許多神祕的問題：<br><br><em>   XCode WTF&nbsp;<a href="http://xcodewtf.tumblr.com/" target="_blank" rel="external">http://xcodewtf.tumblr.com/</a>&nbsp;
</em>   Text from XCode&nbsp;<a href="http://www.textfromxcode.com/" target="_blank" rel="external">http://www.textfromxcode.com/</a><br>*   @wtfxcode&nbsp;<a href="https://twitter.com/wtfxcode" target="_blank" rel="external">https://twitter.com/wtfxcode</a>&nbsp;<div>嗯… 其實XCode真的很需要釋出開發Plug-in的API，就算有<a href="http://stackoverflow.com/questions/6316921/xcode-4-plugin-development" target="_blank" rel="external">廣大的回響</a>，官方目前似乎對於這件事情還是<a href="http://openradar.appspot.com/8622025" target="_blank" rel="external">沒有什麼反應</a>。</div><div>一山還有一山高還是有很多高手，弄出了一些好用的Plug-In，也就是今天要介紹的內容。</div><div></div>

<h3 id="第一套：ColorSense&nbsp;">第一套：ColorSense&nbsp;</h3><p><strong>說明</strong><br>一般我們在Objective-C裡面，時常會使用到UIColor，不過每次都要請視覺設計師大大給或是自己去找詳細的RGBA實在很麻煩。加入這個Plug-In，一個正常的UIColor Syntax(例如: [UIColor redColor]) 上面就會出現色塊，點擊之後就會出現Mac OS X的Color Panel供選擇，非常方便。</p>
<p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-dT9gLqI-pwE/UIraUHSjb9I/AAAAAAAACfQ/sn5E_RMkon0/s1600/cs.png" target="_blank" rel="external"><img src="http://3.bp.blogspot.com/-dT9gLqI-pwE/UIraUHSjb9I/AAAAAAAACfQ/sn5E_RMkon0/s640/cs.png" alt=""></a></div><br>上面是我自己的螢幕截圖，身為一個Web Developer，我另外裝了<a href="http://wafflesoftware.net/hexpicker/" target="_blank" rel="external">Hex Color Picker</a>，使得我的Color Panel還可以得到Hex值。<br><strong>安裝方式：</strong></p>
<ol>
<li>到官方的Git Repo，下載整個Project (git clone)</li>
<li>用XCode開啟ColorSense專案</li>
<li>Build ColorSense專案</li>
<li>重啟XCode<div>這樣就完成了！！</div><div></div><strong>官方網址（Git Repo)&nbsp;</strong><br><a href="https://github.com/omz/ColorSense-for-Xcode" target="_blank" rel="external">https://github.com/omz/ColorSense-for-Xcode</a></li>
</ol>
<h3 id="第二套：CodePilot">第二套：CodePilot</h3><p><strong>說明</strong><br>XCode有自己的一套檔案管理方式，並不是按照實際的資料夾排列，而是使用群組的觀念，讓檔案在開發環境中看起來是整齊的。但是開發久了專案大了，或是加了很多其他Library，還是難免會有找不到檔案的情形。一直都很希望XCode可以像是<a href="http://www.sublimetext.com/2" target="_blank" rel="external">Sublime Text 2</a> 或是 <a href="http://www.alfredapp.com/" target="_blank" rel="external">Alfred</a> 一樣有個快速簡便的尋找檔案方式。於是我找到了CodePilot 這個Plug-in。<br><span id="goog_334522430"></span><span id="goog_334522431"></span></p>
<p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-fJKwgwQIiSc/UIkMYMlCjcI/AAAAAAAACd0/wQGRPTyn4n0/s1600/cp.jpg" target="_blank" rel="external"><img src="http://2.bp.blogspot.com/-fJKwgwQIiSc/UIkMYMlCjcI/AAAAAAAACd0/wQGRPTyn4n0/s320/cp.jpg" alt=""></a></div><br>以上是截圖。<br><strong>安裝方式</strong></p>
<ol>
<li>將下載下來的檔案解壓</li>
<li>把&nbsp;CodePilot2.xcplugin 放到 “~/Library/Developer/Xcode/Third-Party Plug-ins” (目前我是使用App Store抓下來的Xcode 4.5.1)</li>
<li>重啟XCode<div>啟動的快捷健是Shift + Command + X (<img src="http://www.danrodney.com/mac/img/menusym-shift.gif" alt=""><img src="http://www.danrodney.com/mac/img/menusym-command.gif" alt="">X)</div><div>是不是很好找呢～？</div><div></div><strong>官方網址</strong><br><a href="http://codepilot.cc/" target="_blank" rel="external">http://codepilot.cc/</a></li>
</ol>
]]></content>
    <summary type="html">
    <![CDATA[<div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-Ns45tdOFU94/UIraNuH1njI/AAAAAAAACfI/Owiur]]>
    </summary>
    
      <category term="Apple" scheme="http://blog.ryanwu.me/tags/Apple/"/>
    
      <category term="XCode" scheme="http://blog.ryanwu.me/tags/XCode/"/>
    
      <category term="iOS" scheme="http://blog.ryanwu.me/tags/iOS/"/>
    
      <category term="Tools" scheme="http://blog.ryanwu.me/categories/Tools/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[在ViewController 之間傳值]]></title>
    <link href="http://blog.ryanwu.me/2012/10/ios-viewcontroller.html"/>
    <id>http://blog.ryanwu.me/2012/10/ios-viewcontroller.html</id>
    <published>2012-10-03T08:21:00.000Z</published>
    <updated>2013-07-18T19:32:42.000Z</updated>
    <content type="html"><![CDATA[<p>在iOS的開發中，我們經常會使用ViewController來控制每一個畫面的行為，<br>剛開始的時候最常遇到的問題就是<br><strong>
</strong></p>
<blockquote>
<p><strong>“怎麼在兩個ViewController之間傳遞資訊”</strong>這篇文章中我列出了幾種常見的方法，提供給大家做參考。</p>
</blockquote>
<p><strong><span style="font-size: large;">1. 透過實體(Instance)傳遞資訊</span></strong></p>
<p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-ocnOnGCizSQ/UGvhI2puHwI/AAAAAAAACTs/xUYMOv9FN9Y/s1600/blog1-1.png" target="_blank" rel="external"><img src="http://1.bp.blogspot.com/-ocnOnGCizSQ/UGvhI2puHwI/AAAAAAAACTs/xUYMOv9FN9Y/s640/blog1-1.png" alt=""></a></div>我們都知道，每一個ViewController 的類別(Class)，不管是用Storyboard還是Nib的方式，都要先初始化(alloc + init)，然後再透過這些<strong>實體(Instance)</strong>物件做操作。所以，要在彼此之間傳遞資訊，必須要取得這些<strong>實體</strong>。</p>
<p>如果傳遞的資訊比較簡單，或是傳遞資訊的動作只有一次的時候，透過物件的實體是比較簡單的方式</p>
<h4 id="範例A：_透過_Nib_的方式，取得ViewController2_的實體，傳遞資訊，指定user的值">範例A： 透過 Nib 的方式，取得ViewController2 的實體，傳遞資訊，指定user的值</h4><script src="https://gist.github.com/3825488.js?file=ViewController1.m"></script> 

<h4 id="範例B：在StoryBoard中，透過Segue_取得的實體，傳遞資訊，指定user的值">範例B：在StoryBoard中，透過Segue 取得的實體，傳遞資訊，指定user的值</h4><script src="https://gist.github.com/3825531.js?file=ViewController1.m"></script><span style="font-size: large;">**2.透過單例(Singleton)物件傳遞**</span>
透過物件的實體來傳遞固然很方便，但是很多時候，資訊的共享並不只存在於兩個ViewController之間，例如這個應用程式的作者資訊、目前登入者的暫存資料等等，應該是在一個共通的地方，每個人都是去同一個地方存取共通的資訊。這時我們就可以透過Singleton的方式，讓資訊傳遞更簡單。

<div class="separator" style="clear: both; text-align: center;">[![](http://3.bp.blogspot.com/-_ivnC4oFHjU/UGvy1U3Z79I/AAAAAAAACUM/3HjhOjMIaxg/s640/blog2.png)](http://3.bp.blogspot.com/-_ivnC4oFHjU/UGvy1U3Z79I/AAAAAAAACUM/3HjhOjMIaxg/s1600/blog2.png)</div>
以下是範例程式碼

<script src="https://gist.github.com/3825767.js"> </script>]]></content>
    <summary type="html">
    <![CDATA[<p>在iOS的開發中，我們經常會使用ViewController來控制每一個畫面的行為，<br>剛開始的時候最常遇到的問題就是<br><strong>
</strong></p>
<blockquote>
<p><strong>“怎麼在兩個ViewController之間傳遞資]]>
    </summary>
    
      <category term="Objective-C" scheme="http://blog.ryanwu.me/tags/Objective-C/"/>
    
      <category term="Singleton" scheme="http://blog.ryanwu.me/tags/Singleton/"/>
    
      <category term="iOS" scheme="http://blog.ryanwu.me/tags/iOS/"/>
    
      <category term="Coding" scheme="http://blog.ryanwu.me/categories/Coding/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[My Sublime Text 2 Plug-in V2]]></title>
    <link href="http://blog.ryanwu.me/2012/09/my-sublime-text-2-plug-in-v2.html"/>
    <id>http://blog.ryanwu.me/2012/09/my-sublime-text-2-plug-in-v2.html</id>
    <published>2012-09-26T10:10:00.000Z</published>
    <updated>2013-07-18T19:20:54.000Z</updated>
    <content type="html"><![CDATA[<p><a href="http://www.sublimetext.com/" target="_blank" rel="external">Sublime Text 2</a>&nbsp; is one of my favorite plain text editor. It supports hundred of plugin(still growthing) with highly productivity features.</p>
<p>I have listed my plugin on Windows 7 64bit in previous <a href="http://blog.flyworld.me/2012/03/my-sublime-text-2-on-windows-7-64bit.html" target="_blank" rel="external">post</a>. This is the updated version of my<a href="http://blog.flyworld.me/2012/08/mac-app-widget-configure.html" target="_blank" rel="external"> MacBook Air</a>.</p>
<p><strong><span style="font-size: large;">Productivity</span></strong></p>
<ul>
<li><p><strong>SublimeLinter</strong></p>
</li>
<li><p>automatically show potential error of code after saving&nbsp;<em>   <em>*Http Requester</em></em></p>
</li>
<li><p>Direct request url on new tab</p>
</li>
<li><p>[Cmd] + [Option] + [R]<em>   <em>*LiveReload</em></em></p>
</li>
<li><p>reload web page directly after saving (need browser extension)<em>   <em>*DocBlockr</em></em></p>
</li>
<li><p>Doc block generator&nbsp;</p>
</li>
<li><p>[Tab]<em>   <em>*AdvancedNewFile</em></em></p>
</li>
<li><p>Quick folder/file creator, even with path.</p>
</li>
<li><p>[Cmd] + [Option] + [N]<em>   <em>*All Autocomplete</em></em></p>
</li>
<li><p>Enable all opened file complete</p>
</li>
<li>[Tab]*   Gist</li>
<li>Terminal</li>
<li>SublimeCodeIntel</li>
<li><p>ZenCoding<br><strong><span style="font-size: large;">Code Operation (Align, format, encode)</span></strong></p>
</li>
<li><p>Alignment</p>
</li>
<li><p><strong>EncodingHelper</strong></p>
</li>
<li><p>Enable reopen file in different encoding*   HtmlTidy</p>
</li>
<li>Indent XML</li>
<li>JsFormat</li>
<li><p><strong>Prefixr</strong></p>
</li>
<li><p>Useful css formatter with prefix complete feature</p>
</li>
<li>[Ctrl] + [Cmd] + [X]*   SideBarEnhancements</li>
<li>SmartMarkdown</li>
<li><p>Sublime-HTMLPrettify<br><strong><span style="font-size: large;">Syntax &amp; Snippets</span></strong></p>
</li>
<li><p>CSS Snippets</p>
</li>
<li>EJS</li>
<li>HTML5</li>
<li>Jade</li>
<li>jQuery</li>
<li>jQuery Snippets pack</li>
<li>jQuery Mobile Snippets</li>
<li>LESS</li>
<li>Plist Binary</li>
<li>Stylus</li>
</ul>
]]></content>
    <summary type="html">
    <![CDATA[<p><a href="http://www.sublimetext.com/" target="_blank" rel="external">Sublime Text 2</a>&nbsp; is one of my favorite plain text editor. It]]>
    </summary>
    
      <category term="Editor" scheme="http://blog.ryanwu.me/tags/Editor/"/>
    
      <category term="Sublime Text 2" scheme="http://blog.ryanwu.me/tags/Sublime-Text-2/"/>
    
      <category term="Tools" scheme="http://blog.ryanwu.me/categories/Tools/"/>
    
  </entry>
  
  <entry>
    <title><![CDATA[Simple one-step web(http) Server]]></title>
    <link href="http://blog.ryanwu.me/2012/09/simple-one-step-webhttp-server.html"/>
    <id>http://blog.ryanwu.me/2012/09/simple-one-step-webhttp-server.html</id>
    <published>2012-09-21T18:36:00.000Z</published>
    <updated>2013-07-19T16:18:01.000Z</updated>
    <content type="html"><![CDATA[<p>We all know Mac OS has a powerful sharing feature called&nbsp;AirDrop, but it too simple to share to multiple users.&nbsp;Sometimes we really need a simple web server for sharing our static resource, For instance, &nbsp;HTML file, simple folder, &nbsp;or some multimedia files.<br><strong>&nbsp;</strong>We can use Python on Ubuntu…</p>
<p><span style="color: blue;">Python</span></p>
<p><strong>Usage :&nbsp;</strong></p>
<figure class="highlight"><table><tr><td class="code"><pre><span class="line">python -m SimpleHTTPServer [port]</span><br></pre></td></tr></table></figure>
<p>And I have to work under Micro$oft Windows sometimes…</p>
<p><strong><span style="color: blue;">F5&nbsp;</span></strong></p>
<p><a href="http://www.getf5.com/" target="_blank" rel="external">http://www.getf5.com/</a></p>
<p><strong>Install :&nbsp;</strong></p>
<ul>
<li>Download the F5 application</li>
</ul>
<p><strong>Usage :&nbsp;</strong></p>
<ul>
<li>Simply drag your folder or file into the application, it will shows the browsable URL.</li>
</ul>
<p>But i prefer nodejs based…</p>
<p><span style="color: blue;">NodeJS&nbsp;</span></p>
<p><strong><a href="https://github.com/andrewpthorp/simple-http-server" target="_blank" rel="external">Simple http server</a></strong></p>
<p><strong>Install :&nbsp;</strong><br><figure class="highlight sql"><table><tr><td class="code"><pre><span class="line">npm <span class="operator"><span class="keyword">install</span> simple-http-<span class="keyword">server</span> -g</span></span><br></pre></td></tr></table></figure></p>
<p><strong>Usage :&nbsp;</strong><br><figure class="highlight"><table><tr><td class="code"><pre><span class="line">nserver</span><br></pre></td></tr></table></figure></p>
]]></content>
    <summary type="html">
    <![CDATA[<p>We all know Mac OS has a powerful sharing feature called&nbsp;AirDrop, but it too simple to share to multiple users.&nbsp;Sometimes we re]]>
    </summary>
    
      <category term="Http" scheme="http://blog.ryanwu.me/tags/Http/"/>
    
      <category term="Node.js" scheme="http://blog.ryanwu.me/tags/Node-js/"/>
    
      <category term="Tools" scheme="http://blog.ryanwu.me/categories/Tools/"/>
    
  </entry>
  
</feed>