<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Life</title><link>/</link><description>Recent content on Life</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 03 Apr 2026 18:35:00 -0400</lastBuildDate><atom:link href="/index.xml" rel="self" type="application/rss+xml"/><item><title>Chromium B.S.U. on Flathub</title><link>/post/2026/2026-04-03-updating-chromium-bsu-flathub/</link><pubDate>Fri, 03 Apr 2026 18:35:00 -0400</pubDate><guid>/post/2026/2026-04-03-updating-chromium-bsu-flathub/</guid><description>&lt;p&gt;Keeping favorite classic games alive, sandboxed, and easily installable on modern Linux distributions is always fun.&lt;/p&gt;
&lt;p&gt;I recently submitted a pull request to update the classic arcade top-down shooter &lt;strong&gt;Chromium B.S.U.&lt;/strong&gt; on Flathub.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://github.com/flathub/net.sourceforge.chromium-bsu/pull/8"&gt;Pull Request #8&lt;/a&gt;, I focused on modernizing the Flatpak build manifest, updating runtime dependencies, and ensuring compatibility with the latest Flathub standards.&lt;/p&gt;
&lt;p&gt;Check out the full PR details on GitHub: &lt;a href="https://github.com/flathub/net.sourceforge.chromium-bsu/pull/8"&gt;flathub/net.sourceforge.chromium-bsu#8&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>About Me</title><link>/about/</link><pubDate>Fri, 03 Apr 2026 00:00:00 +0000</pubDate><guid>/about/</guid><description>&lt;h2 id="ritesh-khadgaray"&gt;Ritesh Khadgaray&lt;/h2&gt;
&lt;div class="profile-links"&gt;
&lt;a class="profile-link" href="https://github.com/ritzk/" target="_blank" rel="noopener noreferrer"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round"&gt;
&lt;path
d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"&gt;
&lt;/path&gt;
&lt;/svg&gt;&lt;span&gt;GitHub: @ritzk&lt;/span&gt;&lt;/a&gt;
&lt;a class="profile-link" href="https://gitlab.com/ritzk" target="_blank" rel="noopener noreferrer"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round"&gt;
&lt;path
d="M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z"&gt;
&lt;/path&gt;
&lt;/svg&gt;&lt;span&gt;GitLab: @ritzk&lt;/span&gt;&lt;/a&gt;
&lt;a class="profile-link" href="https://www.linkedin.com/in/ritesh-khadgaray-ab853455/" target="_blank" rel="noopener noreferrer"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round"&gt;
&lt;path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"&gt;&lt;/path&gt;
&lt;rect x="2" y="9" width="4" height="12"&gt;&lt;/rect&gt;
&lt;circle cx="4" cy="4" r="2"&gt;&lt;/circle&gt;
&lt;/svg&gt;&lt;span&gt;LinkedIn&lt;/span&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h3 id="introduction"&gt;Introduction&lt;/h3&gt;
&lt;p&gt;Hi there! I&amp;rsquo;m an open-source contributor, automation enthusiast, and SRE. Welcome to my personal blog.&lt;/p&gt;</description></item><item><title>GitLab Runner on Windows with Bash in Windows Containers</title><link>/post/2022/2022-12-12-gitlab-runner-on-windows-with-bash-shell-on-windows-contianer-on-docker/</link><pubDate>Mon, 12 Dec 2022 10:05:00 +0530</pubDate><guid>/post/2022/2022-12-12-gitlab-runner-on-windows-with-bash-shell-on-windows-contianer-on-docker/</guid><description>&lt;p&gt;As part of your CI/CD pipelines, you may need to run automated cross-browser and integration tests across varied operating systems. To minimize testing friction and keep pipeline steps unified, using a consistent shell scripting environment across Linux and Windows runners is ideal.&lt;/p&gt;
&lt;p&gt;One solution is configuring the Bash shell on Windows using GitLab Runner&amp;rsquo;s shell or Docker executor. You can see the implementation details in &lt;a href="https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/3503"&gt;GitLab Runner Merge Request #3503&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Fixing GlusterFS Geo-Replication Failure on Fedora</title><link>/post/2018/2018-09-21-glusterfs-on-fedora-on-break-geo-replication/</link><pubDate>Fri, 21 Sep 2018 08:16:00 +0530</pubDate><guid>/post/2018/2018-09-21-glusterfs-on-fedora-on-break-geo-replication/</guid><description>&lt;p&gt;GlusterFS geo-replication can fail on Fedora due to a missing dynamic library symlink.&lt;/p&gt;
&lt;p&gt;Checking &lt;code&gt;/var/log/glusterfs/geo-replication/gv0_node1/gsyncd.log&lt;/code&gt; reveals:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Changes&lt;/span&gt;(object):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; File &lt;span style="color:#e6db74"&gt;&amp;#34;/usr/libexec/glusterfs/python/syncdaemon/libgfchangelog.py&amp;#34;&lt;/span&gt;, line &lt;span style="color:#ae81ff"&gt;19&lt;/span&gt;, &lt;span style="color:#f92672"&gt;in&lt;/span&gt; Changes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; use_errno&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;True&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; File &lt;span style="color:#e6db74"&gt;&amp;#34;/usr/lib64/python2.7/ctypes/__init__.py&amp;#34;&lt;/span&gt;, line &lt;span style="color:#ae81ff"&gt;361&lt;/span&gt;, &lt;span style="color:#f92672"&gt;in&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;__init__&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;_handle &lt;span style="color:#f92672"&gt;=&lt;/span&gt; _dlopen(self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;_name, mode)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;OSError&lt;/span&gt;: &lt;span style="color:#f92672"&gt;/&lt;/span&gt;usr&lt;span style="color:#f92672"&gt;/&lt;/span&gt;lib64&lt;span style="color:#f92672"&gt;/&lt;/span&gt;libgfchangelog&lt;span style="color:#f92672"&gt;.&lt;/span&gt;so: cannot open shared object file: No such file &lt;span style="color:#f92672"&gt;or&lt;/span&gt; directory
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Looking at &lt;code&gt;/usr/libexec/glusterfs/python/syncdaemon/libgfchangelog.py&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Changes&lt;/span&gt;(object):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; libgfc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; CDLL(&lt;span style="color:#e6db74"&gt;&amp;#34;/usr/lib64/libgfchangelog.so&amp;#34;&lt;/span&gt;, mode&lt;span style="color:#f92672"&gt;=&lt;/span&gt;RTLD_GLOBAL,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; use_errno&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;True&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On Fedora and RHEL, bare &lt;code&gt;.so&lt;/code&gt; library symlinks (as opposed to versioned sonames like &lt;code&gt;.so.0&lt;/code&gt;) are provided by the &lt;code&gt;-devel&lt;/code&gt; development packages. To resolve this error, install the development package:&lt;/p&gt;</description></item><item><title>Building the Canon MF3010 Printer Driver on Fedora 25</title><link>/post/2016/2016-11-16-building-canon-mf3010-driver-on-fedora25/</link><pubDate>Wed, 16 Nov 2016 14:49:00 +0530</pubDate><guid>/post/2016/2016-11-16-building-canon-mf3010-driver-on-fedora25/</guid><description>&lt;p&gt;To build the Canon imageCLASS MF3010 Linux driver from source, download the &amp;ldquo;UFR II/UFR II LT Printer Driver for Linux V3.20&amp;rdquo; archive from Canon&amp;rsquo;s support website.&lt;/p&gt;
&lt;p&gt;On Fedora 25, you need two adjustments to build the RPM cleanly:&lt;/p&gt;
&lt;h3 id="1-spec-file-patch-cndrvcups-commonspec"&gt;1. Spec File Patch (&lt;code&gt;cndrvcups-common.spec&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Exclude internal dependency requirements and apply the &lt;code&gt;gmodule&lt;/code&gt; patch:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-diff" data-lang="diff"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;--- cndrvcups-common.spec.orig 2016-11-16 14:37:13.341877857 +0530
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;+++ cndrvcups-common.spec 2016-11-16 14:34:40.674461102 +0530
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;@@ -1,5 +1,6 @@
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; %define VERSION 3.60
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; %define RELEASE 1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;+%global __requires_exclude ^libcaiousb.so$
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; %ifarch x86_64
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; %define libs32 /usr/lib
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;@@ -19,6 +20,7 @@ Vendor: CANON INC.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Group: Applications/Publishing
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Source: cndrvcups-common-%{version}-%{release}.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;+Patch0: cndrvcups-common-gmodule.patch
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; BuildRoot: %{_tmppath}/%{name}-root
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;@@ -27,6 +29,8 @@ BuildRoot: %{_tmppath}/%{name}-root
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; %prep
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; %setup -q
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;+%patch0 -p1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cd buftool
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ./autogen.sh --prefix=%{_prefix} --enable-progpath=%{_bindir} --libdir=%{_libdir} --disable-shared --enable-static
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="2-add-gmodule-dependency-patch"&gt;2. Add &lt;code&gt;gmodule&lt;/code&gt; Dependency Patch&lt;/h3&gt;
&lt;p&gt;In modern Fedora releases, &lt;code&gt;gmodule&lt;/code&gt; must be explicitly included in &lt;code&gt;PKG_CHECK_MODULES&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Running Sky (tel.red) on Fedora 25</title><link>/post/2016/2016-09-01-running-sky-from-tel-red-on-fedora25/</link><pubDate>Thu, 01 Sep 2016 13:41:00 +0530</pubDate><guid>/post/2016/2016-09-01-running-sky-from-tel-red-on-fedora25/</guid><description>&lt;p&gt;On Fedora 25, the Sky Skype for Business client crashes on launch inside its bundled Qt 5 runtime:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Program received signal SIGABRT, Aborted.
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;0x00007ffff112692f in raise () from /lib64/libc.so.6
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(gdb) bt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#0 0x00007ffff112692f in raise () at /lib64/libc.so.6
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#1 0x00007ffff112852a in abort () at /lib64/libc.so.6
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#2 0x00007ffff200dcb1 in () at /usr/lib/sky/lib/libQt5Core.so.5
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#3 0x00007ffff24ee835 in QGuiApplicationPrivate::createPlatformIntegration() () at /usr/lib/sky/lib/libQt5Gui.so.5
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#4 0x00007ffff24ee955 in QGuiApplicationPrivate::createEventDispatcher() () at /usr/lib/sky/lib/libQt5Gui.so.5
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#5 0x00007ffff21cea64 in QCoreApplicationPrivate::init() () at /usr/lib/sky/lib/libQt5Core.so.5
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#6 0x00007ffff24f2340 in QGuiApplicationPrivate::init() () at /usr/lib/sky/lib/libQt5Gui.so.5
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#7 0x00007ffff2be62b9 in QApplicationPrivate::init() () at /usr/lib/sky/lib/libQt5Widgets.so.5
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;#8 0x0000000000434e41 in main ()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The issue stems from incompatible bundled Qt libraries. A reliable workaround is to force Sky to use Fedora&amp;rsquo;s system-provided &lt;code&gt;qt5&lt;/code&gt; packages:&lt;/p&gt;</description></item><item><title>Installing Splunk Universal Forwarder Using Ansible</title><link>/post/2016/2016-08-07-installing-splunkforwarder-using-ansible/</link><pubDate>Sun, 07 Aug 2016 21:58:00 +0530</pubDate><guid>/post/2016/2016-08-07-installing-splunkforwarder-using-ansible/</guid><description>&lt;p&gt;Here is an automated approach to installing and initializing the Splunk Universal Forwarder with Ansible.&lt;/p&gt;
&lt;h3 id="variables"&gt;Variables&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;splunk_home&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;/opt/splunkforwarder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;splunk_exec&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;{{ splunk_home }}/bin/splunk&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="playbook-tasks"&gt;Playbook Tasks&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Install Splunk Universal Forwarder package&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;yum&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;splunkforwarder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;state&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;latest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;become&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;yes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Check for first-time-run marker file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;stat&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;path&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;{{ splunk_home }}/ftr&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;register&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;result_splunk_ftr_stat&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Configure Splunk forwarder on initial installation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;block&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Ensure existing running splunkd process is stopped&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;shell&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ps aux | grep -v grep | grep splunkd &amp;amp;&amp;amp; pkill -9 splunkd || true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Accept license agreement and start service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;shell&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;{{ splunk_exec }} start --accept-license --answer-yes --no-prompt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Enable Splunk forwarder boot-start service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;shell&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;{{ splunk_exec }} enable boot-start&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;when&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;result_splunk_ftr_stat.stat.exists&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;become&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;yes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Run the playbook, and your forwarder is initialized and configured to start on boot.&lt;/p&gt;</description></item><item><title>Adding Authorized SSH Keys Using Ansible</title><link>/post/2016/2016-06-22-adding-authorized-keys-using-ansible/</link><pubDate>Wed, 22 Jun 2016 00:23:00 +0530</pubDate><guid>/post/2016/2016-06-22-adding-authorized-keys-using-ansible/</guid><description>&lt;p&gt;You can easily manage and deploy multiple public SSH keys per user using Jinja templating within an Ansible playbook.&lt;/p&gt;
&lt;h3 id="variable-definition-varsyml"&gt;Variable Definition (&lt;code&gt;vars.yml&lt;/code&gt;)&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;vars&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;ssh_user_key&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;user&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ritesh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;exclusive&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;no&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;keys&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;ritesh.centos&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;ritesh.fedora&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ansible-task"&gt;Ansible Task&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Upload user authorized SSH keys&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;authorized_key&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;user&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;{{ item.user }}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;exclusive&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;{{ item.exclusive if item.exclusive is defined else &amp;#39;no&amp;#39; }}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;key&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;{% for file_name in item[&amp;#39;keys&amp;#39;] %}{{ lookup(&amp;#39;file&amp;#39;, file_name) }}{% if not loop.last %}{{ &amp;#39;\n&amp;#39; }}{% endif %}{% endfor %}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;become&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;yes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;become_user&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;{{ item.user }}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;with_items&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#e6db74"&gt;&amp;#34;{{ ssh_user_key }}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;tags&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;setup-user-ssh-client-key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>phpIPAM Behind a Load Balancer with SSL Offloading</title><link>/post/2016/2016-05-07-phpipam-behind-a-load-balancer-which-handles-ssl-offloading/</link><pubDate>Sat, 07 May 2016 10:06:00 +0530</pubDate><guid>/post/2016/2016-05-07-phpipam-behind-a-load-balancer-which-handles-ssl-offloading/</guid><description>&lt;p&gt;phpIPAM supports SSL offloading via standard &lt;code&gt;X-Forwarded-Proto&lt;/code&gt; and &lt;code&gt;X-Forwarded-For&lt;/code&gt; HTTP request headers:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;createURL&lt;/span&gt; () {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// Reset URL for base
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; ($_SERVER[&lt;span style="color:#e6db74"&gt;&amp;#39;SERVER_PORT&amp;#39;&lt;/span&gt;] &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;443&amp;#34;&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $url &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;https://&lt;/span&gt;&lt;span style="color:#e6db74"&gt;$_SERVER[HTTP_HOST]&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// Reverse proxy doing SSL offloading
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;elseif&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;isset&lt;/span&gt;($_SERVER[&lt;span style="color:#e6db74"&gt;&amp;#39;HTTP_X_FORWARDED_PROTO&amp;#39;&lt;/span&gt;]) &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; $_SERVER[&lt;span style="color:#e6db74"&gt;&amp;#39;HTTP_X_FORWARDED_PROTO&amp;#39;&lt;/span&gt;] &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;https&amp;#39;&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $url &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;https://&lt;/span&gt;&lt;span style="color:#e6db74"&gt;$_SERVER[SERVER_NAME]&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;elseif&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;isset&lt;/span&gt;($_SERVER[&lt;span style="color:#e6db74"&gt;&amp;#39;HTTP_X_SECURE_REQUEST&amp;#39;&lt;/span&gt;]) &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; $_SERVER[&lt;span style="color:#e6db74"&gt;&amp;#39;HTTP_X_SECURE_REQUEST&amp;#39;&lt;/span&gt;] &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;true&amp;#39;&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $url &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;https://&lt;/span&gt;&lt;span style="color:#e6db74"&gt;$_SERVER[SERVER_NAME]&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// Custom port
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;elseif&lt;/span&gt; ($_SERVER[&lt;span style="color:#e6db74"&gt;&amp;#39;SERVER_PORT&amp;#39;&lt;/span&gt;] &lt;span style="color:#f92672"&gt;!=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;80&amp;#34;&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; $url &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;http://&lt;/span&gt;&lt;span style="color:#e6db74"&gt;$_SERVER[SERVER_NAME]&lt;/span&gt;&lt;span style="color:#e6db74"&gt;:&lt;/span&gt;&lt;span style="color:#e6db74"&gt;$_SERVER[SERVER_PORT]&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;// Normal HTTP ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;However, if your load balancer does not forward this header or SSL offloading is misconfigured, phpIPAM may generate broken HTTP redirect loops or fail to load CSS and JavaScript assets.&lt;/p&gt;</description></item><item><title>Disabling SSL Verification in pyVmomi with Python</title><link>/post/2016/2016-03-31-python-disabling-ssl-verification-on-pyvmomi-on-python/</link><pubDate>Thu, 31 Mar 2016 23:39:00 +0530</pubDate><guid>/post/2016/2016-03-31-python-disabling-ssl-verification-on-pyvmomi-on-python/</guid><description>&lt;p&gt;Working with self-signed vCenter certificates in an enterprise environment (such as RHEL 6 running mixed Python 2.6/2.7 and &lt;code&gt;pyvmomi&lt;/code&gt; 5.5+) often leads to this error:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;File &amp;#34;/usr/lib/python2.6/site-packages/requests/adapters.py&amp;#34;, line 447, in send
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; raise SSLError(e, request=request)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;requests.exceptions.SSLError: [Errno 1] _ssl.c:492: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you need a quick workaround to bypass certificate verification in development scripts:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; ssl
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; requests
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; pyVim.connect &lt;span style="color:#f92672"&gt;import&lt;/span&gt; SmartConnect
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;context &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;None&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Disable SSL certificate verification via standard library&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; context &lt;span style="color:#f92672"&gt;=&lt;/span&gt; ssl&lt;span style="color:#f92672"&gt;.&lt;/span&gt;SSLContext(ssl&lt;span style="color:#f92672"&gt;.&lt;/span&gt;PROTOCOL_SSLv3)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; context&lt;span style="color:#f92672"&gt;.&lt;/span&gt;verify_mode &lt;span style="color:#f92672"&gt;=&lt;/span&gt; ssl&lt;span style="color:#f92672"&gt;.&lt;/span&gt;CERT_NONE
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;except&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;AttributeError&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Fallback monkey-patch for older Python/requests environments&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rget &lt;span style="color:#f92672"&gt;=&lt;/span&gt; requests&lt;span style="color:#f92672"&gt;.&lt;/span&gt;get
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; requests&lt;span style="color:#f92672"&gt;.&lt;/span&gt;get &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;lambda&lt;/span&gt; obj, &lt;span style="color:#f92672"&gt;*&lt;/span&gt;args, &lt;span style="color:#f92672"&gt;**&lt;/span&gt;kwargs: rget(obj, verify&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;False&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; requests&lt;span style="color:#f92672"&gt;.&lt;/span&gt;packages&lt;span style="color:#f92672"&gt;.&lt;/span&gt;urllib3&lt;span style="color:#f92672"&gt;.&lt;/span&gt;disable_warnings()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Connect to ESXi / vCenter&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;si &lt;span style="color:#f92672"&gt;=&lt;/span&gt; SmartConnect(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; host&lt;span style="color:#f92672"&gt;=&lt;/span&gt;args&lt;span style="color:#f92672"&gt;.&lt;/span&gt;host,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; user&lt;span style="color:#f92672"&gt;=&lt;/span&gt;user,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pwd&lt;span style="color:#f92672"&gt;=&lt;/span&gt;args&lt;span style="color:#f92672"&gt;.&lt;/span&gt;password,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; port&lt;span style="color:#f92672"&gt;=&lt;/span&gt;int(args&lt;span style="color:#f92672"&gt;.&lt;/span&gt;port),
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sslContext&lt;span style="color:#f92672"&gt;=&lt;/span&gt;context
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This bypasses certificate validation issues so you can get back to writing your automation scripts.&lt;/p&gt;</description></item><item><title>Fixing BSNL DNS Redirection to domain-error.com</title><link>/post/2016/2016-03-28-bsnl-redirecting-to-http-domain-error-com/</link><pubDate>Mon, 28 Mar 2016 17:18:00 +0530</pubDate><guid>/post/2016/2016-03-28-bsnl-redirecting-to-http-domain-error-com/</guid><description>&lt;p&gt;BSNL&amp;rsquo;s default DNS servers hijack unresolved domain queries and redirect users to ad-laden spam pages like &lt;code&gt;http://domain-error.com&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To prevent this ISP hijacking, configure NetworkManager to ignore ISP-assigned DNS servers and use Google Public DNS instead.&lt;/p&gt;
&lt;p&gt;Edit your NetworkManager connection profile in &lt;code&gt;/etc/NetworkManager/system-connections/&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;[ipv4]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;dns&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;8.8.8.8;8.8.4.4;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;dns-search&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;method&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;auto&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;ignore-auto-dns&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Alternatively, you can configure this graphically or via the terminal interface with &lt;code&gt;nmtui&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo nmtui
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="references"&gt;References&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developers.google.com/speed/public-dns/"&gt;Google Public DNS Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://askubuntu.com/questions/708762/redirecting-to-http-domain-error-com"&gt;Ask Ubuntu: Redirecting to http://domain-error.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Using Zabbix 3.0 on Enterprise Linux 6 (EL6)</title><link>/post/2016/2016-03-23-using-zabbix-3-0-on-el6/</link><pubDate>Wed, 23 Mar 2016 17:47:00 +0530</pubDate><guid>/post/2016/2016-03-23-using-zabbix-3-0-on-el6/</guid><description>&lt;p&gt;Zabbix 3.0 requires PHP 5.4 or above and is consequently not officially available in base RHEL/CentOS 6 repositories.&lt;/p&gt;
&lt;p&gt;To run Zabbix 3.0 with MariaDB 10.1 and PHP 5.6 (&lt;code&gt;php56u&lt;/code&gt;), I built packages for EL6 on Fedora COPR:
&lt;a href="https://copr.fedorainfracloud.org/coprs/ritz/zabbix30/"&gt;COPR: ritz/zabbix30&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;These RPMs are built for Zabbix 3.0.1 linked against MariaDB 10.1.x and PHP 5.6.19.&lt;/p&gt;
&lt;h3 id="useful-resources"&gt;Useful Resources&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.zabbix.com/documentation/3.0/manual/installation/install_from_packages"&gt;Official Zabbix 3.0 Installation Manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zabbix.org/wiki/Get_Zabbix"&gt;Zabbix Database Creation SQL Scripts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Using C++ REST SDK (Casablanca) on Fedora Linux</title><link>/post/2016/2016-03-13-using-c-rest-on-fedora-linux/</link><pubDate>Sun, 13 Mar 2016 17:23:00 +0530</pubDate><guid>/post/2016/2016-03-13-using-c-rest-on-fedora-linux/</guid><description>&lt;p&gt;Microsoft has open-sourced Casablanca (the C++ REST SDK) on &lt;a href="https://github.com/Microsoft/cpprestsdk/"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To make it easy to use on Fedora, I packaged and published RPMs on Fedora COPR:
&lt;a href="https://copr.fedorainfracloud.org/coprs/ritz/cpprestsdk/"&gt;COPR: ritz/cpprestsdk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To enable the repository and install:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo dnf copr enable ritz/cpprestsdk
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo dnf install cpprest-devel
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Happy compiling with &lt;code&gt;-lcpprest&lt;/code&gt;!&lt;/p&gt;</description></item><item><title>How to Increase the Offline Storage Quota for Kindle in Epiphany</title><link>/post/2016/2016-01-17-increase-the-offline-storage-quota-for-kindle-in-epiphany/</link><pubDate>Sun, 17 Jan 2016 17:14:00 +0530</pubDate><guid>/post/2016/2016-01-17-increase-the-offline-storage-quota-for-kindle-in-epiphany/</guid><description>&lt;p&gt;You can easily install Amazon&amp;rsquo;s Kindle Cloud Reader as a standalone web application on Fedora Linux using the Epiphany (GNOME Web) browser via GNOME Software.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Kindle Webapp" loading="lazy" src="./post/2016/images/kindle.png"&gt;&lt;/p&gt;
&lt;p&gt;However, this comes with one major hurdle: the default offline storage quota for web databases is a measly 6 MB, which you will exhaust almost immediately.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Storage Error" loading="lazy" src="./post/2016/images/quota-error.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;webkitgtk3&lt;/code&gt; used to offer an API called &lt;code&gt;webkit_get_default_web_database_quota&lt;/code&gt;, but this was removed from the newer &lt;code&gt;webkitgtk4&lt;/code&gt; engine that Epiphany relies on.&lt;/p&gt;</description></item><item><title>Lync on Linux</title><link>/post/2015/2015-07-13-lync-on-linux/</link><pubDate>Mon, 13 Jul 2015 20:58:00 +0530</pubDate><guid>/post/2015/2015-07-13-lync-on-linux/</guid><description>&lt;p&gt;If you are looking to run Microsoft Lync (aka Skype for Business) on Linux, you&amp;rsquo;re in luck: &lt;a href="http://fisil.com/"&gt;Fisil&lt;/a&gt; maintains a Linux client hosted at &lt;a href="http://tel.red/"&gt;tel.red&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, I ran into an issue running the client on Fedora 23 (Rawhide), as the Sky package bundles its own older X11 libraries:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sky
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/opt/sky_linux/sky: symbol lookup error: /lib64/libXxf86vm.so.1: undefined symbol: _XEatDataWords
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;_XEatDataWords&lt;/code&gt; was added to fix an upstream X.Org vulnerability (&lt;a href="http://cgit.freedesktop.org/xorg/lib/libXxf86vm/commit/id=284a88e21fc05a63466115b33efa411c60d988c9"&gt;commit details&lt;/a&gt;). The workaround is to preload your distribution&amp;rsquo;s native &lt;code&gt;libX11&lt;/code&gt; library:&lt;/p&gt;</description></item><item><title>Enabling Middle-Click with Windows 8 on Lenovo ThinkPad X230</title><link>/post/2014/2014-05-07-using-middle-click-with-windows8-on-lenovo-x230/</link><pubDate>Wed, 07 May 2014 13:50:00 +0530</pubDate><guid>/post/2014/2014-05-07-using-middle-click-with-windows8-on-lenovo-x230/</guid><description>&lt;p&gt;To restore classic middle-click functionality on the Lenovo ThinkPad X230 TrackPoint under Windows 8:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open &lt;code&gt;regedit&lt;/code&gt; and navigate to:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;HKEY_CURRENT_USER\Software\Synaptics\SynTPEnh\UltraNavPS2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;(Note: ensure you are in &lt;code&gt;HKEY_CURRENT_USER&lt;/code&gt;, not &lt;code&gt;HKEY_LOCAL_MACHINE&lt;/code&gt;).&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Change the value of &lt;code&gt;TrackPointMode&lt;/code&gt; from &lt;code&gt;00001214&lt;/code&gt; to DWORD &lt;code&gt;00002214&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open Windows Mouse Properties, switch to the &lt;strong&gt;UltraNav&lt;/strong&gt; tab, disable the TrackPoint by clearing its checkbox, and click &lt;strong&gt;Apply&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Using your touchpad or an external mouse, re-check the TrackPoint checkbox and click &lt;strong&gt;Apply&lt;/strong&gt; once more.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>Recovering a LUKS-Encrypted Ubuntu LVM Volume Group on Another System</title><link>/post/2014/2014-05-05-recovering-luks-encrypted-ubuntu-lv-group-when-mounting-on-a-different-ubuntu-system/</link><pubDate>Mon, 05 May 2014 12:50:00 +0530</pubDate><guid>/post/2014/2014-05-05-recovering-luks-encrypted-ubuntu-lv-group-when-mounting-on-a-different-ubuntu-system/</guid><description>&lt;p&gt;I frequently mirror and swap internal hard drives using an external USB/eSATA docking station. However, this creates a tricky issue when mounting on another Ubuntu machine.&lt;/p&gt;
&lt;p&gt;During standard installation with LUKS + LVM encryption, Ubuntu names the root volume group &lt;code&gt;ubuntu-vg&lt;/code&gt;. If you plug in a secondary drive where Ubuntu was also installed, LVM encounters a name conflict between the host&amp;rsquo;s volume group and the external disk&amp;rsquo;s volume group, preventing activation.&lt;/p&gt;</description></item><item><title>Shrinking VMs on virt-manager / KVM</title><link>/post/2014/2014-01-13-shrink-vms-on-virt-manager-kvm/</link><pubDate>Mon, 13 Jan 2014 18:36:00 +0530</pubDate><guid>/post/2014/2014-01-13-shrink-vms-on-virt-manager-kvm/</guid><description>&lt;p&gt;I use &lt;code&gt;rsync&lt;/code&gt; to back up my workstation, including virtual machine disk images. Due to a known issue with sparse file handling during backups, &lt;code&gt;rsync&lt;/code&gt; would expand sparse files, inflating an 11 GB disk image to its full 64 GB provisioned size on the backup server.&lt;/p&gt;
&lt;p&gt;To solve this, I converted the disk images to compressed &lt;code&gt;qcow2&lt;/code&gt; format:&lt;/p&gt;
&lt;h3 id="1-convert-existing-raw-images-to-qcow2"&gt;1. Convert Existing Raw Images to qcow2&lt;/h3&gt;
&lt;p&gt;This also enables live snapshot support in &lt;code&gt;virt-manager&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Windows 7 on KVM: High Host CPU Usage While Guest Is Idle</title><link>/post/2014/2014-01-12-windows-7-on-kvm-high-cpu-usage-on-host-while-guest-is-idle/</link><pubDate>Sun, 12 Jan 2014 21:00:00 +0530</pubDate><guid>/post/2014/2014-01-12-windows-7-on-kvm-high-cpu-usage-on-host-while-guest-is-idle/</guid><description>&lt;p&gt;If you notice unusually high CPU usage on your KVM host while a Windows 7 virtual machine sits completely idle, remove the virtual USB tablet input device from the VM configuration. Once removed, host CPU utilization drops immediately.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Windows 7 CPU Usage Screenshot" loading="lazy" src="./post/2014/images/win7-kvm-cpu-usage.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reference:&lt;/strong&gt; &lt;a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=672720"&gt;Debian Bug 672720&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Unity vs. GNOME Shell: The Small Things – Status Tray</title><link>/post/2012/2012-03-21-unity-vs-gnome-shell-the-small-things-status-tray/</link><pubDate>Wed, 21 Mar 2012 10:56:00 +0530</pubDate><guid>/post/2012/2012-03-21-unity-vs-gnome-shell-the-small-things-status-tray/</guid><description>&lt;p&gt;The GNOME Shell status tray is an interesting implementation written in JavaScript. Consequently, it is approachable to learn, write extensions for, and modify. However, one issue that bothered me was focus stealing.&lt;/p&gt;
&lt;p&gt;When clicking on a status tray icon and moving the mouse cursor diagonally down toward the open menu, focus would inadvertently switch to the next adjacent tray icon. This was rather jarring, exacerbated by the gap between the panel icon and the popover menu.&lt;/p&gt;</description></item><item><title>Closing Apps in Window Picker Mode in GNOME Shell</title><link>/post/2011/2011-12-25-closing-apps-in-quot-window-pickermode-quot-in-gnome-shell/</link><pubDate>Sun, 25 Dec 2011 21:20:00 +0530</pubDate><guid>/post/2011/2011-12-25-closing-apps-in-quot-window-pickermode-quot-in-gnome-shell/</guid><description>&lt;p&gt;One of the pain points when using a touchscreen device is closing applications while in window picker (overview) mode.&lt;/p&gt;
&lt;p&gt;Why not add a &amp;ldquo;Trash Can&amp;rdquo; target to the dash or dock where windows can simply be dragged and dropped to close them? It would only need to be visible while in the window picker overview.&lt;/p&gt;
&lt;p&gt;Thoughts?&lt;/p&gt;
&lt;p&gt;&lt;img alt="GNOME Shell Window Picker" loading="lazy" src="./post/2011/images/gnome-shell-window-picker.png"&gt;&lt;/p&gt;</description></item><item><title>Tablets: Unity and GNOME Shell</title><link>/post/2011/2011-12-24-tablets-unity-and-gnome-shell/</link><pubDate>Sat, 24 Dec 2011 08:17:00 +0530</pubDate><guid>/post/2011/2011-12-24-tablets-unity-and-gnome-shell/</guid><description>&lt;p&gt;I have been thinking about writing this down for quite a while: my hands-on experiences testing Ubuntu Unity and GNOME Shell on the WeTab tablet.&lt;/p&gt;
&lt;h3 id="unity"&gt;Unity&lt;/h3&gt;
&lt;p&gt;Unity makes a fine netbook interface, but tablet support feels underdeveloped. After configuring auto-login, I was greeted by the standard desktop and launcher. However, launching an application and maximizing it hides the dock launcher entirely, making it awkward to bring back with a finger. Furthermore, scrollbars are difficult to grab, and multi-touch gestures like drag-to-scroll aren&amp;rsquo;t yet implemented. Aside from those tablet friction points, the interface shows potential.&lt;/p&gt;</description></item><item><title>Not So Mad Over Donuts: Review of a Disappointing Experience</title><link>/post/2011/2011-12-18-not-so-mad-over-donuts-a-terribly-written-review-of-a-bad-experience/</link><pubDate>Sun, 18 Dec 2011 17:36:00 +0530</pubDate><guid>/post/2011/2011-12-18-not-so-mad-over-donuts-a-terribly-written-review-of-a-bad-experience/</guid><description>&lt;p&gt;&amp;ldquo;You can have any color you want, as long as it&amp;rsquo;s black.&amp;rdquo; That seems to be the philosophy at Mad Over Donuts.&lt;/p&gt;
&lt;p&gt;I love a simple, plain donut. To me, nothing beats a freshly prepared, warm, and crunchy plain donut straight out of the fryer. Yet the one item Mad Over Donuts adamantly refuses to sell is a fresh, hot, crunchy plain donut without toppings. For some reason, everything else sitting under their glass counters tastes stale to me.&lt;/p&gt;</description></item><item><title>FUDCon 2011: Here I Come!</title><link>/post/2011/2011-11-01-fudcon-2011-here-i-come/</link><pubDate>Tue, 01 Nov 2011 00:04:00 +0530</pubDate><guid>/post/2011/2011-11-01-fudcon-2011-here-i-come/</guid><description>&lt;p&gt;&lt;a href="http://fudcon.in/" title="FUDCon Pune 2011"&gt;&lt;img alt="FUDCon Pune 2011 Banner" loading="lazy" src="./post/2011/images/fudcon-pune-2011-banner.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I am heading to FUDCon Pune this year! I hope to present a talk to help newcomers get started with contributing to open source, specifically within the GNOME project.&lt;/p&gt;
&lt;p&gt;Please check out and vote for my session here:
&lt;a href="http://fudcon.in/sessions/contributing-opensource"&gt;Contributing to Open Source (FUDCon Session)&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Changing Brightness from GNOME Shell</title><link>/post/2011/2011-09-07-changing-brightness-from-gnome-shell/</link><pubDate>Wed, 07 Sep 2011 23:23:00 +0530</pubDate><guid>/post/2011/2011-09-07-changing-brightness-from-gnome-shell/</guid><description>&lt;p&gt;&lt;code&gt;gnome-power-manager&lt;/code&gt; was rewritten for GNOME 3.2 and merged directly into &lt;code&gt;gnome-settings-daemon&lt;/code&gt; (g-s-d) as a plugin responsible for system power policy. Most power management is handled by UPower, with backlight brightness being a key exception. Backlight is managed at the session level by &lt;code&gt;gnome-settings-daemon&lt;/code&gt; via its power plugin using XRandR or standard &lt;code&gt;sysfs&lt;/code&gt;, depending on hardware and driver support.&lt;/p&gt;
&lt;p&gt;To read screen brightness over D-Bus:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gdbus call --session &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --dest org.gnome.SettingsDaemon &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --object-path /org/gnome/SettingsDaemon/Power &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --method org.gnome.SettingsDaemon.Power.Screen.GetPercentage
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Why bother with this? On a tablet device (such as the WeTab), brightness settings were buried deep in system menus and cumbersome to reach. With the custom GNOME Shell brightness extension (&lt;a href="http://people.redhat.com/rkhadgar/personal/gnome3-tablet/brightness.tar.xz"&gt;download archive&lt;/a&gt;), you can adjust screen brightness directly from the top bar. This requires patching &lt;code&gt;gnome-settings-daemon&lt;/code&gt; to emit the &lt;code&gt;Changed&lt;/code&gt; signal (&lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=658493"&gt;GNOME Bug 658493&lt;/a&gt;).&lt;/p&gt;</description></item><item><title>Linux and the Desktop</title><link>/post/2011/2011-08-07-linux-and-desktop/</link><pubDate>Sun, 07 Aug 2011 00:38:00 +0530</pubDate><guid>/post/2011/2011-08-07-linux-and-desktop/</guid><description>&lt;p&gt;It&amp;rsquo;s been a blast—Linux on the desktop never ceases to amaze me.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.desktopsummit.org/"&gt;&lt;img alt="Desktop Summit 2011 Banner" loading="lazy" src="./post/2011/images/desktop-summit-2011-banner.png"&gt;&lt;/a&gt;&lt;/p&gt;</description></item><item><title>The Year 2038 Problem (Y2038)</title><link>/post/2011/2011-06-14-y2038/</link><pubDate>Tue, 14 Jun 2011 16:22:00 +0530</pubDate><guid>/post/2011/2011-06-14-y2038/</guid><description>&lt;p&gt;Why should you migrate to &lt;code&gt;x86_64&lt;/code&gt; over 32-bit?&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://en.wikipedia.org/wiki/Year_2038_problem"&gt;Year 2038 Problem&lt;/a&gt; is not something you want to run into. Do your part: ensure your applications build and run cleanly on 64-bit systems, and move to &lt;code&gt;x86_64&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Looking at you, Flash and Skype: ಠ_ಠ)&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Running 32-bit Flash on 64-bit Fedora with 64-bit Chrome</title><link>/post/2011/2011-06-14-flash-i686-on-fedora-linux-x86-64-with-chrome-x86-64/</link><pubDate>Tue, 14 Jun 2011 13:53:00 +0530</pubDate><guid>/post/2011/2011-06-14-flash-i686-on-fedora-linux-x86-64-with-chrome-x86-64/</guid><description>&lt;p&gt;To set up 32-bit Flash in 64-bit Chrome on Fedora &lt;code&gt;x86_64&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download and install the &lt;code&gt;adobe-release&lt;/code&gt; RPM package from &lt;a href="http://get.adobe.com/flashplayer/"&gt;Adobe Flash Player&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Install the Flash plugin and 32-bit compatibility wrapper packages:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo yum install flash-plugin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo yum install alsa-plugins-pulseaudio.i686 nspluginwrapper.i686 nspluginwrapper.x86_64
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="3"&gt;
&lt;li&gt;Link the wrapped plugin into your 64-bit Mozilla plugins directory:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd /usr/lib64/mozilla/plugins
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo ln -s ../plugins-wrapped/nswrapper_32_64.libflashplayer.so .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Restart Chrome, and you are done!&lt;/p&gt;</description></item><item><title>Dell ST2220T Touchscreen Monitor on Linux</title><link>/post/2011/2011-06-14-dell-st2220t-on-linux/</link><pubDate>Tue, 14 Jun 2011 12:20:00 +0530</pubDate><guid>/post/2011/2011-06-14-dell-st2220t-on-linux/</guid><description>&lt;p&gt;Good news: the Dell ST2220T multi-touch monitor works on Fedora Linux using &lt;code&gt;evdev&lt;/code&gt; under Xorg!&lt;/p&gt;
&lt;p&gt;&lt;img alt="Dell ST2220T" loading="lazy" src="./post/2011/images/dell-st2220t.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Special thanks to Gopal for tracing and testing this. Additional hardware diagnostic info is posted in &lt;a href="https://bugzilla.redhat.com/703118"&gt;Red Hat Bugzilla 703118&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Pushing for xchat-gnome 0.26.3</title><link>/post/2011/2011-04-15-pushing-for-xchat-gnome-0-26-3/</link><pubDate>Fri, 15 Apr 2011 16:49:00 +0530</pubDate><guid>/post/2011/2011-04-15-pushing-for-xchat-gnome-0-26-3/</guid><description>&lt;p&gt;&lt;code&gt;xchat-gnome&lt;/code&gt; 0.26.2 has been tagged, though it hasn&amp;rsquo;t yet been uploaded to &lt;code&gt;ftp.gnome.org&lt;/code&gt;. Instead, I am pushing for an immediate 0.26.3 release—hopefully the final release in the GTK+ 2.x series—followed by &lt;code&gt;xchat-gnome&lt;/code&gt; 0.3.0 targeting GNOME 3.&lt;/p&gt;</description></item><item><title>GNOME Legacy and GNOME 3</title><link>/post/2011/2011-02-25-gnome-legacy-and-gnome-3/</link><pubDate>Fri, 25 Feb 2011 22:02:00 +0530</pubDate><guid>/post/2011/2011-02-25-gnome-legacy-and-gnome-3/</guid><description>&lt;p&gt;For anyone who prefers to stick with &amp;ldquo;GNOME Legacy&amp;rdquo; (Fallback mode) rather than GNOME 3 with GNOME Shell, you can configure your default session by running:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd /usr/share/gnome-session/sessions
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo mv gnome.session gnome-new.session
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo mv gnome-fallback.session gnome.session
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Evolution Evolved</title><link>/post/2010/2010-11-23-evolution-evovled/</link><pubDate>Tue, 23 Nov 2010 18:07:00 +0530</pubDate><guid>/post/2010/2010-11-23-evolution-evovled/</guid><description>&lt;p&gt;Notable improvements expected with the release of Evolution 3.0:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Migration of local mail storage from &lt;code&gt;mbox&lt;/code&gt; to the faster, more resilient &lt;code&gt;maildir&lt;/code&gt; format.&lt;/li&gt;
&lt;li&gt;Built-in duplicate email detection and removal.&lt;/li&gt;
&lt;li&gt;Significant memory usage and leak optimizations.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>RHEL 6 Is Out</title><link>/post/2010/2010-11-15-rhel6-is-out/</link><pubDate>Mon, 15 Nov 2010 14:29:00 +0530</pubDate><guid>/post/2010/2010-11-15-rhel6-is-out/</guid><description>&lt;p&gt;Red Hat Enterprise Linux 6 (RHEL 6) is out, and it brings a huge set of improvements over RHEL 5 for desktop users. Here is a curated list of highlights that I find particularly useful on an EL6 workstation:&lt;/p&gt;
&lt;h3 id="core-system--filesystems"&gt;Core System &amp;amp; Filesystems&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Upstart:&lt;/strong&gt; Replaces traditional SysV init (&lt;a href="http://upstart.ubuntu.com/wiki/"&gt;Upstart Wiki&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dracut:&lt;/strong&gt; Modern event-driven initramfs generator (&lt;a href="http://fedoraproject.org/wiki/Dracut"&gt;Dracut Wiki&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ext4:&lt;/strong&gt; Default robust filesystem (&lt;a href="http://fedoraproject.org/wiki/Features/Ext4"&gt;Fedora ext4 Feature&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Btrfs:&lt;/strong&gt; Available as a technology preview (&lt;a href="http://fedoraproject.org/wiki/Btrfs_in_Fedora_13"&gt;Btrfs in Fedora&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="boot--graphics"&gt;Boot &amp;amp; Graphics&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Plymouth:&lt;/strong&gt; Smooth graphical boot flicker-free animations (&lt;a href="http://www.freedesktop.org/wiki/Software/Plymouth"&gt;Plymouth&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kernel Mode Setting (KMS):&lt;/strong&gt; Native resolution and smooth transitions during boot (&lt;a href="http://fedoraproject.org/wiki/Features/KernelModesetting"&gt;KMS&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Xorg 1.7:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nouveau&lt;/code&gt; open-source driver for NVIDIA cards (&lt;a href="http://nouveau.freedesktop.org/wiki/"&gt;Nouveau&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;R600 3D hardware acceleration for AMD/ATI Radeon (&lt;a href="http://fedoraproject.org/wiki/Features/R600Accel"&gt;R600 Accel&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;xrandr 1.3&lt;/code&gt; dynamic monitor handling (&lt;a href="http://lwn.net/Articles/319897/"&gt;LWN Article&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Native DisplayPort audio and video support&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="performance--security"&gt;Performance &amp;amp; Security&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tickless Kernel:&lt;/strong&gt; Significant power savings on idle systems (&lt;a href="http://fedoraproject.org/wiki/Releases/FeatureTicklessKernel"&gt;Tickless Kernel&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tuned:&lt;/strong&gt; Adaptive power management profiles (&lt;a href="http://fedoraproject.org/wiki/Features/PowerManagement"&gt;Power Management&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PolicyKit &amp;amp; XACE:&lt;/strong&gt; Fine-grained privilege management without root elevation (&lt;a href="http://hal.freedesktop.org/docs/polkit/"&gt;Polkit&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="desktop--multimedia"&gt;Desktop &amp;amp; Multimedia&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GDM PAM Stacks:&lt;/strong&gt; Support for multiple authentication backends (&lt;a href="http://fedoraproject.org/wiki/Features/MultiplePAMStacksInGDM"&gt;Multiple PAM in GDM&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ConsoleKit Fast User Switching:&lt;/strong&gt; Seamless desktop switching (&lt;a href="http://fedoraproject.org/wiki/Desktop/FastUserSwitching"&gt;Fast User Switching&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PulseAudio:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Unified volume control across applications (&lt;a href="http://fedoraproject.org/wiki/Features/VolumeControl"&gt;Volume Control&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Glitch-free audio playback via timer-based scheduling (&lt;a href="http://fedoraproject.org/wiki/Features/GlitchFreeAudio"&gt;Glitch-Free Audio&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IBus:&lt;/strong&gt; Modern input method framework replacing SCIM (&lt;a href="http://fedoraproject.org/wiki/Features/IBus"&gt;IBus&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evolution 2.28:&lt;/strong&gt; Native support for Microsoft Exchange 2007+ via OpenChange (&lt;a href="http://fedoraproject.org/wiki/Features/OpenChange"&gt;OpenChange&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenOffice.org 3.x:&lt;/strong&gt; Native support for reading and writing Office Open XML (&lt;code&gt;.docx&lt;/code&gt;, &lt;code&gt;.xlsx&lt;/code&gt;) documents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NetworkManager:&lt;/strong&gt; System-wide connection profiles managed independently of user logins (&lt;a href="http://fedoraproject.org/wiki/Features/NetworkManagerSystemConnections"&gt;System Connections&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="desktop-environments"&gt;Desktop Environments&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GNOME 2.28&lt;/strong&gt; (major upgrade from 2.16 in RHEL 5)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;KDE 4.3&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Xfce&lt;/strong&gt; available via EPEL&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SPICE:&lt;/strong&gt; High-performance remote desktop protocol support&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Official Press Release:&lt;/strong&gt; &lt;a href="http://www.redhat.com/about/news/prarchive/2010/flexibility-and-portability.html"&gt;Red Hat Flexibility and Portability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Product Overview:&lt;/strong&gt; &lt;a href="http://www.redhat.com/rhel/desktop/"&gt;Red Hat Enterprise Linux Desktop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>xchat-gnome and Delays</title><link>/post/2010/2010-06-01-xchat-gnome-and-delays/</link><pubDate>Tue, 01 Jun 2010 20:35:00 +0530</pubDate><guid>/post/2010/2010-06-01-xchat-gnome-and-delays/</guid><description>&lt;p&gt;Apologies for the delay in releasing a new version. I recently relocated to Pune and am searching for accommodation, after which I&amp;rsquo;ll be setting up broadband internet. Once that is sorted out, I will resume active work on &lt;code&gt;xchat-gnome&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In the meantime, patches and contributions are very welcome!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P.S.:&lt;/strong&gt; &lt;code&gt;xchat-gnome&lt;/code&gt; now has an official &lt;a href="http://live.gnome.org/Xchat-Gnome"&gt;mailing list&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>HP TouchSmart tx2</title><link>/post/2010/2010-02-22-hp-touchsmart-tx2/</link><pubDate>Mon, 22 Feb 2010 18:48:00 +0530</pubDate><guid>/post/2010/2010-02-22-hp-touchsmart-tx2/</guid><description>&lt;p&gt;I am the not-so-proud owner of an HP tx2 convertible tablet, and it has been quite a headache. It came preloaded with Windows Vista, along with an optional upgrade to Windows 7 available on request. The convertible laptop is heavy, has abysmal battery life, and heats up faster than a toaster.&lt;/p&gt;
&lt;p&gt;On the positive side, the tx2 is relatively compact with its 12&amp;quot; display, easy to carry around, includes an optical drive (which I still use occasionally), and features mostly Linux-compatible hardware. The touchscreen works under Linux, although I&amp;rsquo;ve currently misconfigured something there.&lt;/p&gt;</description></item><item><title>xchat-gnome 0.26.2</title><link>/post/2010/2010-02-22-xchat-gnome-0-26-2/</link><pubDate>Mon, 22 Feb 2010 18:46:00 +0530</pubDate><guid>/post/2010/2010-02-22-xchat-gnome-0-26-2/</guid><description>&lt;p&gt;I am currently one of the maintainers of &lt;code&gt;xchat-gnome&lt;/code&gt; and am working steadily toward releasing version 0.26.2. Track progress on &lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=602311"&gt;GNOME Bug 602311&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Fedora 13 with Xorg 1.8.x, GNOME 2.30, and "Fixed" Nautilus</title><link>/post/2010/2010-02-22-fedora-13-with-xorg-1-8-x-gnome-2-30-and-fixed-nautilus/</link><pubDate>Mon, 22 Feb 2010 18:38:00 +0530</pubDate><guid>/post/2010/2010-02-22-fedora-13-with-xorg-1-8-x-gnome-2-30-and-fixed-nautilus/</guid><description>&lt;p&gt;With the release of GNOME 2.30, Nautilus has reverted to browser mode as the default. So long, spatial mode!&lt;/p&gt;
&lt;p&gt;In Fedora 13, Xorg now relies on &lt;code&gt;udev&lt;/code&gt; rather than &lt;code&gt;hal&lt;/code&gt; for automatic hardware detection.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bonus note:&lt;/strong&gt; I noticed Totem now remembers the last-played playback position.&lt;/p&gt;
&lt;p&gt;Fedora and GNOME keep getting better with time.&lt;/p&gt;</description></item><item><title>Duplicate Emails in Evolution</title><link>/post/2009/2009-11-25-duplicate-emails-and-evolution/</link><pubDate>Wed, 25 Nov 2009 20:48:00 +0530</pubDate><guid>/post/2009/2009-11-25-duplicate-emails-and-evolution/</guid><description>&lt;p&gt;Troubled by duplicate emails in your Evolution inbox?&lt;/p&gt;
&lt;p&gt;You need the &lt;code&gt;remove-duplicates&lt;/code&gt; plugin! It slices, it dices, and it comes complete with its own patch set and Makefile.&lt;/p&gt;
&lt;p&gt;Currently, upstream is tracking this effort here:&lt;br&gt;
&lt;a href="https://bugzilla.gnome.org/show_bug.cgi?id=587011"&gt;GNOME Bug 587011 – evolution-kill-bonobo unable to build remove-duplicates&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Android on Fedora</title><link>/post/2009/2009-10-14-android-on-fedora/</link><pubDate>Wed, 14 Oct 2009 02:33:00 +0530</pubDate><guid>/post/2009/2009-10-14-android-on-fedora/</guid><description>&lt;p&gt;Samsung will soon be launching the Galaxy in our market (an Android-based phone). Android looks very attractive to me because of its open, developer-friendly ecosystem. If you wonder why not an iPhone, I am inherently biased toward Linux—check out the discussion on &lt;a href="http://www.reddit.com/r/programming/comments/8xufg/android_versus_iphone_development_a_comparison/"&gt;Reddit&lt;/a&gt; for a deeper comparison.&lt;/p&gt;
&lt;p&gt;To get started, I downloaded the &lt;a href="http://developer.android.com/sdk/1.6_r1/index.html"&gt;Android 1.6 SDK&lt;/a&gt; and followed the &lt;a href="http://developer.android.com/sdk/1.6_r1/installing.html"&gt;installation instructions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While installing the Eclipse ADT plugin, you might encounter dependency errors like this:&lt;/p&gt;</description></item><item><title>Samsung Omnia HD (GT-i8910)</title><link>/post/2009/2009-10-14-samsung-omnia-hd-gt-i8910/</link><pubDate>Wed, 14 Oct 2009 02:05:00 +0530</pubDate><guid>/post/2009/2009-10-14-samsung-omnia-hd-gt-i8910/</guid><description>&lt;p&gt;In short, this phone is frustrating—at least to me.&lt;/p&gt;
&lt;h3 id="really-annoying"&gt;Really Annoying&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Buggy default firmware:&lt;/strong&gt; The stock web browser crashes whenever you hit &amp;ldquo;Stop.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wi-Fi limitations:&lt;/strong&gt; WPA Enterprise Wi-Fi connection is poorly supported.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VPN:&lt;/strong&gt; Setting up a VPN is a major pain.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bluetooth transfers:&lt;/strong&gt; Any files or data received via Bluetooth are dumped directly into the SMS inbox and cannot be saved straight to a folder without a third-party file manager.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calendar widgets:&lt;/strong&gt; Birthdays and appointments aren&amp;rsquo;t displayed on the home screen at least 24 hours in advance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Locked down:&lt;/strong&gt; The platform is not developer- or hack-friendly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customer support:&lt;/strong&gt; Samsung&amp;rsquo;s sales and support teams are unhelpful.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows-only SDK:&lt;/strong&gt; Developing on Linux is a major hassle compared to Android.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accessories:&lt;/strong&gt; Phone cases and screen protectors are nearly impossible to find.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Contacts UI:&lt;/strong&gt; Photo contacts are displayed as hover icons rather than clean thumbnails.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Home screen:&lt;/strong&gt; The 3D home screen navigation isn&amp;rsquo;t configurable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audio formats:&lt;/strong&gt; No Ogg Vorbis or FLAC support out of the box.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Adobe PDF viewer:&lt;/strong&gt; Terrible user interface lacking fullscreen support (Picsel Viewer is much better).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keyboard layout:&lt;/strong&gt; On the alphanumeric keyboard, the &amp;ldquo;OK&amp;rdquo; button sits in the top-left corner, requiring an awkward reach.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="mildly-annoying"&gt;Mildly Annoying&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Opera has not yet been released for S60v5.&lt;/li&gt;
&lt;li&gt;The phone needs to be hacked (via HelloOX2) to install unsigned applications.&lt;/li&gt;
&lt;li&gt;No centralized app store, apart from Nokia&amp;rsquo;s Ovi Store and the Samsung App store (which lacks S60 apps).&lt;/li&gt;
&lt;li&gt;Lacks smooth kinetic scrolling across many list views.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="the-pros"&gt;The Pros&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Built-in GPS and A-GPS.&lt;/li&gt;
&lt;li&gt;Gorgeous, large AMOLED screen with auto-brightness, easily readable in broad daylight.&lt;/li&gt;
&lt;li&gt;Responsive accelerometer with auto-orientation.&lt;/li&gt;
&lt;li&gt;Proximity sensor automatically turns off and locks the screen during calls.&lt;/li&gt;
&lt;li&gt;Intuitive and natural-feeling scrollbar.&lt;/li&gt;
&lt;li&gt;Great HD games available from Gameloft.&lt;/li&gt;
&lt;li&gt;Sports Tracker (from Nokia) is a fantastic fitness utility.&lt;/li&gt;
&lt;li&gt;Built-in podcast support.&lt;/li&gt;
&lt;li&gt;RoadSync support for connecting to corporate Microsoft Exchange email.&lt;/li&gt;
&lt;li&gt;Route 66 navigation works well and outperforms Google Maps offline.&lt;/li&gt;
&lt;li&gt;Support for P.I.P.S. and the Qt runtime.&lt;/li&gt;
&lt;li&gt;Native hardware support for high-quality DivX and FLV video playback.&lt;/li&gt;
&lt;li&gt;Quickoffice and Office Reader allow viewing MS Office and OpenDocument files.&lt;/li&gt;
&lt;li&gt;Support for multiple custom alarms and multiple timezone clocks.&lt;/li&gt;
&lt;li&gt;Native ZIP file extraction out of the box.&lt;/li&gt;
&lt;li&gt;MTP support.&lt;/li&gt;
&lt;li&gt;Excellent built-in dictionary and business card scanner.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>BSNL Internet Connection and Security</title><link>/post/2009/2009-06-09-bsnl-inet-connection-and-security/</link><pubDate>Tue, 09 Jun 2009 11:25:00 +0530</pubDate><guid>/post/2009/2009-06-09-bsnl-inet-connection-and-security/</guid><description>&lt;p&gt;In short: it&amp;rsquo;s terrible. Here is the longer story.&lt;/p&gt;
&lt;h3 id="the-modem"&gt;The Modem&lt;/h3&gt;
&lt;p&gt;The ISP-provided modem is a DNA A211. By default, it uses &lt;code&gt;admin&lt;/code&gt;/&lt;code&gt;admin&lt;/code&gt; credentials, and the web management console is accessible over Wi-Fi!&lt;/p&gt;
&lt;p&gt;It appears to run a Linux 2.6.8 kernel, likely with a GNU-based userland stack. However, I haven&amp;rsquo;t been able to locate the GPL source code published anywhere on their website.&lt;/p&gt;
&lt;p&gt;The modem requires a daily reboot to maintain a stable internet connection—I still haven&amp;rsquo;t figured that one out.&lt;/p&gt;</description></item><item><title>xchat-GNOME Fullscreen</title><link>/post/2009/2009-05-08-xchat-gnome-fullscreen/</link><pubDate>Fri, 08 May 2009 19:56:00 +0530</pubDate><guid>/post/2009/2009-05-08-xchat-gnome-fullscreen/</guid><description>&lt;p&gt;You love chatting over IRC, IRC is life, and you need your IRC client to support fullscreen mode! Look no further: &lt;code&gt;xchat-gnome&lt;/code&gt; requires only a trivial patch to support fullscreen.&lt;/p&gt;
&lt;p&gt;For more information, see &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=445638"&gt;Fullscreen support for xchat-gnome (GNOME Bug 445638)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Yes, &lt;code&gt;xchat-gnome&lt;/code&gt; needs your love!&lt;/p&gt;</description></item><item><title>Building RPMs Without Root</title><link>/post/2009/2009-05-08-rpmbuild/</link><pubDate>Fri, 08 May 2009 19:26:00 +0530</pubDate><guid>/post/2009/2009-05-08-rpmbuild/</guid><description>&lt;p&gt;When building RPM packages, always avoid using the root account. Fedora 11 configures non-root building by default.&lt;/p&gt;
&lt;p&gt;For instructions on patching and rebuilding source RPMs as a regular user, see:
&lt;a href="http://sadiquepp.blogspot.com/2009/02/how-to-patch-and-recompile-source-rpm.html"&gt;How to patch and recompile a source RPM&lt;/a&gt;&lt;/p&gt;</description></item><item><title>RPM, rpmbuild, and Macros</title><link>/post/2009/2009-05-08-rpm-rpmbuild-and-macros/</link><pubDate>Fri, 08 May 2009 19:26:00 +0530</pubDate><guid>/post/2009/2009-05-08-rpm-rpmbuild-and-macros/</guid><description>&lt;p&gt;When building RPMs, avoid using the root account. Fedora 11 configures non-root packaging by default. On other systems, create a &lt;code&gt;.rpmmacros&lt;/code&gt; file in your home directory with the following line:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;%_topdir %{getenv:HOME}/rpmbuild&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As an added bonus for systems with multilib architectures (such as &lt;code&gt;x86_64&lt;/code&gt;), add this format string to &lt;code&gt;.rpmmacros&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;%_solve_name_fmt %{?_solve_pkgsdir}/%%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Reference:&lt;/strong&gt;
&lt;a href="http://sadiquepp.blogspot.com/2009/02/how-to-patch-and-recompile-source-rpm.html"&gt;How to patch and recompile a source RPM&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Receiving Files from Phone to Computer</title><link>/post/2009/2009-03-25-receiving-files-from-phone-to-computer/</link><pubDate>Wed, 25 Mar 2009 04:18:00 +0530</pubDate><guid>/post/2009/2009-03-25-receiving-files-from-phone-to-computer/</guid><description>&lt;p&gt;&lt;img alt="File Sharing Preferences" loading="lazy" src="./post/2009/images/file-sharing-preferences.png"&gt;&lt;/p&gt;
&lt;p&gt;Duh! To receive files from a phone or other Bluetooth-enabled device to a laptop running Linux, make sure to enable the &lt;strong&gt;&amp;ldquo;Receive files in Downloads folder over Bluetooth&amp;rdquo;&lt;/strong&gt; option in GNOME File Sharing Preferences.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Notes:&lt;/strong&gt; &lt;a href="http://fedoraproject.org/wiki/Features/BluetoothFedora9#Receiving_files_from_remote_Bluetooth_devices"&gt;Bluetooth on Fedora&lt;/a&gt;&lt;/p&gt;</description></item><item><title>SQLite vs. libgda</title><link>/post/2009/2009-03-22-sqlite-over-libgda/</link><pubDate>Sun, 22 Mar 2009 23:50:00 +0530</pubDate><guid>/post/2009/2009-03-22-sqlite-over-libgda/</guid><description>&lt;p&gt;A few things I have learned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DDL (Data Definition Language) varies significantly from one SQL implementation to another.&lt;/li&gt;
&lt;li&gt;It is much easier and faster to maintain an application for a single database backend rather than across many.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;libgda&lt;/code&gt; is great when you are designing an application specifically meant to manage arbitrary databases.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;libgda&lt;/code&gt; is overkill when all you need is to maintain a simple, local embedded database.&lt;/li&gt;
&lt;li&gt;SQLite is fast, lightweight, well-documented, and backed by an active IRC support community.&lt;/li&gt;
&lt;li&gt;Keep database-related code restricted to as few source files as possible.&lt;/li&gt;
&lt;li&gt;The SQLite source code is an excellent reference for understanding how to implement commands like &lt;code&gt;.import&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Using Git (or any modern version control system) saves an enormous amount of time.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>rt2860 on Fedora 11</title><link>/post/2009/2009-03-22-rt2860-on-fedora11/</link><pubDate>Sun, 22 Mar 2009 23:41:00 +0530</pubDate><guid>/post/2009/2009-03-22-rt2860-on-fedora11/</guid><description>&lt;p&gt;For anyone missing the wireless driver on the Asus Eee PC 1000H: &lt;code&gt;rt2860&lt;/code&gt; has made it into kernel staging and is not yet part of Fedora 11. To build it yourself, download the latest snapshot from the &lt;a href="http://git.kernel.org/gitweb.cgi?p=linux/kernel/git/torvalds/linux-2.6.git;a=tree;f=drivers/staging/rt2860"&gt;Linux kernel git staging tree&lt;/a&gt; using the &amp;ldquo;snapshot&amp;rdquo; link.&lt;/p&gt;
&lt;p&gt;Once downloaded, extract the archive and append the following line to the &lt;code&gt;Makefile&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-makefile" data-lang="makefile"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;obj-m &lt;span style="color:#f92672"&gt;:=&lt;/span&gt; rt2860sta.o
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then run the command below to compile and install the module:&lt;/p&gt;</description></item><item><title>Linux Hosts That Use the evdev Driver for Keyboards Do Not Map Keys Correctly in Any Guest in VMware</title><link>/post/2008/2008-11-21-linux-hosts-that-use-the-evdev-driver-for-keyboards-do-not-map-keys-correctly-in-any-guest-in-vmware/</link><pubDate>Fri, 21 Nov 2008 16:17:00 +0530</pubDate><guid>/post/2008/2008-11-21-linux-hosts-that-use-the-evdev-driver-for-keyboards-do-not-map-keys-correctly-in-any-guest-in-vmware/</guid><description>&lt;p&gt;Some of the newer Linux distributions use Xorg 1.4, where the new &lt;code&gt;evdev&lt;/code&gt; driver manages all input devices, including keyboards. The &lt;code&gt;evdev&lt;/code&gt; driver causes the keyboard to send different keycodes. For example, the down arrow sends keycode 116, which other drivers interpret as Win+R. Consequently, keyboard mapping problems occur in all guest operating systems running in VMware.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; &lt;a href="http://kb.vmware.com/selfservice/viewContent.do?externalId=1007439&amp;amp;sliceId=1"&gt;VMware Knowledge Base Article 1007439&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Closing a Hung SSH Session</title><link>/post/2008/2008-11-21-close-ssh-session/</link><pubDate>Fri, 21 Nov 2008 15:51:00 +0530</pubDate><guid>/post/2008/2008-11-21-close-ssh-session/</guid><description>&lt;p&gt;How does one close an SSH session that has hung or disconnected from the server?&lt;/p&gt;
&lt;p&gt;Use the key sequence &lt;code&gt;~.&lt;/code&gt; (tilde followed by a dot, typed at the beginning of a new line). For more information, check the SSH manual:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;man ssh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="background"&gt;Background&lt;/h3&gt;
&lt;p&gt;I was happily working on my system, accessing my test box remotely. Suddenly, there was darkness—or what most people call a power outage. Since my UPS was in the repair shop, my machine shut down and left me with a frozen SSH session upon rebooting and reconnecting.&lt;/p&gt;</description></item><item><title>Recovering a Partition Table</title><link>/post/2008/2008-11-21-recover-partition-table/</link><pubDate>Fri, 21 Nov 2008 10:27:00 +0530</pubDate><guid>/post/2008/2008-11-21-recover-partition-table/</guid><description>&lt;p&gt;Oh no! You deleted, overwrote, or spilled coffee on your partition table! What&amp;rsquo;s next?&lt;/p&gt;
&lt;p&gt;For almost anything (except the spilled coffee), you can check out &lt;a href="https://www.cgsecurity.org/wiki/TestDisk"&gt;TestDisk&lt;/a&gt;, available in Fedora. Simply launch it and follow the on-screen instructions.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="story"&gt;Story&lt;/h3&gt;
&lt;p&gt;One fine day, with birds singing outside on a bright sunny afternoon, I decided to install Fedora on a test box. Incidentally, that machine had an old hard drive with lots of photos from my school and college days. And so, the saga began.&lt;/p&gt;</description></item><item><title>Key Mapping on RHEL 5</title><link>/post/2008/2008-07-14-key-mapping-on-rhel5/</link><pubDate>Mon, 14 Jul 2008 23:47:00 +0530</pubDate><guid>/post/2008/2008-07-14-key-mapping-on-rhel5/</guid><description>&lt;p&gt;&lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=450326"&gt;Multimedia keys&lt;/a&gt; [1] did not work on RHEL 5, which was missing the &lt;a href="http://people.freedesktop.org/%7Ehughsient/quirk/quirk-keymap-index.html"&gt;keymap quirk&lt;/a&gt; [2] patch written by rhughes. Backporting was fun while it lasted—now my life feels hollower than ever.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;[1] &lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=450326"&gt;https://bugzilla.redhat.com/show_bug.cgi?id=450326&lt;/a&gt;&lt;br&gt;
[2] &lt;a href="http://people.freedesktop.org/~hughsient/quirk/quirk-keymap-index.html"&gt;http://people.freedesktop.org/~hughsient/quirk/quirk-keymap-index.html&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Evolution Account Editor Accepts Whitespace in Hostname as Valid</title><link>/post/2008/2008-05-22-evolution-account-editor-accepts-white-space-in-host-name-as-valid/</link><pubDate>Thu, 22 May 2008 19:56:00 +0530</pubDate><guid>/post/2008/2008-05-22-evolution-account-editor-accepts-white-space-in-host-name-as-valid/</guid><description>&lt;p&gt;Evolution accepts whitespace in the hostname field. When sending email, it fails due to invalid hostname.&lt;/p&gt;
&lt;p&gt;This has now been fixed, thanks to input from Alan Matsuoka.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reference:&lt;/strong&gt; &lt;a href="http://bugzilla.gnome.org/show_bug.cgi?id=533465"&gt;GNOME Bug 533465 – Evolution account editor accepts white space in host name as valid&lt;/a&gt;&lt;/p&gt;</description></item><item><title>The Tower of KFC</title><link>/post/2008/2008-03-19-the-tower-of-kfc/</link><pubDate>Wed, 19 Mar 2008 13:48:00 +0530</pubDate><guid>/post/2008/2008-03-19-the-tower-of-kfc/</guid><description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/runa-sankarshan/2330589856/"&gt;The Tower of KFC&lt;/a&gt;&lt;br&gt;
Originally uploaded by &lt;a href="http://www.flickr.com/people/runa-sankarshan/"&gt;sankarshan&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.flickr.com/photos/runa-sankarshan/2330589856/" title="photo sharing"&gt;&lt;img alt="The Tower of KFC" loading="lazy" src="./post/2008/images/tower-of-kfc.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;My Desk.&lt;/p&gt;</description></item><item><title>xchat-gnome: Sound Notification</title><link>/post/2008/2008-02-04-xchat-gnome-sound-notification/</link><pubDate>Mon, 04 Feb 2008 13:46:00 +0530</pubDate><guid>/post/2008/2008-02-04-xchat-gnome-sound-notification/</guid><description>&lt;p&gt;Upon quitting Totem, I heard a ping. This came from xchat-gnome (via the sound-notification plugin). It turns out &lt;code&gt;gnome_sound_play&lt;/code&gt; was being used to play the sound, which defaults to the ESD backend:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;gnome_sound_play&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;../../data/message.wav&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ESD has been superseded by &lt;a href="http://www.pulseaudio.org/"&gt;PulseAudio&lt;/a&gt; in most major distributions. I would prefer moving to a GStreamer-based backend, so I rewrote the code to use GStreamer. However, the ping still didn&amp;rsquo;t work while I was playing music through Totem.&lt;/p&gt;</description></item><item><title>xchat-gnome: Unchecking "Mark as Away" Does Not Work</title><link>/post/2008/2008-02-04-xchat-gnome-unchecking-mark-as-away-does-not-work/</link><pubDate>Mon, 04 Feb 2008 09:07:00 +0530</pubDate><guid>/post/2008/2008-02-04-xchat-gnome-unchecking-mark-as-away-does-not-work/</guid><description>&lt;p&gt;Ticking &amp;ldquo;Away&amp;rdquo; worked like a charm on xchat-gnome, but unticking it didn&amp;rsquo;t do any magic.&lt;/p&gt;
&lt;p&gt;This turned out to be a bug fixed upstream (&lt;a href="http://bugzilla.gnome.org/462031"&gt;GNOME #462031&lt;/a&gt;). Grepping the code revealed a rather trivial fix, which on further lookup was part of the Fedora 9 build. I ended up filing a bug report (&lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=430883"&gt;Fedora #430883&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;A package was released with the stated fix, which crashed xchat-gnome whenever one tried to set or unset away:&lt;/p&gt;</description></item><item><title>Isaac Asimov Home Page</title><link>/post/2006/2006-01-02-isaac-asimov-home-page/</link><pubDate>Mon, 02 Jan 2006 12:21:00 +0530</pubDate><guid>/post/2006/2006-01-02-isaac-asimov-home-page/</guid><description>&lt;h2 id="the-three-laws-of-robotics"&gt;The Three Laws of Robotics&lt;/h2&gt;
&lt;p&gt;The movie faithfully quotes Asimov&amp;rsquo;s Three Laws of Robotics:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A robot may not injure a human being, or, through inaction, allow a human being to come to harm.&lt;/li&gt;
&lt;li&gt;A robot must obey the orders given it by human beings except where such orders would conflict with the First Law.&lt;/li&gt;
&lt;li&gt;A robot must protect its own existence as long as such protection does not conflict with the First or Second Law.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Read more on the &lt;a href="http://www.asimovonline.com/"&gt;Isaac Asimov Home Page&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>