<?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/"
	>

<channel>
	<title>Shallow and Pedantic</title>
	<atom:link href="http://blog.lutzky.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.lutzky.net</link>
	<description>Like Calculus in a kiddie pool</description>
	<lastBuildDate>Fri, 05 Feb 2010 18:45:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Broken phone screen &#8211; data rescue</title>
		<link>http://blog.lutzky.net/2009/10/31/broken-phone-screen-data-rescue/</link>
		<comments>http://blog.lutzky.net/2009/10/31/broken-phone-screen-data-rescue/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 00:32:07 +0000</pubDate>
		<dc:creator>Ohad Lutzky</dc:creator>
				<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://blog.lutzky.net/?p=190</guid>
		<description><![CDATA[Last weekend I broke my Nokia 6120&#8217;s screen. I have a military phone, which is far cheaper, so I&#8217;ve decided to keep it offline. However, being the sentimental guy that I am, I did want to save all of my contacts and SMS messages (in addition to the photos, which presented less of a problem). [...]]]></description>
			<content:encoded><![CDATA[<p>Last weekend I broke my Nokia 6120&#8217;s screen. I have a military phone, which is far cheaper, so I&#8217;ve decided to keep it offline. However, being the sentimental guy that I am, I did want to save all of my contacts and SMS messages (in addition to the photos, which presented less of a problem). This proved to be a bit of a challenge without the screen working.</p>
<p>Usually, when you connect the phone via USB, it asks if you want &#8220;PC Suite mode&#8221; or &#8220;Data Transfer mode&#8221;. The &#8220;Data Transfer&#8221; mode has the phone show up as a standard USB storage device, which allows for easy transfer of MP3 files, photos and videos to and from the phone, without any nokia-specific software. However, it only works for the external SD card, so you can&#8217;t use that to access SMS messages or contacts.</p>
<p>I usually only need &#8220;Data Transfer&#8221; mode, so I changed the default to that. Today I regret that decision, as it cost me a couple of hours&#8217; work. I called the Orange hotline, and they did their best to help me, including trying to blind-guide me through the menus, which failed because the menus are actually dynamic and I didn&#8217;t have the default setup. They actually got me 90% of the way there &#8211; here&#8217;s the solution I found: Hit the red (disconnect) button, and type the Soft Reset GSM code: *#7780#. Now press the &#8220;left menu&#8221; key (not the left key, nor the menu key &#8211; the left of the two &#8220;dynamic&#8221; keys) &#8211; this part was what the Orange hotline missed, because it seemed so obvious. Then hit 12345 (this is the default &#8220;secret code&#8221;), and the left menu key again. I found this by watching a demo of the soft reset on YouTube.</p>
<p>At this point I used VirtualBox and the Nokia PC suite (both are free-as-in-beer) to do the heavy lifting. I now have a text file with all of my contacts, a CSV file with all of my SMS messages, and all of my images saved both to my computer and a DR site. Now I just need to upgrade my military phone (Mirs)&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lutzky.net/2009/10/31/broken-phone-screen-data-rescue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Loving the new Totem</title>
		<link>http://blog.lutzky.net/2009/10/10/loving-the-new-totem/</link>
		<comments>http://blog.lutzky.net/2009/10/10/loving-the-new-totem/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 11:04:25 +0000</pubDate>
		<dc:creator>Ohad Lutzky</dc:creator>
				<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://blog.lutzky.net/?p=182</guid>
		<description><![CDATA[Totem is Gnome&#8217;s built-in media player, and it really annoyed me in previous versions, and had me switching to VLC. However, the version included in the Ubuntu 9.10 release candidate has two features which are very important, in my opinion. The first feature is smooth graphical integration with compositing managers (such as compiz). In previous [...]]]></description>
			<content:encoded><![CDATA[<p>Totem is Gnome&#8217;s built-in media player, and it really annoyed me in previous versions, and had me switching to VLC. However, the version included in the Ubuntu 9.10 release candidate has two features which are very important, in my opinion. The first feature is smooth graphical integration with compositing managers (such as compiz). In previous versions, as well as VLC, once you fullscreen the window, moving the mouse (which causes the cursor and the partial interface to appear) causes a very annoying flicker. This has been fixed (at least on my box, using an NVidia card). </p>
<p>The second, more important feature, is the exact one I&#8217;ve been missing and talked about in <a href="http://blog.lutzky.net/2009/09/05/my-show-downloading-stack">the previous post</a> &#8211; hit Edit->Preferences->Start playing files from last position, and Totem will keep track of your last playback position when you close the video. Reading <a href="http://article.gmane.org/gmane.comp.gnome.svn/223873">the implementation patch</a> shows that there is a certain threshold for this &#8211; the position won&#8217;t be saved if you&#8217;re too close to the beginning or end of the video. So there, my show downloading stack now has every feature I&#8217;d want from Miro, without the downsides I&#8217;ve mentioned.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lutzky.net/2009/10/10/loving-the-new-totem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My show downloading stack</title>
		<link>http://blog.lutzky.net/2009/09/05/my-show-downloading-stack/</link>
		<comments>http://blog.lutzky.net/2009/09/05/my-show-downloading-stack/#comments</comments>
		<pubDate>Sat, 05 Sep 2009 11:42:00 +0000</pubDate>
		<dc:creator>Ohad Lutzky</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://blog.lutzky.net/?p=172</guid>
		<description><![CDATA[I love watching TV, and hate it. Regular show schedules are horrible, commercial breaks are annoying, and the ability to rewind is very important. I love Hot&#8217;s VOD service (and happily pay to watch the shows I enjoy), but my true favorite for getting my entertainment is everyone&#8217;s favorite not-a-dumptruck, the internet. In this post, [...]]]></description>
			<content:encoded><![CDATA[<p>I love watching TV, and hate it. Regular show schedules are horrible, commercial breaks are annoying, and the ability to rewind is very important. I love Hot&#8217;s VOD service (and happily pay to watch the shows I enjoy), but my true favorite for getting my entertainment is everyone&#8217;s favorite not-a-dumptruck, the internet. In this post, I will describe how I do it.</p>
<p>Everything I describe in this post can be done using <a href="http://getmiro.com">miro</a>. It&#8217;s a neat piece of software, which lacked polish in version 2.4 (2.5 is out now though), but there are a few things I don&#8217;t like about it:</p>
<ul>
<li>You have to be graphically logged in for it to run. Among other things, this means that if someone reboots your computer, there&#8217;s no way to get it to start automatically. (I&#8217;ll be very happy to know if I&#8217;m wrong about this)</li>
<li>It doesn&#8217;t give you as much control as I&#8217;d like over torrents.</li>
<li>Its BitTorrent client doesn&#8217;t perform as well as rtorrent.</li>
</ul>
<p>However, Miro does one thing which I haven&#8217;t figured out how to do myself yet: It keeps track of your position within watched shows. That is, stop watching a show -and next time playback will resume from the same place.</p>
<p><span id="more-172"></span>The first thing you want to do is get a good RSS feed for your show. Unfortunately, <a href="http://revision3.com">Revision3</a>&#8217;s shows (many of which are quite good), are direct HTTP download links, as per the advertiser&#8217;s request. For other shows, you can find torrent RSS feeds, which make much better use of everyone&#8217;s bandwidth. Also, downloading will be handled by our trusty rtorrent, which we can configure for bandwidth limiting.</p>
<p>To download RSS feeds, I use <a href="http://flexget.com/">flexget</a>. It does its job well, but doesn&#8217;t support bandwidth limiting. It accepts a simple YAML configuration file, and has good logging. I run it as a cron job &#8211; its locking mechanism prevents multiple instances from running simultaneously. For non-torrents, I set the output directory to <tt>~/torrents/inbox</tt>. For torrents, I set the output directory to <tt>~/torrents/from_rss</tt>.</p>
<p>For downloading torrents, I use <a href="http://libtorrent.rakshasa.no/">rtorrent</a>. It&#8217;s a curses-based client which performs very well. My <tt>.rtorrent.rc</tt> file looks like this:</p>
<pre class="prettyprint">download_rate = 30
upload_rate = 2
directory = /home/ohad/torrents/in_progress
on_finished = move_complete,"execute=mv,-u,$d.get_base_path=,~/torrents/inbox/ ;d.set_directory=~/torrents/inbox/"
session = /home/ohad/torrents/.session
schedule = watch_directory,5,5,load_start=/home/ohad/torrents/from_rss/*.torrent
schedule = untied_directory,5,5,remove_untied=
schedule = throttle_1,23:00:00,24:00:00,download_rate=0
schedule = throttle_2,05:00:00,24:00:00,download_rate=30
port_range = 6881-6889
encryption = allow_incoming,enable_retry,prefer_plaintext
dht = auto
peer_exchange = yes
scgi_local = /tmp/rtorrent-scgi.socket</pre>
<p>Interesting things to note here are:</p>
<ul>
<li>Downloads live in one directory, but get moved to the <tt>inbox</tt> directory when they&#8217;re done.</li>
<li>The <tt>session</tt> directory is important &#8211; this allows rtorrent to resume downloads if it&#8217;s shut down.</li>
<li>The <tt>from_rss</tt> directory is watched for new torrent files. When the relevant downloads are stopped, <tt>remove_untied</tt> occurs and the torrent files are deleted.</li>
<li>Throttling is fully customizable.</li>
<li>The SCGI socket is useful for rtgui &#8211; we&#8217;ll get to that.</li>
</ul>
<p>I have a &#8220;watchdog&#8221;-style cron job which makes sure it&#8217;s running if the computer is up. This is not as elegant as starting it from an RC-script, but keeps the whole setup confined to the limits of my own user. Again, rtorrent has a lock-file which prevents multiple instances from running.</p>
<pre class="prettyprint">#!/bin/bash
# A simple script to make sure I am running rtorrent in a screen

set -e

SCGI_SOCKET=/tmp/rtorrent-scgi.socket
SESSION_DIR=~/torrents/.session

screen -d -m -fn -S rtorrent -s /bin/bash -t rtorrent -m nice rtorrent

while [[ ! -S $SCGI_SOCKET ]]; do sleep 1; done

if [[ -S $SCGI_SOCKET ]]; then
	chgrp www-data $SCGI_SOCKET
	chmod g+rwx $SCGI_SOCKET
fi</pre>
<p><a href="http://code.google.com/p/rtgui/">RTGUI</a> provides a nice web-based interface. It&#8217;s a bit tricky to configure, and you&#8217;ll need to use an HTTP server &#8211; preferably lighttpd, as it has support for SCGI UNIX sockets (as opposed to SCGI TCP sockets). This lets you keep the number of open network ports to a minimum. This is all well-documented on the RTGUI site.</p>
<p>Finally, I&#8217;ve written a little python script called <a href="http://github.com/lutzky/check_shows">check_shows</a> which uses libnotify to show a pretty pop-up whenever downloads complete. It&#8217;s a tiny little hack which uses <tt>inotify</tt>, which is lots of fun.</p>
<p>That&#8217;s it. Any neat tricks are welcome <img src='http://blog.lutzky.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lutzky.net/2009/09/05/my-show-downloading-stack/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Timezones are fickle</title>
		<link>http://blog.lutzky.net/2009/04/18/timezones-are-fickle/</link>
		<comments>http://blog.lutzky.net/2009/04/18/timezones-are-fickle/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 14:45:15 +0000</pubDate>
		<dc:creator>Ohad Lutzky</dc:creator>
				<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://blog.lutzky.net/?p=158</guid>
		<description><![CDATA[I&#8217;ve been trying to work out a system to be able to cleanly switch between IST (Israel Standard Time, GMT+2:00) and IDT (Israel Daylight savings Time, GMT+3:00) on command. The logical way to do this, in my opinion, is to have two separate files in /usr/share/zoneinfo, say IsraelIST and IsraelIDT, and copy (or link) the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been trying to work out a system to be able to cleanly switch between IST (Israel Standard Time, GMT+2:00) and IDT (Israel Daylight savings Time, GMT+3:00) on command. The logical way to do this, in my opinion, is to have two separate files in <tt>/usr/share/zoneinfo</tt>, say <tt>IsraelIST</tt> and <tt>IsraelIDT</tt>, and copy (or link) the relevant one as <tt>/etc/localtime</tt>. The trick is creating the <tt>IsraelIDT</tt> file:<br />
My first guess was the following <tt>zic</tt> source-file:</p>
<pre class="prettyprint">
# Zone    NAME                GMTOFF  RULES/SAVE  FORMAT  [UNTIL]
Zone      IsraelIDT           2:00    01:00       IDT
</pre>
<p>Now, this almost works. The problem is that both <tt>is_dst</tt> is set and <tt>timezone = -10800</tt> (3 hours &#8211; should be 2, as it should represent local standard time), so some software double-compensates here for a grand total of GMT+4:00. After some research (walking through <tt>__tzfile_read</tt> gave the biggest hint), it turns out that <tt>timezone</tt> is set according to the minimal local time type which is <i>transitioned into</i>. So I came up with this file:</p>
<pre class="prettyprint">
# Rule  NAME    FROM  TO    TYPE  IN   ON       AT    SAVE  LETTER/S
Rule    ZionIDT min   1939  -     Jan  1        00:00 1:00  D
Rule    ZionIDT 1939  only  -     Jan  1        00:00 0:00  S
Rule    ZionIDT 1940  max   -     Jan  1        00:00 1:00  D

# Zone    NAME                GMTOFF  RULES/SAVE  FORMAT  [UNTIL]
Zone      IsraelIDT           2:00    ZionIDT     I%sT
</pre>
<p>Sounds about right, nay? Even my handy little <tt>pyzdump</tt> confirms that it looks about how I want it to:</p>
<pre>
./pyzdump.py /usr/share/zoneinfo/IsraelIDT
Transitions:
['At Sat Dec 31 23:00:00 1938, switch to IST',
 'At Sun Dec 31 22:00:00 1939, switch to IDT']
Types:
[&lt;TZType IDT: UTC+10800 dst=True&gt;, &lt;TZType IST: UTC+7200 dst=False&gt;]
</pre>
<p>(pardon the lack of syntax highlighting &#8211; my prettyprinter fails me)</p>
<p>However, it still doesn&#8217;t work. A test program:</p>
<pre class="prettyprint">
int main() {
    tzset();
    time_t t = time(NULL);
    printf("Timezone name is %s, timezone=%ld\n", __tzname[1], timezone);
    printf("The time is %s", ctime(&#038;t));
    printf("Timezone name is %s, timezone=%ld\n", __tzname[1], timezone);
    return 0;
}
</pre>
<p>And its results, as run at 14:42:17 UTC, which is 19:42:17 IDT:</p>
<pre class="prettyprint">
Timezone name is IDT, timezone=-7200
The time is Sat Apr 18 14:42:17 2009
Timezone name is UTC, timezone=0
</pre>
<p>Or, as I described it to a friend:</p>
<p>Me: Hi computer, do you know what timezone are we in?<br />
Computer: Yeah, it&#8217;s Israel Daylight Savings time, GMT+2:00 for standard time.<br />
Me: OK, and what time is it?<br />
Computer: 14:42<br />
Me: No, that&#8217;s 3 hours late. What timezone are we in?<br />
Computer: Umm&#8230; UTC?<br />
Me: You just said IDT.<br />
Computer: Nuh-uh.</p>
<p>I&#8217;ll get to the bottom of this eventually :/</p>
<p><b>Addendum:</b> It seems that the problem is even more complicated. For the following timezone file, C programs seem to work fine:</p>
<pre class="prettyprint">
# Rule  NAME    FROM  TO    TYPE  IN   ON       AT    SAVE  LETTER/S
Rule    ZionIDT min   1939  -     Jan  1        00:00 1:00  D
Rule    ZionIDT 1939  only  -     Jan  1        00:00 0:00  S
Rule    ZionIDT 1940  2030  -     Jan  1        00:00 1:00  D
Rule    ZionIDT 2030  max   -     Jan  1        00:00 0:00  S

# Zone    NAME                GMTOFF  RULES/SAVE  FORMAT  [UNTIL]
Zone      IsraelIDT           2:00    ZionIDT     I%sT
</pre>
<p>However, Python programs still show <tt>timezone = -10800</tt>. Examining Python&#8217;s code, I found this:</p>
<pre class="prettyprint">
        if( janzone < julyzone ) {
            /* DST is reversed in the southern hemisphere */
            PyModule_AddIntConstant(m, "timezone", julyzone);
            PyModule_AddIntConstant(m, "altzone", janzone);
            PyModule_AddIntConstant(m, "daylight",
                        janzone != julyzone);
            PyModule_AddObject(m, "tzname",
                       Py_BuildValue("(zz)",
                             julyname, janname));
        } else {
            PyModule_AddIntConstant(m, "timezone", janzone);
            PyModule_AddIntConstant(m, "altzone", julyzone);
            PyModule_AddIntConstant(m, "daylight",
                        janzone != julyzone);
            PyModule_AddObject(m, "tzname",
                       Py_BuildValue("(zz)",
                             janname, julyname));
        }
</pre>
<p>And since June and July have the same timezone in our case, there's a good chance that this is what's going wrong.</p>
<p>The moral of the story seems to be this - I should go with the first, simplest "always-DST" solution. Programs should ignore the <tt>timezone</tt> variable, as in our context it isn't reliable. In general, all internal time handling should be done in UTC; when reading times from the outside world, if they are in local time - use <tt>mktime</tt>. If they are in a specified timezone, use <tt>timegm</tt> and compensate manually. I'd love to hear better ideas in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lutzky.net/2009/04/18/timezones-are-fickle/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Using git for code review</title>
		<link>http://blog.lutzky.net/2009/04/04/using-git-for-code-review/</link>
		<comments>http://blog.lutzky.net/2009/04/04/using-git-for-code-review/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 10:23:17 +0000</pubDate>
		<dc:creator>Ohad Lutzky</dc:creator>
				<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://blog.lutzky.net/?p=156</guid>
		<description><![CDATA[At my workplace, I&#8217;ve recently been using git for code review purposes. I work on code in my own git clone, and ask a peer to review it. It works somewhat like this:

master branch is same code as currently in upstream.
Working to resolve issue #1234 pertaining to &#8220;Performance for gizmo&#8221;, I work on a branch [...]]]></description>
			<content:encoded><![CDATA[<p>At my workplace, I&#8217;ve recently been using git for code review purposes. I work on code in my own git clone, and ask a peer to review it. It works somewhat like this:</p>
<ol>
<li><code>master</code> branch is same code as currently in upstream.</li>
<li>Working to resolve issue #1234 pertaining to &#8220;Performance for gizmo&#8221;, I work on a branch <code>1234-gizmo-performance</code>.</li>
<li>I mail a peer, John, with this information, as well as my repository location.</li>
<li>John adds my repository as a remote, lutzky. Then he branches <code>review1</code> (or <code>review2</code> if that is taken, and so on) at <code>lutzky/1234-gizmo-performance.</code></li>
<li>John adds comments with nice big &#8220;<code>FIXME</code>&#8221; tags, which are highlighted in any decent editor. He commits this, the commit-message stating that it was code review.</li>
<li>John tags his final review commit (or, if he had no comments &#8211; <code>lutzky/1234-gizmo-performance</code>) with a &#8220;<code>reviewed1</code>&#8221; (or <code>reviewed2</code>, etc.) annotated tag. Since the annotated tag includes all the necessary information (who tagged, when, and what), the number doesn&#8217;t really matter.</li>
<li>I merge <code>john/review1</code>, incorporate the changes (or reject them) and remove the comments. If no further review is necessary, I submit this &#8211; and once submitted, I merge this back into master.</li>
</ol>
<p>It&#8217;s a nice system. I wonder what other methods there are of doing this.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lutzky.net/2009/04/04/using-git-for-code-review/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hardware doesn&#8217;t like me</title>
		<link>http://blog.lutzky.net/2009/02/26/hardware-doesnt-like-me/</link>
		<comments>http://blog.lutzky.net/2009/02/26/hardware-doesnt-like-me/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 20:15:06 +0000</pubDate>
		<dc:creator>Ohad Lutzky</dc:creator>
				<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://blog.lutzky.net/?p=153</guid>
		<description><![CDATA[I&#8217;m a software kind of guy. Here&#8217;s proof.
Today I went to visit my grandparents, and it turned out their computer wouldn&#8217;t boot. BIOS would load up fine, and I could browse the menus fine &#8211; but once it tried to go on from there, it would simply blink what looked like half a cursor (that [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a software kind of guy. Here&#8217;s proof.</p>
<p>Today I went to visit my grandparents, and it turned out their computer wouldn&#8217;t boot. BIOS would load up fine, and I could browse the menus fine &#8211; but once it tried to go on from there, it would simply blink what looked like half a cursor (that is, half of a &#8220;_&#8221;-style cursor). I figured it might be the HDD &#8211; so I took it home, and decided to connect it to my own box. Upon disconnecting my DVD drive, I destroyed the SATA cord &#8211; it had an annoying little metal tab which had to be pushed in before it would release, and it just wouldn&#8217;t give, and the connector just broke, exposing and bending the wires.</p>
<p>Checking if the computer still boots, the BIOS took much longer to display hard drive status, and while Ubuntu would start booting, it would fail in the process and tell me that my root hard drive (by UUID) isn&#8217;t available. Looking at dmesg, the ata2 module was indeed reporting that the hard drive was too slow &#8211; but a few seconds later it would finally access the drive, and mount properly. This problem, however, disappeared once I connected my grandparents&#8217; drive! (Mounting it would fail, telling me that I either have a hardware error or need to connect it to a Windows machine, which I don&#8217;t have, and run some diagnostic commands). Sure enough, when the HDD is connected by itself, it gets quite flaky, but once I connect a second drive (back to the DVD, eventually), everything works properly. This probably has to do with the fact that both drives are connected on continuations of the same power cord &#8211; but I&#8217;ve never experienced such a problem, where you <em>must</em> connect devices to <em>both</em> connectors on the power cord. A hardware guy I know says he&#8217;s never heard of such a problem either.</p>
<p>Naturally, these things never happen when I mess with hardware at work, where there are plenty of spare parts&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lutzky.net/2009/02/26/hardware-doesnt-like-me/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Whatever happened to black &amp; white LCDs?</title>
		<link>http://blog.lutzky.net/2008/11/22/whatever-happened-to-black-white-lcds/</link>
		<comments>http://blog.lutzky.net/2008/11/22/whatever-happened-to-black-white-lcds/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 09:58:05 +0000</pubDate>
		<dc:creator>Ohad Lutzky</dc:creator>
				<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://blog.lutzky.net/?p=150</guid>
		<description><![CDATA[I had a Game Boy once. I could play it just about anywhere, and battery life &#8211; for the time &#8211; was great. I lost it at one point, and replaced it with a Game Gear, which sucked the life out of 6 AA batteries rather quickly. The Game Boy Color was actually decent on [...]]]></description>
			<content:encoded><![CDATA[<p>I had a <a href="http://en.wikipedia.org/wiki/Game_boy">Game Boy</a> once. I could play it just about anywhere, and battery life &#8211; for the time &#8211; was great. I lost it at one point, and replaced it with a <a href="http://en.wikipedia.org/wiki/Game_gear">Game Gear</a>, which sucked the life out of 6 AA batteries rather quickly. The <a href="http://en.wikipedia.org/wiki/Game_Boy_Color">Game Boy Color</a> was actually decent on battery life, but since it didn&#8217;t have a backlight, you had to play it at very specific angles.</p>
<p>For gaming, I can appreciate the need for a color screen. My point has to do with cellphones. True, most cellphones today come with cameras, are able to play video, and are rather capable mobile gaming platforms (when compared to the Game Boy, that is). All this does, in fact, require a color screen. However, I believe that there is a market for cellphones which do not support these features, but do support neat things like 3G internet connectivity (GMail and RSS on the phone is a major Win, in my opinion), and have a comfortable SMS interface. These features actually suffer from having a color screen: Battery life (for the powerful backlight), viewing angle, and screen resolution take a hit. While it&#8217;s true that color LCDs have come a long way since the Game Gear, so have black &#038; white display technologies (E-Paper, anyone?).</p>
<p>Of course, my wish for a modern B&#038;W-screen cellphone will likely never come true. The simple reason is that they would be totally unmarketable. Even business-types like color screens nowadays. So I&#8217;ll just keep holding out for a folding E-Paper mobile browser.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lutzky.net/2008/11/22/whatever-happened-to-black-white-lcds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Another SSH trick</title>
		<link>http://blog.lutzky.net/2008/11/10/another-ssh-trick/</link>
		<comments>http://blog.lutzky.net/2008/11/10/another-ssh-trick/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 21:01:07 +0000</pubDate>
		<dc:creator>Ohad Lutzky</dc:creator>
				<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://blog.lutzky.net/?p=148</guid>
		<description><![CDATA[Ever have a machine you can only ssh into through another machine? It&#8217;s a very common situation in the Technion. Here&#8217;s one way to get around it: Assume you can directly ssh into alpha, and from alpha you can ssh into beta. Have the following code in your ~/.ssh/config:

Host beta
	Hostname 1.2.3.4  # IP Address [...]]]></description>
			<content:encoded><![CDATA[<p>Ever have a machine you can only ssh into through another machine? It&#8217;s a very common situation in the Technion. Here&#8217;s one way to get around it: Assume you can directly ssh into <code>alpha</code>, and from <code>alpha</code> you can ssh into <code>beta</code>. Have the following code in your <code>~/.ssh/config</code>:</p>
<pre class="prettyprint">
Host beta
	Hostname 1.2.3.4  # IP Address of beta
	ProxyCommand ssh alpha nc -w 1 %h %p
</pre>
<p>This requires you to have <code>nc</code> (netcat) installed on <code>alpha</code>. Once you do that, you can run <code>ssh beta</code> directly from your own box.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lutzky.net/2008/11/10/another-ssh-trick/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Automatically starting rtorrent within screen</title>
		<link>http://blog.lutzky.net/2008/11/04/automatically-starting-rtorrent-within-screen/</link>
		<comments>http://blog.lutzky.net/2008/11/04/automatically-starting-rtorrent-within-screen/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 19:33:29 +0000</pubDate>
		<dc:creator>Ohad Lutzky</dc:creator>
				<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://blog.lutzky.net/?p=143</guid>
		<description><![CDATA[These days I don&#8217;t stay at home often, but I do have an RSS/BitTorrent combo fetching me all kinds of neat stuff for me, so I can have it ready for me on the weekend. I love rtorrent, especially due to the fact that I can run it in screen, ssh home and see how [...]]]></description>
			<content:encoded><![CDATA[<p>These days I don&#8217;t stay at home often, but I do have an RSS/BitTorrent combo fetching me all kinds of neat stuff for me, so I can have it ready for me on the weekend. I love <a href="http://libtorrent.rakshasa.no/">rtorrent</a>, especially due to the fact that I can run it in <code>screen</code>, ssh home and see how things are doing (or add more torrent to the download). However, sometimes my net connection breaks down, computers gets shut off, or things like that. This week my router broke down, so I can&#8217;t even ssh home to manually start up rtorrent. My solution: A small script, which checks whether rtorrent is already running, and if not &#8211; runs it in a detached screen session. Run this with your favorite <code>cron</code> software.</p>
<pre class="prettyprint">#!/bin/bash
# A simple script to make sure I am running rtorrent in a screen

if ! ps -o uname -C rtorrent | grep -q `whoami`; then
	screen -d -m rtorrent
fi</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.lutzky.net/2008/11/04/automatically-starting-rtorrent-within-screen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Quick time tracking hack</title>
		<link>http://blog.lutzky.net/2008/10/26/quick-time-tracking-hack/</link>
		<comments>http://blog.lutzky.net/2008/10/26/quick-time-tracking-hack/#comments</comments>
		<pubDate>Sun, 26 Oct 2008 16:57:37 +0000</pubDate>
		<dc:creator>Ohad Lutzky</dc:creator>
				<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://blog.lutzky.net/?p=139</guid>
		<description><![CDATA[Gnome 2.24 adds a new Time Tracking feature, which I would have found useful. I don&#8217;t have Gnome 2.24 at work, but I do have a Unix-based operating system&#8230; Here&#8217;s my new ~/bin/track:

#!/bin/bash
date >> ~/time_tracking
vim ~/time_tracking +
Now, if I could only get vim to automatically hit &#8220;A&#8221; and space for me afterwards&#8230; (I&#8217;m betting there&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>Gnome 2.24 adds a new Time Tracking feature, which I would have found useful. I don&#8217;t have Gnome 2.24 at work, but I do have a Unix-based operating system&#8230; Here&#8217;s my new <code>~/bin/track</code>:</p>
<pre class="prettyprint">
#!/bin/bash
date >> ~/time_tracking
vim ~/time_tracking +</pre>
<p>Now, if I could only get vim to automatically hit &#8220;A&#8221; and space for me afterwards&#8230; (I&#8217;m betting there&#8217;s a way to do it, but AFAIK vim can only receive ex-mode commands as parameters).</p>
<p><b>Edit:</b> &#8230;and, of course it&#8217;s possible. Here&#8217;s the new version:</p>
<pre class="prettyprint">
#!/bin/bash
echo "`date` " >> ~/time_tracking
vim ~/time_tracking + -c 'startinsert!'</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.lutzky.net/2008/10/26/quick-time-tracking-hack/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
