<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:xhtml="http://www.w3.org/1999/xhtml"xmlns:media="http://search.yahoo.com/mrss/" ><channel><title>Exercises In Self-Indulgence</title> <atom:link href="http://blog.akinori.org/feed/" rel="self" type="application/rss+xml" /><link>http://blog.akinori.org</link> <description>No joy, no life</description> <lastBuildDate>Sun, 26 Feb 2012 04:09:25 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.2</generator> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.akinori.org/feed/" /> <atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/> <item><title>git-cp: cp(1) + git-add(1)</title><link>http://blog.akinori.org/2012/02/26/git-cp-cp1-git-add1/</link> <comments>http://blog.akinori.org/2012/02/26/git-cp-cp1-git-add1/#comments</comments> <pubDate>Sun, 26 Feb 2012 02:51:07 +0000</pubDate> <dc:creator>Akinori</dc:creator> <category><![CDATA[Tool]]></category> <category><![CDATA[Git]]></category> <category><![CDATA[Perl]]></category> <category><![CDATA[Shell Script]]></category><guid isPermaLink="false">http://blog.akinori.org/?p=102</guid> <description><![CDATA[I just wrote a quick but functionally decent implementation of git-cp(1), a missing subcommand that Subversion users would certainly get used to.  While I desperately wanted it I could imagine why it is not part of the Git core.  There are many forms of changeset that could make it difficult for SCM to trace history, and [...]<h3>&raquo; Related Posts &laquo;</h3><ul><li><a href="http://blog.akinori.org/2009/11/08/git-info/" rel="bookmark">git-info: Displaying information about a Git repository a la `svn info&#8217;</a></li><li><a href="http://blog.akinori.org/2010/03/01/git-shift/" rel="bookmark">git-shift: Changing commit timestamps in Git</a></li></ul> ]]></description> <content:encoded><![CDATA[<p>I just wrote a quick but functionally decent implementation of <a href="https://github.com/knu/git-cp"><code>git-cp(1)</code></a>, a missing subcommand that Subversion users would certainly get used to.  While I desperately wanted it I could imagine why it is not part of the Git core.  There are many forms of changeset that could make it difficult for SCM to trace history, and keeping track of file copies would only handle a small part of the problem.  For example, you could merge two files into one, move a portion from one file to another, or split a file into two, and recording a hint that a file copy is done would only serve its purpose in the last case.  The designers of Git had the insight to recognize that and instead of adding a feature to record a copy, they equipped <code>git-log</code> and <code>git-diff</code> with copy/move detection so that a copy can be found when they look back the history, making recorded hints unnecessary as the detection method gets mature enough to work effectively.<br /> But, but. I had been tired of typing <code>cp a b &amp;&amp; git add b</code> every time I feel like using an existing file as a template for making a new file, and thought it would feel great if you could just say <code>git cp a b</code> to start working on the new file quickly. Some may say the name <code>git cp</code> is misleading but it is just as evil as <code>git mv</code> that is too just a type saver. Plus, <code>git-cp</code> is made not to overwrite an existing file or copy a file to outside of the repository, so it is safe to use.<br /> I also wrote <code>git-touch(1)</code> for a similar reason. Whenever I want to create a new empty directory, I can say <code>git touch log/.gitignore</code> instead of a lengthy sequence of <code>mkdir log &amp;&amp; touch log/.gitignore &amp;&amp; git add log/.gitignore</code>. There&#8217;s also <code>git-untouch(1)</code> to undo it when you have made a typo or changed your mind on the new file path.<br /> These are all dedicated to those who joy in typing less.</p><h3>&raquo; Related Posts &laquo;</h3><ul><li><a href="http://blog.akinori.org/2009/11/08/git-info/" rel="bookmark">git-info: Displaying information about a Git repository a la `svn info&#8217;</a></li><li><a href="http://blog.akinori.org/2010/03/01/git-shift/" rel="bookmark">git-shift: Changing commit timestamps in Git</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.akinori.org/2012/02/26/git-cp-cp1-git-add1/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.akinori.org/2012/02/26/git-cp-cp1-git-add1/" /></item> <item><title>bcbiff(1) &#8211; Boxcar based IMAP biff</title><link>http://blog.akinori.org/2011/09/26/bcbiff1-boxcar-based-imap-biff/</link> <comments>http://blog.akinori.org/2011/09/26/bcbiff1-boxcar-based-imap-biff/#comments</comments> <pubDate>Mon, 26 Sep 2011 04:37:56 +0000</pubDate> <dc:creator>Akinori</dc:creator> <category><![CDATA[Ruby]]></category><guid isPermaLink="false">http://blog.akinori.org/?p=90</guid> <description><![CDATA[There&#8217;s one big common frustration among Gmail users on iPhone that you cannot receive instant notification for coming mails.  On the other hand, you know that Boxcar is one of the must-haves for iPhone bringing you a fully customizable push notification method that is flexible and easy to use. It may seem enabling push notification for Gmail [...]<h3>&raquo; Related Posts &laquo;</h3> ]]></description> <content:encoded><![CDATA[<p>There&#8217;s one big common frustration among Gmail users on iPhone that you cannot receive instant notification for coming mails.  On the other hand, you know that <a href="http://boxcar.io/">Boxcar</a> is one of the must-haves for iPhone bringing you a fully customizable push notification method that is flexible and easy to use.</p><p>It may seem enabling push notification for Gmail is as easy as setting up your Gmail account to forward important mails to your Boxcar address, but it actually isn&#8217;t.  Suppose you want to be only notified of mails hitting Inbox because you receive tons of mails on mailing lists or mail magazines that are tagged and archived by filters. You&#8217;ll find it not easy to write a filter rule that matches mails that will be dropping in Inbox, because in Gmail all filters are evaluated in parallel and you cannot define a rule based on tags added by other filters.</p><p>Another concern is your privacy.  Even if you managed to make up a filter rule and successfully set up forwarding to Boxcar, every mail forwarded would be relayed through external servers and end up having a copy on Boxcar.  I&#8217;m not saying I don&#8217;t trust Boxcar or relay servers, but there&#8217;s no point for you (nor for them!) to carry a private mail content including sensitive headers outside of Gmail just for notifying that a mail has received.</p><p>Here&#8217;s why I wrote <a href="https://github.com/knu/bcbiff">bcbiff(1)</a>.  Bcbiff is a tool that checks the Inbox folder (or any specified folders) on an IMAP server for unread mails and sends a notification via Boxcar for each.  Mail bodies and headers other than From, Date and Subject are stripped off, and the Message-Id&#8217;s of the latest 100 unread mails are cached so that you get just one notification per mail.  Bcbiff supports multiple mailboxes and Boxcar accounts.</p><p>To use it, you need a server on which you can periodically run bcbiff (Ruby 1.8.7+ or 1.9.2+ required) and send email via the sendmail(1) command.  See <a href="https://github.com/knu/bcbiff">README</a> for details.</p><p>Have fun with it!</p><h3>&raquo; Related Posts &laquo;</h3> ]]></content:encoded> <wfw:commentRss>http://blog.akinori.org/2011/09/26/bcbiff1-boxcar-based-imap-biff/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.akinori.org/2011/09/26/bcbiff1-boxcar-based-imap-biff/" /></item> <item><title>These Days</title><link>http://blog.akinori.org/2011/01/04/these-days/</link> <comments>http://blog.akinori.org/2011/01/04/these-days/#comments</comments> <pubDate>Mon, 03 Jan 2011 20:18:28 +0000</pubDate> <dc:creator>Akinori</dc:creator> <category><![CDATA[Ruby]]></category> <category><![CDATA[Uncategorized]]></category><guid isPermaLink="false">http://blog.akinori.org/?p=78</guid> <description><![CDATA[Er, um, a Happy New Year! Last year was just fantastic. Having spent a lot of time with my wife and little baby, I&#8217;ve had quite a lot of new things to think, learn and realize. It is quite inspiring to watch a baby grow! While there have been happy times, I had one sad [...]<h3>&raquo; Related Posts &laquo;</h3> ]]></description> <content:encoded><![CDATA[<p>Er, um, a Happy New Year!  Last year was just fantastic.  Having spent a lot of time with my wife and little baby, I&#8217;ve had quite a lot of new things to think, learn and realize.  It is quite inspiring to watch a baby grow!</p><p>While there have been happy times, I had one sad moment.  My grandma passed away in December at the age of 90, just before her 91st birthday.  If there is any solace to be taken, it is that I could make it to take our boy to see her in her last moments.  When I introduced her first and so far only great-grandson to her, even though she was only barely conscious, she forced her voice and cried out as if she was responding.  A fantastic coincidence is that they share a birthday.  I will tell this story at every opportunity to my son so our grandma lives forever in our hearts.</p><p>As for work, last year was the year I coded in Ruby the most out of five years at my current company.  These days I use Rails3 most of the time and I feel good about it.  As I come to use Ruby for work, my current interests are shifting toward enriching programming experience by enhancing user libraries rather than tweaking the core language and builtin libraries.  It is simply fun allowing myself just to be a user concentrating on productivity and specific problems he faces everyday.</p><p>This could be a reaction to my bitter experience working hard for everybody just to be criticised by nobody, but next time I get in the ring I believe I can do a better job than the last time based on these experiences.</p><p>Life is fun.  You can do whatever to make yours more colorful and enjoyable.  Now I&#8217;m getting excited as to what I would see this year!  Feel free to contact me if you are interested in me through my activities.</p><h3>&raquo; Related Posts &laquo;</h3> ]]></content:encoded> <wfw:commentRss>http://blog.akinori.org/2011/01/04/these-days/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.akinori.org/2011/01/04/these-days/" /></item> <item><title>WP-Syntax Download Extension</title><link>http://blog.akinori.org/2010/03/26/wp-syntax-download-extension/</link> <comments>http://blog.akinori.org/2010/03/26/wp-syntax-download-extension/#comments</comments> <pubDate>Fri, 26 Mar 2010 05:29:49 +0000</pubDate> <dc:creator>Akinori</dc:creator> <category><![CDATA[PHP]]></category> <category><![CDATA[WordPress]]></category><guid isPermaLink="false">http://blog.akinori.org/?p=67</guid> <description><![CDATA[Moving from tDiary, I&#8217;m kind of new to WordPress. I chose it because it was easy enough to run it on my server and had a lot of nifty, nice-looking plugins that would do me with everything that I needed.  As you may imagine, while using those plugins is fine and cool, looking into the [...]<h3>&raquo; Related Posts &laquo;</h3> ]]></description> <content:encoded><![CDATA[<p>Moving from tDiary, I&#8217;m kind of new to WordPress.  I chose it because it was easy enough to run it on my server and had a lot of nifty, nice-looking plugins that would do me with everything that I needed.  As you may imagine, while using those plugins is fine and cool, looking into the code is hell.  Through my journey of fixing problems I encountered and submitting a couple of patches to the plugin authors, I&#8217;ve seen full of code duplicates, unoptimized funtion call repetition, lack of look-up table pre-generation or even a simple memoization, parsing and substituting HTML with messy, awkward, terribly composed regexps, etc. etc. .  OK, life is short, let&#8217;s just turn a blind eye to them as long as the code works.<br /> Well,  so much for digressions.  I just wanted to write a code blog like this.  In order to do that, there is no doubt you need a good code highlighting engine with download/view buttons.  I searched around for the best, but no combination of plugins appealed to my taste.  I decided to write a plugin to add what is lacking for me  to <a href="http://wordpress.org/extend/plugins/wp-syntax/">WP-Syntax</a> and here it is.  <a href="http://wordpress.org/extend/plugins/wp-syntax-download-extension/">WP-Syntax Download Extension</a> renders a nice caption on each WP-Syntax highlighted code snippet as below.</p><div class="wp_syntax"><div class="wp_syntax_download"><div class="wp_syntax_download_filename"><a name="file-goto-next-window.el" href="#file-goto-next-window.el" title="goto-next-window.el">goto-next-window.el</a></div><div class="wp_syntax_download_actions"><a href="http://blog.akinori.org/wp-content/plugins/wp-syntax-download-extension/wp-syntax-download-extension.php/67/goto-next-window.el">raw</a> <a href="http://blog.akinori.org/wp-content/plugins/wp-syntax-download-extension/wp-syntax-download-extension.php/67/download/goto-next-window.el">download</a></div></div><div class="code"><pre class="lisp"><span class="br0">(</span><span class="kw1">defun</span> goto-next-window <span class="br0">(</span><span class="sy0">&amp;</span>optional arg<span class="br0">)</span>
  <span class="br0">(</span>interactive <span class="st0">"P"</span><span class="br0">)</span>
  <span class="br0">(</span><span class="kw1">cond</span> <span class="br0">(</span><span class="br0">(</span>one-window-p<span class="br0">)</span>
         <span class="br0">(</span>select-window <span class="br0">(</span>split-window-horizontally<span class="br0">)</span><span class="br0">)</span><span class="br0">)</span>
        <span class="br0">(</span>arg <span class="br0">(</span>other-window -<span class="nu0">1</span><span class="br0">)</span><span class="br0">)</span>
        <span class="br0">(</span>t <span class="br0">(</span>other-window <span class="nu0">1</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span>
<span class="br0">(</span>global-set-key <span class="st0">"<span class="es0">\C</span>-o"</span> 'goto-next-window<span class="br0">)</span>
<span class="br0">(</span>global-set-key <span class="st0">"<span class="es0">\M</span>-<span class="es0">\C</span>-o"</span> 'open-line<span class="br0">)</span></pre></div></div><p>I&#8217;ll probably add &#8220;print&#8221; and &#8220;copy to clipboard&#8221; buttons in the future.  Try it out and feel free to leave a comment.</p><h3>&raquo; Related Posts &laquo;</h3> ]]></content:encoded> <wfw:commentRss>http://blog.akinori.org/2010/03/26/wp-syntax-download-extension/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.akinori.org/2010/03/26/wp-syntax-download-extension/" /></item> <item><title>git-shift: Changing commit timestamps in Git</title><link>http://blog.akinori.org/2010/03/01/git-shift/</link> <comments>http://blog.akinori.org/2010/03/01/git-shift/#comments</comments> <pubDate>Sun, 28 Feb 2010 18:52:39 +0000</pubDate> <dc:creator>Akinori</dc:creator> <category><![CDATA[Tool]]></category> <category><![CDATA[Git]]></category> <category><![CDATA[Shell Script]]></category><guid isPermaLink="false">http://blog.akinori.org/?p=54</guid> <description><![CDATA[Git is known to be so flexible that one can even fix or delete old commits, but what would you do if you wanted to change the timestamp of a particular commit? This need can arise for various reasons, such as when a merged commit has picked the unwanted timestamp on squash, when a contributor&#8217;s [...]<h3>&raquo; Related Posts &laquo;</h3> ]]></description> <content:encoded><![CDATA[<p>Git is known to be so flexible that one can even fix or delete old commits, but what would you do if you wanted to change the timestamp of a particular commit? This need can arise for various reasons, such as when a merged commit has picked the unwanted timestamp on squash, when a contributor&#8217;s (or your notebook&#8217;s) machine clock was obviously far out of sync, and so on.<br /> <a href="http://github.com/knu/git-shift">git-shift</a> is the tool I wrote to change dates (timestamps) of specified commits in a git repository.  The choice of the name sounds a bit too bold, so maybe I will rename it later—but anyway.<br /> The usage is simple; specify the amount of time you want to shift timestamps by, and a list of commit IDs you want to change timestamps of. (Range notation is currently not supported)<br /> e.g. to move timestamps of commits identified by the IDs <code>f9e8d7c6</code> and <code>579acf</code> two hours backwards:</p><pre>$ git-shift -2h f9e8d7c6 579acf</pre><p>Use it wisely and enjoy your life, night and day workers! :D</p><h3>&raquo; Related Posts &laquo;</h3> ]]></content:encoded> <wfw:commentRss>http://blog.akinori.org/2010/03/01/git-shift/feed/</wfw:commentRss> <slash:comments>3</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.akinori.org/2010/03/01/git-shift/" /></item> <item><title>Making FriendFeed a perfect Twitter client</title><link>http://blog.akinori.org/2010/02/12/making-friendfeed-a-perfect-twitter-client/</link> <comments>http://blog.akinori.org/2010/02/12/making-friendfeed-a-perfect-twitter-client/#comments</comments> <pubDate>Fri, 12 Feb 2010 13:20:30 +0000</pubDate> <dc:creator>Akinori</dc:creator> <category><![CDATA[Ruby]]></category> <category><![CDATA[FriendFeed]]></category> <category><![CDATA[tw2ff]]></category> <category><![CDATA[Twitter]]></category><guid isPermaLink="false">http://blog.akinori.org/?p=42</guid> <description><![CDATA[As you all know, FriendFeed is equipped with some features to cooperate with Twitter. FriendFeed gives you with automatic CC to Twitter for writing and realtime feed updates for reading, and helps you find your Twitter friends on FriendFeed. However, they are just not enough because you cannot expect everyone to join FriendFeed. For Twitter [...]<h3>&raquo; Related Posts &laquo;</h3> ]]></description> <content:encoded><![CDATA[<p>As you all know, FriendFeed is equipped with some features to cooperate with Twitter.  FriendFeed gives you with automatic CC to Twitter for writing and realtime feed updates for reading, and helps you find your Twitter friends on FriendFeed.  However, they are just not enough because you cannot expect everyone to join FriendFeed.  For Twitter users who don&#8217;t or wouldn&#8217;t have their accounts on FriendFeed, you have to set up an &#8220;imaginary friend&#8221; for each one of them by hand to make their tweets come up on your FriendFeed timeline.  Even after all these hard work, you are left with some friends who make their tweets private, which FriendFeed cannot import.  What about @replies?  You don&#8217;t even notice on FriendFeed that someone is talking @you when your friends on Twitter are enjoying spontaneous talk with others, including strangers.</p><h3>Introducing tw2ff</h3><p>Here&#8217;s my answer to all these inconveniences.  I wrote a tool called <a href="http://github.com/knu/ruby-friendfeed"><code>tw2ff</code></a> that makes your FriendFeed life much easier in terms of integration with Twitter.  It consists of the following features:</p><ul><li>Friend list synchronization: importing Twitter-only friends to FriendFeed as &#8220;imaginary friends&#8221;</li><li>@replies import: generating a custom RSS feed of @replies for importing to FriendFeed</li><li>Protected tweets import: generating a custom RSS feed of protected tweets for importing to FriendFeed</li><li>Favorites synchronization: synchronizing FriendFeed likes and Twitter favorites</li><li>.. and some more</li></ul><h3>Installation</h3><p><code>tw2ff</code> is bundled in my &#8220;friendfeed&#8221; ruby gem, so you can install it right away by just one command as follows:</p><pre>gem install friendfeed</pre><p>The first thing you do after the installation is run <code>tw2ff config</code> and set up credentials for your Twtter and FriendFeed accounts.  It invokes a text editor with the following content, so fill in with your login information and save the file.</p><pre>---
friendfeed:
  username: "username"
  password: "password"
twitter:
  username: "username"
  password: "password"
</pre><p>The file is located at <code>~/.tw2ff/config.yml</code>, which directory is created with mode <code>700</code>.  Make sure it is never read by anyone else.</p><h3>Friend list synchronization</h3><p>You are now ready to run <code>tw2ff friends</code> to import your Twitter-only friends to FriendFeed as &#8220;imaginary friends&#8221;.  It&#8217;s automatic, it compares your friend list on Twitter with subscriptions on FriendFeed and creates one imaginary friend for each Twitter friend missing in FriendFeed, where the screen name is enclosed with parentheses so you can easily see it is an imaginary friend.  The <code>tw2ff friends</code> command does not change anything with existing imaginary friends, so you can safely rerun it at any time to keep your FriendFeed timeline in sync with that of Twitter.  You will likely want to run it every time you follow a new person on Twitter, but it is also an idea to register this as a daily cron job and just leave the task to it.<br /> One note about replying to imaginary friends.  If you post a comment to an imaginary friend&#8217;s entry with the &#8220;Also send this comment as an @reply twitter from <you>&#8221; box checked, it will be visible in Twitter but not on FriendFeed because imaginary friends are private to you.<br /> After a while, you may happen to visit Twitter or run a Twitter client and notice that some of your friends have changed their icons.  That&#8217;s when you run <code>tw2ff icons</code>, a command  that updates all imaginary friends icons with those of their Twitter accounts.   Maybe a candidate for a monthly cron job or so.</p><h3>Import of @replies and protected tweets</h3><p>The only way to import private feeds to FriendFeed is put the feed in a secret place no one else would know and feed it to your own imaginary friend. (FriendFeed does not support any kind of authentication in feed crawling)<br /> First off, create an imaginary friend named, say, &#8220;@replies&#8221;.  This is where your secret @replies RSS is fed to.  Then set up a cron job that invokes <code>tw2ff replies replies.rss</code> and upload the file <code>replies.rss</code> to a secret location, preferably only fetchable via HTTPS.  Now you can add a service to the above said imaginary friend and set the secret location.  There are a couple of options to choose what kind of replies should be included to the feed: <code>--include-friends</code> and <code>--include-protected</code>.  The default is both off.  Specify them as needed.  In addition, by the way, I highly recommend adding your <a href="http://favstar.fm/">favstar</a> feed to the imaginary friend so you can see more as to how others are reacting to you.  Currently there is no support in <code>tw2ff</code> for your tweets RT&#8217;d, but I&#8217;ll implement it some way in near future.<br /> Okay, you&#8217;re done with @replies and now, you can pull protected tweets into your FriendFeed timeline the same way by importing a feed produced by <code>tw2ff protected</code>.  Please be doubly sure that you won&#8217;t leak the feed out to public.</p><h3>Favorites synchronization</h3><p>I much prefer FriendFeed likes to Twitter favorites because they are visible to others, naturally including the one whose post is favorited.  That makes it easier to share topics not just with your friends but across the much wider friends-of-friends community.  Recently Twitter introduced the RT feature to help people share their attentions, but I don&#8217;t think it would have been needed if favorites had been implemented and featured properly.<br /> Let&#8217;s get back to the subject.  I use &#8220;likes&#8221; a lot in FriendFeed and whenever I &#8220;like&#8221; a tweet I want to &#8220;favorite&#8221; it on Twitter at the same time, and vice versa.  That&#8217;s exactly what <code>tw2ff favorites</code> does.  It looks into the recently liked entries for tweets, and the ones not yet favorited are favorited on Twitter.  Likewise, it searches the recent entries on your FriendFeed timeline for your favorited tweets, and the ones not yet liked are liked on FriendFeed.  All you need to do it make it a cron job.  Problem solved!</p><h3>To-Do&#8217;s</h3><ul><li>Support for RT&#8217;s</li><li>Switching Twitter client access to OAuth</li><li>Utilizing Twitter&#8217;s streaming API and eliminate the time lag of @replies/protected tweet feeds</li><li>Switching FriendFeed client access to v2 API</li><li>(You add one)</li></ul><h3>Conclusion</h3><p>With the help of <code>tw2ff</code> as described above, I can live just with FriendFeed without the need for always keeping another window for Twitter.  FriendFeed quite shines when it stands as the one-stop portal for sharing what you and your friends are up to.  Empower your FriendFeed life with <code>tw2ff</code>!</p><h3>&raquo; Related Posts &laquo;</h3> ]]></content:encoded> <wfw:commentRss>http://blog.akinori.org/2010/02/12/making-friendfeed-a-perfect-twitter-client/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.akinori.org/2010/02/12/making-friendfeed-a-perfect-twitter-client/" /></item> <item><title>FriendFeed Window</title><link>http://blog.akinori.org/2009/12/28/friendfeed-window/</link> <comments>http://blog.akinori.org/2009/12/28/friendfeed-window/#comments</comments> <pubDate>Mon, 28 Dec 2009 12:17:25 +0000</pubDate> <dc:creator>Akinori</dc:creator> <category><![CDATA[JavaScript]]></category> <category><![CDATA[Bookmarklet]]></category> <category><![CDATA[FriendFeed]]></category><guid isPermaLink="false">http://blog.akinori.org/?p=19</guid> <description><![CDATA[We the FriendFeeders received a great news the other day, that the near realtime synchronization between FriendFeed and Twitter has finally been back in business! One of the most selling points of FriendFeed (to me at least) was its being a one-stop source for your friends&#8217; activities and blog/news feeds around the world, but the [...]<h3>&raquo; Related Posts &laquo;</h3> ]]></description> <content:encoded><![CDATA[<p>We the FriendFeeders received <a href="http://www.techcrunch.com/2009/12/22/twitter-friendfeed-realtime/">a great news</a> the other day, that the near realtime synchronization between FriendFeed and Twitter has finally been back in business!</p><p>One of the most selling points of FriendFeed (to me at least) was its being a one-stop source for your friends&#8217; activities and blog/news feeds around the world, but the breakage of Twitter synchronization almost ruined that because nowadays most of what you and your friends are up to is in realtime tweets.  I&#8217;m happy to see it come back and find that FriendFeed isn&#8217;t so far neglected even after Facebook&#8217;s acquisition.</p><p>Anyway, now that FriendFeed is back I want a nice FriendFeed client that fits a corner of my desktop.  If you are a FriendFeeder  you know the best client for FriendFeed is a web browser, and as much as you do I really miss <a href="http://friendfeed.com/realtime?embed=1">the realtime window</a>.  I thought it might still serve as a good client, but it lacks some critical features like &#8220;CC to Twitter&#8221; which you need to reply to your imaginary friends (= non-friendfeeding twitterers you imported), that were added after the site renewal where everything went realtime and the realtime window was gone off from the site.</p><p>So, here&#8217;s a bookmarklet I hacked up:</p><p style="text-align: center;"><a href="javascript:void(function(){var%20win=window.open(&quot;http://friendfeed.com/&quot;,&quot;ffsmall&quot;,&quot;width=480,height=640,menubar=no,toolbar=no,scrollbars=yes,location=no&quot;);(function(){var%20doc=win.document;if%20(!doc%20||%20$(&quot;#footer&quot;,doc).length&lt;=0){return%20setTimeout(arguments.callee,1000);}var%20h=$(&quot;head&quot;,doc);var%20b=doc.createElement(&quot;base&quot;);$(b).attr(&quot;target&quot;,&quot;_blank&quot;);h.append(b);var%20st=doc.createElement(&quot;style&quot;);$(st).html(&quot;img.picture.medium{width:25px;height:25px;}\n.entry%20.body{margin-left:38px;}\n#sidebar{display:none;}\n#container{padding:0px;}\n#body{margin:0px;}\n.entry{padding:3px;}\n.box%20.box-body{padding:3px;}&quot;);h.append(st);})();})();">FriendFeed Window</a></p><p>Drag the link above to your bookmark toolbar to install the bookmarklet,  and whenever you want to open a FriendFeed window, fire the bookmarklet <em>on a <a href="http://friendfeed.com/">FriendFeed</a> page</em>.  (This is due to security restrictions and jQuery dependency)</p><p>Enjoy!</p><p><em>[Update on 2009-12-29: Added some code to set the base target to "_blank".]</em></p><h3>&raquo; Related Posts &laquo;</h3> ]]></content:encoded> <wfw:commentRss>http://blog.akinori.org/2009/12/28/friendfeed-window/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.akinori.org/2009/12/28/friendfeed-window/" /></item> <item><title>git-info: Displaying information about a Git repository a la `svn info&#8217;</title><link>http://blog.akinori.org/2009/11/08/git-info/</link> <comments>http://blog.akinori.org/2009/11/08/git-info/#comments</comments> <pubDate>Sat, 07 Nov 2009 18:11:13 +0000</pubDate> <dc:creator>Akinori</dc:creator> <category><![CDATA[Tool]]></category> <category><![CDATA[Git]]></category> <category><![CDATA[Shell Script]]></category><guid isPermaLink="false">http://blog.akinori.org/?p=5</guid> <description><![CDATA[I haven&#8217;t been writing much in English about technical stuff, so I am going to start this blog with a series of articles that introduce some of my little works. I picked git-info(1) to begin with, which is a small shell script that provides Git with a similar functionality to &#8220;svn info&#8220;.  As a long [...]<h3>&raquo; Related Posts &laquo;</h3> ]]></description> <content:encoded><![CDATA[<p>I haven&#8217;t been writing much in English about technical stuff, so I am going to start this blog with a series of articles that introduce some of my little works.</p><p>I picked <code>git-info(1)</code> to begin with, which is a small shell script that provides Git with a similar functionality to &#8220;<code>svn info</code>&#8220;.  As a long time user of Subversion who was new to Git I really missed a handy command to see repository information at a glance, so I wrote this.</p><p><a title="knu's git-info at master - GitHub" href="http://github.com/knu/git-info">knu&#8217;s git-info at master &#8211; GitHub</a></p><p>A sample output (at the time of writing) is as follows.</p><pre>% git info
Repository Path: /home/knu/src/github/git-info/.git
Path: /home/knu/src/github/git-info
Remote Repositories:
    origin  git@github.com:knu/git-info.git (fetch)
    origin  git@github.com:knu/git-info.git (push)
Remote Branches:
      origin/HEAD -&gt; origin/master
      origin/master
Local Branches:
    * master
Repository Configuration:
    [core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
    [remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = git@github.com:knu/git-info.git
    [branch "master"]
        remote = origin
        merge = refs/heads/master
Last Changed Commit ID: da32fa59f7fab84606ce3c144e636043e96d8063
Last Changed Author: Akinori MUSHA
Last Changed Date: Tue Jul 28 10:37:09 2009 +0900
Last Changed Log:
    Take the directory as a physical path.</pre><p>Hope this helps you on your way.</p><h3>&raquo; Related Posts &laquo;</h3> ]]></content:encoded> <wfw:commentRss>http://blog.akinori.org/2009/11/08/git-info/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.akinori.org/2009/11/08/git-info/" /></item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching using memcached
Object Caching 1428/1462 objects using memcached

Served from: blog.akinori.org @ 2012-05-19 09:02:43 -->
