<?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 🍃 - TIL</title>
    <link>https://emresahin.net/categories/til/</link>
    <description>Posts in the TIL 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/til/rss.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>Global .gitignore</title>
      <published>2023-10-17T13:11:34+00:00</published>
      <updated>2023-10-17T13:11:34+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Tue, 17 Oct 2023 13:11:34 +0000</pubDate>
      <link>https://emresahin.net/gitignore_global/</link>
      <guid isPermaLink="true">https://emresahin.net/gitignore_global/</guid>
      <description>You can configure a global .gitignore file to ignore files or directories (e.g., .vscode/ ) in all your repositories. Write it as a standard .gitignore file and save it somewhere, like ~/.gitignore_global . Then, you can use the following configuration to set this as an excludes file : git config...</description>
      <category>til</category>
      <category>git</category>
      <category>git</category>
      <category>configuration</category>
      <category>tips</category>
      <content:encoded><![CDATA[<p>You can configure a global <code>.gitignore</code> file to ignore files or directories (e.g., <code>.vscode/</code>) in all your repositories. Write it as a standard <code>.gitignore</code> file and save it somewhere, like <code>~/.gitignore_global</code>. Then, you can use the following configuration to set this as an <em>excludes file</em>:</p>
<pre><code class="language-bash">git config --global core.excludesfile ~/.gitignore_global
</code></pre>
<p>Note that the path given to <code>git config</code> should be an absolute path.</p>]]></content:encoded>
    </item>
    <item>
      <title>Is it possible to combine Word and Outlook add-ins?</title>
      <published>2023-03-21T21:04:00+00:00</published>
      <updated>2023-03-21T21:04:00+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Tue, 21 Mar 2023 21:04:00 +0000</pubDate>
      <link>https://emresahin.net/is-it-possible-to-combine-word-and-outlook-add-ins-/</link>
      <guid isPermaLink="true">https://emresahin.net/is-it-possible-to-combine-word-and-outlook-add-ins-/</guid>
      <description>We’re currently working on a Microsoft Word add-in in my day job. The company already has an Outlook add-in and wanted to use the same manifest file for the Word add-in. The manifest files have some keys that look similar. Although much of the content appears similar, merging them is not possible...</description>
      <category>til</category>
      <category>Software Development</category>
      <category>Microsoft Word</category>
      <category>Outlook</category>
      <category>add-in</category>
      <category>Office</category>
      <category>Microsoft 365</category>
      <category>Manifest</category>
      <content:encoded><![CDATA[<p>We’re currently working on a Microsoft Word add-in in my day job. The company already has an Outlook add-in and wanted to use the same manifest file for the Word add-in. <a href="https://learn.microsoft.com/en-us/office/dev/add-ins/develop/add-in-manifests?tabs=tabid-1#required-elements-by-office-add-in-type">The manifest files</a> have some keys that look similar. Although much of the content appears similar, merging them is not possible.</p>
<p>There are three types of Office add-ins: Task pane, Content, and Mail. These have different schema definitions at the top of the file. Consequently, it’s not possible to combine these three different types of Office add-ins. If an add-in needs mail permissions, it cannot work in Word, and if it requires document permissions, it cannot work in Outlook.</p>]]></content:encoded>
    </item>
    <item>
      <title>Literate Programming with Markdown</title>
      <published>2020-06-11T16:29:14+00:00</published>
      <updated>2020-06-11T16:29:14+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Thu, 11 Jun 2020 16:29:14 +0000</pubDate>
      <link>https://emresahin.net/til-june-11--24126/</link>
      <guid isPermaLink="true">https://emresahin.net/til-june-11--24126/</guid>
      <description>I return to my Ottoman language project from time to time, and most of the time I spend is spent trying to understand what I did previously. I decided that the actual parsing and simple morphological analysis modules should use Literate Programming with Markdown. I am currently using Dart to rewr...</description>
      <category>TIL</category>
      <category>tools</category>
      <category>ottoman</category>
      <category>markdown</category>
      <category>literate-programming</category>
      <category>dart</category>
      <category>knot</category>
      <content:encoded><![CDATA[<p>I return to my Ottoman language project from time to time, and most of the time I spend is spent trying to understand what I did previously. I decided that the actual parsing and simple morphological analysis modules should use <a href="https://en.wikipedia.org/wiki/Literate_programming">Literate Programming</a> with Markdown.</p>
<p>I am currently using <a href="https://dartlang.org">Dart</a> to rewrite the entire application, which is fundamentally simple. It receives words in Turkish or Ottoman and translates them to Ottoman or Turkish. However, the parsing module needs more rules to divide the words (and phrases) into roots and suffixes. There are hundreds of rules, and using only <em>code</em> to describe the reasoning behind parsing seems to be the main reason I spend so much time trying to understand my own work.</p>
<p>I decided that I can just use <a href="https://github.com/mqsoh/knot/blob/master/Dockerfile">knot</a> to write the rules in a document and generate the code from it. It will surely take more time than just writing the code, but in the end, I will have a document describing the analysis and parsing rules that even I can understand.</p>]]></content:encoded>
    </item>
    <item>
      <title>TIL May 1</title>
      <published>2020-05-01T22:19:07+00:00</published>
      <updated>2020-05-01T22:19:07+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Fri, 01 May 2020 22:19:07 +0000</pubDate>
      <link>https://emresahin.net/til-may-1--17222/</link>
      <guid isPermaLink="true">https://emresahin.net/til-may-1--17222/</guid>
      <description>Nota seems like a nice command-line calculator. It converts what you type into ASCII art formulas. In[1]: 10 + 10 Out[1]: 20.0 _____ In[2]: ╲╱ 100 Out[2]: 10.0 ┌ ┐ In[3]: Max │ 10 , 1 , 21 , -3 │ └ ┘ Out[3]: 21.0 In[4]: ⟨Emre's Number⟩ ≡ 79 Out[4]: 79.0 _______________ In[5]: ╲╱ Emre's Number Out...</description>
      <category>TIL</category>
      <category>Nota</category>
      <category>CLI</category>
      <category>Calculator</category>
      <category>Haskell</category>
      <category>Intention</category>
      <category>Productivity</category>
      <category>Git</category>
      <category>Bash</category>
      <category>Zsh</category>
      <content:encoded><![CDATA[<ul>
<li><a href="https://kary.us/nota/">Nota</a> seems like a nice command-line calculator. It converts what you type into ASCII art formulas.</li>
</ul>
<pre><code>  In[1]: 10 + 10

 Out[1]: 20.0


           _____
  In[2]: ╲╱ 100

 Out[2]: 10.0


             ┌                  ┐
  In[3]: Max │ 10 , 1 , 21 , -3 │
             └                  ┘

 Out[3]: 21.0


  In[4]: ⟨Emre's Number⟩ ≡  79

 Out[4]: 79.0


           _______________
  In[5]: ╲╱ Emre's Number

 Out[5]: 8.888194417315589


                      2
  In[6]: Emre's Number

 Out[6]: 6241.0


                      Emre's Number
  In[7]: Emre's Number

 Out[7]: 8.1759873707105095e149

</code></pre>
<pre><code>It looks a bit heavy for a CLI calculator, as it is written in Haskell and downloads 100+ MB of libraries, but when you need ASCII art to display your calculations or want to use spaces in variable names, it may prove useful.
</code></pre>
<ul>
<li>
<p>I began to use <a href="https://www.getintention.com/">Intention</a> to limit my Twitter time. It allows you to set a limited time (1, 5, 10, or 15 minutes) for yourself and tracks the total time you spend on <em>addictive sites.</em> When this total time is lower than your goal for a period, you get a streak. It looks visually and psychologically nicer than LeechBlock.</p>
</li>
<li>
<p>I read the <a href="http://www.git-scm.com/book/en/v2/Git-Tools-Reset-Demystified"><code>git reset</code></a> section in the Git book. It details how <code>git reset</code> behaves with its <code>--soft</code>, <code>--mixed</code>, and <code>--hard</code> parameters. The first resets only the <code>HEAD</code>; the second resets both the index and <code>HEAD</code>; and the third resets the working tree and copies files back from the current <code>HEAD</code> to the working tree.</p>
<p>One important point: Contrasting <code>git checkout master</code> and <code>git reset master</code>: the first moves <code>HEAD</code> to the <code>master</code> branch, while the second moves the current branch to <code>master</code>.</p>
<p><code>git reset</code> can also be used to squash commits. Basically, you <code>git reset --mixed</code> to an earlier commit like <code>HEAD~3</code> and recommit. This creates a new commit, taking <code>HEAD~3</code> as the parent and skipping <code>HEAD~2</code> and <code>HEAD~1</code>, resulting in a new <code>HEAD</code>.</p>
</li>
<li>
<p><a href="https://github.com/dylanaraps/pure-bash-bible">Here</a> are many useful pure Bash functions to be used in scripts. I’m a Zsh person, but writing Bash scripts is more portable, of course.</p>
</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>TIL April 29</title>
      <published>2020-04-30T00:18:58+00:00</published>
      <updated>2020-04-30T00:18:58+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Thu, 30 Apr 2020 00:18:58 +0000</pubDate>
      <link>https://emresahin.net/til-april-29--6094/</link>
      <guid isPermaLink="true">https://emresahin.net/til-april-29--6094/</guid>
      <description>In Hugo frontmatter, it is possible to determine the type , but it is not possible to set the section directly. The latter is automatically determined by the top-level directory under content that contains the file.</description>
      <category>TIL</category>
      <category>Hugo</category>
      <category>Static-Site-Generators</category>
      <category>Frontmatter</category>
      <content:encoded><![CDATA[<p>In Hugo frontmatter, it is possible to determine the <code>type</code>, but it is not possible to set the <code>section</code> directly. The latter is automatically determined by the top-level directory under <code>content</code> that contains the file.</p>]]></content:encoded>
    </item>
    <item>
      <title>TIL April 28</title>
      <published>2020-04-28T21:40:02+00:00</published>
      <updated>2020-04-28T21:40:02+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Tue, 28 Apr 2020 21:40:02 +0000</pubDate>
      <link>https://emresahin.net/til-april-28--4248/</link>
      <guid isPermaLink="true">https://emresahin.net/til-april-28--4248/</guid>
      <description>In yesterday’s post , I presented a Python script to convert Pelican preamble files to YAML for Hugo. For some UTF-8 files, there is a BOM marker at the beginning of the file. The script (as a true quick and dirty solution) doesn’t check for the presence of such a marker and cannot detect the Tit...</description>
      <category>TIL</category>
      <category>Python</category>
      <category>BOM</category>
      <category>Encoding</category>
      <category>UTF-8</category>
      <category>bvi</category>
      <category>Hex-editor</category>
      <content:encoded><![CDATA[<p>In <a href="https://emresahin.net/post/til-27-april-12091/">yesterday’s post</a>, I presented a Python script to convert Pelican preamble files to YAML for Hugo.</p>
<p>For some UTF-8 files, there is a BOM marker at the beginning of the file. The script (as a true quick and dirty solution) doesn’t check for the presence of such a marker and cannot detect the <code>Title</code> element if it exists.</p>
<p>I added an <code>fm = fm.strip('\ufeff')</code> line to clear the BOM marker from a line if it exists.</p>
<hr>
<p>There is an editor called <code>bvi</code> to edit binary files in Hex format, similar to the <code>vi</code> editor.</p>]]></content:encoded>
    </item>
    <item>
      <title>TIL April 26</title>
      <published>2020-04-26T23:26:15+00:00</published>
      <updated>2020-04-26T23:26:15+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Sun, 26 Apr 2020 23:26:15 +0000</pubDate>
      <link>https://emresahin.net/til-april-26--6474/</link>
      <guid isPermaLink="true">https://emresahin.net/til-april-26--6474/</guid>
      <description>Hosting static websites on AWS takes only 5 minutes of configuration. For some of my books, I think I can use some ornamental public domain images . This guy talks about a third way to stop the pandemic: testing everyone. The one that is most proven and ready to scale is based on a technology cal...</description>
      <category>TIL</category>
      <category>AWS</category>
      <category>static-sites</category>
      <category>design</category>
      <category>public-domain</category>
      <category>COVID-19</category>
      <category>testing</category>
      <content:encoded><![CDATA[<ul>
<li>Hosting static websites on AWS takes only 5 minutes of configuration.</li>
<li>For some of my books, I think I can use some <a href="https://www.rawpixel.com/board/1221837/lanimal-dans-la-decoration-free-cc0-ornamental-designs?sort=curated&amp;mode=shop&amp;page=1">ornamental public domain images</a>.</li>
<li><a href="https://paulbuchheit.blogspot.com/2020/04/a-third-solution.html">This guy</a> talks about a third way to stop the pandemic: testing everyone.</li>
</ul>
<blockquote>
<p>The one that is most proven and ready to scale is based on a technology called LSPR. The team building it originally developed the device to monitor the status of the immune system, but it is easily adapted to detect the proteins on the surface of the virus instead of the proteins used for immune signaling. It’s able to detect even a very small number of viral particles, which is very important because we want to detect everyone who is contagious. Waiting for symptoms such as a fever or antibodies is too slow to stop the spread. What’s exciting is that they are creating a very sensitive test that can be mass produced at low cost (less than $1/test).</p>
</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Syncing IdeaVim with the System Clipboard</title>
      <published>2018-02-14T10:15:21+00:00</published>
      <updated>2018-02-14T10:15:21+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Wed, 14 Feb 2018 10:15:21 +0000</pubDate>
      <link>https://emresahin.net/ideavim-to-use-system-clipboard-14093-73034/</link>
      <guid isPermaLink="true">https://emresahin.net/ideavim-to-use-system-clipboard-14093-73034/</guid>
      <description>I began using the IdeaVim plugin for Android Studio some time ago. It is a great tool, but as a Vim newbie, I was not aware that Vim does not use the system clipboard (Windows, macOS, Linux, etc.) for copy and paste operations by default. As a result, when you use the y (yank) command in IdeaVim,...</description>
      <category>til</category>
      <category>vim</category>
      <category>ideavim</category>
      <category>jetbrains</category>
      <category>clipboard</category>
      <category>configuration</category>
      <content:encoded><![CDATA[<p>I began using the <a href="https://github.com/JetBrains/ideavim">IdeaVim</a> plugin for Android Studio some time ago. It is a great tool, but as a Vim newbie, I was not aware that Vim does not use the system clipboard (Windows, macOS, Linux, etc.) for copy and paste operations by default. As a result, when you use the <code>y</code> (yank) command in IdeaVim, the text is not available to paste into other applications.</p>
<p>The solution is simple: add the following line to your <code>~/.ideavimrc</code> file:</p>
<pre><code class="language-vim">set clipboard+=unnamed
</code></pre>]]></content:encoded>
    </item>
  </channel>
</rss>
