<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
<channel>
    <title>iphoting's Sink</title>
    <link>http://www.iphoting.com/blog/</link>
    <description>My pensieve on the web...</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.5.1 - http://www.s9y.org/</generator>
    <pubDate>Mon, 05 Dec 2011 18:08:01 GMT</pubDate>

    <image>
        <url>http://www.iphoting.com/blog/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: iphoting's Sink - My pensieve on the web...</title>
        <link>http://www.iphoting.com/blog/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Alternative Blog Engines</title>
    <link>http://www.iphoting.com/blog/archives/834-Alternative-Blog-Engines.html</link>
            <category>Computers</category>
            <category>Thoughts</category>
    
    <comments>http://www.iphoting.com/blog/archives/834-Alternative-Blog-Engines.html#comments</comments>
    <wfw:comment>http://www.iphoting.com/blog/wfwcomment.php?cid=834</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.iphoting.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=834</wfw:commentRss>
    

    <author>nospam@example.com (Ronald Ip)</author>
    <content:encoded>
    &lt;p&gt;Recently, I&amp;#8217;ve been hunting around for a blogging engine that can replace this ageing installation of &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.s9y.org/&#039;]);&quot;  href=&quot;http://www.s9y.org/&quot;&gt;Serendipity&lt;/a&gt;. The reason why I went with a full-blown &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.php.net/&#039;]);&quot;  href=&quot;http://www.php.net/&quot;&gt;PHP&lt;/a&gt; on-the-fly dynamically generated system was that there was no other way to provide interactivity to visitors to a blog. Stuff like commenting, link tracking, and page tracking were all impossible.&lt;/p&gt;

&lt;p&gt;However, with the rise of AJAX and JavaScript capabilities in browsers, what was once only possible on the server-side can now be delegated to the client-side. Rather than having the server operator foot the cost of running the whole infrastructure, part of it can be &amp;#8220;outsourced&amp;#8221; to visitors who are on similarly powerful computers.&lt;/p&gt;

&lt;p&gt;When dealing with a handful of visitors, the processing power requirements on the server-side is low and negligible. However, when you scale up to above 150 concurrent visitors, everything starts to crumble and the load becomes asymmetrical. Distributing or outsourcing part of the site generation to visitors can save a site when under heavy loads.&lt;/p&gt;

&lt;p&gt;With &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/google.com/analytics/&#039;]);&quot;  href=&quot;http://google.com/analytics/&quot;&gt;Google Analytics&lt;/a&gt; and &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/disqus.com/&#039;]);&quot;  href=&quot;http://disqus.com/&quot;&gt;Disqus&lt;/a&gt;, all dynamic parts of a site, once formally under the domain of dynamic server-side scripting, can now be offloaded to visitors with the use of asynchronous JavaScript. How it actually works is that the visitor&amp;#8217;s browser fetches a static and light-weight HTML from my server, parses it and loads externally linked JavaScript files from these content providers, such as Google and Disqus, and then renders and attaches the output onto the static HTML site.&lt;/p&gt;

&lt;p&gt;This way, a once static HTML page has become dynamic, with much of the data outsourced to content providers, and rendering to visitors&amp;#8217; browsers.&lt;/p&gt;

&lt;p&gt;The upsides of managing static HTML is that it requires very little infrastructure to support and aggressive caching can be employed with the help of CDNs. If a server migration is needed, the static HTML files just need to be mirrored over and all will be well.&lt;/p&gt;

&lt;p&gt;So now, the problem shifts to that of generating these static HTML files. Surely they all require a unified look and hence have much markup in common, manually managing this across thousands of files will be a chore. A different kind of blogging engine is thus required. One that takes a set of templates, applies it consistently to all your posts, possibly written and formatted in &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/daringfireball.net/projects/markdown/&#039;]);&quot;  href=&quot;http://daringfireball.net/projects/markdown/&quot;&gt;markdown&lt;/a&gt;, and outputs to a directory where a web server can serve files from it verbatim.&lt;/p&gt;

&lt;p&gt;As part of my hunt, I&amp;#8217;ve found 2 solutions that fit my requirements, one way or the other, with different and contrasting Pros and Cons.&lt;/p&gt;

&lt;p&gt;The easiest solution that I&amp;#8217;ve found is &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/calepin.co/&#039;]);&quot;  href=&quot;http://calepin.co/&quot;&gt;Calepin.co&lt;/a&gt;. It basically takes a folder of markdown formatted posts and runs it through &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/pelican.readthedocs.org/&#039;]);&quot;  href=&quot;http://pelican.readthedocs.org/&quot;&gt;Pelican&lt;/a&gt;, a python-based static blog generator, and generates a usable blog at http://&lt;em&gt;username&lt;/em&gt;.calepin.co.&lt;/p&gt;

&lt;p&gt;The upside is that it is easy to use and relies on Dropbox where you can access anywhere, including an iPad, with &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.iawriter.com/&#039;]);&quot;  href=&quot;http://www.iawriter.com/&quot;&gt;iA Writer&lt;/a&gt;. You blog will be generated when you click a button on the calepin site.&lt;/p&gt;

&lt;p&gt;The downside is that there is no custom CNAME (domain) support yet and there is no customisation available for the blog layout. You can&amp;#8217;t even have a static &amp;#8220;About&amp;#8221; page on the blog! These two downsides (especially the first) are an absolute deal breaker for me.&lt;/p&gt;

&lt;p&gt;The next blogging engine that I&amp;#8217;ve found is &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/octopress.org/&#039;]);&quot;  href=&quot;http://octopress.org/&quot;&gt;Octopress&lt;/a&gt;. It is basically a bunch of wrapper scripts and a curation of plugins around &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/github.com/mojombo/jekyll/wiki&#039;]);&quot;  href=&quot;https://github.com/mojombo/jekyll/wiki&quot;&gt;Jekyll&lt;/a&gt;—a no-frills static blog generator based on Ruby.&lt;/p&gt;

&lt;p&gt;It has all the features I need, such as CNAME (via heroku or github pages), static pages, but the downside is that it requires &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.ruby-lang.org/&#039;]);&quot;  href=&quot;http://www.ruby-lang.org/&quot;&gt;Ruby&lt;/a&gt; 1.9.2 to run. Mac OS X Lion and most other distributions come only with 1.8.x version of Ruby and getting the 1.9.x branch requires the installation of &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/beginrescueend.com/&#039;]);&quot;  href=&quot;http://beginrescueend.com/&quot;&gt;RVM&lt;/a&gt;, which in itself is easy but it makes ugly modifications to your shell environment. Fortunately, I can work-around this downside by generating my site in a virtualised environment with RVM and Ruby 1.9.2 installed.&lt;/p&gt;

&lt;p&gt;Given that Calepin is iterating at a rather high velocity, I&amp;#8217;m considering holding back for a while before I decide to rule it out completely. On Twitter, the &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/twitter.com/calepinapp&#039;]);&quot;  href=&quot;http://twitter.com/calepinapp&quot;&gt;developer&lt;/a&gt; has indicated that CNAME is on his todo list, and he might be considering support for static pages.&lt;/p&gt;

&lt;p&gt;Nonetheless, if for whatever reason I have to rule-out Calepin, I will consider adopting its typeface and layout cues into Octopress and write a few wrapper scripts around it to accept input from a Dropbox directory.&lt;/p&gt;

&lt;p&gt;It looks to be an exciting time for an epic redesign for my various web-properties.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Tue, 06 Dec 2011 02:06:54 +0800</pubDate>
    <guid isPermaLink="false">http://www.iphoting.com/blog/archives/834-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.5/</creativeCommons:license><category>blogging</category>
<category>computers</category>
<category>development</category>
<category>git</category>
<category>thoughts</category>

</item>
<item>
    <title>Git Hosting</title>
    <link>http://www.iphoting.com/blog/archives/833-Git-Hosting.html</link>
            <category>Computers</category>
    
    <comments>http://www.iphoting.com/blog/archives/833-Git-Hosting.html#comments</comments>
    <wfw:comment>http://www.iphoting.com/blog/wfwcomment.php?cid=833</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.iphoting.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=833</wfw:commentRss>
    

    <author>nospam@example.com (Ronald Ip)</author>
    <content:encoded>
    &lt;p&gt;&lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/github.com/&#039;]);&quot;  href=&quot;http://github.com/&quot;&gt;GitHub&lt;/a&gt; is an awesome place to host &lt;em&gt;public&lt;/em&gt; &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/git-scm.com/&#039;]);&quot;  href=&quot;http://git-scm.com/&quot;&gt;git&lt;/a&gt; repositories, absolutely free of charge. However, you will need at least a $7/month plan for 5 private repositories. That&amp;#8217;s quite expensive if the stuff you plan to host aren&amp;#8217;t that important or propriety and you just can&amp;#8217;t open source it.&lt;/p&gt;

&lt;p&gt;For those of you who have no idea what git is all about, consider reading &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/tom.preston-werner.com/2009/05/19/the-git-parable.html&#039;]);&quot;  href=&quot;http://tom.preston-werner.com/2009/05/19/the-git-parable.html&quot;&gt;The Git Parable&lt;/a&gt; for a better understanding of what version control systems are all about.&lt;/p&gt;

&lt;p&gt;In my search for a way to host my git repositories online but privately, I&amp;#8217;ve come across this fantastic solution—&lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/github.com/sitaramc/gitolite&#039;]);&quot;  href=&quot;https://github.com/sitaramc/gitolite&quot;&gt;gitolite&lt;/a&gt;. It is in short an authentication and authorisation system for multiple git repositories. It also comes bundled with many cool features, such as repo mirroring, on-the-fly repository creation, self-service permission administration, just to name a few. This system is very well documented, and you can learn about its internals without ever having to dig through its source.&lt;/p&gt;

&lt;p&gt;I now use it for all my projects that require versioning and it increased my usage of git tremendously.&lt;/p&gt;

&lt;p&gt;If you would like an account to host your git repositories privately, feel free to drop me a line.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Sun, 27 Nov 2011 01:59:01 +0800</pubDate>
    <guid isPermaLink="false">http://www.iphoting.com/blog/archives/833-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.5/</creativeCommons:license><category>computers</category>
<category>development</category>
<category>git</category>

</item>
<item>
    <title>iMessage</title>
    <link>http://www.iphoting.com/blog/archives/832-iMessage.html</link>
            <category>Computers</category>
            <category>Thoughts</category>
    
    <comments>http://www.iphoting.com/blog/archives/832-iMessage.html#comments</comments>
    <wfw:comment>http://www.iphoting.com/blog/wfwcomment.php?cid=832</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.iphoting.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=832</wfw:commentRss>
    

    <author>nospam@example.com (Ronald Ip)</author>
    <content:encoded>
    &lt;p&gt;I&amp;#8217;ve realised that iMessage will fall-back to SMS automatically when it detects that the recipient is unable to receive iMessages for whatever reason. This tiny feature alone one-ups Whatsapp.&lt;/p&gt;

&lt;p&gt;To the uninformed, iMessage was rolled out to all iOS devices that support iOS 5. This includes iPhone (3GS, 4, 4S), iPad, and iPod Touch. iMessage allows users to message one another via the Internet, free-of-charge, similar to the ubiquitous Whatsapp.&lt;/p&gt;

&lt;p&gt;It is deeply integrated into the SMS Messages app and will be in-use whenever the recipient of your message is on iOS 5 (and does not have iMessage disabled).  You will be able to tell that you are sending an iMessage when the interface chrome is blueish in colour, and the placeholder text in the message area reads &amp;#8216;iMessage&amp;#8217;.&lt;/p&gt;

&lt;p&gt;While it is clear that a Text Message will be sent when the recipient does not have iMessage enabled, what about cases in which the user has iMessage enabled, but does not have access to the Internet at the moment you send an iMessage to him?&lt;/p&gt;

&lt;p&gt;In the case of Whatsapp, your message will be stored on the server, and the user notified only after he establishes connection to the internet. Well, as some will say, you could always fall-back to SMS when you noticed that he has not read your message after awhile, albeit manually.&lt;/p&gt;

&lt;p&gt;As for iMessage, it will automagically fall-back to SMS the moment the system detects that the recipient has not received the message via iMessage, after a few minutes.&lt;/p&gt;

&lt;p&gt;So, don&amp;#8217;t worry about not being able to switch to SMS manually. You don&amp;#8217;t have to—the system will do all the heavy lifting for you.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Tue, 01 Nov 2011 22:05:15 +0800</pubDate>
    <guid isPermaLink="false">http://www.iphoting.com/blog/archives/832-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.5/</creativeCommons:license><category>apple</category>
<category>computers</category>
<category>iMessage</category>
<category>iOS</category>
<category>thoughts</category>

</item>
<item>
    <title>Steven P. Jobs: 1955–2011</title>
    <link>http://www.iphoting.com/blog/archives/831-Steven-P.-Jobs-19552011.html</link>
            <category>Computers</category>
            <category>Life</category>
            <category>Thoughts</category>
    
    <comments>http://www.iphoting.com/blog/archives/831-Steven-P.-Jobs-19552011.html#comments</comments>
    <wfw:comment>http://www.iphoting.com/blog/wfwcomment.php?cid=831</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.iphoting.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=831</wfw:commentRss>
    

    <author>nospam@example.com (Ronald Ip)</author>
    <content:encoded>
    &lt;p&gt;&lt;img src=&quot;http://24.media.tumblr.com/tumblr_lqhr46trpa1qz9917o1_500.png&quot; alt=&quot;Image by Jonathan Mak&quot; width=&quot;420&quot;&gt;&lt;br /&gt;
—&lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/jmak.tumblr.com/post/9377189056&#039;]);&quot;  href=&quot;http://jmak.tumblr.com/post/9377189056&quot;&gt;Jonathan Mak&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Today, &lt;a onclick=&quot;_gaq.push([&#039;_trackPageview&#039;, &#039;/extlink/www.apple.com/stevejobs/&#039;]);&quot;  href=&quot;http://www.apple.com/stevejobs/&quot;&gt;Steve Jobs left us&lt;/a&gt;. No words can be used to describe what he has done, or who he is, but one thing for sure, we can see his touch in the technology we use every day.&lt;/p&gt;

&lt;p&gt;He has propelled humanity forward, made things that were once inaccessible, accessible to everyone. He has raised the bar of possibility, turning hyperbole into reality.&lt;/p&gt;

&lt;p&gt;His passion for his vision brought him where few have gone. He has proven to us that passion trumps rationality. To live the life that your heart leads you, he did exactly that—nothing more, nothing less.&lt;/p&gt;

&lt;p&gt;As an inspiration to many of us, let&amp;#8217;s not forget, this man changed the world—we should too, in our own ways.&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s raise our glasses:&lt;br /&gt;&lt;/p&gt;

&lt;iframe width=&quot;420&quot; height=&quot;315&quot; src=&quot;http://www.youtube-nocookie.com/embed/8rwsuXHA7RA?rel=0&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;&lt;br /&gt;
Steve Jobs, 1955–2011, aged 56.&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Thu, 06 Oct 2011 18:51:45 +0800</pubDate>
    <guid isPermaLink="false">http://www.iphoting.com/blog/archives/831-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.5/</creativeCommons:license><category>apple</category>
<category>computers</category>
<category>death</category>
<category>life</category>
<category>steve jobs</category>
<category>thoughts</category>

</item>
<item>
    <title>Boot Camp on Older Intel-based Macs</title>
    <link>http://www.iphoting.com/blog/archives/830-Boot-Camp-on-Older-Intel-based-Macs.html</link>
            <category>Computers</category>
    
    <comments>http://www.iphoting.com/blog/archives/830-Boot-Camp-on-Older-Intel-based-Macs.html#comments</comments>
    <wfw:comment>http://www.iphoting.com/blog/wfwcomment.php?cid=830</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://www.iphoting.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=830</wfw:commentRss>
    

    <author>nospam@example.com (Ronald Ip)</author>
    <content:encoded>
    &lt;p&gt;While installing Windows 7 (x64) on a white (late-2007) Macbook via Boot Camp 4.0 (Lion), I received the following error when running the setup.exe from the disc downloaded and created by Boot Camp Assistant:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Boot Camp x64 is unsupported on this computer model.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;(But first before continuing, please ensure that Windows 7 64-bit edition is actually supported on your Mac before manually bypassing this error.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After digging around on the net, I&amp;#8217;ve found that this computer model check can be bypassed by running &amp;#8220;Bootcamp64.msi&amp;#8221; directly from the &amp;#8220;Drivers/Apple/&amp;#8221; folder, found in the Boot Camp support disk or drive.&lt;/p&gt;

&lt;p&gt;However, another annoying error may popup:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This installation requires elevated privileges. Launch the installer through setup.exe&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Back to square one. The option to run the .msi as a system administrator is blanked out within file properties. With right-click non-functional, there&amp;#8217;s not much more prodding I could do.&lt;/p&gt;

&lt;p&gt;After further digging all over the internet, I&amp;#8217;ve found that the solution is to launch Bootcamp64.msi via msiexec through a cmd.exe that has elevated permissions.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s how to go around doing it without right-clicking at all:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the Start Menu.&lt;/li&gt;
&lt;li&gt;Type &amp;#8220;cmd&amp;#8221; into the search box.&lt;/li&gt;
&lt;li&gt;Cmd.exe should appear as the first result under &amp;#8220;Programs&amp;#8221;.&lt;/li&gt;
&lt;li&gt;Instead of hitting &lt;em&gt;Enter&lt;/em&gt; to open it, hit &lt;em&gt;Ctrl + Shift + Enter&lt;/em&gt; (⌃⇧↩) instead.&lt;/li&gt;
&lt;li&gt;Accept the UAC dialog and command line will now run.&lt;/li&gt;
&lt;li&gt;Assuming that the disc of your Boot Camp support drivers is &amp;#8220;D:&amp;#8221;, enter the following in to the prompt:&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
  &lt;p&gt;D:&lt;/p&gt;
  
  &lt;p&gt;cd Drivers\Apple&lt;/p&gt;
  
  &lt;p&gt;msiexec /i Bootcamp64.msi&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Boot Camp (x64) installer should now start normally.&lt;/p&gt;

&lt;p&gt;As there I have yet to know any technical pitfalls of bypassing Apple&amp;#8217;s check in the setup.exe so far, I suspect the reason is more legal and technical-support related than just purely technical.&lt;/p&gt;

&lt;p&gt;Have fun!&lt;/p&gt;
 
    </content:encoded>

    <pubDate>Fri, 30 Sep 2011 17:43:24 +0800</pubDate>
    <guid isPermaLink="false">http://www.iphoting.com/blog/archives/830-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/2.5/</creativeCommons:license>
</item>

</channel>
</rss>
