<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>emre şahin's digital garden 🍃 - Software</title>
    <link>https://emresahin.net/categories/software/</link>
    <description>Posts in the Software category</description>
    <language>en</language>
    <managingEditor>contact@emresahin.net (Emre Şahin)</managingEditor>
    <lastBuildDate>Tue, 15 Sep 2026 19:46:32 +0000</lastBuildDate>
    <atom:link href="https://emresahin.net/categories/software/rss.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>About estimation from the 'Mythical Man-Month'</title>
      <published>2022-04-07T05:19:25+00:00</published>
      <updated>2022-04-07T05:19:25+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Thu, 07 Apr 2022 05:19:25 +0000</pubDate>
      <link>https://emresahin.net/About-estimation-from-the--Mythical-Man-Month-/</link>
      <guid isPermaLink="true">https://emresahin.net/About-estimation-from-the--Mythical-Man-Month-/</guid>
      <description>I’ve read these in The Mythical Man-Month . First, our techniques of estimating are poorly developed. More seriously, they reflect an unvoiced assumption which is quite un-true, i.e., that all will go well. Second, our estimating techniques fallaciously confuse effort with progress, hiding the as...</description>
      <category>software</category>
      <category>Management</category>
      <category>estimates</category>
      <category>software development</category>
      <category>projects</category>
      <category>manpower</category>
      <category>Mythical Man-Month</category>
      <category>Fred Brooks</category>
      <content:encoded><![CDATA[<p>I’ve read these in <a href="https://en.wikipedia.org/wiki/The_Mythical_Man-Month">The Mythical Man-Month</a>.</p>
<blockquote>
<p>First, our techniques of estimating are poorly developed. More seriously,
they reflect an unvoiced assumption which is quite un-true, i.e., that all
will go well.</p>
<p>Second, our estimating techniques fallaciously confuse effort with progress,
hiding the assumption that men and months are interchangeable.</p>
<p>Third, because we are uncertain of our estimates, software managers often
lack the courteous stubbornness of Antoine’s chef.</p>
<p>Fourth, schedule progress is poorly monitored. Techniques proven and routine
in other engineering disciplines are considered radical innovations in
software engineering.</p>
<p>Fifth, when schedule slippage is recognized, the natural (and traditional)
response is to add manpower. Like dousing a fire with gasoline, this makes
matters worse, much worse. More fire requires more gasoline, and thus begins
a regenerative cycle which ends in disaster.</p>
</blockquote>
<p>The company I’m currently working at has this habit of adding <em>personpower</em> to
projects. We’ve been hiring since I joined. I don’t know what to think when I read
these.</p>]]></content:encoded>
    </item>
    <item>
      <title>The Sorry State of NDK Testing in Android</title>
      <published>2018-02-08T09:39:03+00:00</published>
      <updated>2018-02-08T09:39:03+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Thu, 08 Feb 2018 09:39:03 +0000</pubDate>
      <link>https://emresahin.net/ndk-testing-android-14087-70802/</link>
      <guid isPermaLink="true">https://emresahin.net/ndk-testing-android-14087-70802/</guid>
      <description>I’m writing a C library for use in Android, iOS, and Python applications. Although the C library has its own unit tests, I wanted to write a few more to ensure that data transfer between the C and Android layers is correct. In Android, one needs to put unit test files in the app/src/test/*module-...</description>
      <category>Software</category>
      <category>Android</category>
      <category>Development</category>
      <category>ndk</category>
      <category>android</category>
      <category>testing</category>
      <category>c</category>
      <category>jni</category>
      <content:encoded><![CDATA[<p>I’m writing a C library for use in Android, iOS, and Python applications. Although
the C library has its own unit tests, I wanted to write a few more to ensure
that data transfer between the C and Android layers is correct.</p>
<p>In Android, one needs to put unit test files in the <code>app/src/test/*module-name*</code>
directory. I spent a few hours yesterday writing tests to check that the
conversion between <em>visenc</em> and <em>Unicode</em> is correct in Android. After those
hours, however, I learned that NDK support for tests is limited, and the error I
received means that <a href="https://stackoverflow.com/questions/34802667/unit-test-java-class-that-loads-native-library">I need to write instrumentation
tests</a>
instead, which use an emulator or a real device.</p>
<p>Instrumentation tests are <em>user tests</em> that check whether the user-facing
aspects of the app run correctly. Unit tests, instead, check whether data flow,
calculations, etc., are working as expected. The former is slow; it needs to be
run in an emulator and should mimic user behavior. Just checking
whether <em>e</em> converted correctly to ا should not require an emulator.</p>]]></content:encoded>
    </item>
    <item>
      <title>My Emacs Packages</title>
      <published>2014-05-13T14:00:00+00:00</published>
      <updated>2014-05-13T14:00:00+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Tue, 13 May 2014 14:00:00 +0000</pubDate>
      <link>https://emresahin.net/my-emacs-packages/</link>
      <guid isPermaLink="true">https://emresahin.net/my-emacs-packages/</guid>
      <description>I’ve been using Emacs for about 7 or 8 years now—maybe a bit less, maybe more. I tried to quit several times for other editors and different workflows, and every time I returned with more enthusiasm. It’s hard to tell for those who use their editors with mouse clicks on pretty icons, but once you...</description>
      <category>Software</category>
      <category>Emacs</category>
      <category>emacs</category>
      <category>org-mode</category>
      <category>software</category>
      <category>python</category>
      <category>latex</category>
      <category>w3m</category>
      <content:encoded><![CDATA[<p>I’ve been using Emacs for about 7 or 8 years now—maybe a bit less,
maybe more. I tried to quit several times for other editors and different
workflows, and every time I returned with more enthusiasm.</p>
<p>It’s hard to tell for those who <em>use</em> their editors with mouse clicks
on pretty icons, but once you catch this virus called <em>doing everything
from the keyboard</em>, it becomes attached to your digital (from <em>digitus</em>,
finger) psyche, making it impossible to leave behind. I even purchased an
Android keyboard for my phablet just to <code>ssh</code> to my home and write with
Emacs. Consider that!</p>
<p>Today I stumbled upon several posts regarding favorite Emacs packages
and wanted to list mine.</p>
<h1 id="org-mode">org-mode</h1>
<p>I’m not writing this in <code>org-mode</code> because I observed that I can
detail, micro-revise, and lose focus while writing because of its
extensive functionality. Instead, I’m using Zsh’s <code>vared</code> to enter lines to
an org-file when I write first drafts. But editing, keeping, following,
creating plots, literate programming—doing everything that can be done
with text—is possible in <code>org-mode</code>.</p>
<p>I have <code>F11</code> bound to <code>org-capture</code> and <code>F12</code> to <code>org-agenda-list</code>.
<code>F9 F9</code> stores links wherever I like, and I can use <code>C-c C-l</code> in org
buffers to paste them.</p>
<h1 id="w3m">w3m</h1>
<p>When I want to search Google but don’t like the idea of running a huge
browser session just to look up an answer on StackOverflow, I use this.</p>
<h1 id="undo-tree">undo-tree</h1>
<p>It shows the versions created by undo/redo of a buffer in a tree format.
Emacs’s default undo may be cumbersome at times, but this package is
terrific.</p>
<h1 id="wc-mode">wc-mode</h1>
<p>To count words in a file. When I forget this package, I use
<code>C-x h M-| wc</code> as a substitute.</p>
<h1 id="auctex">auctex</h1>
<p>Once upon a time, this mode led me to migrate from LyX to LaTeX itself.</p>
<h1 id="ess">ESS</h1>
<p>Emacs Speaks Statistics is an R frontend. I’m not using it daily, but
it’s much better than the R command-line client.</p>
<h1 id="uniquify">Uniquify</h1>
<p>Makes buffer names unique. If you have files with identical names, this
is much better than having names like <code>myfile.txt&lt;1&gt;</code>, <code>myfile.txt&lt;2&gt;</code>,
etc.</p>
<h1 id="recentf-mode">recentf-mode</h1>
<p>A list of recent files.</p>
<h1 id="smex">smex</h1>
<p><code>ido</code> for <code>M-x</code>. Standard <code>M-x</code> selects commands by their prefix; with
<code>smex</code>, you can filter them by any substring. This makes a difference for
those with poor memory.</p>
<h1 id="ahg">ahg</h1>
<p>I use Mercurial more than Git, and <code>ahg-mode</code> seems like a good
alternative to standard <code>vc-</code> commands.</p>
<h1 id="projectile">projectile</h1>
<p>It considers directories under version control as projects and defines
functions like <code>find-file</code>, <code>multi-occur</code>, and <code>recentf</code> for them. It’s a
very simple and non-intrusive way to have project management.</p>
<h1 id="elpy">elpy</h1>
<p>For Python programming, <code>elpy</code> provides completion and much more
functionality.</p>
<h1 id="ack-and-a-half">ack-and-a-half</h1>
<p>An <code>ack</code> mode, a hybrid version of the other two.</p>
<h1 id="xgtags">xgtags</h1>
<p>A GNU Global mode for C++ code tagging.</p>]]></content:encoded>
    </item>
    <item>
      <title>Nginx and PHP-FPM Notes</title>
      <published>2014-05-04T21:00:00+00:00</published>
      <updated>2014-05-04T21:00:00+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Sun, 04 May 2014 21:00:00 +0000</pubDate>
      <link>https://emresahin.net/nginx-notes/</link>
      <guid isPermaLink="true">https://emresahin.net/nginx-notes/</guid>
      <description>These are a few points I’ve noted down as a reminder to myself. If you host multiple sites, only one of them (the default) should have the listen 80 directive with the default_server parameter. The rest are defined by their server_name directives. Debian’s default configuration file comes with Un...</description>
      <category>Software</category>
      <category>Server</category>
      <category>Nginx</category>
      <category>nginx</category>
      <category>php-fpm</category>
      <category>debian</category>
      <category>php</category>
      <category>server</category>
      <content:encoded><![CDATA[<p>These are a few points I’ve noted down as a reminder to myself.</p>
<ul>
<li>If you host multiple sites, only one of them (the default) should have the
<code>listen 80</code> directive with the <code>default_server</code> parameter. The rest are defined by their <code>server_name</code>
directives.</li>
<li>Debian’s default configuration file comes with Unix socket
definitions for <code>php-fpm</code>. If you prefer to have Nginx connect via a TCP port,
you must update the configuration to use port directives.</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>mu4e</title>
      <published>2014-02-18T14:00:00+00:00</published>
      <updated>2014-02-18T14:00:00+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Tue, 18 Feb 2014 14:00:00 +0000</pubDate>
      <link>https://emresahin.net/mu4e/</link>
      <guid isPermaLink="true">https://emresahin.net/mu4e/</guid>
      <description>I used mutt for years. I like it. Its customizability and macros make me feel at home, and I was able to automate most of my tasks with it. I began using mutt after Gnus on Emacs. The reason I left Gnus behind is that it was incompatible with offlineimap and slow for IMAP use. I see no point in i...</description>
      <category>Software</category>
      <category>Email</category>
      <category>emacs</category>
      <category>mu4e</category>
      <category>mutt</category>
      <category>offlineimap</category>
      <category>email</category>
      <category>org-mode</category>
      <content:encoded><![CDATA[<p>I used <code>mutt</code> for years. I like it. Its customizability and macros make
me feel at home, and I was able to automate most of my tasks with it.</p>
<p>I began using mutt after Gnus on Emacs. The reason I left Gnus behind
is that it was incompatible with <code>offlineimap</code> and slow for IMAP use. I
see no point in installing a local IMAP server when the tool that should work
with Maildirs does not work. I don’t know the situation with Gnus nowadays,
but I think it was a good decision to use mutt.</p>
<p>However, recently, in Emacs circles, I saw that people are talking about
mu4e as a search-based email client. Almost all my development life is
under Emacs, and I’m using <code>org-mode</code> for non-development more and more.
Using email links with <code>mutt</code> and <code>org</code> requires ugly hacks, and I don’t
like ugly hacks. So I wasn’t able to use links to email messages in
<code>org-mode</code> with <code>mutt</code>. (They weren’t vital as my previous <em>TODO
scheme</em> was based on email and I still keep it for archiving on notes in
the cloud.)</p>
<p>I decided to give <code>mu4e</code> a go. It seems to work with <code>offlineimap</code>
without fuss, and Debian packages are available. And unlike some other
email packages, Emacs support is one of the important parts.</p>
<hr>
<p>I have more than a single email account, and <code>offlineimap</code> reads these to
different mailfolders. Since I wasn’t thinking of combining these email
messages, these were residing in different Maildirs. I used mu4e for
several days on only one of these. As <code>mu</code> updates its index by checking
only the newest messages, (I think) it’s not straightforward to adapt
it to different Maildirs.</p>
<p>Then, <a href="http://varunbpatil.github.io/2013/08/19/eom/">I saw a post that puts all Maildirs into a single
directory</a> and gives this
<em>mail root</em> to <code>mu</code> as the indexing directory. Ah, nice idea. I should
have thought of this.</p>
<p>But I was too lazy to update my offlineimap configuration. First I tried
to put symlinks in a directory and supply this to <code>mu</code>, but it didn’t
work. It doesn’t follow symlinks and as far as I can tell, there is no
option to ask it to do so.</p>
<p>Then I moved my Maildirs to a directory and created symlinks for
<code>offlineimap</code> and <code>mutt</code> in my <code>$HOME</code>. Symlinks are my friend. Pity for
those whose OS doesn’t give an easy way to use them.</p>]]></content:encoded>
    </item>
    <item>
      <title>Midori</title>
      <published>2013-01-16T14:00:00+00:00</published>
      <updated>2013-01-16T14:00:00+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Wed, 16 Jan 2013 14:00:00 +0000</pubDate>
      <link>https://emresahin.net/12239-10-865/</link>
      <guid isPermaLink="true">https://emresahin.net/12239-10-865/</guid>
      <description>My browser of choice used to be Google Chrome, but the latest versions have become resource hogs, and I was feeling this on my older machines. I decided to take a look at alternative browsers and settled on Midori . I turned off JavaScript ( the best JS is dead JS ), enabled ad blocking, and cust...</description>
      <category>Web</category>
      <category>Software</category>
      <category>browsers</category>
      <category>midori</category>
      <category>JavaScript</category>
      <category>keyboard</category>
      <category>Linux</category>
      <category>open source</category>
      <content:encoded><![CDATA[<p>My browser of choice used to be Google Chrome, but the latest versions have become
resource hogs, and I was feeling this on my older machines. I decided to
take a look at alternative browsers and settled on
<a href="http://twotoasts.de/index.php/midori/">Midori</a>.</p>
<p>I turned off JavaScript (<em>the best JS is dead JS</em>), enabled ad blocking,
and customized keyboard shortcuts (changing <em>Ctrl-F</em> to <em>Ctrl-S</em> as in Emacs).
It loads noticeably faster, and I can’t even tell how many tabs are open
while using other applications.</p>
<p>If you’re using Linux, it’s likely in your distribution’s repository. If
you’re on Windows, the <a href="http://twotoasts.de/index.php/midori/">Midori home
page</a> provides both installable
and portable packages.</p>]]></content:encoded>
    </item>
  </channel>
</rss>
