<?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>Technology on Amir Pourmand</title>
    <link>https://amirpourmand.ir/tags/technology/</link>
    <description>Recent content in Technology on Amir Pourmand</description>
    <image>
      <title>Amir Pourmand</title>
      <url>https://amirpourmand.ir/opengraph/opengraph.png</url>
      <link>https://amirpourmand.ir/opengraph/opengraph.png</link>
    </image>
    <generator>Hugo</generator>
    <language>en</language>
    <copyright>All content on this site is licensed under a CC-BY-4.0 license.</copyright>
    <lastBuildDate>Fri, 19 Jul 2024 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://amirpourmand.ir/tags/technology/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>What are Makefiles and Why should anyone use them?</title>
      <link>https://amirpourmand.ir/posts/2024/makefiles-and-their-applications/</link>
      <pubDate>Fri, 19 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://amirpourmand.ir/posts/2024/makefiles-and-their-applications/</guid>
      <description>&lt;p&gt;Makefiles are one of the most useful tools I&amp;rsquo;ve been working with. I can say that it can be useful for lots of projects (with any language).&lt;/p&gt;
&lt;h3 id=&#34;what-is-makefile&#34;&gt;What is Makefile?&lt;/h3&gt;
&lt;p&gt;Makefiles are essentially a place where you can store your most frequently used commands in one place. They make repetitive tasks easier by creating short commands.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s take a look at sample file:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;install_packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pip install -r requirements.txt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;generate_deps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pip-compile requirements.in -o requirements.txt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;docs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pdoc --html --force --output-dir docs common&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The way to execute this &lt;strong&gt;targets&lt;/strong&gt; would be using &lt;code&gt;make generate_deps &lt;/code&gt;or &lt;code&gt;make docs&lt;/code&gt;. By default make command will search for a file named &lt;code&gt;Makefile&lt;/code&gt; (with no extension) to run your commands.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting Up Caddy for Reverse Proxy is dead simple</title>
      <link>https://amirpourmand.ir/posts/2024/caddy-reverse-proxy/</link>
      <pubDate>Wed, 03 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://amirpourmand.ir/posts/2024/caddy-reverse-proxy/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve recently found Caddy as a tool to assign urls to my docker services and I&amp;rsquo;m quite happy with it. I&amp;rsquo;ve done other reverse proxies like Nginx and Traefik in the past but they are too complicated for my needs.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s start.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s say that you want to assign your url like &lt;code&gt;newservice.amirpourmand.ir&lt;/code&gt; to a service in a VM with a public IP address. I&amp;rsquo;ll go you through it.&lt;/p&gt;
&lt;p&gt;Also, It has multiple benefits. The first one is that you don&amp;rsquo;t have to do IPs. You don&amp;rsquo;t have to deal with ugly IPs that may change in the future. You deal with Secure URLs. The second is that the connection is &lt;code&gt;https&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Record Google Meet Session With OBS Studio</title>
      <link>https://amirpourmand.ir/posts/2024/record-google-meet-obs/</link>
      <pubDate>Sun, 19 May 2024 00:00:00 +0000</pubDate>
      <guid>https://amirpourmand.ir/posts/2024/record-google-meet-obs/</guid>
      <description>&lt;p&gt;Some days ago, I wanted to record a Google Meet session as a podcast and I didn&amp;rsquo;t want to pay for just recording the call, neither to google nor third party services.&lt;/p&gt;
&lt;h2 id=&#34;update-2024-11-02&#34;&gt;Update 2024-11-02&lt;/h2&gt;
&lt;p&gt;Previously, I used the browser method to record the screen since I heard my voice twice in the recording. This way, the issue is fixed.&lt;/p&gt;
&lt;p&gt;But, There are other solutions! The better solution would be to just record the screen normally. These would be the sources.  One would capture your audio, and the other would capture your screen and their audio.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Browser Extensions I use</title>
      <link>https://amirpourmand.ir/posts/2024/browser-extensions-i-use/</link>
      <pubDate>Tue, 12 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://amirpourmand.ir/posts/2024/browser-extensions-i-use/</guid>
      <description>&lt;p&gt;Here are some most important chrome extensions I use almost on a daily basis. All of them can be installed on chromium browsers. But, they may not be available on Firefox or other browsers.&lt;/p&gt;
&lt;h2 id=&#34;bitwarden&#34;&gt;&lt;a href=&#34;https://bitwarden.com/&#34;&gt;Bitwarden&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://bitwarden.com/&#34;&gt;Bitwarden&lt;/a&gt; is the first thing I install on every browser. It saves all my passwords on all my devices. I rather not depend on Google to save my passwords since It limits my options to just use same-old Chrome.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Great Combination of Jupyter &#43; Conda &#43; Docker</title>
      <link>https://amirpourmand.ir/posts/2023/combination-docker-jupyter-conda/</link>
      <pubDate>Fri, 08 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://amirpourmand.ir/posts/2023/combination-docker-jupyter-conda/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve always wanted a clean local environment to install python packages in it. To me, it should have multiple requirements:&lt;/p&gt;
&lt;p&gt;1- Installing packages should be easy enough. I mean I just want to use &lt;code&gt;pip install that&lt;/code&gt; and not worry about anything else.&lt;/p&gt;
&lt;p&gt;2- Switching between python environments should be easy. If I happen to need multiple environments in my system, I want to be able to easily switch between them. Preferably, even without command line.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Useful Linux Commands and Scripts</title>
      <link>https://amirpourmand.ir/posts/2023/useful-linux-commands/</link>
      <pubDate>Tue, 05 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://amirpourmand.ir/posts/2023/useful-linux-commands/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been working for some time with Linux and I feel that sharing some scripts and also tools I frequently use can be helpful.&lt;/p&gt;
&lt;h3 id=&#34;search-history&#34;&gt;Search History&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;history | grep seach_string
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;or &lt;code&gt;Ctrl+R&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;search-log-files&#34;&gt;Search Log files&lt;/h3&gt;
&lt;p&gt;In order to search a folder to see if a string exists in the whole folder:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grep -ir &lt;span class=&#34;s2&#34;&gt;&amp;#34;string to search&amp;#34;&lt;/span&gt; .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;show-file-and-folder-size&#34;&gt;Show File and Folder Size&lt;/h3&gt;
&lt;p&gt;To analyze file size, there are several ways.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -alh 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;-rw-r--r--  1 amir amir 270K May 20  2023 Arial.ttf
-rw-r--r--  1 root root   72 Sep 20 21:10 Untitled5.ipynb
-rw-r--r--  1 amir amir 1.2M May 26  2023 exp12.mp4
-rw-r--r--  1 amir amir 4.7M May 26  2023 exp13.mp4
-rw-r--r--  1 amir amir 654M May 22  2023 exp4.avi
-rw-r--r--  1 amir amir   68 Dec 28  2022 kaggle.json
drwxr-xr-x 17 amir amir 4.0K Dec 28  2022 miniconda3
drwxr-xr-x  2 amir amir 4.0K May 26  2023 mp4
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can see from the above output that this only shows file sizes properly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to Sync Obsidian between Android, Windows and Mac via GIT</title>
      <link>https://amirpourmand.ir/posts/2023/how-to-sync-obsidian/</link>
      <pubDate>Mon, 16 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://amirpourmand.ir/posts/2023/how-to-sync-obsidian/</guid>
      <description>How I use git to Sync my obsidian notes seamlessly between all operating systems?</description>
    </item>
  </channel>
</rss>
